popeyelin
驱动牛犊
驱动牛犊
  • 注册日期2003-06-28
  • 最后登录2003-07-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1572回复:7

驱动新手询问心中疑惑-关于WDM的分层驱动PhysicalDeviceObject如何找到的疑惑

楼主#
更多 发布于:2003-07-09 19:44
我在看书的时候,书上关于WDM层次结构的介绍是这样说的,
对于PNP设备,每一层驱动都要有一个addDevice routine
这个函数指针指向的函数负责该层驱动的一些初使化工作
有两个参数,一个参数是
IN PDRIVER_OBJECT  DriverObject,
IN PDEVICE_OBJECT  PhysicalDeviceObject
我一直不明白PhysicalDeviceObject这个参数是如何pass进来的。
在例子里面,都说明这个是pass from PNP manager
然后我又看了一些实际驱动的DriverEntry routine
发现好像在这里面有些线索。可是实在是一头雾水。
书《windows2000 WDM 驱动程序开发》的例子,也就是一个HIDRIVER和一个LODRIVER,我一直没有在例子里面找到HIDRIVER如何加在LODRIVER上面的线索。当一个PNP请求发出的时候,PNP Manager如何把这个请求发给合适的驱动程序堆栈呢?(关于堆栈如何建立,如何枚举我都知道)
在驱动程序安装的时候inf文件指定么?
不知道高手是否看懂了我的描述?
那我举个具体的例子吧。我要在键盘驱动程序上面再加一层驱动,用来忽略某些键盘请求。
我在DriverEntry里面要怎么做,才能把自己注册这个驱动加载到现有的键盘驱动上面呢?
同样的道理,还有网络驱动程序,我如何才能把自己的驱动加载或者作为过滤器加载到现有的驱动程序堆栈顶部呢?
是不是每种特定设备都有特定的做法呢?
还是只需要在inf里面指定或者修改注册表
谢谢各位高手的指点。
    

最新喜欢:

txqxctxqxc
melodylux
驱动牛犊
驱动牛犊
  • 注册日期2003-07-09
  • 最后登录2010-07-19
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-09 21:04
同样困惑,高手帮忙解疑阿!
关注!
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-09 23:22
总线驱动程序创建physical object,
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
popeyelin
驱动牛犊
驱动牛犊
  • 注册日期2003-06-28
  • 最后登录2003-07-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-09 23:23
可是我在我自己写的驱动里面如何确认我是用哪个PDO呢?
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-10 11:02
你所指的驱动应该是一个filter驱动吧?
它的加载是OS根据注册表里边相应设备的键值信息加载的。
你可以看一看walter oney写的关于filter的部分章节。
没有太大的问题的。
你也可以看看ddk的sample中的toaster的例子。具有代表型。

[编辑 -  7/10/03 by  acidfish]
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-10 21:23
对于不能用电子方式申明自己存在的设备,都挂在一个虚拟的总线上,这个总线叫做root总线,所以,你的设备对象(没有硬件对应)是由root总线创建的。你可以在注册表的system,currentcontrol,enum下找到当前的枚举总线,其中包括pci。。。等等实际的总线,也包括root虚拟总线,而你的需设备在root下将有一个对应的建,表示你有root枚举
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
wanted999
驱动牛犊
驱动牛犊
  • 注册日期2006-03-28
  • 最后登录2012-08-13
  • 粉丝0
  • 关注0
  • 积分519分
  • 威望429点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-04-24 14:19
《windows2000 WDM 驱动程序开发》偶也只看懂二成,
还要多看看驱网的例子才行.
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2008-04-24 16:46
看stack size
驱动开发者 呵呵
游客

返回顶部