我想使用_winreg和Python
阅读Windows注册表它运行正常,但它没有显示REG_BINARY值...当我在某个键中创建二进制值时,无论在哪里,它都会显示任何其他值而不是二进制,我需要解析二进制信息要获得我们公司的硬件/软件证据的Windows许可证密钥,我想使用此代码,但这无关紧要。
from _winreg import *
mapping = { "HKLM":HKEY_LOCAL_MACHINE, "HKCU":HKEY_CURRENT_USER, "HKU":HKEY_USERS }
def pathExists(hkey, regPath):
try:
reg = OpenKey(mapping[hkey], regPath)
except WindowsError:
return False
CloseKey(reg)
return True
def readSubKeys(hkey, regPath):
if not pathExists(hkey, regPath):
return -1
reg = OpenKey(mapping[hkey], regPath)
subKeys = []
noOfSubkeys = QueryInfoKey(reg)[0]
for i in range(0, noOfSubkeys):
subKeys.append(EnumKey(reg, i))
CloseKey(reg)
return subKeys
def readValues(hkey, regPath):
if not pathExists(hkey, regPath):
return -1
reg = OpenKey(mapping[hkey], regPath)
values = {}
noOfValues = QueryInfoKey(reg)[1]
for i in range(0, noOfValues):
values[EnumValue(reg, i)[0]] = EnumValue(reg, i)[1]
CloseKey(reg)
return values
答案 0 :(得分:1)
我有点晚了哈哈,但我今天在Python 2.7.3中遇到了同样的问题。出现此问题的原因是因为Python是一个32位进程。在Windows 64位环境中运行时,调用32位进程以查找64位REG_BINARY值会导致位数问题。
不幸的是,我无法弄清楚如何使用_winreg来解决这个问题。似乎没有选项可以使用_winreg更改命令提示符的sysnative位置。
我使用的解决方案是:
import subprocess
cmd = ['C:\Windows\sysnative\cmd.exe /c REG QUERY HKLM\LocationToBinaryValue /v' BinaryValueName']
subprocess_checkoutput(cmd, shell=True)
命令的 C:\ Windows \ sysnative \ cmd.exe / c 部分将命令提示符shell设置为正确的位。然后正常运行Reg Query将起作用并启用读取REG_BINARY值。