Как прочитать файл реестра Windows для проверки значений?[Python] - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь выполнить контрольные проверки файла реестра Windows (.reg, автономный) и надеюсь, что смогу использовать Python для проверки reg-файла.

Например (псевдокод)):

#Configure registry policy processing: Do not apply during periodic background processing 

testloc = "C:\\Users\\test.reg"
datafile = open(testloc, "r")
read = datafile.read()

find(Software\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2})
check(NoBackgroundPolicy) #check if dword value is correct

if(dword == correct):
    print("correct")
else:
    print("wrong")

Я попытался посмотреть на _winreg, но похоже, что он выполняет проверку работающей системы с использованием Windows API.Другой проблемой является большой размер файла .reg (~ 200 МБ).

Как я могу выполнить такую ​​проверку с помощью Python?

1 Ответ

0 голосов
/ 15 февраля 2019

Я не знаю, есть ли библиотека, которая может читать файлы .reg, но, судя по всему, это просто INI-файл с дополнительной информацией о версии вверху.

Вот примеркак вы могли бы использовать модуль configparser для этого.Некоторые примечания:

  • .reg файлы кодируются в utf16
  • Перед передачей файла в ConfigParser, readline пропустит информацию о версии (что-то вроде Windows Registry Editor Version 5.00).В противном случае это приведет к MissingSectionHeaderError.
  • Имена значений включают кавычки, что означает, что вам нужно добавить их явно при поиске значения в ключе.

import configparser

testloc = "C:\\Users\\test.reg"

regdata = configparser.ConfigParser()
with open(testloc, "r", encoding="utf-16") as f:
    f.readline()  # skip version info in first line
    regdata.read_file(f)

key = regdata[r"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}"]
value = key['"NoBackgroundPolicy"']

print(value)

Однако при таком способе могут быть недостатки, например, в том, как форматируются полученные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...