Python _winreg - читать REG_BINARY - PullRequest
       13

Python _winreg - читать REG_BINARY

0 голосов
/ 01 февраля 2012

Я хочу прочитать реестр Windows, используя _winreg и Python

Работает нормально, но не показывает значения REG_BINARY ... когда я создаю двоичное значение в каком-то ключе, не имеет значения, где будут показываться другие значения, а не двоичные, мне нужно проанализировать двоичную информацию чтобы получить лицензионный ключ windows для HW / SW свидетельства в нашей компании, я хотел бы использовать этот код, но это не имеет значения ..

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 Ответ

1 голос
/ 01 апреля 2013

Я немного опоздал, хаха, но сегодня я столкнулся с той же проблемой в Python 2.7.3. Причина этой проблемы в том, что Python - это 32-битный процесс. При работе в 64-битной среде Windows вызов 32-битного процесса для поиска 64-битных значений REG_BINARY вызывает проблемы битности.

К сожалению, я не мог понять, как решить эту проблему с помощью _winreg. Похоже, что нет возможности изменить расположение родной системы для командной строки с помощью _winreg.

Я использовал следующее решение:

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 устанавливает для оболочки командной строки правильный бит. Тогда обычный запрос Reg будет работать нормально и позволит читать значения REG_BINARY.

...