每当安装或删除应用程序时,我想监视何时更改/添加/删除注册表项。我已经测试了 msdn( link ) 中的示例代码,它工作正常。
但问题是它没有告诉我哪个键实际上已被修改/添加/删除。如何使用 C++ 检索这些信息?
只有 3 种方法,没有一种既简单又足够:
RegNotifyChangeKeyValue
: 不会为您提供所需的信息,但非常易于使用。
EVENT_TRACE_FLAG_REGISTRY
这是
ProcMon使用的Windows 事件跟踪的一部分。它运作良好,但使用起来相当困难。
我不确定自己如何使用它,但是如果我弄清楚了,我会在这里发布。
CmRegisterCallback
:需要内核模式驱动程序,这在 64 位中很痛苦。
但这是最完美的解决方案。
不幸的是,Windows 事件跟踪 (EWT) 不允许查看事件中的完整密钥路径。你只得到一个部分键名,一个奇怪的句柄实际上是一个键控制块。从这个块中获取信息并不是那么简单。是的,进程监视器使用 EWT,但它不使用 Windows 内核跟踪作为提供程序。