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 | |
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)
-rw-r--r-- | Doc/library/winreg.rst | 18 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | PC/clinic/winreg.c.h | 7 | ||||
-rw-r--r-- | PC/winreg.c | 30 |
4 files changed, 21 insertions, 35 deletions
diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst index 487856a..4ab6718 100644 --- a/Doc/library/winreg.rst +++ b/Doc/library/winreg.rst @@ -144,12 +144,6 @@ This module offers the following functions: Deletes the specified key. - .. note:: - The :func:`DeleteKeyEx` function is implemented with the RegDeleteKeyEx - Windows API function, which is specific to 64-bit versions of Windows. - See the `RegDeleteKeyEx documentation - <https://msdn.microsoft.com/en-us/library/ms724847%28VS.85%29.aspx>`__. - *key* is an already open key, or one of the predefined :ref:`HKEY_* constants <hkey-constants>`. @@ -159,9 +153,10 @@ This module offers the following functions: *reserved* is a reserved integer, and must be zero. The default is zero. - *access* is an integer that specifies an access mask that describes the desired - security access for the key. Default is :const:`KEY_WOW64_64KEY`. See - :ref:`Access Rights <access-rights>` for other allowed values. + *access* is an integer that specifies an access mask that describes the + desired security access for the key. Default is :const:`KEY_WOW64_64KEY`. + On 32-bit Windows, the WOW64 constants are ignored. + See :ref:`Access Rights <access-rights>` for other allowed values. *This method can not delete keys with subkeys.* @@ -658,13 +653,12 @@ For more information, see `Accessing an Alternate Registry View .. data:: KEY_WOW64_64KEY Indicates that an application on 64-bit Windows should operate on - the 64-bit registry view. + the 64-bit registry view. On 32-bit Windows, this constant is ignored. .. data:: KEY_WOW64_32KEY Indicates that an application on 64-bit Windows should operate on - the 32-bit registry view. - + the 32-bit registry view. On 32-bit Windows, this constant is ignored. .. _value-types: @@ -917,6 +917,7 @@ Sanyam Khurana Tyler Kieft Mads Kiilerich Jason Killen +Derek D. Kim Jan Kim Taek Joo Kim Sam Kimbrel 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; |