diff options
author | Derek Kim <ddkim1024@gmail.com> | 2022-08-03 20:55:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-03 20:55:03 (GMT) |
commit | ebd660156d80bbb17899ca393731da5548100fc1 (patch) | |
tree | ca44c0fe054ece0269d09fdefb7865bd5726db25 /PC | |
parent | 4d02572f8c39b16c83c0883917db4e31efc1048e (diff) | |
download | cpython-ebd660156d80bbb17899ca393731da5548100fc1.zip cpython-ebd660156d80bbb17899ca393731da5548100fc1.tar.gz cpython-ebd660156d80bbb17899ca393731da5548100fc1.tar.bz2 |
gh-95423: Update winreg.DeleteKeyEx documentation and remove dynamic function load (GH-95521)
Diffstat (limited to 'PC')
-rw-r--r-- | PC/clinic/winreg.c.h | 7 | ||||
-rw-r--r-- | PC/winreg.c | 30 |
2 files changed, 14 insertions, 23 deletions
diff --git a/PC/clinic/winreg.c.h b/PC/clinic/winreg.c.h index 1e64b1e..7b06249 100644 --- a/PC/clinic/winreg.c.h +++ b/PC/clinic/winreg.c.h @@ -405,7 +405,7 @@ PyDoc_STRVAR(winreg_DeleteKeyEx__doc__, " reserved=0)\n" "--\n" "\n" -"Deletes the specified key (64-bit OS only).\n" +"Deletes the specified key (intended for 64-bit OS).\n" "\n" " key\n" " An already open key, or any one of the predefined HKEY_* constants.\n" @@ -419,6 +419,9 @@ PyDoc_STRVAR(winreg_DeleteKeyEx__doc__, " reserved\n" " A reserved integer, and must be zero. Default is zero.\n" "\n" +"While this function is intended to be used for 64-bit OS, it is also\n" +" available on 32-bit systems.\n" +"\n" "This method can not delete keys with subkeys.\n" "\n" "If the function succeeds, the entire key, including all of its values,\n" @@ -1455,4 +1458,4 @@ winreg_QueryReflectionKey(PyObject *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=504fc17ae25a7c75 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3faa63af6fd1653c input=a9049054013a1b77]*/ diff --git a/PC/winreg.c b/PC/winreg.c index b326c3d..6ae0d81 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -979,7 +979,9 @@ winreg_DeleteKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key) (Py_ssize_t)0) < 0) { return NULL; } - rc = RegDeleteKeyW(key, sub_key ); + Py_BEGIN_ALLOW_THREADS + rc = RegDeleteKeyW(key, sub_key); + Py_END_ALLOW_THREADS if (rc != ERROR_SUCCESS) return PyErr_SetFromWindowsErrWithFunction(rc, "RegDeleteKey"); Py_RETURN_NONE; @@ -1000,7 +1002,10 @@ winreg.DeleteKeyEx reserved: int = 0 A reserved integer, and must be zero. Default is zero. -Deletes the specified key (64-bit OS only). +Deletes the specified key (intended for 64-bit OS). + +While this function is intended to be used for 64-bit OS, it is also + available on 32-bit systems. This method can not delete keys with subkeys. @@ -1013,34 +1018,17 @@ static PyObject * winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key, REGSAM access, int reserved) -/*[clinic end generated code: output=52a1c8b374ebc003 input=711d9d89e7ecbed7]*/ +/*[clinic end generated code: output=52a1c8b374ebc003 input=a3186db079b3bf85]*/ { - HMODULE hMod; - typedef LONG (WINAPI *RDKEFunc)(HKEY, const wchar_t*, REGSAM, int); - RDKEFunc pfn = NULL; long rc; - if (PySys_Audit("winreg.DeleteKey", "nun", (Py_ssize_t)key, sub_key, (Py_ssize_t)access) < 0) { return NULL; } - /* Only available on 64bit platforms, so we must load it - dynamically. */ Py_BEGIN_ALLOW_THREADS - hMod = GetModuleHandleW(L"advapi32.dll"); - if (hMod) - pfn = (RDKEFunc)GetProcAddress(hMod, "RegDeleteKeyExW"); + rc = RegDeleteKeyExW(key, sub_key, access, reserved); Py_END_ALLOW_THREADS - if (!pfn) { - PyErr_SetString(PyExc_NotImplementedError, - "not implemented on this platform"); - return NULL; - } - Py_BEGIN_ALLOW_THREADS - rc = (*pfn)(key, sub_key, access, reserved); - Py_END_ALLOW_THREADS - if (rc != ERROR_SUCCESS) return PyErr_SetFromWindowsErrWithFunction(rc, "RegDeleteKeyEx"); Py_RETURN_NONE; |