USBD_CreateConfigurationRequestEx関数 (usbdlib.h)
USBD_CreateConfigurationRequestEx ルーチンは、USB デバイスの構成を選択するように URB を割り当てて書式設定します。
USBD_CreateConfigurationRequestExは、USBD_CreateConfigurationRequestを置き換えます。
構文
PURB USBD_CreateConfigurationRequestEx(
[in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
[in] PUSBD_INTERFACE_LIST_ENTRY InterfaceList
);
パラメーター
[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構造体の呼び出し元によって割り当てられた配列の最初の要素へのポインター。 配列の長さは、構成記述子内のインターフェイスの数によって異なります。 配列内の要素の数は、構成内のインターフェイスの数よりも 1 つ多くする必要があります。 RtlZeroMemory を呼び出して配列を初期化します。 配列内の最後の要素の InterfaceDescriptor メンバーを NULL に設定する必要があります。
戻り値
USBD_CreateConfigurationRequestEx は URB 構造体を割り当て、URB_FUNCTION_SELECT_CONFIGURATION要求 (select-configuration request) の書式を設定し、 URB へのポインターを返します。 クライアント ドライバーは、返された URB を使用して、select-configuration 要求をホスト コントローラー ドライバーに送信して構成を設定できます。 URB の使用が完了したら、 URB を解放する必要があります。
注釈
select-configuration 要求とコード例を作成する方法の詳細については、「 HOW to Select a Configuration for a USB Device」を参照してください。
返される値は URB 構造体へのポインターであり、選択構成要求をホスト コントローラー ドライバーに送信して、指定した構成を設定するために使用できます。
USB ドライバー スタックが select-configuration 要求を完了したら、 USBD_INTERFACE_INFORMATION 構造を調べることができます。 USBD_INTERFACE_INFORMATION の Pipes メンバーは、USBD_PIPE_INFORMATION構造体の配列を指します。 USB バス ドライバーは、インターフェイスのエンドポイントに関連付けられているパイプに関する情報を USBD_PIPE_INFORMATION 構造体の配列に入力します。 クライアント ドライバーは、 からパイプ ハンドルを Pipes[i].PipeHandle
取得し、それらを使用して特定のパイプに I/O 要求を送信できます。
返された URB ですべての操作を完了したら、ExFreePool を呼び出して URB を解放する必要があります。
非ページ プールまたはページ プールから構成記述子と配列を割り当てることができます。 このルーチンの呼び出し元は、ConfigurationDescriptor および InterfaceList が指すメモリが非ページ プールから割り当てられている場合、IRQL <= DISPATCH_LEVELで実行できます。 それ以外の場合、呼び出し元は IRQL < DISPATCH_LEVELで実行する必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | usbdlib.h (Usbdlib.h を含む) |
Library | Usbd.lib |
IRQL | DISPATCH_LEVEL (「解説」を参照) |