阅读:5303回复:2
IRP_MJ_DIRECTORY_CONTROL是怎么回事?
我在用minifilter做加密驱动时,想隐藏文件头,保证用户查看文件属性时,文件大小不包含文件头长度,于是拦截了IRP_MJ_DIRECTORY_CONTROL请求,但是搞不太清楚系统的工作原理。问题主要有:
1。很多种目录请求都包括NextEntryOffset, FileIndex这两个域,他们是干什么用的; 2。当我查看被加密的文件的属性时,用windbg拦截了所有的IRP_MJ_DIRECTORY_CONTROL请求,但其中的fileobject都不是我正在查看的这个文件,这是为什么? 请大牛们指点,非常感谢 |
|
沙发#
发布于:2008-03-19 16:17
我做SFILTER的,不过处理IRP_MJ_DIRECTORY_CONTROL的原理应该相同。
这个IRP大多是对文件夹发起的,我处理其中FileBothDirectoryInformation这个情况的时候 NextEntryOffset可以认为是一个链表节点的NEXT指针,该IRP返回的文件信息BUFFER中,包括多个FILE_BOTH_DIR_INFORMATION结构(每个结构对映文件夹下的每个文件),第一个结构头指针是Irp->UserBuffer,第二个就是Irp->UserBuffer+(PFILE_BOTH_DIR_INFORMATION) Irp->UserBuffer->NextEntryOffset,以此类推。 FileIndex我没用过。 你要查看文件的属性应该拦截他上面文件夹的这个IRP,或者自己发QUERY去察看。 C: | A / | \ 1.txt 2.txt 3.txt 例如我要处理文件1.txt的文件信息我拦截文件夹A的这个IRP,拿到UserBuffer,遍历该Buffer找到1.txt文件的信息结构,然后察看更改或者消除这个结构体的内容。消除就是隐藏这个文件。当然这些处理都要在完成例程后面。 遍历伪代码大致如下 p=Irp->UserBuffer; while(p) { if(p->FileName=="1.txt")//匹配我的文件 { //处理结构体P } p+=p->nextentryoffset; } 我这么理解,有不正确的地方请指出来。 |
|
|
板凳#
发布于:2008-04-22 12:02
引用第1楼llj2655506于2008-03-19 16:17发表的 : 说的很好 顶! |
|
|