阅读:2160回复:5
为什么ZwCreateFile总返回STATUS_INVALID_PARAMETER?
各位大哥,求救…………
文件存在,只是想打开,可是ZwCreateFile总返回的是0xC000000D,即STATUS_INVALID_PARAMETER。请问是什么问题? 谢谢!! 源代码如下: HANDLE hFileHandle; NTSTATUS ntStatus; UNICODE_STRING uszFileName; OBJECT_ATTRIBUTES objAttributes; IO_STATUS_BLOCK isbCreateReadStatus; FILE_STANDARD_INFORMATION StandardFileInfo; ULONG ulFileLen; PVOID pFileImage; if(KeGetCurrentIrql() >= DISPATCH_LEVEL) return STATUS_UNSUCCESSFUL; RtlInitUnicodeString(&uszFileName, pFilePath); InitializeObjectAttributes(&objAttributes, &uszFileName, OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE, NULL, NULL); ntStatus = ZwCreateFile(&hFileHandle, SYNCHRONIZE|FILE_READ_DATA, &objAttributes, &isbCreateReadStatus, NULL, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE, NULL, 0); // 总返回 STATUS_INVALID_PARAMETER if(!NT_SUCCESS(ntStatus)) { KdPrint(("KmdReadWholeFile: Failed to open %ws. Error Code: 0x%xL\n", pFilePath, ntStatus)); return ntStatus; } |
|
|
沙发#
发布于:2008-06-10 09:53
检查下你的文件名是不是以\\??\\开头??
|
|
板凳#
发布于:2008-06-10 10:00
引用第1楼microbe于2008-06-10 09:53发表的 : pFilePath 的内容是这样的:"\\??\\c:\\windows\\system32\\pro.dat" |
|
|
地板#
发布于:2008-06-10 15:24
换一个路径试一下
|
|
地下室#
发布于:2008-06-11 22:16
知道原因了,sfilter 例子的安装文件sfilter.inf里设置的 start type 是1,即SERVICE_BOOT_START,DriverEntry()未运行完成前 IO MANAGER 不会工作,当DriverEntry()运行完后 IO MANAGER 才开始执行。所以解决办法就是在DriverEntry()中创建一个线程来执行ZwCreateFile(),线程被创建后,当DriverEntry()执行完,线程才开始执行,这时ZwCreateFile()才正常执行,返回STATUS_SUCCESS了。
|
|
|
5楼#
发布于:2008-06-16 13:51
Good
|
|
|