WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES関数 (wdfusb.h)

[KMDF と UMDF に適用]

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES関数は、ドライバーが複数のインターフェイスを使用するようにデバイスを構成できるように、WDF_USB_DEVICE_SELECT_CONFIG_PARAMS構造体を初期化します。

構文

void WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
  [in, out]      PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params,
  [in, optional] UCHAR                                NumberInterfaces,
  [in, optional] PWDF_USB_INTERFACE_SETTING_PAIR      SettingPairs
);

パラメーター

[in, out] Params

ドライバーによって割り当てられた WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 構造体へのポインター。

[in, optional] NumberInterfaces

SettingPairs 配列内の要素の数。 SettingPairsNULL でない場合、このパラメーターは 0 より大きい値である必要があります。

[in, optional] SettingPairs

WDF_USB_INTERFACE_SETTING_PAIR構造体の配列。 このパラメーターは省略可能であり、 NULL にすることができます

戻り値

なし

解説

デバイス インターフェイスが USB インターフェイス オブジェクトへのハンドルによって指定されている場合、ドライバーは WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES 関数を使用して構成を選択できます。

ドライバーは、デバイスに 1 つ以上の USB インターフェイスがある場合に、この関数を使用できます。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES関数は、WDF_USB_DEVICE_SELECT_CONFIG_PARAMS構造体をゼロにし、Size メンバーを構造体のサイズに設定します。

numInterfaces または SettingPairsNULL の場合、WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACESType メンバーを WdfUsbTargetDeviceSelectConfigTypeMultiInterface に設定します。 この場合、フレームワークは持っているインターフェイスの数を決定し、それぞれで代替設定ゼロを有効にします。 すべてのインターフェイスで既定で代替設定 0 を設定する場合は、この設定を使用します。

numInterfaces パラメーターと SettingPairs パラメーターの両方が NULL でない場合、この関数は、WDF_USB_DEVICE_SELECT_CONFIG_PARAMS構造体の Type メンバーを WdfUsbTargetDeviceSelectConfigTypeInterfacesPairs に設定します。 この場合は、任意のインターフェイスで代替設定を指定できます。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS構造体を初期化するには、ドライバーは次のいずれかの関数を呼び出す必要があります。

次のコード例では、デバイス構成 サポートされているインターフェイスの数に基づいて、 WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACEまたはWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACESを呼び出します。 次に、この例では WdfUsbTargetDeviceSelectConfig を呼び出して構成を選択します。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS params;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;

numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);

if (numInterfaces == 1){
    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&params);
}
else {
    settingPairs = ExAllocatePoolWithTag(
                        PagedPool,
                        sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
                        MEM_TAG
                        );
    if (settingPairs == NULL){
        return STATUS_INSUFFICIENT_RESOURCES;
    }

 //
 // Call driver-defined routine to populate the
    // WDF_USB_INTERFACE_SETTING_PAIR structures 
 // that ExAllocatePoolWithTag allocated.
 //
    InitSettingPairs(
                     UsbDevice,
                     settingPairs,
                     numInterfaces
                     );

    WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
                    &params,
                    numInterfaces,
                    settingPairs
                    );
}
status = WdfUsbTargetDeviceSelectConfig(
                                        UsbDevice,
                                        NULL,
                                        &params
                                        );
if (!NT_SUCCESS(status)) {
    return status;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfusb.h (Wdfusb.h を含む)

こちらもご覧ください

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_DECONFIG

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_INTERFACES_DESCRIPTORS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_URB

WDF_USB_INTERFACE_SETTING_PAIR