Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. (Patch by hakril)
This commit is contained in:
parent
b0f80b0312
commit
80ac11d01e
|
@ -633,7 +633,7 @@ For more information, see `Registry Value Types
|
||||||
|
|
||||||
.. data:: REG_DWORD_LITTLE_ENDIAN
|
.. data:: REG_DWORD_LITTLE_ENDIAN
|
||||||
|
|
||||||
A 32-bit number in little-endian format.
|
A 32-bit number in little-endian format. Equivalent to :const:`REG_DWORD`.
|
||||||
|
|
||||||
.. data:: REG_DWORD_BIG_ENDIAN
|
.. data:: REG_DWORD_BIG_ENDIAN
|
||||||
|
|
||||||
|
@ -657,6 +657,14 @@ For more information, see `Registry Value Types
|
||||||
|
|
||||||
No defined value type.
|
No defined value type.
|
||||||
|
|
||||||
|
.. data:: REG_QWORD
|
||||||
|
|
||||||
|
A 64-bit number.
|
||||||
|
|
||||||
|
.. data:: REG_QWORD_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
A 64-bit number in little-endian format. Equivalent to :const:`REG_QWORD`.
|
||||||
|
|
||||||
.. data:: REG_RESOURCE_LIST
|
.. data:: REG_RESOURCE_LIST
|
||||||
|
|
||||||
A device-driver resource list.
|
A device-driver resource list.
|
||||||
|
|
|
@ -421,6 +421,14 @@ The "Object allocated at" traceback is new and only displayed if
|
||||||
:mod:`warnings` was already imported.
|
:mod:`warnings` was already imported.
|
||||||
|
|
||||||
|
|
||||||
|
winreg
|
||||||
|
------
|
||||||
|
|
||||||
|
The :func:`QueryValueEx <winreg.QueryValueEx>` function now returns
|
||||||
|
integer values for registry type ``REG_QWORD``.
|
||||||
|
(Contributed by Clement Rouault in :issue:`23026`.)
|
||||||
|
|
||||||
|
|
||||||
zipfile
|
zipfile
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ test_reflect_key_name = "SOFTWARE\\Classes\\" + test_key_base
|
||||||
|
|
||||||
test_data = [
|
test_data = [
|
||||||
("Int Value", 45, REG_DWORD),
|
("Int Value", 45, REG_DWORD),
|
||||||
|
("Qword Value", 0x1122334455667788, REG_QWORD),
|
||||||
("String Val", "A string value", REG_SZ),
|
("String Val", "A string value", REG_SZ),
|
||||||
("StringExpand", "The path is %path%", REG_EXPAND_SZ),
|
("StringExpand", "The path is %path%", REG_EXPAND_SZ),
|
||||||
("Multi-string", ["Lots", "of", "string", "values"], REG_MULTI_SZ),
|
("Multi-string", ["Lots", "of", "string", "values"], REG_MULTI_SZ),
|
||||||
|
|
|
@ -19,6 +19,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type.
|
||||||
|
|
||||||
- Issue #26741: subprocess.Popen destructor now emits a ResourceWarning warning
|
- Issue #26741: subprocess.Popen destructor now emits a ResourceWarning warning
|
||||||
if the child process is still running.
|
if the child process is still running.
|
||||||
|
|
||||||
|
|
32
PC/winreg.c
32
PC/winreg.c
|
@ -563,6 +563,24 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
|
||||||
memcpy(*retDataBuf, &d, sizeof(DWORD));
|
memcpy(*retDataBuf, &d, sizeof(DWORD));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case REG_QWORD:
|
||||||
|
if (value != Py_None && !PyLong_Check(value))
|
||||||
|
return FALSE;
|
||||||
|
*retDataBuf = (BYTE *)PyMem_NEW(DWORD64, 1);
|
||||||
|
if (*retDataBuf==NULL){
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
*retDataSize = sizeof(DWORD64);
|
||||||
|
if (value == Py_None) {
|
||||||
|
DWORD64 zero = 0;
|
||||||
|
memcpy(*retDataBuf, &zero, sizeof(DWORD64));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DWORD64 d = PyLong_AsUnsignedLongLong(value);
|
||||||
|
memcpy(*retDataBuf, &d, sizeof(DWORD64));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case REG_SZ:
|
case REG_SZ:
|
||||||
case REG_EXPAND_SZ:
|
case REG_EXPAND_SZ:
|
||||||
{
|
{
|
||||||
|
@ -690,7 +708,13 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSize, DWORD typ)
|
||||||
if (retDataSize == 0)
|
if (retDataSize == 0)
|
||||||
obData = PyLong_FromUnsignedLong(0);
|
obData = PyLong_FromUnsignedLong(0);
|
||||||
else
|
else
|
||||||
obData = PyLong_FromUnsignedLong(*(int *)retDataBuf);
|
obData = PyLong_FromUnsignedLong(*(DWORD *)retDataBuf);
|
||||||
|
break;
|
||||||
|
case REG_QWORD:
|
||||||
|
if (retDataSize == 0)
|
||||||
|
obData = PyLong_FromUnsignedLongLong(0);
|
||||||
|
else
|
||||||
|
obData = PyLong_FromUnsignedLongLong(*(DWORD64 *)retDataBuf);
|
||||||
break;
|
break;
|
||||||
case REG_SZ:
|
case REG_SZ:
|
||||||
case REG_EXPAND_SZ:
|
case REG_EXPAND_SZ:
|
||||||
|
@ -1599,7 +1623,7 @@ winreg.SetValueEx
|
||||||
An integer that specifies the type of the data, one of:
|
An integer that specifies the type of the data, one of:
|
||||||
REG_BINARY -- Binary data in any form.
|
REG_BINARY -- Binary data in any form.
|
||||||
REG_DWORD -- A 32-bit number.
|
REG_DWORD -- A 32-bit number.
|
||||||
REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format.
|
REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format. Equivalent to REG_DWORD
|
||||||
REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.
|
REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.
|
||||||
REG_EXPAND_SZ -- A null-terminated string that contains unexpanded
|
REG_EXPAND_SZ -- A null-terminated string that contains unexpanded
|
||||||
references to environment variables (for example,
|
references to environment variables (for example,
|
||||||
|
@ -1609,6 +1633,8 @@ winreg.SetValueEx
|
||||||
by two null characters. Note that Python handles
|
by two null characters. Note that Python handles
|
||||||
this termination automatically.
|
this termination automatically.
|
||||||
REG_NONE -- No defined value type.
|
REG_NONE -- No defined value type.
|
||||||
|
REG_QWORD -- A 64-bit number.
|
||||||
|
REG_QWORD_LITTLE_ENDIAN -- A 64-bit number in little-endian format. Equivalent to REG_QWORD.
|
||||||
REG_RESOURCE_LIST -- A device-driver resource list.
|
REG_RESOURCE_LIST -- A device-driver resource list.
|
||||||
REG_SZ -- A null-terminated string.
|
REG_SZ -- A null-terminated string.
|
||||||
value: object
|
value: object
|
||||||
|
@ -1918,6 +1944,8 @@ PyMODINIT_FUNC PyInit_winreg(void)
|
||||||
ADD_INT(REG_DWORD);
|
ADD_INT(REG_DWORD);
|
||||||
ADD_INT(REG_DWORD_LITTLE_ENDIAN);
|
ADD_INT(REG_DWORD_LITTLE_ENDIAN);
|
||||||
ADD_INT(REG_DWORD_BIG_ENDIAN);
|
ADD_INT(REG_DWORD_BIG_ENDIAN);
|
||||||
|
ADD_INT(REG_QWORD);
|
||||||
|
ADD_INT(REG_QWORD_LITTLE_ENDIAN);
|
||||||
ADD_INT(REG_LINK);
|
ADD_INT(REG_LINK);
|
||||||
ADD_INT(REG_MULTI_SZ);
|
ADD_INT(REG_MULTI_SZ);
|
||||||
ADD_INT(REG_RESOURCE_LIST);
|
ADD_INT(REG_RESOURCE_LIST);
|
||||||
|
|
Loading…
Reference in New Issue