cxun
驱动牛犊
驱动牛犊
  • 注册日期2007-03-21
  • 最后登录2013-09-13
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2162回复:5

为什么ZwCreateFile总返回STATUS_INVALID_PARAMETER?

楼主#
更多 发布于:2008-06-09 12:30
各位大哥,求救…………

文件存在,只是想打开,可是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;
    }
驱网无线,快乐无限
jl2004
驱动小牛
驱动小牛
  • 注册日期2007-04-10
  • 最后登录2011-02-22
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望276点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-16 13:51
Good
向前,向前,向前....
cxun
驱动牛犊
驱动牛犊
  • 注册日期2007-03-21
  • 最后登录2013-09-13
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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了。
驱网无线,快乐无限
spin
驱动小牛
驱动小牛
  • 注册日期2001-04-17
  • 最后登录2015-10-27
  • 粉丝1
  • 关注0
  • 积分46分
  • 威望354点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-06-10 15:24
换一个路径试一下
cxun
驱动牛犊
驱动牛犊
  • 注册日期2007-03-21
  • 最后登录2013-09-13
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-06-10 10:00
引用第1楼microbe于2008-06-10 09:53发表的  :
检查下你的文件名是不是以\??\开头??


pFilePath 的内容是这样的:"\\??\\c:\\windows\\system32\\pro.dat"
驱网无线,快乐无限
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
5楼#
发布于:2008-06-10 09:53
检查下你的文件名是不是以\\??\\开头??
游客

返回顶部