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

请教: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
在论坛上搜索了一大篇文章,无论怎么改,都是返回以上两种错误。请大家多多指教,谢谢了
fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-14 15:43
不知道系统里有没有这个设备啊,改成L"\\Device\\HarddiskVolume1\\ABC.LOG"就能通过了
张帆的内核学习论坛 http://bbs.kerneldev.com
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-16 00:14
基本上我都试过了,还是不行,不过现在我改了在Hook函数之前就创建文件,不过写文件还是有问题,我开了另外一贴,详细说明了情况:
http://bbs.driverdevelop.com/htm_data/16/0705/101801.html
谢谢大家的回复
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
地板#
发布于:2007-05-18 15:53
ZwCreateFile里面还能支持SystemRoot这种环境变量吗?试一下用L"\\??\\c:\\abc.log"
商务MSN:YanDong_8212@163.com
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-20 01:52
谢谢你的回复,基本上我都试过了,全部不行。
而如果没有Hook的话,SystemRoot是可以的,regmon就是这样做的
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-05-21 09:56
楼上那段代码可以用吧...
我什么也没有hook,只是简单copy测试你的代码...

指定:\\SystemRoot\\ABC.LOG 是在c:\window\
指定:"\\Device\\HarddiskVolume1\\ABC.LOG 在我的c:\
指定:L"\\??\\c:\\abc.log" 是c:\下
都成功了,,,,

原来是hook之后出现问题了,
我只是简单看了了...
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-05-22 00:31
谢谢你的回复,hook了之后你试过吗?
游客

返回顶部