阅读:737回复:1
文章标题 驱动新手询问心中疑惑-关于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-10 20:04
你的问题问得很好,但是太多了。我只回答第一个
AddDevice中的deviceObject参数是PnP Manager传来的,因为,这个函数是PnP Manager来调用的嘛。 但PnP Manager又是哪得来的?那是bus driver创建的。你可以看看bus driver的例子,它们在牧举设备时需创建PDO (不过好象也不尽然,在涉及class/mini/port driver之类时,好像这个参数是class driver创建的。此时,这个参数不一定代表PDO的意思,而是FDO。这样的程序我写过,此时,AddDevice根本就不需要createdeviceobject了) 至于最底层的那个bus driver的那个参数又是谁给它的 :(我也不知道了,应该是系统吧。 给分我! :D |
|
|