hell74111
驱动牛犊
驱动牛犊
  • 注册日期2008-10-22
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望322点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4439回复:3

IRP_MJ_CREATE中判断:是新建文件还是打开文件-----疑问

楼主#
更多 发布于:2009-08-03 17:29
截获到IRP_MJ_CREATE时,做如下判断

          CreateDisposition = (currentIrpStack->Parameters.Create.Options>> 24) & 0x000000ff;
          if(CreateDisposition == FILE_CREATE||
             CreateDisposition==FILE_OVERWRITE_IF||
             CreateDisposition==FILE_OPEN_IF||
             CreateDisposition==FILE_SUPERSEDE)

        {
              DbgPrint(("新建操作\n"));// 这里简单写了下
              ..................
       }
现在的疑问是:
  1.标志为FILE_CREATE时,是新建操作,这个没疑问
  2.标志为FILE_OVERWRITE_IF和FILE_OPEN_IF时:
     如果文件存在,则前者将文件打开且将其清空(相当于新建一个文件替换原来的);后者则简单的打开文件
     如果文件不存在,则两者都会新建一个文件
  3.标志为FILE_SUPERSEDE还没有试过

由上感觉,要判断CREATE是不是新建,就必须去先判断该文件是否已经存在?????????

最新喜欢:

KindOfKindOf
wwg266543
驱动小牛
驱动小牛
  • 注册日期2007-07-03
  • 最后登录2014-08-27
  • 粉丝3
  • 关注1
  • 积分3分
  • 威望882点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分54分
沙发#
发布于:2009-08-04 11:36
判断新建用 if(CreateDisposition==FILE_CREATE||CreateDisposition==FILE_OPEN_IF||CreateDisposition==FILE_OVERWRITE_IF) 条件应该就可以了。
hell74111
驱动牛犊
驱动牛犊
  • 注册日期2008-10-22
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望322点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-08-05 14:02
引用第1楼wwg266543于2009-08-04 11:36发表的 :
判断新建用 if(CreateDisposition==FILE_CREATE||CreateDisposition==FILE_OPEN_IF||CreateDisposition==FILE_OVERWRITE_IF) 条件应该就可以了。


谢谢恢复,这个已经搞定了,对于FILE_OPEN_IF操作,也可能只是一个打开。我现在的处理方式是,用下面的函数去打开文件,查看其返回的状态,判断该文件是否存在
,然后决定本次是新建还是打开。这个方法,在前面的帖子里,有人用到过,我也是借鉴别人滴,测试还没发现问题

ntStatus = IoCreateFileSpecifyDeviceObjectHint(
  &hFile,
  FILE_READ_ATTRIBUTES,
  &FileOA,      
  &IoStatusBlock,            
  NULL,                    
  FILE_ATTRIBUTE_NORMAL,  
  FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,  
  FILE_OPEN,              
  FILE_NON_DIRECTORY_FILE,
  NULL,                    
  0,                      
  CreateFileTypeNone,    
  NULL,                    
  IO_IGNORE_SHARE_ACCESS_CHECK,  
  hookExt->AttachedToDeviceObject  
  );
D-Numen
驱动牛犊
驱动牛犊
  • 注册日期2010-01-25
  • 最后登录2010-08-30
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-05 10:50
引用第2楼hell74111于2009-08-05 14:02发表的  :
 

谢谢恢复,这个已经搞定了,对于FILE_OPEN_IF操作,也可能只是一个打开。我现在的处理方式是,用下面的函数去打开文件,查看其返回的状态,判断该文件是否存在
,然后决定本次是新建还是打开。这个方法,在前面的帖子里,有人用到过,我也是借鉴别人滴,测试还没发现问题

.......

游客

返回顶部