USBD_SelectConfigUrbAllocateAndBuild関数 (usbdlib.h)
USBD_SelectConfigUrbAllocateAndBuild ルーチンは、USB デバイスの構成を選択するために必要な URB 構造体を割り当てて書式設定します。
構文
NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
[in] USBD_HANDLE USBDHandle,
[in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
[in] PUSBD_INTERFACE_LIST_ENTRY InterfaceList,
[out] PURB *Urb
);
パラメーター
[in] USBDHandle
USBD_CreateHandle ルーチンの以前の呼び出しでクライアント ドライバーによって取得される USBD ハンドル。
[in] ConfigurationDescriptor
選択する構成の構成記述子を含む呼び出し元によって割り当てられた USB_CONFIGURATION_DESCRIPTOR 構造体へのポインター。 通常、クライアント ドライバーは、USB デバイスから構成、インターフェイス、エンドポイント、ベンダー、およびクラス固有の記述子に関する情報を取得するために、URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE型 ( _URB_CONTROL_DESCRIPTOR_REQUESTを参照) の URB を送信します。 クライアント ドライバーが記述子の種類としてUSB_CONFIGURATION_DESCRIPTOR_TYPEを指定すると、要求は USB_CONFIGURATION_DESCRIPTOR 構造体内のすべてのデバイス情報を取得します。 その後、ドライバーは、受信したポインターを ConfigurationDescriptor パラメーターのUSB_CONFIGURATION_DESCRIPTOR構造体に渡します。
[in] InterfaceList
USBD_INTERFACE_LIST_ENTRY構造体の呼び出し元によって割り当てられた配列の最初の要素へのポインター。 配列の長さは、構成記述子内のインターフェイスの数によって異なります。 詳細については、「解説」を参照してください。
[out] Urb
USBD_SelectConfigUrbAllocateAndBuildによって割り当てられた URB を受け取る URB 構造体へのポインター。 クライアント ドライバーは、ドライバーが USBD_UrbFree を呼び出して URB の使用を完了したら、URB を解放する必要があります。
戻り値
USBD_SelectConfigUrbAllocateAndBuild ルーチンは NT 状態コードを返します。
使用可能な値には、次の表に示す状態コードが含まれますが、これらに限定されません。
リターン コード | 説明 |
---|---|
|
要求は成功しました。 |
|
呼び出し元が無効なパラメーター値を渡しました。 USBDHandle または Urb が NULL です。 |
|
要求を完了するために使用できるメモリが不足しています。 |
注釈
USBD_SelectConfigUrbAllocateAndBuildを呼び出す前に、クライアント ドライバーは次のタスクを実行する必要があります。
- 構成内のインターフェイスの数を取得します。 この情報は、ConfigurationDescriptor が指すUSB_CONFIGURATION_DESCRIPTOR構造体の bNumInterfaces メンバーに含まれています。
- USBD_INTERFACE_LIST_ENTRY構造体の配列を作成します。 配列内の要素の数は、インターフェイスの数よりも 1 つ多くする必要があります。 RtlZeroMemory を呼び出して配列を初期化します。
- 構成内の各インターフェイス (またはその代替設定) のインターフェイス記述子を取得します。 これらのインターフェイス記述子を取得するには、 USBD_ParseConfigurationDescriptorExを呼び出します。
- 配列内の要素 (最後の要素を除く) ごとに、 InterfaceDescriptor メンバーをインターフェイス記述子のアドレスに設定します。 配列内の最初の要素に対して、 InterfaceDescriptor メンバーを、構成の最初のインターフェイスを表すインターフェイス記述子のアドレスに設定します。 配列内の n番目の要素の場合と同様に、 InterfaceDescriptor メンバーを、構成の n番目のインターフェイスを表すインターフェイス記述子のアドレスに設定します。
- 最後の要素の InterfaceDescriptor メンバーを NULL に設定する必要があります。
- URB を作成し、指定した構成、そのインターフェイス、エンドポイントに関する情報を入力し、要求の種類を URB_FUNCTION_SELECT_CONFIGURATION に設定します。
- 各インターフェイスの URB の USBD_INTERFACE_INFORMATION 構造体を塗りつぶします。
- 呼び出し元が指定したUSBD_INTERFACE_LIST_ENTRY配列の n番目の要素の Interface メンバーを、URB 内の対応するUSBD_INTERFACE_INFORMATION構造体のアドレスに設定します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8には WDK が必要です。 Windows Vista 以降のバージョンの Windows オペレーティング システムを対象としています。 |
対象プラットフォーム | デスクトップ |
Header | usbdlib.h |
Library | Usbdex.lib |
IRQL | DISPATCH_LEVEL |