阅读:1584回复:2
请教: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-13 17:06
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2007-05-13 19:41
谢谢你的回复!现在我已经把ZwCreateFile放到在Hook函数之前执行了,所以可以创建出文件。但是,我也Hook了ZwWriteFile函数,并且每当有调用的时候用真正的ZwWriteFile来记录文件,它却返回STATUS_INVALID_HANDLE的错误。请问也是irp重入的问题吗?那该如何解决呢?需要自己构造irp包?或者有什么简单一点的主意呢?谢谢!
|
|