WDM 驱动开发相关疑惑

我有个问题,比如我有两个USB 设备(A和B),他们都是使用相同 WDM 驱动程序,那么它们在加载驱动的时候都会分别调用同样的 adDevice() 函数,
我想在 adDevice 函数中区分是A和B设备的调用,然后在创建相应的A_FDO, B_FDO,那么我如何区分是A设备调用的adDevice ,还是B设备调用的adDevice 中呢?是通过 传入的PDO 里面的一些数据段来区分吗? NTSTATUS AdDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)

你设置的AD DEVICE难道没有写设备描述符吗?你可以利用设备属性和标识符来区分A或B,IoGetDeviceProperty可以从你的代码种获取设备描述符来进行相应的判断

参考GPT回答:

  1. 在adDevice函数中调用IoGetDeviceProperty函数,传入第二个参数为DevicePropertyDeviceDescription或DevicePropertyHardwareID等来获取相应的设备属性。
  2. 将返回的设备属性与预先定义好的A设备和B设备的属性进行比较,以确定是哪个设备调用了adDevice函数。
  3. 根据区分结果创建相应的A_FDO或B_FDO。

你可以这样区分一下
可以检查 PDO 设备对象的堆栈大小(StackSize)字段的值,在创建设备对象时会设置成不同的值,以用于区分不同的设备。