阅读:1411回复:12
一个关于CreateFile的简单问题
W2K下,如何用CreateFile获得WDM驱动程序的设备句柄?――其中的文件名\"\\\\.\\Name\"――\"Name\"所指为何物?是驱动程序文件名称还是驱动程序名,
如果是编译后得到的驱动程序文件名,那么在下面的函数中的创建的名字是什么意思呢,起什么作用的? RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\"); code = IoCreateSymbolicLink(&linkName, &devName); |
|
最新喜欢:zackar...
|
沙发#
发布于:2003-01-13 23:22
是符号连接名。就是驱动暴露给应用程序的名字。如果驱动程序想准许应用程序接触自己,就可以在驱动程序中使用内河API向外暴露一个,符号连接名。
|
|
板凳#
发布于:2003-01-14 08:56
那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊!
|
|
|
地板#
发布于:2003-01-14 09:37
\\\\.\\Name的Name是符号连接名,一般内核和win32用户态有不同的名字,为了在win32用户态访问驱动程序,你需要提供符号连接RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\");
初始化符号连接字符串 这里符号连接为 \\\\??\\ZSCPCI以L开始是Unicode串 \\\\??\\也可写为\\\\DosDevices code = IoCreateSymbolicLink(&linkName, &devName); 在符号连接和设备名之间建立符号连接, devname是你的内核设备名 |
|
地下室#
发布于:2003-01-14 11:28
-----------------------------------------
那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊! ----------------------------------------- 错了,CreateFile中用的不是文件名。 即使在VXD时代也不是文件名。 |
|
5楼#
发布于:2003-01-14 12:03
tjm
可是我以前写的一个VXD就是打开的驱动程序文件名啊? |
|
|
6楼#
发布于:2003-01-14 12:05
ambercctv
那么CreateFile打开的究竟是哪个名字? |
|
|
7楼#
发布于:2003-01-14 13:55
CreateFile()函数不仅可以打开文件,还可以打开如下类型
1)File 2)Pipe 3)MailSlot 4)com1,HardDisk,FloppyDisk等 例如,可以这样打开串口1: CreateFile(\"\\\\\\\\.\\\\com1\",,,,,); 这里com1就是串口1的符号连接名 |
|
8楼#
发布于:2003-01-14 13:56
给分吧,我都说了这么多了
|
|
9楼#
发布于:2003-01-14 15:51
在VXD中你使用的是DDB中存的设备名,就是在VXD中,用
Declare_virtual_device宏定义的哪个名字(第一个参数),因为你用了和XXX。VXD相同的名字XXX,所以看起来好象是用的文件名。 |
|
10楼#
发布于:2003-01-15 09:09
说了这么多,我都糊涂了,我还是去试试好了。。。。。 :D :D
|
|
|
11楼#
发布于:2003-01-15 11:48
这有什么好弧度的。
CreateFile()可以用来打开多种对象(ambercctv说过了), 驱动也是一种对象, ---------------------- tjm 可是我以前写的一个VXD就是打开的驱动程序文件名啊? ----------------------- 在9X的VXD中驱动对象的名字存在DDB中(在VXD中用Declare_virtual_device宏来实现注册), 因为多数情况下VXD中驱动对象的名字习惯上用驱动文件的名字(没有后缀),所以表观上就使人糊涂。 在NT结构中,驱动对象的名字有两个,一个是内核名,只有内核程序可以使用,一个是符号连接名,供WIN32程序使用,CreateFile()就使用这个符号连接名。 微挣这点分,要吐血了。 |
|
12楼#
发布于:2003-01-15 19:46
tjm,ambercctv谢了,呵呵,我现在就给分,我再多加点分啊
|
|
|