Python _winreg - 读取REG_BINARY

时间:2012-02-01 13:03:49

标签: python winreg

我想使用_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

1 个答案:

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