阅读:1557回复:6
我想在驱动中使用zwcreatefile创建文件,一直不成功
#define DEFAULT_LOG_FILE_NAME L\"\\\\??\\\\C:\\\\tmp\\\\parallel.log\"
为什么前面有2个\\??\\ |
|
最新喜欢:threeb... |
沙发#
发布于:2005-06-07 20:33
你在ring3调用CreateFile,CreateFile会在前面加上\\??\\.调用NtCreateFile,所以如果你在ring0调用ZwCreateFile,就需要你自己加上\\??\\。
|
|
板凳#
发布于:2005-06-07 21:55
是这样的
|
|
地板#
发布于:2005-06-08 09:25
??其实代表GLOBAL即全局名称空间,因为文件系统的各种卷对象都在Windows的统一命名空间规划的
|
|
|
地下室#
发布于:2005-06-08 10:03
??其实代表GLOBAL即全局名称空间,因为文件系统的各种卷对象都在Windows的统一命名空间规划的 不太准确,建议看看Inside windows 2000或者第四版,有详细的说明。举个例子,用winobj看一下,\\??\\c:是一个符号连接,指向\\Device\\HarddiskVolumn1,文件系统的Device Object mount在\\Device\\HardDiskVolumn1,所以io manager会构造irp,IoCallDriver 文件系统的驱动,当然如果有filesystem filter,会先到filter. ??实际是object directory的一个目录 |
|
5楼#
发布于:2005-06-08 11:35
内核中\\??\\是\\Device\\目录的符号连接,驱动创建的设备如果想对Win32子系统可见的话都需要在\\??\\目录下,而文件显然是对Win32子系统可见的。因此其也在\\??\\该目录下,在内核打开文件时就要增加\\??\\。
|
|
6楼#
发布于:2005-06-08 14:53
Length=wcslen(full);
status =ZwWriteFile(FileHandle, NULL, NULL, NULL, &IoStatus, full, Length, NULL, NULL ); DbgPrint(\"status:%x\",status); 之后的status也是正确的,但是文件的大小显示257。可是里面什么也看不见。 我full的类型的wchar [] |
|