我如何在 python 3.4 的 winreg 中读取 reg_qword?
How can I read a reg_qword in winreg in python 3.4?
我插入了一个注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\test\test_qword
,类型为 REG_QWORD
,值为 20150509091344
(0x1253a7efba10
)。
然后我尝试使用 winreg
和 Python 3.4 中的以下代码加载它:
import winreg
key_dir = r"SOFTWARE\test"
reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_dir, 0,
winreg.KEY_WOW64_64KEY+winreg.KEY_ALL_ACCESS)
test_dir = list(winreg.QueryValueEx(reg, r'test_qword'))[0]
print(test_dir)
ans = "".join(map(lambda b: format(b, "02x"), test_dir))
print(ans)
print(int(ans, 16))
并得到以下控制台输出:
b'\x10\xba\xef\xa7S\x12\x00\x00'
10baefa753120000
1205539352207294464
这不是我的原始值。如何使用 winreg
检索我的原始值?
您编写的代码将该值解释为大端存储的整数。然而,REG_QWORD
is stored as a little-endian number.
有一种更简单的方法来转换 64 位整数的 bytes
值:使用 struct.unpack()
。格式 '<q'
将读取带符号的 64 位小端整数:
>>> struct.unpack('<q', b'\x10\xba\xef\xa7S\x12\x00\x00')
(20150509091344,)
如果您想以大端方式阅读它:
>>> struct.unpack('>q', b'\x10\xba\xef\xa7S\x12\x00\x00')
(1205539352207294464,)
您可以看到它给您的值与您在代码中得到的值相同。
有关 struct.unpack()
及其反转 struct.pack()
格式代码的更多信息,请参见 the docs for the struct
module.
我插入了一个注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\test\test_qword
,类型为 REG_QWORD
,值为 20150509091344
(0x1253a7efba10
)。
然后我尝试使用 winreg
和 Python 3.4 中的以下代码加载它:
import winreg
key_dir = r"SOFTWARE\test"
reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_dir, 0,
winreg.KEY_WOW64_64KEY+winreg.KEY_ALL_ACCESS)
test_dir = list(winreg.QueryValueEx(reg, r'test_qword'))[0]
print(test_dir)
ans = "".join(map(lambda b: format(b, "02x"), test_dir))
print(ans)
print(int(ans, 16))
并得到以下控制台输出:
b'\x10\xba\xef\xa7S\x12\x00\x00'
10baefa753120000
1205539352207294464
这不是我的原始值。如何使用 winreg
检索我的原始值?
您编写的代码将该值解释为大端存储的整数。然而,REG_QWORD
is stored as a little-endian number.
有一种更简单的方法来转换 64 位整数的 bytes
值:使用 struct.unpack()
。格式 '<q'
将读取带符号的 64 位小端整数:
>>> struct.unpack('<q', b'\x10\xba\xef\xa7S\x12\x00\x00')
(20150509091344,)
如果您想以大端方式阅读它:
>>> struct.unpack('>q', b'\x10\xba\xef\xa7S\x12\x00\x00')
(1205539352207294464,)
您可以看到它给您的值与您在代码中得到的值相同。
有关 struct.unpack()
及其反转 struct.pack()
格式代码的更多信息,请参见 the docs for the struct
module.