Python: Windows registry hive access NOT using registry APIs
我试图从Windows注册表中提取一些数据,包括来自XP计算机的软件配置单元和ntuser.dat。目前我正在使用reg.exe加载配置单元和_winreg来提取数据。我需要使用reg.exe作为我备份数据的计算机通常处于脱机状态,我将硬盘驱动器放在外部驱动器托架中,并从另一个Windows会话中加载hives。启动正在备份的计算机是不可行的,因为它们通常会使硬盘出现故障或无法启动。
我见过一个名为hivex的实用程序,它在Linux下运行,它将c-module与python包装器结合在一起,允许对Windows注册表进行只读(有限写入)访问,而不使用Windows注册表API。遗憾的是,似乎没有Windows版本的hivex,因为没有人认为需要通过直接访问hive文件来访问Windows下的Windows注册表。
我喜欢放弃reg.exe被subprocess.Popen()调用的依赖关系,因为调用外部可执行文件有很多问题,而且它使备份实用程序平台受限。
有没有人知道python模块允许直接访问hive文件本身?我已经知道了,目前正在使用_winreg,所以建议这样做不会有用。提前致谢。
我不确定它有多好,但是pywin32库提供了对大多数Windows API的绑定。 我不知道windows API是否足以知道你是否可以打开任意的hive文件,但是值得快速查看(该版本包含带有完整API映射的CHM)。
-
嗯,我想我可以使用pywin32。看起来我可以使用pywin32从Win32API调用RegLoadKey。根据RegLoadKey的文档,它可以在HKU或HKLM的特定位置加载配置单元。这应该远远优于使用reg.exe通过Popen()加载配置单元。我更喜欢一个跨平台的选项,但是如果/当我需要能够在Linux上运行这个程序时,我可以实现hivex的二次使用,所以如果import pywin32抛出一个,它会使用hivex例外。
您在调用外部应用程序或使用注册表API时遇到问题吗? 如果是前者,您可以使用RegLoadKey / RegUnLoadKey自行加载和卸载荨麻疹。 如果是后者那么我肯定有人写了一个C库来直接解析荨麻疹。 谷歌的快速搜索给了我微软的离线注册库。
-
我现在遇到的问题是我通过Popen()调用reg.exe,我不喜欢这样做。我想我会通过pywin32调用RegLoadKey,我刚刚发现了感谢Bashwork。我真的希望像hivex这样的东西,只有跨平台,所以我不必用不同的库/模块两次实现相同的功能,但我认为使用pywin32和hivex两者,取决于平台,是迄今为止最好的回答我遇到过。
你有没有看过regobj它提供pythonic访问注册表值(但它仍然基于_winreg)
-
是的,我的需要是直接访问荨麻疹。 _winreg仅允许通过Windows中的注册表API进行访问,这是regobj所基于的。我实际上正在使用regobj,但是没有提及它,因为除了更加pythonic之外,它与直接使用_winreg并没有什么不同。