阅读:1571回复:7
驱动新手询问心中疑惑-关于WDM的分层驱动PhysicalDeviceObject如何找到的疑惑
我在看书的时候,书上关于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里面指定或者修改注册表 谢谢各位高手的指点。 |
|
最新喜欢:![]() |
沙发#
发布于:2003-07-09 21:04
同样困惑,高手帮忙解疑阿!
关注! |
|
板凳#
发布于:2003-07-09 23:22
总线驱动程序创建physical object,
|
|
|
地板#
发布于:2003-07-09 23:23
可是我在我自己写的驱动里面如何确认我是用哪个PDO呢?
|
|
地下室#
发布于:2003-07-10 11:02
你所指的驱动应该是一个filter驱动吧?
它的加载是OS根据注册表里边相应设备的键值信息加载的。 你可以看一看walter oney写的关于filter的部分章节。 没有太大的问题的。 你也可以看看ddk的sample中的toaster的例子。具有代表型。 [编辑 - 7/10/03 by acidfish] |
|
5楼#
发布于:2003-07-10 21:23
对于不能用电子方式申明自己存在的设备,都挂在一个虚拟的总线上,这个总线叫做root总线,所以,你的设备对象(没有硬件对应)是由root总线创建的。你可以在注册表的system,currentcontrol,enum下找到当前的枚举总线,其中包括pci。。。等等实际的总线,也包括root虚拟总线,而你的需设备在root下将有一个对应的建,表示你有root枚举
|
|
|
6楼#
发布于:2008-04-24 14:19
《windows2000 WDM 驱动程序开发》偶也只看懂二成,
还要多看看驱网的例子才行. |
|
7楼#
发布于:2008-04-24 16:46
看stack size
|
|
|