Process Monitor использует драйвер ядра или ETW (см. Ниже) для захвата событий реестра.Я знаю, что Process Monitor использует ETW для некоторых своих данных (например, информацию о сети).
Механизм перехвата или обхода API, такой как EasyHook, обычно работает на уровне API Win32 (например, RegSetValue
или RegCreateKeyEx
вaDVAPI32.dll).Из-за этого у него есть упомянутое вами ограничение: регистрируются только обращения к пользовательскому режиму.Кроме того, перехват API обычно выполняется для каждого отдельного процесса, поэтому вам нужно внедрить себя в каждый процесс, для которого вы хотите собирать данные.Вам также придется следить за созданием процесса, если вы действительно хотите захватить все обращения в системе.
Отслеживание событий для Windows (ETW) было бы простым (условно говоря) способомзахватить все обращения к реестру.Основная идея ETW заключается в том, что разработчики ОС, среды выполнения, библиотек и даже повседневных приложений могут добавлять в свой код специальные инструменты для регистрации данных об интересных событиях и сценариях.Эта трассировка не требует больших затрат и может быть легко собрана.ETW существует уже некоторое время, но он действительно завоевал популярность во всем ядре, начиная с Vista.Почти все основные подсистемы ядра теперь оснащены ETW.В настоящее время он также является основой для журнала событий Windows.
ETW имеет значительную долю багажа и не имеет достаточной документации в некоторых областях, но если вам интересно, вы можете проверить следующее:
Чтобы перехватить доступ к реестру режима ядра, мне нужно было бы написать на C ++?
Нет, используя библиотеку TraceEvent , упомянутую выше, вы можете использовать C # для захвата и анализа обращений к реестру в режиме ядра и пользователя по всей системе.