阅读:947回复:3
测试文件是否存在
各位老大,帮我.我想测试一个文件是否存.请问用什么方法..
我用的这样的.但是重入了.我不知道这样错在那里请高手指点; 在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中。。。请问各位。。有什么办法解决呀。。 请指点。要么解决二次重入。要么,有没有其它办法。来测试文件是否存在。谢谢 |
|
沙发#
发布于:2007-01-05 15:05
顶起来.那位老大,帮我一下吧.
真的不明白呀.谢谢各位了. |
|
板凳#
发布于:2007-01-05 16:56
参考楚狂人的教程.
![]() |
|
|
地板#
发布于:2007-01-08 21:51
老大呀.指点一下嘛..不要这样了.我看了他的教程的.找不到答案呀
|
|