jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1978回复:11

如何让一个 Driver 像总线驱动程序那样枚举出一个新设备

楼主#
更多 发布于:2003-06-06 16:51
比如,插入一个USB设备,USB总线会报告发现了一个新设备,USB\\VID_XXXX&PID_XXXX,从而根据这个Hardware ID寻找加载其 Driver。

我的目的是:让这个加载后的 Driver 再报告发现了新设备,比如 MyBus\\MyInst,从而加载另一个 Driver。

总线驱动程序是如何做的?
我不能把现有的 Driver 改成总线驱动,能做到那样吗?

欢迎任何提示,谢谢!
(不知道我有多少分可送 :()
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-09 08:48
与此问题相关联的另一个问题(如果您想了解应用背景的话):

 http://www.driverdevelop.com/forum/html_43374.html?1055118697
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-09 11:57
还没人回答啊 :(
DIY一下先,好象是
IRP_MN_QUERY_DEVICE_RELATIONS
IRP_MN_QUERY_ID

刚才看了一下 Mass Storage 的 Driver,然后就在我的 Mouse Driver 里试了一下,发现可以收到这个请求:

0x18: IRP_MN_QUERY_LEGACY_BUS_INFORMATION
0x0B: IRP_MN_QUERY_RESOURCE_REQUIREMENTS
0x0D: IRP_MN_FILTER_RESOURCE_REQUIREMENTS
0x00: IRP_MN_START_DEVICE
0x09: IRP_MN_QUERY_CAPABILITIES
0x14: IRP_MN_QUERY_PNP_DEVICE_STATE
0x07: IRP_MN_QUERY_DEVICE_RELATIONS
0x13: IRP_MN_QUERY_ID

给关心这个问题的人看看,也欢迎有经验的人指教。我只有继续踹了,呵呵
我打字很快。
volvoo
驱动牛犊
驱动牛犊
  • 注册日期2003-06-12
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-18 15:37
做一个过滤启动程序就可以吧?
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-19 09:06
可以在任意的支持PNP IRP的驱动中增加类似于ENUMERATE CHILD DEVICE的功能.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-19 12:09
理论上,我也认为是这样(即使我的是filter driver),但实际上,我没有成功 :(

 http://www.driverdevelop.com/forum/viewthread.php?tid=43886

(简单地说,没有收到后续的请求,如query_device_id...)
我打字很快。
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-19 23:18
那是你没有正确地遵循BUS的所有IRP规则. 例如IoInvalidBusRelations等调用. 和正确处理各种IRP_MJ_PNP的IRP.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
CathySun
驱动牛犊
驱动牛犊
  • 注册日期2003-06-10
  • 最后登录2003-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-20 11:22
I think if the device driver is *.sys (written by WDM) that will be ok. But if it is vxd driver,how can a WDM bus driver load vxd driver (on win98)? Thanks.
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-22 03:36
CathySun:
我的是WDM,2K。

lu0老大:
我的确没调过IoInvalidBusRelations,但
我以为调用IoInvalidBusRelations无非是产生 IRP_MN_QUERY_DEVICE_RELATIONS 请求,但现在我已经收到IRP_MN_QUERY_DEVICE_RELATIONS了(初始化时 PNP mgr 就会发送一次),问题是响应这个请求(产生PDO后),收不到后续的

它们俩发送的这个请求有区别吗?――我觉得没有(好比装载bus driver时总线上已经有设备了,而不是后来插上去的)

至于其它的PnP请求,就很难说了,在这之前收到的请求是很有限的,我认为只有IRP_MN_QUERY_DEVICE_RELATIONS是有关的
 :(
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-22 03:39
反正,我现在已经做得差不多了。没用bus driver,可以work,就是没有用了bus driver来得自然。

如果以后谁写这方面的,欢迎交流 :)
我打字很快。
YiMin.Yang
驱动牛犊
驱动牛犊
  • 注册日期2002-12-12
  • 最后登录2012-10-19
  • 粉丝0
  • 关注0
  • 积分179分
  • 威望151点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-05 21:10
要用BUS DRIVER达到枚举一个设备并不难,在2K的DDK下有有一个BUS
DRIVER的例子ntddk\\src\\generic\\toaster,win98下有enum的例子,win98\\src\\plugplay\\examenum,但win98的例子不够完整.
Dragon
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-06 22:25
谢谢YiMin.Yang
toaster 我看过的,还看过serenum,umss,都差不多。:)
我怀疑是class driver做了什么处理,我这两个都是port/mini driver,都试过了,不行 :(
我打字很快。
游客

返回顶部