阅读:2582回复:1
在驱动中如何写文件?
我用驱动创建了一个文件, 想在文件中写入数据, 代码如下:
// 写文件函数 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 各位大哥我什么地方写错了? |
|
沙发#
发布于:2010-06-29 13:13
0xC0000008 应该是 INVALID_HANDLE,应该改为:
status=::ZwWriteFile( hFile, ...... |
|