如何阅读Windows注册表文件以检查值? [蟒蛇]

时间:2019-02-15 08:30:17

标签: python-3.x windows registry

我正在尝试对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文件很大(〜200MB)。

如何使用Python执行此类检查?

1 个答案:

答案 0 :(得分:0)

我不知道是否有一个库可以专门读取.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)

通过这种方式进行操作可能存在一些缺点,例如,如何格式化获取的值。