Python: доступ к кустам реестра Windows НЕ использует API-интерфейсы реестра

1

Я пытаюсь извлечь некоторые данные из реестра Windows, как утилит программного обеспечения, так и ntuser.dat с компьютеров XP. В настоящее время я использую reg.exe для загрузки улья и _winreg для извлечения данных. Мне нужно использовать reg.exe, поскольку компьютеры, на которых я выполняю резервное копирование данных, обычно находятся в автономном режиме, и я кладу жесткий диск из них во внешний отсек и загружая ульи из этого в другой сеанс Windows. Невозможно загрузить резервные копии компьютеров, поскольку они часто терпят неудачу на жестких дисках или иным образом не загружаются.

Я видел утилиту под названием hivex, которая работает под Linux, которая объединяет c-модуль с оболочкой python, чтобы разрешить доступ только для чтения (ограниченная запись) к реестру Windows без использования API-интерфейсов реестра Windows. К сожалению, не существует версии Windows hivex, предположительно потому, что никто не решил получить доступ к реестру Windows под Windows, напрямую обратившись к файлам куста.

Мне бы хотелось сбросить зависимость reg.exe, вызываемую subprocess.Popen(), поскольку вызов внешнего исполняемого файла имеет множество проблем, а также делает ограниченную платформу для резервного копирования.

Кто-нибудь знает о модуле python, который позволяет напрямую получать доступ к файлам куста? Я уже знаю, и в настоящее время я использую _winreg, поэтому предложение о том, что будет менее полезным. Спасибо заранее.

Теги:
registry
winreg

3 ответа

1
Лучший ответ

Я не уверен, насколько это лучше, но библиотека pywin32 предоставляет привязки для большинства API окон. Я не очень хорошо знаю API окон, чтобы узнать, можете ли вы открывать произвольные файлы кустов, однако это может стоить быстрого обзора (релиз содержит CHM с полным сопоставлением API).

  • 0
    Хм, думаю, я смогу использовать pywin32. Похоже, я могу вызвать RegLoadKey из Win32API с pywin32. Согласно документации на RegLoadKey, он может загружать улей в определенном месте в HKU или HKLM. Это должно быть намного лучше, чем использовать reg.exe через Popen () для загрузки улья. Я бы предпочел вариант кроссплатформенный, но я могу реализовать вторичное использование hivex, если / когда мне понадобится запустить эту программу в Linux, поэтому он будет использовать hivex, если, скажем, import pywin32 выдает исключение ,
0

Является ли ваша проблема вызовом внешнего приложения или использованием API-интерфейсов реестра? Если это первый, вы можете самостоятельно загрузить и выгрузить кусты, используя RegLoadKey/RegUnLoadKey. Если это последний, то я уверен, что кто-то написал C-библиотеку для непосредственного анализа ульев. Быстрый поиск в Google дал мне Microsoft Offline Registry Library.

  • 0
    У меня сейчас проблема в том, что я вызываю reg.exe через Popen (), что мне не нравится делать. Я думаю, что я пойду с вызовом RegLoadKey через pywin32, о котором я только что узнал благодаря Bashwork. Я действительно надеялся на что-то вроде hivex, только кроссплатформенное, поэтому мне не пришлось бы реализовывать одни и те же функции дважды с разными библиотеками / модулями, но я думаю, что использование pywin32 и hivex обоих, в зависимости от платформы, пока лучшее ответ я наткнулся.
0

Был ли у вас взгляд на regobj, он обеспечивает доступ к значению реестра для pythonic (но он по-прежнему основан на _winreg)

  • 0
    Да, мне нужно получить доступ к самим ульям напрямую. _winreg разрешает доступ только через API реестра в Windows, на чем основан regobj . На самом деле я использую regobj , но не стал упоминать об этом, поскольку он ничем не отличается от непосредственного использования _winreg , за исключением того, что он более питонический.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню