阅读:1065回复:3
NT下开发驱动程序很简单的问题
我发现NT下的驱动程序DriverEntry中都没有给AddDevice函数指针赋值,但我看了一下他的DriverObject结构,发现有这个指针,不知道为什么,请大虾指点。
如果我按照2000中的写法,如下所述,会发生什么情况呢? DriverObject->DriverExtension->AddDevice = AddDevice; |
|
|
沙发#
发布于:2005-03-18 15:13
我发现NT下的驱动程序DriverEntry中都没有给AddDevice函数指针赋值,但我看了一下他的DriverObject结构,发现有这个指针,不知道为什么,请大虾指点。 AddDevice是由PnP管理器来调用的,在NT中,由于没有PnP功能,设备的探测是需要自己实现的,一般在DriverEntry中实现,且得自己调用HAL中的函数保留和申请设备资源,即便设备是PnP的,也得需要自己去探测,然后AddDevice而win2000加入PnP功能,所以PnP会自动分配资源,因此AddDevice被大大简化了,只需要建立FDO,然后把它attach到设备堆栈顶层就可以了。 |
|
|
板凳#
发布于:2005-03-19 09:58
[quote]我发现NT下的驱动程序DriverEntry中都没有给AddDevice函数指针赋值,但我看了一下他的DriverObject结构,发现有这个指针,不知道为什么,请大虾指点。 AddDevice是由PnP管理器来调用的,在NT中,由于没有PnP功能,设备的探测是需要自己实现的,一般在DriverEntry中实现,且得自己调用HAL中的函数保留和申请设备资源,即便设备是PnP的,也得需要自己去探测,然后AddDevice而win2000加入PnP功能,所以PnP会自动分配资源,因此AddDevice被大大简化了,只需要建立FDO,然后把它attach到设备堆栈顶层就可以了。 [/quote] 说的不错,不过你必须把驱动编译为WDM然后以INF的形式安装才能为PNP管理器识别,也就无法随心所欲的加载与卸载了..... |
|
|
地板#
发布于:2005-03-21 09:28
多谢两位大虾!
|
|
|