0

我想使用 _winreg 和 Python 读取 Windows 注册表

它工作正常,但它不显示 REG_BINARY 值......当我在某个键中创建二进制值时,无论在哪里,它都会显示任何其他值而不是二进制,我需要解析二进制信息以获取窗口我们公司硬件/软件证据的许可证密钥,我想使用此代码,但没关系..

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
4

1 回答 1

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 值。

于 2013-04-01T16:52:47.743 回答