日期:2014-05-16  浏览次数:20871 次

求教SSDT HOOK实现文件监控~
为了描述详细,内容较长~_~
小弟想要实现一个监控文件内容的程序,本来是想用文件过滤驱动实现,但考虑到以前没接触文件过滤驱动,而文件过滤系统对小弟来说又相当复杂,急切间实现不了。所以打算用SSDT HOOK ZwWriteFile来实现文件内容监控。
程序流程:利用HookZwWriteFile来检测ZwWriteFile里的缓冲区有没有敏感字符。经测试发现文本文件(*.txt)监控正常(应用层保存*.txt时,有敏感字符全部会被内核的HookZwWriteFile捕捉),而Office2003的WORD文件*.doc与EXCEL文件*.xls也可被正常捕捉,只是office文件操作被HookZwWriteFile捕捉时都是短文件名(*.txt被捕捉是长文件名)。但是、但是PPT(*.ppt)有敏感字符一律不会被HookZwWriteFile捕捉,小弟及为不解,现在问题总结如下:(只HOOK了 ZwWriteFile一个函数)

1.*.txt,*.doc,*.xls的内容均会被HookZwWriteFile过滤到,但*.ppt的内容却不会被HookZwWriteFile过滤到,为什么?(俺用十六进制工具打开*.ppt发现*.ppt里的确有本该被过滤到的字符。是否*.ppt保存时不调用内核的NtWriteFile函数而是调用了其它函数,小弟只知内核层写文件用NtWriteFile函数,是否还有其它的?)


2.*.txt被HookZwWriteFile过滤到时,路径与文件名正常,而像*.doc,*.xls则路径正常,但文件名却好像是短名eg:(\Documents and Settings\Administrator\桌面\~WRD0001.tmp)其实路径应为(\Documents and Settings\Administrator\桌面\新建 Microsoft Word 文档.doc),在内核中怎么把短名转为长名,有高手能给下代码不~

3.有没有大牛有能实现类似功能的代码,能分享下吗,谢谢~

------解决方案--------------------
ZwQueryInformationFile查询信息
------解决方案--------------------
不知道 MJ_IRP_WRITE 是否能捕获到 所有文件系统层的写事件。
filemapping的内部会不会直接对磁盘操作?