使用C++监视注册表

Monitor registry using C++

本文关键字:注册表 监视 C++ 使用      更新时间:2023-10-16

无论何时安装或删除应用程序,我都希望监视注册表项的更改/添加/删除情况。我已经测试了msdn(链接)中的示例代码,它运行良好。

但问题是,它并没有告诉我哪个密钥实际上被修改/添加/删除了。如何使用c++检索这些信息?

只有三种方法,没有一种既简单又充分:

  • RegNotifyChangeKeyValue:不会给你所需的信息,但很容易使用。

  • EVENT_TRACE_FLAG_REGISTRY是Windows事件跟踪的一部分这就是ProcMon所使用的。它运行良好,但使用起来相当困难
    我不知道自己到底该怎么用,但如果我弄清楚了,我会把它贴在这里。

  • CmRegisterCallback:需要内核模式驱动程序,这在64位中是一个难题
    但除此之外,这是最完美的解决方案。

遗憾的是,Windows事件跟踪(EWT)不允许查看事件中的完整密钥路径。您只得到一个部分密钥名称,而一个奇怪的句柄实际上是一个密钥控制块。从这个区块获取信息并不是那么简单。是的,进程监视器使用EWT,但它不使用Windows内核跟踪作为提供程序。