USBD_SelectConfigUrbAllocateAndBuild関数 (usbdlib.h)

USBD_SelectConfigUrbAllocateAndBuild ルーチンは、USB デバイスの構成を選択するために必要な URB 構造体を割り当てて書式設定します。

メモWindows 8では、USBD_SelectConfigUrbAllocateAndBuildUSBD_CreateConfigurationRequestExUSBD_CreateConfigurationRequestを置き換えます。
 

構文

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 状態コードを返します。

使用可能な値には、次の表に示す状態コードが含まれますが、これらに限定されません。

リターン コード 説明
STATUS_SUCCESS
要求は成功しました。
STATUS_INVALID_PARAMETER
呼び出し元が無効なパラメーター値を渡しました。 USBDHandle または Urb が NULL です。
STATUS_INSUFFICIENT_RESOURCES
要求を完了するために使用できるメモリが不足しています。

注釈

USBD_SelectConfigUrbAllocateAndBuildを呼び出す前に、クライアント ドライバーは次のタスクを実行する必要があります。

  1. 構成内のインターフェイスの数を取得します。 この情報は、ConfigurationDescriptor が指すUSB_CONFIGURATION_DESCRIPTOR構造体の bNumInterfaces メンバーに含まれています。
  2. USBD_INTERFACE_LIST_ENTRY構造体の配列を作成します。 配列内の要素の数は、インターフェイスの数よりも 1 つ多くする必要があります。 RtlZeroMemory を呼び出して配列を初期化します。
  3. 構成内の各インターフェイス (またはその代替設定) のインターフェイス記述子を取得します。 これらのインターフェイス記述子を取得するには、 USBD_ParseConfigurationDescriptorExを呼び出します。
  4. 配列内の要素 (最後の要素を除く) ごとに、 InterfaceDescriptor メンバーをインターフェイス記述子のアドレスに設定します。 配列内の最初の要素に対して、 InterfaceDescriptor メンバーを、構成の最初のインターフェイスを表すインターフェイス記述子のアドレスに設定します。 配列内の n番目の要素の場合と同様に、 InterfaceDescriptor メンバーを、構成の n番目のインターフェイスを表すインターフェイス記述子のアドレスに設定します。
  5. 最後の要素の InterfaceDescriptor メンバーを NULL に設定する必要があります。
USBD_SelectConfigUrbAllocateAndBuild は、次のタスクを実行します。
  • URB を作成し、指定した構成、そのインターフェイス、エンドポイントに関する情報を入力し、要求の種類を URB_FUNCTION_SELECT_CONFIGURATION に設定します。
  • 各インターフェイスの URB の USBD_INTERFACE_INFORMATION 構造体を塗りつぶします。
  • 呼び出し元が指定したUSBD_INTERFACE_LIST_ENTRY配列の n番目の要素の Interface メンバーを、URB 内の対応するUSBD_INTERFACE_INFORMATION構造体のアドレスに設定します。
URB 構造体への受信ポインターを使用して、選択構成要求を USB ドライバー スタックに送信して、指定した構成を設定できます。 さらに、配列内の各USBD_INTERFACE_INFORMATION構造体の Interface メンバーを使用して、インターフェイスに関する情報を取得できます。 各 USBD_INTERFACE_INFORMATION 構造体内では、 Pipes メンバーは USBD_PIPE_INFORMATION 構造体の配列です。 各 USBD_PIPE_INFORMATION 構造体には、そのインターフェイス内のエンドポイントに対して (USB ドライバー スタックによって) 開かれたパイプに関する情報が含まれています。 配列からパイプ ハンドルを取得し、デバイスへの今後の I/O 要求用に格納できます。

要件

要件
サポートされている最小のクライアント Windows 8には WDK が必要です。 Windows Vista 以降のバージョンの Windows オペレーティング システムを対象としています。
対象プラットフォーム デスクトップ
Header usbdlib.h
Library Usbdex.lib
IRQL DISPATCH_LEVEL

こちらもご覧ください

USBD_CreateConfigurationRequestEx

USBD_CreateHandle