dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
阅读:5302回复:2

IRP_MJ_DIRECTORY_CONTROL是怎么回事?

楼主#
更多 发布于:2008-03-16 19:48
我在用minifilter做加密驱动时,想隐藏文件头,保证用户查看文件属性时,文件大小不包含文件头长度,于是拦截了IRP_MJ_DIRECTORY_CONTROL请求,但是搞不太清楚系统的工作原理。问题主要有:
1。很多种目录请求都包括NextEntryOffset, FileIndex这两个域,他们是干什么用的;
2。当我查看被加密的文件的属性时,用windbg拦截了所有的IRP_MJ_DIRECTORY_CONTROL请求,但其中的fileobject都不是我正在查看的这个文件,这是为什么?
请大牛们指点,非常感谢
llj2655506
驱动牛犊
驱动牛犊
  • 注册日期2007-03-27
  • 最后登录2009-06-11
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望27点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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;
}

我这么理解,有不正确的地方请指出来。
驱网无线,快乐无限
goodone
驱动牛犊
驱动牛犊
  • 注册日期2007-01-30
  • 最后登录2014-04-30
  • 粉丝3
  • 关注0
  • 积分372分
  • 威望174点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-22 12:02
引用第1楼llj2655506于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,以此类推。
.......



说的很好  
顶!
栀子花驿站 www.zhizihua.com
游客

返回顶部