summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Kim <ddkim1024@gmail.com>2022-08-03 20:55:03 (GMT)
committerGitHub <noreply@github.com>2022-08-03 20:55:03 (GMT)
commitebd660156d80bbb17899ca393731da5548100fc1 (patch)
treeca44c0fe054ece0269d09fdefb7865bd5726db25
parent4d02572f8c39b16c83c0883917db4e31efc1048e (diff)
downloadcpython-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.rst18
-rw-r--r--Misc/ACKS1
-rw-r--r--PC/clinic/winreg.c.h7
-rw-r--r--PC/winreg.c30
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:
diff --git a/Misc/ACKS b/Misc/ACKS
index 32475f8..b18fabe 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -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;