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(status) が TRUE に等しい別の状態値を返す必要があります。 それ以外の場合、この関数は、NT_SUCCESS(status) が FALSE である状態値を返す必要があります。
注釈
バス ドライバーが動的列挙を使用している場合は、WdfFdoInitSetDefaultChildListConfig または WdfChildListCreate を呼び出すことによって、EvtChildListAddressDescriptionDuplicate コールバック関数を登録できます。
フレームワークは、ドライバーが提供するアドレスの説明を複製して、説明の内部コピーを作成できるようにします。
EvtChildListAddressDescriptionDuplicate コールバック関数は、アドレスの説明の複製コピーを作成する必要があります。 ドライバーは、子デバイスでアドレスの説明が必要な場合、およびフレームワークが RtlCopyMemory を呼び出してアドレスの説明を複製できない場合は、このコールバック関数を指定する必要があります。 (説明に追加のメモリへのポインターが含まれている場合、フレームワークは RtlCopyMemory を呼び出すことができません)。
ドライバーがアドレスの説明を提供するが 、EvtChildListAddressDescriptionDuplicate コールバック関数を提供しない場合、フレームワークは RtlCopyMemory を呼び出すことによってアドレスの説明を複製します。
次の手順では、一般的なシナリオについて説明します。
- ドライバーは、子デバイスが存在することを判断します。
- ドライバーは、 WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 構造体を含むドライバー定義の構造体を入力し、場合によってはデバイス固有のサイズのアドレス情報を格納するために追加のメモリを動的に割り当てることによって、アドレスの説明を作成します。
- ドライバーは WdfChildListAddOrUpdateChildDescriptionAsPresent を呼び出して子デバイスを報告し、アドレスの説明へのポインターを指定します。
- フレームワークは 、EvtChildListAddressDescriptionDuplicate コールバック関数 (存在する場合) または RtlCopyMemory を呼び出してアドレスの説明を複製し、説明の内部コピーを作成できるようにします。
- 通常は ExAllocatePool を呼び出して、追加のメモリを割り当てます。
- 割り当てられたメモリのアドレスをドライバー定義のアドレス記述構造体 (つまり、コールバック関数の DestinationAddressDescription 構造体) に格納します。
- コールバック関数の SourceAddressDescription 構造体からコールバック関数の DestinationAddressDescription 構造体に他の構造体メンバーをコピーします。
フレームワークは、 EvtChildListAddressDescriptionDuplicate コールバック関数を呼び出す前に、内部の子リスト オブジェクト ロックを取得します。 コールバック関数は、フレームワーク メモリ オブジェクト メソッドの呼び出しやオブジェクト コンテキスト空間へのアクセスなど、記述された重複操作に関連する操作のみを実行する必要があります。 他のドライバーにアクセスするメソッドを呼び出してはなりません。
ドライバーが EvtChildListAddressDescriptionDuplicate コールバック関数を提供する場合は、 EvtChildListAddressDescriptionCopy と EvtChildListAddressDescriptionCleanup コールバック関数も必要になる場合があります。
動的列挙の詳細については、「バス上のデバイスの列挙」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfchildlist.h (Wdf.h を含む) |
IRQL | <= DISPATCH_LEVEL |
こちらもご覧ください
EvtChildListAddressDescriptionCleanup
WDF_CHILD_ADDRESS_DESCRIPTION_HEADER