Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2377回复:12

在AddDevice时如何遍历设备,查找是否有重复的设备名?

楼主#
更多 发布于:2001-07-10 10:12
谢谢!
Wing ―――――――――――― 一对正在飞翔的翅膀
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-07-10 14:09
在ADDDEVICE中如果不是多功能卡等等,就没有列举这一说。
在WDM中,PNP MANAGER每找到一个设备,就加载它的DRIVERS,每个DRIVER又调用ADDDEVICE生成一个DEVICE OBJECT 并连接到设备对象栈上。
“萎软”,是Microsoft的小名!
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-07-10 15:17
我使用一个驱动程序在系统中添加同样的设备,通过设备名字加序号加以区别,如先加入的是Device0,则第二个同样的设备安装时将判断是否可以使用Device0,如发现则加1变为Device1,依次类推,我现在想在AddDevice时先判断这个名称是否存在然后再与相应的系统建立连接,按我的方法改如何实现?还有没有更好的方法?
希望高手帮帮我这个菜鸟,谢谢了!
Wing ―――――――――――― 一对正在飞翔的翅膀
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-07-10 17:07
借助于注册表
在2k,看注册表:
    HKLM\CURRENTCONTROLSET\SERVICE\SERVICENAME下有一个主键:
         enum里有一项:NextInstance=n
表示下一个设备的实例号
在98里,系统不会记录这一项,需要自己处理
另外,可以用IoGetDevicePointerObject判断是否有此设备名对应设备对象存在
  真正的产品级驱动一般都推荐用guid


        
[dazzy 编辑于 2001-07-11 08:51]
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-07-11 09:44
[QUOTE]原本由 Wing 发表
[B]我使用一个驱动程序在系统中添加同样的设备,通过设备名字加序号加以区别,如先加入的是Device0,则第二个同样的设备安装时将判断是否可以使用Device0,如发现则加1变为Device1,依次类推,我现在想在AddDevice时先判断这个名称是否存在然后再与相应的系统建立连接,按我的方法改如何实现?还有没有更好的方法?
希望高手帮帮我这个菜鸟,谢谢了!
 [/B][/QUOTE]

我也用过一个,也是在AddDevice里查找,累加的
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-07-11 11:19
我跟踪了注册表,但并没有发现数据有变化呀!
Wing ―――――――――――― 一对正在飞翔的翅膀
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-07-11 13:40

KDriver是对的,设备都是在AddDevice里创建对象,并挂到设备堆栈的。
我在AddDevice里用一个循环递增XXXXX_I
如果命名成功,就退出,否则I+1接着试,如此而已~~:D:D

<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-07-11 14:07

我看了注册表,的确有变化
如果你的设备符号名是变化的,那么设备加载的时候就没有问题
同时在
HKLM\CURRENTCONTROLSET\SERVICE\SERVICENAME\ENUM
Count和NextInstance下计数
SERVICENAME是自己inf里设定的
我用的也是2000,98不清楚
另外,可以用IoGetDevicePointerObject判断是否有此设备名对应设备对象存在,真正的产品级驱动一般都推荐用guid
GUID太麻烦了,没搞过~~:D:D


<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-07-11 16:18
再问个具体问题:我的驱动在AddDevice部分有自己的函数生成设备名,但不知道如何判断生成的设备名称是否已被占用,用什么函数看看生成的设备名是否冲突?我想只要判断出来,后面的UNIT号就可以累加,然后再挂接就可以了吧?
谢谢!
Wing ―――――――――――― 一对正在飞翔的翅膀
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-07-11 17:26
实际上GUID接口的方法一点也不复杂,看看例子就知道了。
“萎软”,是Microsoft的小名!
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-07-11 17:27
我是这样做的
   ntStatus = IoCreateDevice (DriverObject,
                              sizeof (DEVICE_EXTENSION),
                              &deviceNameUnicodeString,
                              FILE_DEVICE_UNKNOWN,
                              0,
                              FALSE,
                              DeviceObject);
如果返回不成功,
则符号名加一,在试,如此而已,

<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-07-11 17:32
  
Wing ―――――――――――― 一对正在飞翔的翅膀
Wing
驱动牛犊
驱动牛犊
  • 注册日期2001-07-09
  • 最后登录2002-03-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-07-17 09:29
我通过对设备数的累加现在可以安装多个(目前测试两个)设备,但
现在只有第一个设备可以正常连接,第二个设备在测试时反映不正常,请问各位:在建立另一个时是否所有参数应该再次初始化?
Wing ―――――――――――― 一对正在飞翔的翅膀
游客

返回顶部