最近有个需求需要监控管道的链接,IRP_MJ_CREATE过滤不到管道的创建和链接。
注册的IRP_MJ_CREATE_NAMED_PIPE这个irp的回调也一直不被调用。
OSR上老外也提了类似的问题:
- https://community.osr.com/discussion/239743/can-a-minifilter-filter-a-non-file-devices-irps
- https://community.osr.com/discussion/171174
- https://community.osr.com/discussion/247489
最后一个OSR上的问题,老外提到了微软的minispy中的部分代码,这个代码是用在注册Filter的时候填写在 FLT_REGISTRATION结构中的flag,这个flag从Win8才开始支持!

后来也搜到了两篇文章,介绍了Win8的新特性,其中就提到了开始支持过滤命名管道和邮槽,也证明了上面老外提到的这件事。
- http://fsfilters.blogspot.com/2011/09/whats-new-in-win8-for-file-system.html
- http://fsfilters.blogspot.com/2014/01/getting-started-with-windows-file_23.html
下面是我写的minifilter代码,用来过滤创建或打开的管道名是wdy就把管道名和当前进程名字打印出来。
代码中注册了下面两个IRP的回调函数:
- IRP_MJ_CREATE
- IRP_MJ_CREATE_NAMED_PIPE
最终结果显示,当使用了FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS 这个flag时,
IRP_MJ_CREATE可以监控到打开管道名为wdy的事件
IRP_MJ_CREATE_NAMED_PIPE可以监控到创建管道名为wdy的事件
这个验证结果和《Windows内核原理与实现》书中8.3节介绍的一样

当不使用FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS属性时,两个IRP都监控不到管道的创建和打开。
微软官方对这个属性的介绍:
- https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/fltkernel/ns-fltkernel-_fl

本文探讨了在Windows 8及更高版本操作系统中,通过使用FLTFL_REGISTRATION_SUPPORT_NPFS_MSFS标志,如何利用minifilter驱动的IRP_MJ_CREATE和IRP_MJ_CREATE_NAMED_PIPE操作来有效监控命名管道的创建和连接事件。文中详细展示了代码示例,解释了如何注册回调函数以跟踪特定管道名称的活动。
最低0.47元/天 解锁文章
7292

被折叠的 条评论
为什么被折叠?



