Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注册表监视,包括内核模式注册表访问?_C#_C++_Api Hook - Fatal编程技术网

C# 注册表监视,包括内核模式注册表访问?

C# 注册表监视,包括内核模式注册表访问?,c#,c++,api-hook,C#,C++,Api Hook,我记得在大学最后一年的项目中,我写了一个C#registry monitor,但是,当我将它与Microsoft ProcessMonitor应用程序(我记不清它的确切名称,但它是微软收购的一家公司)进行比较时,我没有捕获到那么多的注册表调用 这是因为我使用的是C#包装器,因此它只能捕获用户模式注册表访问吗 我用了这个包装: >为了捕获内核模式注册表访问,我必须用C++来编写.< /p> 或者使用内核驱动程序或ETW(见下文)来捕获注册表事件。我确实知道Process Monitor使用ETW

我记得在大学最后一年的项目中,我写了一个C#registry monitor,但是,当我将它与Microsoft ProcessMonitor应用程序(我记不清它的确切名称,但它是微软收购的一家公司)进行比较时,我没有捕获到那么多的注册表调用

这是因为我使用的是C#包装器,因此它只能捕获用户模式注册表访问吗

我用了这个包装:

<> >为了捕获内核模式注册表访问,我必须用C++来编写.< /p> 或者使用内核驱动程序或ETW(见下文)来捕获注册表事件。我确实知道Process Monitor使用ETW处理其某些数据(如网络信息)

像EasyHook这样的API挂钩或迂回机制通常在Win32 API级别运行(例如ADVAPI32.dll中的
RegSetValue
RegCreateKeyEx
)。因此,它有您提到的限制:只捕获用户模式注册表访问。此外,API挂接通常是在每个进程的基础上完成的,因此您必须将自己注入到要收集数据的每个进程中。如果要真正捕获整个系统中的所有访问,还必须监视进程创建

(ETW)将是捕获所有注册表访问的简单方法(相对而言)。ETW背后的基本思想是,操作系统、运行时、库,甚至日常应用程序开发人员都可以向其代码中添加特定的工具,以记录有关有趣事件和场景的数据。这种跟踪的开销很低,并且很容易收集。ETW已经存在了一段时间,但它确实在从Vista开始的整个内核中获得了吸引力。几乎所有主要的内核子系统现在都安装了ETW。它现在也是Windows事件日志的基础

ETW承担着相当大的责任,在某些领域缺乏实质性的文件,但如果您感兴趣,您可以查看以下内容:

  • (Windows性能工具包的一部分),用于收集和分析跟踪
  • logman.exe和tracerpt.exe用于收集和分析跟踪
  • ,一个用于收集和分析ETW事件的.NET库
捕获内核模式注册表 访问我必须用C++编写吗?
< >不,使用上面提到的库,你可以使用C++来捕获和分析整个系统的内核和用户模式注册表访问。

< P>捕获内核模式注册表访问,你必须在C++中编写驱动程序,没有其他方法来完成它。 进程监视器是一个驱动程序,这就是为什么它可以捕获用户和内核访问

您可以在此处下载旧版本的Regmon和Filemon:


您想到的是sysinternals中的RegMon,它已被Process Monitor替换。Process Monitor就是我使用的,是的!这些Sysinternal实用程序的早期版本不是附带了源代码吗?还是我在做梦?+1是为了让ProcMon更清晰,但是RE:“没有其他方法可以做到这一点”-Windows内核为注册表事件内置了ETW工具。甚至可以为注册表访问获取完整的用户和内核模式堆栈。这在XP中不可用,这就是我没有提到的原因。有趣的是,使用ETW,我可以实时捕获文件访问吗?@ChibuezeOpata:基本上,是的。根据系统负载和正在处理的ETW事件的数量,会有一些延迟,但在一般情况下,您应该能够在文件访问发生时看到它们。ETW在这方面非常强大。