winapi — мониторинг реестра с помощью переполнения стека

Я хочу отслеживать, когда ключ изменяется / добавляется / удаляется в реестре при установке или удалении приложения. Я проверил пример кода из MSDN (ссылка на сайт) и работает нормально.

Но проблема в том, что он не говорит мне, какой ключ был фактически изменен / добавлен / удален. Как я могу получить эту информацию с помощью C ++?

3

Решение

Есть только 3 способа, ни один из которых не является простым и адекватным:

  • RegNotifyChangeKeyValue:
    Не дает вам необходимую информацию, но очень прост в использовании.

  • EVENT_TRACE_FLAG_REGISTRY которая является частью Трассировка событий для Windows
    который является то, что ProcMon использует. Работает хорошо, но довольно сложно в использовании.
    Я не уверен точно, как использовать это непосредственно, но если я выясню это, я отправлю это здесь.

  • CmRegisterCallback:
    Требуется драйвер режима ядра, что является проблемой в 64-битной версии.
    Но иначе это самое совершенное решение.

6

Другие решения

К сожалению, Event Tracing for Windows (EWT) не позволяет увидеть полный путь ключа в событии. Вы получаете только частичное имя ключа и странный дескриптор с фактически блоком управления ключами. Получить информацию из этого блока не так просто.
Да, монитор процесса использует EWT, но он не использует Windows Kernel Trace в качестве поставщика.

0

По вопросам рекламы [email protected]