次の方法で共有


USBD_SelectConfigUrbAllocateAndBuild関数 (usbdlib.h)

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

Windows 8 のノート では、USBD_CreateConfigurationRequestExUSBD_CreateConfigurationRequestUSBD_SelectConfigUrbAllocateAndBuild 置き換えられます。
 

構文

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

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

リターン コード 形容
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 オペレーティング システムを対象としています。
ターゲット プラットフォーム デスクトップ
ヘッダー usbdlib.h
ライブラリ Usbdex.lib
IRQL DISPATCH_LEVEL

関連項目

USBD_CreateConfigurationRequestEx

USBD_CreateHandle