sherlinlove
驱动牛犊
驱动牛犊
  • 注册日期2010-06-01
  • 最后登录2010-07-02
  • 粉丝0
  • 关注0
  • 积分38分
  • 威望371点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2582回复:1

在驱动中如何写文件?

楼主#
更多 发布于:2010-06-29 10:40
我用驱动创建了一个文件, 想在文件中写入数据, 代码如下:
// 写文件函数
NTSTATUS Writer()
{
    ::DbgPrint("写文件...\n");

    NTSTATUS status=STATUS_SUCCESS;

    // 创建或打开文件
    HANDLE hFile=NULL;
    OBJECT_ATTRIBUTES objAttrib={0};
    IO_STATUS_BLOCK ioStu={0};
    UNICODE_STRING fileName = RTL_CONSTANT_STRING(L"\\??\\C:\\test.txt");
    InitializeObjectAttributes(
        &objAttrib,
        &fileName,
        OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,
        NULL,
        NULL);
    // 打开
    status=::ZwCreateFile(
        &hFile,
        GENERIC_ALL,
        &objAttrib,
        &ioStu,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        0,
        FILE_OPEN_IF,
        FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT,
        NULL,
        0);
    if(!NT_SUCCESS(status))
    {
        // 打开文件失败, 返回错误码
        ::DbgPrint("打开文件失败:x0%x\n", status);
        return status;
    }
    ::DbgPrint("打开成功\n");
    LARGE_INTEGER byteOffset={0};
    //byteOffset.
    // 写文件 内容为文件名
    status=::ZwWriteFile(
        &hFile,
        NULL,
        NULL,
        NULL,
        &ioStu,
        (PVOID)fileName.Buffer,
        50,
        &byteOffset,
        NULL);
    if(NT_SUCCESS(status))
    {
        ::DbgPrint("写入文件成功, 共写入%d字节\n", ioStu.Information);
    }
    else
    {
        ::DbgPrint("写入文件失败:x0%x\n", status);
    }
    // 关闭文件
    ::ZwClose(hFile);
    ::DbgPrint("关闭文件\n");
    // 返回执行状态
    return status;
}
现在文件创建成功, 可是写入时出错 status值为0xc0000008 各位大哥我什么地方写错了?
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2010-06-29 13:13
0xC0000008 应该是 INVALID_HANDLE,应该改为:

 status=::ZwWriteFile( hFile, ......
游客

返回顶部