elysium
驱动牛犊
驱动牛犊
  • 注册日期2011-03-31
  • 最后登录2011-06-04
  • 粉丝0
  • 关注0
  • 积分-114分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1500回复:1

ZwCreateFile的返回值

楼主#
更多 发布于:2011-05-08 16:33
我在测试《寒江独钓》中的DP例子的时候,总是报错error create temp file!

对这个例子做了一点小改动:
1.tempfile的路径该在C盘下。
2.目标盘改为R盘。

使用windbg调试,发现DPReinitializationRoutine函数中,使用ZwCreateFile创建文件时,返回值是0x-1073741819。但是不知道这代表什么意思。

本人才疏学浅,实在没办法找到解释,求高人指点。

VOID
DPReinitializationRoutine(
    IN    PDRIVER_OBJECT    DriverObject,
    IN    PVOID            Context,
    IN    ULONG            Count
    )
{
    //返回值
    NTSTATUS ntStatus;
    //D盘的缓冲文件名
    WCHAR                SparseFilename[] = L"\\??\\C:\\temp.dat";
    UNICODE_STRING        SparseFilenameUni;
    //建立文件时的io操作状态值
    IO_STATUS_BLOCK                    ios = { 0 };
    //建立文件时的对象属性变量
    OBJECT_ATTRIBUTES                ObjAttr = { 0 };
    //设置文件大小的时候使用的文件结尾描述符
    FILE_END_OF_FILE_INFORMATION    FileEndInfo = { 0 };

    //打开我们将要用来做转储的文件
    //初始化要打开的文件名
    RtlInitUnicodeString(&SparseFilenameUni,SparseFilename);
    //初始化文件名对应的对象名,这里需要将其初始化为内核对象,并且大小写不敏感
    InitializeObjectAttributes(
        &ObjAttr,
        &SparseFilenameUni,
        OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,
        NULL,
        NULL);
    //建立文件,这里需要注意的是,要加入FILE_NO_INTERMEDIATE_BUFFERING选项,避免文件系统再缓存这个文件
    ntStatus = ZwCreateFile(
        &gProtectDevExt->TempFile,
        GENERIC_READ | GENERIC_WRITE,
        &ObjAttr,
        &ios,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        0,
        FILE_OVERWRITE_IF,
        FILE_NON_DIRECTORY_FILE |
        FILE_RANDOM_ACCESS |
        FILE_SYNCHRONOUS_IO_NONALERT |
        FILE_NO_INTERMEDIATE_BUFFERING,
        NULL,
        0);
              //这里观察返回值是0x-1073741819
    if(!NT_SUCCESS(ntStatus))
                {
                }
catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2011-05-08 22:31
你这样发帖  实在是。。。
游客

返回顶部