阅读:3322回复:6
请教:ZwCreateFile函数无法创建文件
我在驱动中要创建文件,记录下一些信息,以下是我copy了regmon的代码:
WCHAR logFileNameBuffer[] = L"\\SystemRoot\\ABC.LOG"; UNICODE_STRING logFileUnicodeString; OBJECT_ATTRIBUTES objectAttributes; HANDLE hLogFile; IO_STATUS_BLOCK ioStatus; NTSTATUS ntStatus; RtlInitUnicodeString( &logFileUnicodeString, logFileNameBuffer ); InitializeObjectAttributes( &objectAttributes, &logFileUnicodeString, OBJ_CASE_INSENSITIVE, NULL, NULL ); ntStatus = ZwCreateFile( &hLogFile, FILE_WRITE_DATA|SYNCHRONIZE, &objectAttributes, &ioStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); 但是不知道为什么老是出错: 如果第二个参数是:FILE_WRITE_DATA|SYNCHRONIZE,那就返回STATUS_ACCESS_VIOLATION 如果第二个参数没有了SYNCHRONIZE,那就返回STATUS_INVALID_PARAMETER 在论坛上搜索了一大篇文章,无论怎么改,都是返回以上两种错误。请大家多多指教,谢谢了 |
|
沙发#
发布于:2007-05-14 15:43
不知道系统里有没有这个设备啊,改成L"\\Device\\HarddiskVolume1\\ABC.LOG"就能通过了
|
|
|
板凳#
发布于:2007-05-16 00:14
基本上我都试过了,还是不行,不过现在我改了在Hook函数之前就创建文件,不过写文件还是有问题,我开了另外一贴,详细说明了情况:
http://bbs.driverdevelop.com/htm_data/16/0705/101801.html 谢谢大家的回复 |
|
驱动小牛
|
地板#
发布于:2007-05-18 15:53
ZwCreateFile里面还能支持SystemRoot这种环境变量吗?试一下用L"\\??\\c:\\abc.log"
|
|
地下室#
发布于:2007-05-20 01:52
谢谢你的回复,基本上我都试过了,全部不行。
而如果没有Hook的话,SystemRoot是可以的,regmon就是这样做的 |
|
5楼#
发布于:2007-05-21 09:56
楼上那段代码可以用吧...
我什么也没有hook,只是简单copy测试你的代码... 指定:\\SystemRoot\\ABC.LOG 是在c:\window\ 指定:"\\Device\\HarddiskVolume1\\ABC.LOG 在我的c:\ 指定:L"\\??\\c:\\abc.log" 是c:\下 都成功了,,,, 原来是hook之后出现问题了, 我只是简单看了了... |
|
6楼#
发布于:2007-05-22 00:31
谢谢你的回复,hook了之后你试过吗?
|
|