(original) (raw)
changeset: 101487:ac2a2534f793 user: Steve Dower steve.dower@microsoft.com date: Tue May 24 15:42:04 2016 -0700 files: Doc/library/winreg.rst Doc/whatsnew/3.6.rst Lib/test/test_winreg.py Misc/NEWS PC/winreg.c description: Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. (Patch by hakril) diff -r 3a57eafd8401 -r ac2a2534f793 Doc/library/winreg.rst --- a/Doc/library/winreg.rst Tue May 24 09:15:14 2016 +0300 +++ b/Doc/library/winreg.rst Tue May 24 15:42:04 2016 -0700 @@ -633,7 +633,7 @@ .. 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 @@ -657,6 +657,14 @@ 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 A device-driver resource list. diff -r 3a57eafd8401 -r ac2a2534f793 Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst Tue May 24 09:15:14 2016 +0300 +++ b/Doc/whatsnew/3.6.rst Tue May 24 15:42:04 2016 -0700 @@ -421,6 +421,14 @@ :mod:`warnings` was already imported. +winreg +------ + +The :func:`QueryValueEx ` function now returns +integer values for registry type ``REG_QWORD``. +(Contributed by Clement Rouault in :issue:`23026`.) + + zipfile ------- diff -r 3a57eafd8401 -r ac2a2534f793 Lib/test/test_winreg.py --- a/Lib/test/test_winreg.py Tue May 24 09:15:14 2016 +0300 +++ b/Lib/test/test_winreg.py Tue May 24 15:42:04 2016 -0700 @@ -37,6 +37,7 @@ test_data = [ ("Int Value", 45, REG_DWORD), + ("Qword Value", 0x1122334455667788, REG_QWORD), ("String Val", "A string value", REG_SZ), ("StringExpand", "The path is %path%", REG_EXPAND_SZ), ("Multi-string", ["Lots", "of", "string", "values"], REG_MULTI_SZ), diff -r 3a57eafd8401 -r ac2a2534f793 Misc/NEWS --- a/Misc/NEWS Tue May 24 09:15:14 2016 +0300 +++ b/Misc/NEWS Tue May 24 15:42:04 2016 -0700 @@ -19,6 +19,8 @@ Library ------- +- Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. + - Issue #26741: subprocess.Popen destructor now emits a ResourceWarning warning if the child process is still running. diff -r 3a57eafd8401 -r ac2a2534f793 PC/winreg.c --- a/PC/winreg.c Tue May 24 09:15:14 2016 +0300 +++ b/PC/winreg.c Tue May 24 15:42:04 2016 -0700 @@ -563,6 +563,24 @@ memcpy(*retDataBuf, &d, sizeof(DWORD)); } 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_EXPAND_SZ: { @@ -690,7 +708,13 @@ if (retDataSize == 0) obData = PyLong_FromUnsignedLong(0); 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; case REG_SZ: case REG_EXPAND_SZ: @@ -1599,7 +1623,7 @@ An integer that specifies the type of the data, one of: REG_BINARY -- Binary data in any form. 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_EXPAND_SZ -- A null-terminated string that contains unexpanded references to environment variables (for example, @@ -1609,6 +1633,8 @@ by two null characters. Note that Python handles this termination automatically. 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_SZ -- A null-terminated string. value: object @@ -1918,6 +1944,8 @@ ADD_INT(REG_DWORD); ADD_INT(REG_DWORD_LITTLE_ENDIAN); ADD_INT(REG_DWORD_BIG_ENDIAN); + ADD_INT(REG_QWORD); + ADD_INT(REG_QWORD_LITTLE_ENDIAN); ADD_INT(REG_LINK); ADD_INT(REG_MULTI_SZ); ADD_INT(REG_RESOURCE_LIST);/steve.dower@microsoft.com