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 ターゲットの完了状態値を返します。 それ以外の場合、このメソッドは次のいずれかの値を返すことができます。
リターン コード | 形容 |
---|---|
|
無効なパラメーターが検出されました。 |
|
params が指WDF_USB_DEVICE_SELECT_CONFIG_PARAMS 構造体の Size メンバーが正しくありません。 |
|
メモリ バッファーを割り当てませんでした。 |
|
フレームワークは、UMDF ドライバーが WdfUsbTargetDeviceSelectConfig を呼び出し、Params->Type 次のいずれかに設定されている場合に、この値を返します。
|
このメソッドは、他の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_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 の