EVT_WDF_DEVICE_RELATIONS_QUERY回调函数 (wdfdevice.h)
[仅适用于 KMDF]
驱动程序的 EvtDeviceRelationsQuery 事件回调报告驱动程序支持的设备之间的关系更改。
语法
EVT_WDF_DEVICE_RELATIONS_QUERY EvtWdfDeviceRelationsQuery;
void EvtWdfDeviceRelationsQuery(
[in] WDFDEVICE Device,
[in] DEVICE_RELATION_TYPE RelationType
)
{...}
参数
[in] Device
框架设备对象的句柄。
[in] RelationType
DEVICE_RELATION_TYPE类型的枚举器值。 DEVICE_RELATION_TYPE枚举在 wdm.h 中定义。
返回值
无
备注
若要注册 EvtDeviceRelationsQuery 回调函数,驱动程序必须调用 WdfDeviceInitSetPnpPowerEventCallbacks。
大多数基于框架的驱动程序不需要提供此回调函数。
在系统初始化期间,即插即用管理器通过向驱动程序堆栈发送IRP_MN_QUERY_DEVICE_RELATIONS请求来枚举系统上的所有设备。 如果基于框架的驱动程序已注册 EvtDeviceRelationsQuery 回调函数,框架将调用它。 总线的函数驱动程序必须报告附加到总线的所有子设备。
此外,在框架调用 IoInvalidateDeviceRelations 例程来报告驱动程序总线上的设备之间的关系更改后,即插即用管理器向驱动程序堆栈发送另一个IRP_MN_QUERY_DEVICE_RELATIONS请求。 然后,框架调用驱动程序的 EvtDeviceRelationsQuery 回调函数,以便驱动程序可以提供有关更改的详细信息。
驱动程序必须执行的工作类型取决于为 RelationType 参数接收的值。 值可以是下列任一值:
BusRelations
-
大多数基于框架的驱动程序不会在 EvtDeviceRelationsQuery 回调函数中报告总线关系。 相反,驱动程序遵循枚举总线上的设备中所述的准则。
弹出关系
-
大多数基于框架的驱动程序不会在 EvtDeviceRelationsQuery 回调函数中报告弹出关系。 相反,设备总线的驱动程序调用 WdfPdoAddEjectionRelationsPhysicalDevice 和 WdfPdoRemoveEjectionRelationsPhysicalDevice。
RemovalRelations
-
大多数基于框架的驱动程序不会在 EvtDeviceRelationsQuery 回调函数中报告删除关系。 相反,驱动程序调用 WdfDeviceAddRemovalRelationsPhysicalDevice 和 WdfDeviceRemoveRemovalRelationsPhysicalDevice。
TargetDeviceRelation
-
基于框架的驱动程序不必报告设备的目标关系。 相反,框架会处理此请求。
框架可以调用 EvtDeviceRelationsQuery 回调函数,其 RelationType 值为 EjectionRelations 或 RemovedRelations, 即使删除设备也是如此。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
标头 | wdfdevice.h (包括 Wdf.h) |
IRQL | PASSIVE_LEVEL |