sc_wolf
驱动小牛
驱动小牛
  • 注册日期2006-09-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分35分
  • 威望278点
  • 贡献值1点
  • 好评度150点
  • 原创分0分
  • 专家分0分
阅读:948回复:3

测试文件是否存在

楼主#
更多 发布于:2006-12-31 18:10
各位老大,帮我.我想测试一个文件是否存.请问用什么方法..
我用的这样的.但是重入了.我不知道这样错在那里请高手指点;
在IRP_CREATE中防重入
////防止重入///匹配整个字符串
          m_length=FileObject->FileName.Length/2;m_n=0;
          ///如下||AAAA|
          DbgPrint("访问文件: %ws\r\n",FileObject->FileName.Buffer);
            if(m_length>8)
          {
              
              
               for(m_n=0;m_n<m_length-6;m_n=m_n+1)
              {
                  if(FileObject->FileName.Buffer[m_n]=='|')
                  {
                //      DbgPrint("访问文件2: %ws当前字节数:%d\r\n",FileObject->FileName.Buffer,m_n);
                      if(FileObject->FileName.Buffer[m_n+1]=='|'&&FileObject->FileName.Buffer[m_n+2]=='A'&&
                          FileObject->FileName.Buffer[m_n+3]=='A'&&FileObject->FileName.Buffer[m_n+4]=='A'&&
                          FileObject->FileName.Buffer[m_n+5]=='A'&&FileObject->FileName.Buffer[m_n+6]=='|')
                      {
                          ///找到了
                          for(;m_n<m_length-6;m_n=m_n+1)
                          {
                              FileObject->FileName.Buffer[m_n]=FileObject->FileName.Buffer[m_n+7];
                          }
                    //      DbgPrint("访问文件3: %ws\r\n",FileObject->FileName.Buffer);
                        //////  return IRPPassThru(DeviceObject,Irp);
                          IoSkipCurrentIrpStackLocation(Irp);
                          return IoCallDriver(DevExt->AttachedToDeviceObject, Irp);
                      }
                  }
               }
               DbgPrint("再次访问文件: %ws\r\n",FileObject->FileName.Buffer);
            
            }
///这里面,是正常运行了。而且也把标志去掉了。但是。。最后还再次打开了。并且没有标志。。所以重入了。
///下面是测试文件存在不的函数
BOOLEAN
sFTestFile(UNICODE_STRING File_Name)
{
    ///
    HANDLE FileHandle;
    OBJECT_ATTRIBUTES ObjectAttributes;
    IO_STATUS_BLOCK IoStatus;
    NTSTATUS Status;
    UNICODE_STRING m_filename;
    WCHAR m_buf[512];
    UNICODE_STRING m_xx;
    /////////////加上防重入
    ///如下||AAAA|
 //    return FALSE;
    DbgPrint("测试文件2");
    RtlInitEmptyUnicodeString(&m_filename,m_buf,512);
    RtlInitUnicodeString(&m_xx,L"||AAAA|");
    RtlCopyUnicodeString(&m_filename,&File_Name);
    RtlAppendUnicodeStringToString(&m_filename,&m_xx);
    //////////////////////////////
    InitializeObjectAttributes(&ObjectAttributes,
        &m_filename,
        OBJ_KERNEL_HANDLE,
        NULL,
        NULL
        );
    Status = ZwCreateFile(&FileHandle,
        GENERIC_READ,    
        &ObjectAttributes,
        &IoStatus,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        0,
        FILE_OPEN,
        FILE_SYNCHRONOUS_IO_NONALERT,
        NULL,
        0
        );
      DbgPrint("测试文件: %ws,长度:%d,状态:%d\r\n",m_filename.Buffer,m_filename.Length,Status);
    if (!NT_SUCCESS(Status))
    {
        return FALSE;
    }
    ZwClose(FileHandle);
    return TRUE;
}
/////调用这个函数也是在IRP_CRETAE中。。。请问各位。。有什么办法解决呀。。
请指点。要么解决二次重入。要么,有没有其它办法。来测试文件是否存在。谢谢
sc_wolf
驱动小牛
驱动小牛
  • 注册日期2006-09-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分35分
  • 威望278点
  • 贡献值1点
  • 好评度150点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-08 21:51
老大呀.指点一下嘛..不要这样了.我看了他的教程的.找不到答案呀
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-01-05 16:56
参考楚狂人的教程.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
sc_wolf
驱动小牛
驱动小牛
  • 注册日期2006-09-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分35分
  • 威望278点
  • 贡献值1点
  • 好评度150点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-05 15:05
顶起来.那位老大,帮我一下吧.
真的不明白呀.谢谢各位了.
游客

返回顶部