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 (_URB_CONTROL_DESCRIPTOR_REQUESTを参照) を送信します。 クライアント ドライバーが記述子の種類として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 オペレーティング システムを対象としています。 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | usbdlib.h |
ライブラリ | Usbdex.lib |
IRQL | DISPATCH_LEVEL |