1.不能捕获irp是因为explore将文件读入缓冲区,那么发起读操作的进程是notepad吗?
得到当前进程
- C/C++ code
ULONG cfCurProcName(PUNICODE_STRING name){ PEPROCESS curproc; ULONG i,need_len; ANSI_STRING ansi_name; if(s_cf_proc_name_offset == 0) return 0; // 获得当前进程PEB,然后移动一个偏移得到进程名所在位置。 curproc = PsGetCurrentProcess(); // 这个名字是ansi字符串,现在转化为unicode字符串。 RtlInitAnsiString(&ansi_name,((PCHAR)curproc + s_cf_proc_name_offset)); need_len = RtlAnsiStringToUnicodeSize(&ansi_name); if(need_len > name->MaximumLength) { return RtlAnsiStringToUnicodeSize(&ansi_name); } RtlAnsiStringToUnicodeString(name,&ansi_name,FALSE); return need_len;}
2.notepad使用内存映射技术,不能有效捕获读非分业irp,如何处理irp。
3.直接读写硬盘文件,即构造非缓存读写irp,那么缓存中的数据刷新怎么办。
------解决方案--------------------
建议LZ查询一个相关手册,应该可以解决问题!
------解决方案--------------------