gpt4 book ai didi

python - 如何在 python 3.4 中读取 winreg 中的 reg_qword ?

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:06 25 4
gpt4 key购买 nike

我插入了一个注册表项,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

这不是我原来的值(value)观。如何使用 winreg 检索我的原始值?

最佳答案

您编写的代码将该值解释为大端存储的整数。然而, REG_QWORD is stored as a little-endian number.

有一种更简单的方法可以转换 bytes 64 位整数的值:使用 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.

关于python - 如何在 python 3.4 中读取 winreg 中的 reg_qword ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30188728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com