阅读:2377回复:12
在AddDevice时如何遍历设备,查找是否有重复的设备名?
谢谢!
|
|
|
沙发#
发布于:2001-07-10 14:09
在ADDDEVICE中如果不是多功能卡等等,就没有列举这一说。
在WDM中,PNP MANAGER每找到一个设备,就加载它的DRIVERS,每个DRIVER又调用ADDDEVICE生成一个DEVICE OBJECT 并连接到设备对象栈上。 |
|
|
板凳#
发布于:2001-07-10 15:17
我使用一个驱动程序在系统中添加同样的设备,通过设备名字加序号加以区别,如先加入的是Device0,则第二个同样的设备安装时将判断是否可以使用Device0,如发现则加1变为Device1,依次类推,我现在想在AddDevice时先判断这个名称是否存在然后再与相应的系统建立连接,按我的方法改如何实现?还有没有更好的方法?
希望高手帮帮我这个菜鸟,谢谢了! |
|
|
地板#
发布于:2001-07-10 17:07
借助于注册表
在2k,看注册表: HKLM\CURRENTCONTROLSET\SERVICE\SERVICENAME下有一个主键: enum里有一项:NextInstance=n 表示下一个设备的实例号 在98里,系统不会记录这一项,需要自己处理 另外,可以用IoGetDevicePointerObject判断是否有此设备名对应设备对象存在 真正的产品级驱动一般都推荐用guid [dazzy 编辑于 2001-07-11 08:51] |
|
地下室#
发布于:2001-07-11 09:44
[QUOTE]原本由 Wing 发表
[B]我使用一个驱动程序在系统中添加同样的设备,通过设备名字加序号加以区别,如先加入的是Device0,则第二个同样的设备安装时将判断是否可以使用Device0,如发现则加1变为Device1,依次类推,我现在想在AddDevice时先判断这个名称是否存在然后再与相应的系统建立连接,按我的方法改如何实现?还有没有更好的方法? 希望高手帮帮我这个菜鸟,谢谢了! [/B][/QUOTE] 我也用过一个,也是在AddDevice里查找,累加的 |
|
|
5楼#
发布于:2001-07-11 11:19
我跟踪了注册表,但并没有发现数据有变化呀!
|
|
|
6楼#
发布于:2001-07-11 13:40
KDriver是对的,设备都是在AddDevice里创建对象,并挂到设备堆栈的。 我在AddDevice里用一个循环递增XXXXX_I 如果命名成功,就退出,否则I+1接着试,如此而已~~:D:D |
|
|
7楼#
发布于:2001-07-11 14:07
我看了注册表,的确有变化 如果你的设备符号名是变化的,那么设备加载的时候就没有问题 同时在 HKLM\CURRENTCONTROLSET\SERVICE\SERVICENAME\ENUM Count和NextInstance下计数 SERVICENAME是自己inf里设定的 我用的也是2000,98不清楚 另外,可以用IoGetDevicePointerObject判断是否有此设备名对应设备对象存在,真正的产品级驱动一般都推荐用guid GUID太麻烦了,没搞过~~:D:D |
|
|
8楼#
发布于:2001-07-11 16:18
再问个具体问题:我的驱动在AddDevice部分有自己的函数生成设备名,但不知道如何判断生成的设备名称是否已被占用,用什么函数看看生成的设备名是否冲突?我想只要判断出来,后面的UNIT号就可以累加,然后再挂接就可以了吧?
谢谢! |
|
|
9楼#
发布于:2001-07-11 17:26
实际上GUID接口的方法一点也不复杂,看看例子就知道了。
|
|
|
10楼#
发布于:2001-07-11 17:27
我是这样做的
ntStatus = IoCreateDevice (DriverObject, sizeof (DEVICE_EXTENSION), &deviceNameUnicodeString, FILE_DEVICE_UNKNOWN, 0, FALSE, DeviceObject); 如果返回不成功, 则符号名加一,在试,如此而已, |
|
|
11楼#
发布于:2001-07-11 17:32
|
|
|
12楼#
发布于:2001-07-17 09:29
我通过对设备数的累加现在可以安装多个(目前测试两个)设备,但
现在只有第一个设备可以正常连接,第二个设备在测试时反映不正常,请问各位:在建立另一个时是否所有参数应该再次初始化? |
|
|