次の方法で共有


EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY コールバック関数 (wdfchildlist.h)

[KMDF にのみ適用]

ドライバーの EvtChildListIdentificationDescriptionCopy イベント コールバック関数は、指定した場所から別の場所に子 ID の説明をコピーします。

構文

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY EvtWdfChildListIdentificationDescriptionCopy;

void EvtWdfChildListIdentificationDescriptionCopy(
  [in]  WDFCHILDLIST ChildList,
  [in]  PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription,
  [out] PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
)
{...}

パラメーター

[in] ChildList

フレームワークの子リスト オブジェクトへのハンドル。

[in] SourceIdentificationDescription

子識別の 説明のソース の場所を識別するWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER構造体へのポインター。

[out] DestinationIdentificationDescription

子識別記述の宛先の場所を識別する WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER 構造体へのポインター。

戻り値

なし

解説

バス ドライバーが動的列挙を使用している場合は、WdfFdoInitSetDefaultChildListConfig または WdfChildListCreate を呼び出すことによって、EvtChildListIdentificationDescriptionCopy コールバック関数を登録できます。

フレームワークは、既存の説明を新しい情報で更新する必要がある場合、または識別説明の内容をドライバーに渡す必要がある場合に、ドライバーが指定した識別の説明から別の識別説明に情報をコピーします。

EvtChildListIdentificationDescriptionCopy コールバック関数は、ソースの説明の内容をコピー先の説明にコピーする必要があります。 フレームワークが RtlCopyMemory を呼び出して識別の説明をコピーできない場合、ドライバーはこのコールバック関数を指定する必要があります。 (説明に追加のメモリへのポインターが含まれている場合、フレームワークは RtlCopyMemory を呼び出すことができません)。

ドライバーが EvtChildListIdentificationDescriptionCopy コールバック関数を提供しない場合、フレームワークは RtlCopyMemory を呼び出して識別の説明をコピーします。

次の手順では、考えられるシナリオについて説明します。

  1. 子リストを走査しているドライバーは 、WdfChildListRetrieveNextDevice を呼び出します。 ドライバーは、子デバイスの識別の説明を受け取ることができるように、 WDF_CHILD_RETRIEVE_INFO 構造体を提供します。
  2. フレームワークは 、EvtChildListIdentificationDescriptionCopy コールバック関数 (存在する場合) または RtlCopyMemory を呼び出して、デバイスの識別の説明をコピーします。 コピー操作のソースは、フレームワークの説明の内部コピーです。 宛先は、ドライバーが割り当て、そのWDF_CHILD_RETRIEVE_INFO構造体で識別したメモリです。
説明が、WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER構造体の IdentificationDescriptionSize メンバーによって指定された事前に定義されたサイズの 1 つの構造体で構成されている場合、フレームワークは RtlCopyMemory を使用して識別の説明をコピーできます。 ただし、場合によっては、説明に、動的に割り当てられたメモリに格納される追加情報も含まれている必要があります。 この場合、メンバーが動的に割り当てられたメモリを指すように、通常は説明構造を定義します。ドライバーは EvtChildListIdentificationDescriptionCopy コールバック関数を提供する必要があります。 コールバック関数では、次の操作を行う必要があります。
  1. コールバック関数の SourceIdentificationDescription 構造体と DestinationIdentificationDescription 構造体で、動的に割り当てられたメモリへのポインターを見つけます。
  2. ポインターを使用して、動的に割り当てられたメモリをソースから宛先にコピーします。
  3. コールバック関数の SourceIdentificationDescription 構造体からコールバック関数の DestinationIdentificationDescription 構造体に他の構造体メンバーをコピーします。
ドライバーの EvtChildListIdentificationDescriptionCopy コールバック関数が呼び出すことができるフレームワークの子リスト オブジェクト メソッド、WdfChildListGetDevice だけです。

フレームワークは、 EvtChildListIdentificationDescriptionCopy コールバック関数を呼び出す前に、内部の子リスト オブジェクト ロックを取得します。 コールバック関数は、フレームワーク メモリ オブジェクト メソッドの呼び出しやオブジェクト コンテキスト空間へのアクセスなど、コピー操作に関連する操作のみを実行する必要があります。 他のドライバーにアクセスするメソッドを呼び出してはなりません。

ドライバーが EvtChildListIdentificationDescriptionCopy コールバック関数を提供している場合は、 EvtChildListIdentificationDescriptionDuplicateEvtChildListIdentificationDescriptionCompareEvtChildListIdentificationDescriptionCleanup コールバック関数も必要になる場合があります。

動的列挙の詳細については、「 バス上のデバイスの列挙」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
Header wdfchildlist.h (Wdf.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

EvtChildListIdentificationDescriptionCleanup

EvtChildListIdentificationDescriptionCompare

EvtChildListIdentificationDescriptionDuplicate

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER

WdfChildListCreate

WdfChildListGetDevice

WdfFdoInitSetDefaultChildListConfig