Python\u winreg read REG_二进制

2024-09-27 09:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用_winreg和Python读取windows注册表

它工作得很好,但它不显示REG_二进制值。。。当我在某个密钥中创建二进制值时,不管在哪里,它都会显示任何其他值而不是二进制,我需要解析二进制信息以获取我们公司硬件/软件证据的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

Tags: returnwindowsdef二进制regmappingvalueswinreg
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:09

我迟到了一点,哈哈,但今天在Python2.7.3中遇到了同样的问题。这个问题的原因是因为Python是一个32位的进程。在Windows 64位环境中运行时,调用32位进程以查找64位REG_二进制值会导致位问题。在

很遗憾,我无法使用\u winreg解决此问题。似乎没有选项可以用\u 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\命令行.exe/c命令的一部分将命令提示符shell设置为正确的位。然后,正常运行Reg查询将正常工作并允许读取Reg\二进制值。在

相关问题 更多 >

    热门问题