次の方法で共有


WdfChildListRetrieveNextDevice 関数 (wdfchildlist.h)

[KMDF にのみ適用]

WdfChildListRetrieveNextDevice メソッドは、指定した子リストを走査し、指定した条件に一致する次の子デバイスを取得します。

構文

NTSTATUS WdfChildListRetrieveNextDevice(
  [in]      WDFCHILDLIST             ChildList,
  [in]      PWDF_CHILD_LIST_ITERATOR Iterator,
  [out]     WDFDEVICE                *Device,
  [in, out] PWDF_CHILD_RETRIEVE_INFO Info
);

パラメーター

[in] ChildList

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

[in] Iterator

ドライバーが以前に WdfChildListBeginIteration に指定したのと同じ呼び出し元割り当て WDF_CHILD_LIST_ITERATOR 構造体ポインター。

[out] Device

フレームワーク デバイス オブジェクトへのハンドルを受け取る場所へのポインター。 Iterator パラメーターで WdfRetrievePendingChildren フラグが指定されている場合、受信した値は NULL

[in, out] Info

呼び出し元によって割り当てられた WDF_CHILD_RETRIEVE_INFO 構造体へのポインター。 このポインターは省略可能であり、NULL できます。

戻り値

WdfChildListRetrieveNextDevice は、操作が成功した場合に、STATUS_SUCCESSまたは NT_SUCCESS(status) が TRUE 等しい別の状態値を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 形容
STATUS_INVALID_PARAMETER
入力パラメーターが無効です。
STATUS_INFO_LENGTH_MISMATCH
指定された反復子 WDF_CHILD_LIST_ITERATOR 構造体のサイズが正しくありません
STATUS_INVALID_DEVICE_REQUEST
アドレスの説明が指定されましたが、子リストにアドレスの説明が含まれていませんでした。
STATUS_NO_MORE_ENTRIES
フレームワークが子リストの末尾に達しました。
STATUS_INVALID_DEVICE_STATE
ドライバーが WdfChildListBeginIteration 呼び出していません。
 

このメソッドは、他の NTSTATUS 値返す場合もあります。

ドライバーが無効なオブジェクト ハンドルを提供すると、システム バグ チェックが発生します。

備考

WdfChildListRetrieveNextDevice 呼び出す前に、ドライバーは WdfChildListBeginIteration 呼び出す必要があります。 ドライバーは、子リストの走査が完了したら、WdfChildListEndIterationを呼び出す必要があります。 その後、フレームワークは、子リストに加えられた変更をプラグ アンド プレイ (PnP) マネージャーに通知します。

ドライバーが WdfChildListRetrieveNextDevice 呼び出すたびに、メソッドは次の検索条件に一致する次の子を取得します。

ドライバーが EvtChildListIdentificationDescriptionCompare コールバック関数を提供する場合は、WDF_CHILD_RETRIEVE_INFO構造体に 識別の説明も提供する必要があります。 フレームワークは、コールバック関数を使用して、渡された識別記述子を子リスト内の子の説明と比較します(WDF_RETRIEVE_CHILD_FLAGS型指定されたフラグが子が一致候補であることを示している場合)。 コールバック関数が TRUE 返した場合、一致は成功します。 コールバック関数から FALSE 返された場合、フレームワークは別の候補を探します。

WdfChildListRetrieveNextDevice が一致を検出すると、Info パラメーターが指定するポインターが NULL されていない場合、子の識別の説明とアドレスの説明がドライバーの WDF_CHILD_RETRIEVE_INFO 構造体にコピーされます。 (この操作により、ドライバーの入力 ID の説明が上書きされることに注意してください)。また、このメソッドは、Device パラメーターが識別する場所に、子のデバイス オブジェクトへのハンドルを配置します。

子リストの詳細については、「動的列挙 を参照してください。

次のコード例は、親デバイスのすべての子が取り出されていることをフレームワークに通知します。 この例では、デバイスの既定の子リストを取得し、一覧を確認します。 各子の識別記述子を取得し、各識別記述子を WdfChildListRequestChildEject 渡します。

WDF_CHILD_LIST_ITERATOR  iterator;
WDFDEVICE  hChild;
NTSTATUS  status = STATUS_INVALID_PARAMETER;
WDFCHILDLIST  list;
WDF_CHILD_RETRIEVE_INFO  childInfo;
PDO_IDENTIFICATION_DESCRIPTION  description;
BOOLEAN  ret;

list = WdfFdoGetDefaultChildList(Device);

WDF_CHILD_LIST_ITERATOR_INIT(
                             &iterator,
                             WdfRetrievePresentChildren
                             );
WdfChildListBeginIteration(
                           list,
                           &iterator
                           );
for (;;) {
    WDF_CHILD_RETRIEVE_INFO_INIT(
                                 &childInfo,
                                 &description.Header
                                 );
    WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT(
                                                     &description.Header,
                                                     sizeof(description)
                                                     );
    status = WdfChildListRetrieveNextDevice(
                                            list, 
                                            &iterator, 
                                            &hChild, 
                                            &childInfo
                                            );
    if (!NT_SUCCESS(status) || status == STATUS_NO_MORE_ENTRIES) {
       break;
    }
    ASSERT(childInfo.Status == WdfChildListRetrieveDeviceSuccess);

    ret = WdfChildListRequestChildEject(
                                        list,
                                        &description.Header
                                        );
    if(!ret) {
       WDFVERIFY(ret);
    }
}
WdfChildListEndIteration(
                         list,
                         &iterator
                         );
if (status == STATUS_NO_MORE_ENTRIES) {
   status = STATUS_SUCCESS;
}
return status;

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
ヘッダー wdfchildlist.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

関連項目

EvtChildListIdentificationDescriptionCompare

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT

WDF_CHILD_LIST_ITERATOR

WDF_CHILD_LIST_ITERATOR_INIT

WDF_CHILD_RETRIEVE_INFO

WDF_RETRIEVE_CHILD_FLAGS

WdfChildListBeginIteration

WdfChildListBeginScan

WdfChildListEndIteration

WdfChildListRequestChildEject

WdfChildListRetrieveNextDevice