Netguy
驱动牛犊
驱动牛犊
  • 注册日期2001-04-02
  • 最后登录2012-05-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:3046回复:10

ZwOpenFile( )该如何使用?

楼主#
更多 发布于:2002-04-09 22:28
在DriverEntry( )中按照如下的方法使用,总是返回失败。该文件是存在的。

RtlInitUnicodeString(&FileName, L\"\\\\??\\\\c:\\\\program files\\\\readme.txt\");
InitializeObjectAttributes(&ObjAttributes, &FileName, 0, NULL, NULL);
if (NT_SUCCESS(ZwOpenFile(&hFile, GENERIC_READ, &ObjAttributes, &StatusBlock, FILE_SHARE_READ, FILE_NON_DIRECTORY_FILE)))
{
    //do sth
}

[编辑 -  4/9/02 作者: Netguy]

最新喜欢:

flyfoxflyfox IammeIamme
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-09 23:41
这个我就不清楚了,可能那时侯系统还不能认识长文件名吧!(这是我的估计)
当时我试过在系统起来的时候读注册表的当前用户的那棵树的一些变量就读不出来,而在系统起来之后再读就可以读出来!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-09 23:42
这个我就不清楚了,可能那时侯系统还不能认识长文件名吧!(这是我的估计)
当时我试过在系统起来的时候读注册表的当前用户的那棵树的一些变量就读不出来,而在系统起来之后再读就可以读出来!
你先试一下在系统完全起来之后用这部分代码来读,看看能不能读出来吧!如果可以,那么很高兴我的估计就是对的了
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-10 08:31
会不会文件系统驱动还没有启动?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-10 08:34
现在应该用ZwCreateFile,98下应该用\"\\\\DosDevice\\\\c:\\\\program files\\\\readme.txt\",还有只能在PASSIVE_LEVEL调用 。

具体代码如:

NTSTATUS ntStatus;
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING UniFileName;
PCWSTR FileName = L\"\\\\DosDevice\\\\c:\\\\program files\\\\readme.txt\"

RtlInitUnicodeString(&UniFileName , FileName);
InitializeObjectAttributes(&ObjectAttributes,&UniFileName,
OBJ_CASE_INSENSITIVE,NULL,NULL);
ntStatus=ZwCreateFile(FileHandle,
            GENERIC_WRITE|SYNCHRONIZE|GENERIC_READ,
 &ObjectAttributes,
 &IoStatusBlock,
 0,
 FILE_ATTRIBUTE_NORMAL,
 FILE_SHARE_DELETE,
 FILE_OPEN_IF,
 FILE_SYNCHRONOUS_IO_NONALERT,
 NULL,
 0);
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-10 08:36
sorry,少了一个S : \"\\\\DosDevices\\\\c:\\\\program files\\\\readme.txt\"
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
mask2000
驱动牛犊
驱动牛犊
  • 注册日期2002-04-08
  • 最后登录2002-08-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-10 09:33
sorry,少了一个S : \"\\\\DosDevices\\\\c:\\\\program files\\\\readme.txt\"


请教一下,为什么要用\"\\\\DosDevices\\\\\"这个东西,
而且我还看过有什么“\\\\BaseNamedObjects\\\\”的,我
看过很多资料好象也没有介绍这些是干吗的?高手知道
的就说说吧...
不是我不明白,只是这世界变化太快.
Netguy
驱动牛犊
驱动牛犊
  • 注册日期2001-04-02
  • 最后登录2012-05-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-10 10:54
是在登录Win2K之后执行那段代码的,文件系统已经启动了。我再用ZwCreateFile试试。谢谢!
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-10 11:07
会不会是系统优先级的问题? 可能不会,那样的话会蓝屏的.但driverentry的优先级很可能高过passive-level,建议确认一下调用时的优先级,如果高了可以将调用排队处理.
以德服人,以德服人
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-04-10 12:30
[quote]sorry,少了一个S : \"\\\\DosDevices\\\\c:\\\\program files\\\\readme.txt\"


请教一下,为什么要用\"\\\\DosDevices\\\\\"这个东西,
而且我还看过有什么“\\\\BaseNamedObjects\\\\”的,我
看过很多资料好象也没有介绍这些是干吗的?高手知道
的就说说吧... [/quote]

这是ZwCreateFile中的一段:
PUNICODE_STRING ObjectName
  
 Points to a buffered Unicode string naming the file to be created or opened. This value must be a fully qualified file specification or the name of a device object, unless it is the name of a file relative to the directory specified by RootDirectory. For example, \\Device\\Floppy1\\myfile.dat or \\??\\B:\\myfile.dat could be the fully qualified file specification, provided that the floppy driver and overlying file system are already loaded. (Note: \\?? replaces \\DosDevices as the name of the Win32 object namespace. \\DosDevices will still work, but \\?? is translated faster by the object manager.)
 


犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-04-14 17:54
在2K,XP下C:,D:等是有MOUNT MANAGER管理的. 如果VOL MANAGER没有起来, 你就无法访问C:,D:等盘符. 如果你的DRIVER是BOOT DRIVER.那就需要向SOFTICE学习. 人家预先将C:到HADRDISKVOLUMEX的LINK获取. 然后直接用那个HADRDISKVOLUMEX就可.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
游客

返回顶部