Python:不使用注册表 API 的 Windows 注册表配置单元访问

Posted

技术标签:

【中文标题】Python:不使用注册表 API 的 Windows 注册表配置单元访问【英文标题】:Python: Windows registry hive access NOT using registry APIs 【发布时间】:2011-05-04 17:51:26 【问题描述】:

我正在尝试从 Windows 注册表中提取一些数据,包括 XP 计算机中的软件配置单元和 ntuser.dat。目前我使用reg.exe 加载配置单元和_winreg 提取数据。我需要使用reg.exe,因为我从中备份数据的计算机通常处于脱机状态,我将它们的硬盘驱动器放在外部驱动器托架中,并在另一个 Windows 会话中从那里加载配置单元。启动正在备份的计算机是不可行的,因为它们经常出现硬盘故障或无法启动。

我见过一个名为hivex 的实用程序,它在Linux 下运行,它结合了一个c 模块和一个python 包装器,允许对Windows 注册表进行只读(有限写入)访问,而无需使用Windows 注册表API。遗憾的是,似乎没有 Windows 版本的 hivex,假设是因为没有人认为需要通过直接访问 hive 文件来访问 Windows 下的 Windows 注册表。

我很想放弃 reg.exesubprocess.Popen() 调用的依赖关系,因为调用外部可执行文件有很多问题,而且它会限制备份实用程序平台。

有谁知道允许直接访问 hive 文件本身的 python 模块?我已经知道,并且目前正在使用_winreg,因此建议这不会有帮助。提前致谢。

【问题讨论】:

【参考方案1】:

我不确定它有多好,但pywin32 库提供了与大多数 Windows API 的绑定。我不太了解 Windows API,不知道您是否可以打开任意配置单元文件,但是值得快速查看(该版本包含具有完整 API 映射的 CHM)。

【讨论】:

嗯,我想我也许可以使用pywin32。看起来我可以使用 pywin32 从 Win32API 调用 RegLoadKey。根据 RegLoadKey 上的文档,它能够在 HKU 或 HKLM 的特定位置加载配置单元。这应该比通过 Popen() 使用 reg.exe 加载配置单元要好得多。我更喜欢跨平台的选项,但如果/当我需要能够在 Linux 上运行该程序时,我可以实现 hivex 的二次使用,因此如果import pywin32 抛出一个例外。【参考方案2】:

你有没有看过regobj它提供了对注册表值的pythonic访问(但它仍然基于_winreg)

【讨论】:

是的,我需要直接访问荨麻疹。 _winreg 只允许通过 Windows 中的注册表 API 进行访问,这是 regobj 所基于的。我实际上在使用regobj,但没有提及它,因为它与直接使用_winreg 并没有什么不同,除了更pythonic。【参考方案3】:

您是否在调用外部应用程序或使用注册表 API 时遇到问题?如果是前者,您可以使用RegLoadKey / RegUnLoadKey 自己加载和卸载蜂巢。如果是后者,那么我敢肯定有人已经编写了一个 C 库来直接解析 hives。快速的谷歌搜索给了我微软的Offline Registry Library。

【讨论】:

我现在遇到的问题是我通过 Popen() 调用 reg.exe,我不喜欢这样做。我想我会通过 pywin32 调用 RegLoadKey,这要归功于 Bashwork。我真的希望像 hivex 这样的东西,只有跨平台,所以我不必使用不同的库/模块两次实现相同的功能,但我认为使用 pywin32 和 hivex 两者,取决于平台,是迄今为止最好的回答我遇到过。

以上是关于Python:不使用注册表 API 的 Windows 注册表配置单元访问的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 和 Python 中使用 JWT(JSON Web 令牌)来创建用于注册和登录的 REST API

利用Python实现批量注册网站用户,注意不可用于商业用途哦!

python 通过API在OrderPoint上注册客户

Python自动化发微博(使用原生API)

python使用openweathermap API获取全世界主要城市天气信息

win api 音频可视化