次の方法で共有


WdfChildListAddOrUpdateChildDescriptionAsPresent 関数 (wdfchildlist.h)

[KMDF にのみ適用]

WdfChildListAddOrUpdateChildDescriptionAsPresent メソッドは、子の一覧に新しい子の説明を追加するか、既存の子の説明を更新します。

構文

NTSTATUS WdfChildListAddOrUpdateChildDescriptionAsPresent(
  [in]           WDFCHILDLIST                                 ChildList,
  [in]           PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
  [in, optional] PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER        AddressDescription
);

パラメーター

[in] ChildList

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

[in] IdentificationDescription

識別記述を識別する WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER 構造体へのポインター。

[in, optional] AddressDescription

アドレス記述を識別する WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 構造体へのポインター。 アドレス記述が不要な場合は、このパラメーターを NULL できます。

戻り値

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

リターン コード 形容
STATUS_INVALID_PARAMETER
入力パラメーターが無効です。
STATUS_INVALID_DEVICE_REQUEST
識別の説明またはアドレスの説明のサイズが正しくありません。
STATUS_OBJECT_NAME_EXISTS
指定された ID の説明を持つ子が既に存在します。 この場合、フレームワークは、指定されたアドレスの説明を既存の子にコピーします。
STATUS_INSUFFICIENT_RESOURCES
子の説明を割り当てることができる。
 

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

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

備考

WdfChildListAddOrUpdateChildDescriptionAsPresent メソッドは、指定された ID の説明に一致する子を指定した子リストを検索します。 一致するものが見つかった場合、フレームワークは子のアドレスの説明 (指定されている場合) を更新し、STATUS_OBJECT_NAME_EXISTSを返します。 一致するものが見つからない場合、フレームワークは指定された ID とアドレスの説明を使用して新しい子を作成します。

ドライバーは、WdfChildListAddOrUpdateChildDescriptionAsPresent を呼び出して、単一の子の説明を追加または更新できます。 フレームワークは、子リストを直ちに更新し、変更が行われていることをプラグ アンド プレイ (PnP) マネージャーに通知します。

または、ドライバーは次の操作を行うことができます。

  1. WdfChildListBeginScan を呼び出して、更新用の子リストを準備します。
  2. WdfChildListAddOrUpdateChildDescriptionAsPresent 複数回呼び出して、親デバイスのすべての子の子の説明を追加または更新します。
  3. WdfChildListEndScan 呼び出して、子リストへの変更を処理します。
ドライバーがこの代替プロシージャを使用する場合、フレームワークは、ドライバーが WdfChildListEndScan 呼び出すまで待機してから、子リストを更新し、変更が行われていることを PnP マネージャーに通知します。 ドライバーが WdfChildListBeginScan 呼び出すと、フレームワークは、以前に報告されたすべてのデバイスが存在しなくなったとマークします。 そのため、ドライバーは、新しく検出された子だけでなく、すべての子 WdfChildListAddOrUpdateChildDescriptionAsPresent を呼び出す必要があります。

ドライバーが WdfChildListAddOrUpdateChildDescriptionAsPresent 呼び出した後、フレームワークはドライバーの EvtChildListCreateDevice コールバック関数を呼び出して、ドライバーが WdfDeviceCreate 呼び出すことによってデバイス オブジェクトを作成できるようにします。

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

次のコード例は、kmdf_fx2 サンプルに含まれるコードに基づいています。 この例では、デバイスの既定の子リストに子の説明を追加します。 ドライバーが以前にデバイス オブジェクトのコンテキスト空間に格納したスイッチ設定を取得し、設定されている各スイッチ WdfChildListAddOrUpdateChildDescriptionAsPresent を呼び出します。

PDEVICE_CONTEXT  pDeviceContext;
WDFCHILDLIST  list;
UCHAR  i;
NTSTATUS  status;

pDeviceContext = GetDeviceContext(Device);
list = WdfFdoGetDefaultChildList(Device);

WdfChildListBeginScan(list);
 
for (i = 0; i < RTL_BITS_OF(UCHAR); i++) {
    if (pDeviceContext->CurrentSwitchState & (1<<i)) {
        PDO_IDENTIFICATION_DESCRIPTION description;
        WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT(
                                                 &description.Header,
                                                 sizeof(description)
                                                 );
        description.SwitchNumber = i; 
 
        status = WdfChildListAddOrUpdateChildDescriptionAsPresent(
                                                 list, 
                                                 &description.Header, 
                                                 NULL
                                                 );
        if (!NT_SUCCESS(status) && (status != STATUS_OBJECT_NAME_EXISTS)) {
            break;
        }
    }
}
WdfChildListEndScan(list);

必要条件

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

関連項目

EvtChildListCreateDevice

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT

WdfChildListBeginScan

WdfChildListEndScan

WdfDeviceCreate

WdfFdoGetDefaultChildList