troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
阅读:1584回复:2

请教:ZwCreateFile函数无法创建文件

楼主#
更多 发布于:2007-05-11 20:09
  我在驱动中要创建文件,记录下一些信息,以下是我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
在论坛上搜索了一大篇文章,无论怎么改,都是返回以上两种错误。请大家多多指教,谢谢了
tracera
禁止发言
禁止发言
  • 注册日期2006-01-09
  • 最后登录2018-09-25
  • 粉丝8
  • 关注0
  • 积分-5788分
  • 威望135321点
  • 贡献值0点
  • 好评度625点
  • 原创分1分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-05-13 17:06
用户被禁言,该主题自动屏蔽!
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-13 19:41
谢谢你的回复!现在我已经把ZwCreateFile放到在Hook函数之前执行了,所以可以创建出文件。但是,我也Hook了ZwWriteFile函数,并且每当有调用的时候用真正的ZwWriteFile来记录文件,它却返回STATUS_INVALID_HANDLE的错误。请问也是irp重入的问题吗?那该如何解决呢?需要自己构造irp包?或者有什么简单一点的主意呢?谢谢!
游客

返回顶部