EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE回调函数 (wdfchildlist.h)
[仅适用于 KMDF]
驱动程序的 EvtChildListAddressDescriptionDuplicate 事件回调函数复制子地址说明。
语法
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE EvtWdfChildListAddressDescriptionDuplicate;
NTSTATUS EvtWdfChildListAddressDescriptionDuplicate(
[in] WDFCHILDLIST ChildList,
[in] PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
[out] PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
)
{...}
参数
[in] ChildList
框架子列表对象的句柄。
[in] SourceAddressDescription
指向 WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 结构的指针,该结构标识子地址说明的源位置。
[out] DestinationAddressDescription
指向WDF_CHILD_ADDRESS_DESCRIPTION_HEADER结构的指针,该结构标识子地址说明的目标位置。
返回值
如果操作成功,EvtChildListAddressDescriptionDuplicate 回调函数必须返回STATUS_SUCCESS或NT_SUCCESS ( 状态) 等于 TRUE 的另一个状态值。 否则,此函数必须返回状态值,NT_SUCCESS (状态) 等于 FALSE。
注解
如果总线驱动程序使用动态枚举,则可以通过调用 WdfFdoInitSetDefaultChildListConfig 或 WdfChildListCreate 来注册 EvtChildListAddressDescriptionDuplicate 回调函数。
框架复制驱动程序提供的地址说明,以便它可以具有说明的内部副本。
EvtChildListAddressDescriptionDuplicate 回调函数必须创建地址说明的重复副本。 如果驱动程序的子设备需要地址说明,并且框架无法调用 RtlCopyMemory 来复制地址说明,则驱动程序必须提供此回调函数。 (如果说明包含指向其他 memory 的指针,则框架无法调用 RtlCopyMemory 。)
如果驱动程序提供地址说明,但未提供 EvtChildListAddressDescriptionDuplicate 回调函数,框架将通过调用 RtlCopyMemory 来复制地址说明。
以下步骤描述了一个典型方案:
- 驱动程序确定存在子设备。
- 驱动程序通过填充包含 WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 结构的驱动程序定义的结构,并可能通过动态分配附加内存来存储具有特定于设备的大小的地址信息来创建地址说明。
- 驱动程序调用 WdfChildListAddOrUpdateChildDescriptionAsPresent 来报告子设备,并提供指向地址说明的指针。
- 框架调用 EvtChildListAddressDescriptionDuplicate 回调函数 (如果存在) 或 RtlCopyMemory 来复制地址说明,以便它可以具有说明的内部副本。
- 分配额外的内存,通常通过调用 ExAllocatePool。
- 将分配的内存地址存储在驱动程序定义的地址说明结构 (即回调函数的 DestinationAddressDescription 结构) 。
- 将回调函数的 SourceAddressDescription 结构中的其他结构成员复制到回调函数的 DestinationAddressDescription 结构。
框架在调用 EvtChildListAddressDescriptionDuplicate 回调函数之前获取内部子列表对象锁。 回调函数必须仅执行与所述重复操作相关的操作,例如调用框架内存对象方法和访问对象上下文空间。 它不得调用访问其他驱动程序的方法。
如果驱动程序提供 EvtChildListAddressDescriptionDuplicate 回调函数,则它可能还需要 EvtChildListAddressDescriptionCopy 和 EvtChildListAddressDescriptionCleanup 回调函数。
有关动态枚举的详细信息,请参阅 枚举总线上的设备。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
标头 | wdfchildlist.h (包括 Wdf.h) |
IRQL | <= DISPATCH_LEVEL |
另请参阅
EvtChildListAddressDescriptionCleanup
WDF_CHILD_ADDRESS_DESCRIPTION_HEADER