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进行堆栈。