我打不开文件!!

DDKProgrammer 2000-08-21 09:40:00
下面的一个函数是打开一个名为 IRPLOG 的文件,将整个IRP写入并关闭,使用DDK中的WDM。
运行过程中发现无法打开文件,无论该文件已经建立或者没有建立。

void WriteIrp(PIRP irp)
{
ULONG Length;
IO_STATUS_BLOCK IoStatus;
OBJECT_ATTRIBUTES objectAttributes;
NTSTATUS status;
HANDLE FileHandle;
UNICODE_STRING fileName;

RtlInitUnicodeString(&fileName, L"IRPLOG");

InitializeObjectAttributes (&objectAttributes,
(PUNICODE_STRING)&fileName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL );

status = ZwCreateFile(&FileHandle,
FILE_APPEND_DATA,
&objectAttributes,
&IoStatus,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE,
FILE_OPEN_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0 );
//------>此处 FileHandle 返回无效的句柄!
if(NT_SUCCESS(status))
{
ZwWriteFile(FileHandle,
NULL,
NULL,
NULL,
&IoStatus,
(PUCHAR)irp, sizeof(IRP),
NULL,
NULL );

ZwClose(FileHandle);
}
if (fileName.Buffer)
ExFreePool (fileName.Buffer);

}

有没有高手帮我看看打开文件以前还有什么遗漏的步骤,该函数可以直接编译,只需
#include <wdm.h>

...全文
118 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DDKProgrammer 2000-10-20
  • 打赏
  • 举报
回复
说的多轻巧!错在哪?
CoolHg 2000-10-20
  • 打赏
  • 举报
回复
对了,如果你的错不是这里或者你试了不用先打开目录的话请通知我
谢谢了先
CoolHg 2000-10-20
  • 打赏
  • 举报
回复
你打开的是内核文件还是Win32文件,前者我不太清楚,好象是直接用文件名就行了,后者的话你得加下Win32的命名空间(当然不是这么叫的了,一时忘了就这么将就一下吧),比如你要打开C:\YpurFile.dat ,在程序中应该是这样写\??\C:\YpurFile.dat 或者 \DosDevices\C:\YpurFile.dat , 好象有一点你还得先行打开目录,ZwCreateFile里有这么一个输入参数,不知道要不要,反正我是这么做了
想起来了,打开内核文件时前面应该用\Device
fxyyh 2000-08-29
  • 打赏
  • 举报
回复
zwCreateFile用法有错!好好读以下手册!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧