次の方法で共有


WdfUsbTargetDeviceSelectConfig 関数 (wdfusb.h)

[KMDF と UMDF に適用]

WdfUsbTargetDeviceSelectConfig メソッドは、デバイスの USB 構成を選択するか、デバイスを構成解除します。

構文

NTSTATUS WdfUsbTargetDeviceSelectConfig(
  [in]           WDFUSBDEVICE                         UsbDevice,
  [in, optional] PWDF_OBJECT_ATTRIBUTES               PipeAttributes,
  [in, out]      PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
);

パラメーター

[in] UsbDevice

WdfUsbTargetDeviceCreateWithParametersへの以前の呼び出しから取得された USB デバイス オブジェクトへのハンドル。

[in, optional] PipeAttributes

デバイスのインターフェイス用にフレームワークによって作成される新しいフレームワーク USB パイプ オブジェクトの属性を含む呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 KMDF ドライバーの場合、このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。 UMDF ドライバーでは、このパラメーターを NULL に設定する必要があります。

[in, out] Params

呼び出し元とフレームワークが構成パラメーターの指定に使用する呼び出し元によって割り当てられた WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 構造体へのポインター。

戻り値

WdfUsbTargetDeviceSelectConfig は、操作が成功した場合に I/O ターゲットの完了状態値を返します。 それ以外の場合、このメソッドは次のいずれかの値を返すことができます。

リターン コード 形容
STATUS_INVALID_PARAMETER
無効なパラメーターが検出されました。
STATUS_INFO_LENGTH_MISMATCH
params が指WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 構造体の Size メンバーが正しくありません。
STATUS_INSUFFICIENT_RESOURCES
メモリ バッファーを割り当てませんでした。
STATUS_NOT_SUPPORTED
フレームワークは、UMDF ドライバーが WdfUsbTargetDeviceSelectConfig を呼び出し、Params->Type 次のいずれかに設定されている場合に、この値を返します。
  • WdfUsbTargetDeviceSelectConfigTypeDeconfig
  • WdfUsbTargetDeviceSelectConfigTypeInterfacesDescriptor
  • WdfUsbTargetDeviceSelectConfigTypeUrb
詳細については、「WdfUsbTargetDeviceSelectConfigType」を参照してください。
 

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

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

備考

ドライバーは、USB 記述子、URB、またはフレームワーク USB インターフェイス オブジェクトへのハンドルを指定する WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 構造体を使用して、デバイス構成を選択できます。

フレームワークは、構成用にフレームワークが以前に作成したパイプ オブジェクトを削除した後、構成内の各インターフェイスに関連付けられている各パイプのフレームワーク USB パイプ オブジェクトを作成します。 ドライバーが別の代替設定を指定しない限り、フレームワークは、各インターフェイスに代替設定 0 を使用します。

インターフェイスのパイプ オブジェクトに関する情報を取得するために、ドライバーは WdfUsbInterfaceGetNumConfiguredPipes 呼び出し、WdfUsbInterfaceGetConfiguredPipe できます。

WdfUsbTargetDeviceSelectConfig メソッドと USB I/O ターゲットの詳細については、「USB I/O ターゲットの」を参照してください。

注意  

WdfUsbTargetDeviceSelectConfig を使用して、記述子リストにリストされている最初の USB 構成のみを選択できますが、この 1 つの構成内で複数のインターフェイスを選択できます。

 

次のコード例では、1 つの指定されたインターフェイスを持つ構成を選択します。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS  configParams;
NTSTATUS  status;

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE(&configParams);

status = WdfUsbTargetDeviceSelectConfig(
                                        UsbDevice,
                                        WDF_NO_OBJECT_ATTRIBUTES,
                                        &configParams
                                        );

次のコード例では、すべてのインターフェイスで代替設定 0 を使用して、複数のインターフェイスを持つ構成を選択します。 この例は、KMDF ドライバーにのみ適用されます。

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS  configParams;
PWDF_USB_INTERFACE_SETTING_PAIR settingPairs;
UCHAR numInterfaces;
NTSTATUS  status;

numInterfaces = WdfUsbTargetDeviceGetNumInterfaces(UsbDevice);

settingPairs = ExAllocatePoolWithTag(
    PagedPool,
    sizeof(WDF_USB_INTERFACE_SETTING_PAIR) * numInterfaces,
    MY_DRIVER_TAG
);

if (settingPairs == NULL){
    return STATUS_INSUFFICIENT_RESOURCES;
}

for (interfaceIndex = 0; interfaceIndex < numInterfaces; interfaceIndex++) {
        
    settingPairs[interfaceIndex].UsbInterface = 
                                    WdfUsbTargetDeviceGetInterface(
                                        UsbDevice,
                                        interfaceIndex);

    // Select alternate setting zero on all interfaces.
       
    settingPairs[interfaceIndex].SettingIndex = 0;
}

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES(
    &configParams,
    numInterfaces,
    settingPairs
);

status = WdfUsbTargetDeviceSelectConfig(
    UsbDevice,
    NULL,
    &configParams
);

if (!NT_SUCCESS(status)) {
    ExFreePoolWithTag(
        settingPairs,
        MY_DRIVER_TAG
    );
    return status;
}

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
UMDF の最小バージョン する 2.0
ヘッダー wdfusb.h (Wdfusb.h を含む)
ライブラリ Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExp usbKmdfIrql(kmdf) , usbKmdfIrql2(kmdf) , UsbKmdfIrqlExplicit(kmdf)

関連項目

WDF_OBJECT_ATTRIBUTES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_SINGLE_INTERFACE

WdfUsbInterfaceGetConfiguredPipe

WdfUsbInterfaceGetNumConfiguredPipes

WdfUsbTargetDeviceCreateWithParameters