WDM驱动调试
+ -

WDM驱动创建FDO函数AddDevice

2022-02-24 126 0

对于即插即用驱动,需要指定其AddDevice函数,用于当系统发现一个新的设备并创建PDO后,使用该回调函数创建其对应的FDO,并进行堆栈关联。

DriverEntry(__in PDRIVER_OBJECT drvobj, __in PUNICODE_STRING RegistryPath)
{
...
    drvobj->DriverExtension->AddDevice = vhci_add_device;
...
}

AddDevcie的函数原型如下:

NTSTATUS AddDevice(__in PDRIVER_OBJECT drvobj, __in PDEVICE_OBJECT pdo);

其中第一个参数为该驱动的结构体指针,第二个参数pdo为该设备的物理设备对象指针pdo.

使用该PDO,可以收集该设备的一些设备属信息,使用函数IoGetDeviceProperty来完成,如设备的硬件ID等。
详见:Windows驱动中获取设备PDO的属性信息

创建FDO一般使用IoCreateDevice,在创建时需指定FDO设备的扩展单元结构体长度,这是该设备私有设备信息。创建完成后需初始化这些私有信息,然后再使用IoAttachDeviceToDeviceStack使该FDO和系统的PDO进行堆栈。

0 篇笔记 写笔记

WDDM KMOD驱动设备的创建与启动
创建设备 DxgkDdiAddDevice/BddDdiAddDeviceWDM驱动的一个核心思想是代码的重用,这样如果是同一型号的显卡芯片,可以使用同一套代码,而对于每一个芯片,只需要保留相关的上下文即可。这里“代码”就是WDM驱动架构中的DRIVER_OBJECT,而每个芯片就叫做DEVICE_......
WDM驱动创建FDO函数AddDevice
对于即插即用驱动,需要指定其AddDevice函数,用于当系统发现一个新的设备并创建PDO后,使用该回调函数创建其对应的FDO,并进行堆栈关联。DriverEntry(__in PDRIVER_OBJECT drvobj, __in PUNICODE_STRING RegistryPath){......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!