_URB_HEADER構造体 (usb.h)
_URB_HEADER 構造体は、ホスト コントローラー ドライバーに送信される要求に関する基本情報を提供するために USB クライアント ドライバーによって使用されます。
構文
struct _URB_HEADER {
USHORT Length;
USHORT Function;
USBD_STATUS Status;
PVOID UsbdDeviceHandle;
ULONG UsbdFlags;
};
メンバーズ
Length
URB の長さをバイト単位で指定します。 _URB_HEADER以外のデータ構造を使用する URB 要求の場合、このメンバーは、_URB_HEADER サイズではなく URB 要求構造全体の長さに設定する必要があります。
Function
この URB に対して要求された操作を示す数値コードを指定します。 次のいずれかの値を設定する必要があります。
URB_FUNCTION_SELECT_CONFIGURATION
構成を選択することをホスト コントローラー ドライバーに示します。 設定した場合、URB はデータ構造として URB_SELECT_CONFIGURATION と共に使用されます。
URB_FUNCTION_SELECT_INTERFACE
代替インターフェイス設定がインターフェイスに対して選択されていることをホスト コントローラー ドライバーに示します。 設定した場合、URB はデータ構造として _URB_SELECT_INTERFACE と共に使用されます。
URB_FUNCTION_ABORT_PIPE
パイプに対するすべての未処理の要求を取り消す必要があることを示します。 設定した場合、URB はデータ構造として _URB_PIPE_REQUEST と共に使用されます。 この汎用要求を使用すると、クライアントは、指定されたパイプの保留中の転送を取り消します。 パイプの状態とエンドポイントの状態は影響を受けません。 未処理のすべての要求が完了する前に、中止要求が完了する可能性があります。 中止要求 完了すると、他のすべての未処理の要求が完了したことを意味 想定しないでください。
URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL
この URB 関数 、Windows 2000 以降のオペレーティング システムでは非推奨の であり、Microsoft ではサポートされていません。 使用しないでください。 URB 要求でこの関数を指定すると、要求は失敗し、システムはエラーを報告します。
URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL
この URB 関数 、Windows 2000 以降のオペレーティング システムでは非推奨の であり、Microsoft ではサポートされていません。 使用しないでください。 URB 要求でこの関数を指定すると、要求は失敗し、システムはエラーを報告します。
URB_FUNCTION_GET_FRAME_LENGTH
この URB 関数 、Windows 2000 以降のオペレーティング システムでは非推奨の であり、Microsoft ではサポートされていません。 使用しないでください。 URB 要求でこの関数を使用すると、要求は失敗し、システムはエラーを報告します。
URB_FUNCTION_SET_FRAME_LENGTH
この URB 関数 、Windows 2000 以降のオペレーティング システムでは非推奨の であり、Microsoft ではサポートされていません。 使用しないでください。 URB 要求と共に使用すると、要求は失敗し、システムはエラーを報告します。
URB_FUNCTION_GET_CURRENT_FRAME_NUMBER
ホスト コントローラー ドライバーに現在のフレーム番号を要求します。 設定した場合、URB はデータ構造として _URB_GET_CURRENT_FRAME_NUMBER と共に使用されます。
URB_FUNCTION_CONTROL_TRANSFER
コントロール パイプとの間でデータを転送します。 設定した場合、URB はデータ構造として _URB_CONTROL_TRANSFER と共に使用されます。
URB_FUNCTION_CONTROL_TRANSFER_EX
タイムアウト値で指定された時間制限なしで、コントロール パイプとの間でデータを転送します。 設定した場合、URB はデータ構造として URB_CONTROL_TRANSFER_EX と共に使用されます。
Windows Vista 以降のオペレーティング システムで使用できます。
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
一括パイプまたは割り込みパイプまたは一括パイプにデータを転送します。 設定した場合、URB はデータ構造として _URB_BULK_OR_INTERRUPT_TRANSFER と共に使用されます。
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
チェーンされた MDL を使用して、バルク パイプまたは割り込みパイプとの間でデータを転送します。 設定した場合、URB はデータ構造として _URB_BULK_OR_INTERRUPT_TRANSFER と共に使用されます。 クライアント ドライバーは、TransferBufferMDL メンバーを、転送バッファーを含むチェーン内の最初の MDL 構造体に設定する必要があります。 USB ドライバー スタックは、この URB を処理するときに、TransferBuffer メンバーを無視します。
Windows 8 で使用できます。 チェーンされた MDL の使用方法の詳細については、「チェーンされた MDLsを送信する方法」>「チェーンされた MDL を送信する方法」を参照してください。
URB_FUNCTION_ISOCH_TRANSFER
等時性パイプとの間でデータを転送します。 設定した場合、URB はデータ構造として _URB_ISOCH_TRANSFER と共に使用されます。
URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
チェーンされた MDL を使用して、等時性パイプとの間でデータを転送します。 設定した場合、URB はデータ構造として _URB_ISOCH_TRANSFER と共に使用されます。 クライアント ドライバーは、TransferBufferMDL メンバーを、転送バッファーを含むチェーン内の最初の MDL に設定する必要があります。 USB ドライバー スタックは、この URB を処理するときに、TransferBuffer メンバーを無視します。
Windows 8 で使用できます。 チェーンされた MDL の使用方法の詳細については、「チェーンされた MDLsを送信する方法」>「チェーンされた MDL を送信する方法」を参照してください。
URB_FUNCTION_RESET_PIPE
URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALLを参照してください。
URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
指定されたパイプをリセットします。 設定した場合、この URB は _URB_PIPE_REQUESTと共に使用されます。
手記
この URB は、URB_FUNCTION_RESET_PIPEを置き換えます。
バス ドライバーは、この URB に応答して次の 3 つのタスクを実行します。
まず、等時性パイプを除くすべてのパイプに対して、この URB はデバイスのENDPOINT_HALT機能をクリアするためのCLEAR_FEATURE要求を送信します。
次に、USB バス ドライバーは、USB 仕様で必要に応じて、ホスト側のデータ トグルをリセットします。 バス ドライバーがENDPOINT_HALT機能をクリアすると、USB デバイスはデバイス側のデータ トグルをリセットする必要があります。 一部の非準拠デバイスではこの機能がサポートされていないため、URB_FUNCTION_SYNC_CLEAR_STALLとURB_FUNCTION_SYNC_RESET_PIPEという 2 つの追加の URL が提供されます。 これにより、クライアント ドライバーは、ホスト側のデータ トグルに影響を与えずに、デバイスのENDPOINT_HALT機能をクリアしたり、ホスト側のパイプをそれぞれリセットしたりできます。 デバイスが必要なときにデータ切り替えをリセットしない場合、クライアント ドライバーは、ホスト側のデータトグルをリセットしないことで、この欠陥を補正できます。 データトグルがホスト側でリセットされ、デバイス側ではリセットされない場合、パケットはシーケンスから抜け出し、デバイスはパケットをドロップする可能性があります。
3 つ目は、バス ドライバーがパイプを正常にリセットした後、次のキューに登録された URB を使用して転送を再開します。
パイプのリセット後、キューに入った次の URB で再開を転送します。
既定のコントロール パイプで停止条件をクリアする必要はありません。 既定の制御パイプは常にセットアップ パケットを受け入れる必要があるため、停止した場合、USB スタックは停止状態を自動的にクリアします。 クライアント ドライバーは、既定のパイプの停止条件をクリアするために特別なアクションを実行する必要はありません。
パイプのリセットを試みる前に、すべての転送を中止または取り消す必要があります。
この URB は、PASSIVE_LEVELで送信する必要があります。
URB_FUNCTION_SYNC_RESET_PIPE
パイプのホスト側の停止条件をクリアします。 設定した場合、この URB はデータ構造として _URB_PIPE_REQUEST と共に使用されます。
この URB を使用すると、クライアントは、データトグルをリセットせずに、エンドポイントのストール状態 (機能ENDPOINT_HALT) をクリアせずに、パイプの停止状態をクリアできます。 パイプの停止条件をクリアするには、ホスト側のデータトグルをリセットし、1 回の操作でデバイスのストールをクリアするには、URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALLを使用します。
次の状態コードは重要であり、示された意味を持ちます。
USBD_STATUS_INVALID_PIPE_HANDLE
PipeHandle が無効です
USBD_STATUS_ERROR_BUSY
エンドポイントにアクティブな転送が保留中です。
既定のコントロール パイプで停止条件をクリアする必要はありません。 既定の制御パイプは常にセットアップ パケットを受け入れる必要があるため、停止した場合、USB スタックは停止状態を自動的にクリアします。 クライアント ドライバーは、既定のパイプの停止条件をクリアするために特別なアクションを実行する必要はありません。
パイプのリセットを試みる前に、すべての転送を中止または取り消す必要があります。
この URB は、PASSIVE_LEVELで送信する必要があります。
Windows XP 以降のオペレーティング システムで使用できます。
URB_FUNCTION_SYNC_CLEAR_STALL
エンドポイントのストール状態をクリアします。 等時性パイプを除くすべてのパイプに対して、この URB はデバイスのENDPOINT_HALT機能をクリアするためのCLEAR_FEATURE要求を送信します。 ただし、RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL関数とは異なり、この URB 関数はパイプのホスト側のデータ トグルをリセットしません。 USB 仕様では、クライアントがデバイスのENDPOINT_HALT機能をクリアした後、デバイス側のデータ トグルをリセットする必要がありますが、一部の非準拠デバイスではデータトグルが正しくリセットされません。 このようなデバイスを管理するクライアント ドライバーは、URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALLでパイプをリセットするのではなく、URB_FUNCTION_SYNC_CLEAR_STALLでストール状態を直接クリアすることで、この欠陥を補うことができます。 URB_FUNCTION_SYNC_CLEAR_STALLは、ホスト側のデータトグルをリセットせずに、デバイスのストール状態をクリアします。 これにより、非準拠デバイスが次のパケットを再送信として解釈し、パケットを破棄できなくなります。
設定した場合、URB はデータ構造として _URB_PIPE_REQUEST と共に使用されます。
この URB 関数は、PASSIVE_LEVELに送信する必要があります
Windows XP 以降のオペレーティング システムで使用できます。
URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
特定の USB デバイスからデバイス記述子を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT
USB デバイスのインターフェイス上のエンドポイントから記述子を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE
デバイスのデバイス記述子を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT
インターフェイスのエンドポイントにエンドポイント記述子を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_SET_FEATURE_TO_DEVICE
デバイス上の USB 定義機能を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_SET_FEATURE_TO_INTERFACE
デバイスのインターフェイスに USB 定義機能を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_SET_FEATURE_TO_ENDPOINT
USB デバイス上のインターフェイスのエンドポイントで USB 定義機能を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_SET_FEATURE_TO_OTHER
USB デバイス上のデバイス定義ターゲットに USB 定義機能を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE
デバイス上の USB 定義機能をクリアします。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE
デバイスのインターフェイスで USB 定義機能をクリアします。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT
USB デバイス上のインターフェイスのエンドポイント上の USB 定義機能をクリアします。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_CLEAR_FEATURE_TO_OTHER
USB デバイス上のデバイス定義ターゲットの USB 定義機能をクリアします。 設定した場合、URB はデータ構造として _URB_CONTROL_FEATURE_REQUEST と共に使用されます。
URB_FUNCTION_GET_STATUS_FROM_DEVICE
USB デバイスから状態を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_STATUS_REQUEST と共に使用されます。
URB_FUNCTION_GET_STATUS_FROM_INTERFACE
USB デバイス上のインターフェイスから状態を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_STATUS_REQUEST と共に使用されます。
URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
USB デバイス上のインターフェイスのエンドポイントから状態を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_STATUS_REQUEST と共に使用されます。
URB_FUNCTION_GET_STATUS_FROM_OTHER
USB デバイス上のデバイス定義ターゲットから状態を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_STATUS_REQUEST と共に使用されます。
URB_FUNCTION_VENDOR_DEVICE
ベンダー固有のコマンドを USB デバイスに送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_VENDOR_INTERFACE
USB デバイス上のインターフェイスに対してベンダー固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_VENDOR_ENDPOINT
USB デバイス上のインターフェイス上のエンドポイントに対してベンダー固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_VENDOR_OTHER
USB デバイス上のデバイス定義ターゲットにベンダー固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_CLASS_DEVICE
USB 定義のクラス固有のコマンドを USB デバイスに送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_CLASS_INTERFACE
USB デバイス上のインターフェイスに USB で定義されたクラス固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_CLASS_ENDPOINT
USB デバイス上のインターフェイス上のエンドポイントに、USB 定義のクラス固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_CLASS_OTHER
USB デバイス上のデバイス定義ターゲットに USB 定義クラス固有のコマンドを送信します。 設定した場合、URB はデータ構造として _URB_CONTROL_VENDOR_OR_CLASS_REQUEST と共に使用されます。
URB_FUNCTION_GET_CONFIGURATION
USB デバイス上の現在の構成を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_CONFIGURATION_REQUEST と共に使用されます。
URB_FUNCTION_GET_INTERFACE
USB デバイス上のインターフェイスの現在の設定を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_GET_INTERFACE_REQUEST と共に使用されます。
Windows 2000 および Windows Vista 以降のオペレーティング システムで使用できます。 Windows XP では使用できません。
URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE
USB デバイスのインターフェイスから記述子を取得します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE
USB デバイス上のインターフェイスの記述子を設定します。 設定した場合、URB はデータ構造として _URB_CONTROL_DESCRIPTOR_REQUEST と共に使用されます。
URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR
USB デバイスまたは USB デバイス上のインターフェイスから Microsoft OS 機能記述子を取得します。 設定した場合、URB はデータ構造として _URB_OS_FEATURE_DESCRIPTOR_REQUEST と共に使用されます。
Windows XP 以降のオペレーティング システムで使用できます。
URB_FUNCTION_OPEN_STATIC_STREAMS
指定した一括エンドポイントでストリームを開きます。 設定した場合、URB はデータ構造として _URB_OPEN_STATIC_STREAMS と共に使用されます。
Windows 8 で使用できます。 オープン ストリーム要求の URB の書式設定の詳細については、「USB 一括エンドポイントの静的ストリームを開いたり閉じたりする方法」を参照してください。
URB_FUNCTION_CLOSE_STATIC_STREAMS
指定した一括エンドポイントで開いているすべてのストリームを閉じます。 設定した場合、URB はデータ構造として _URB_PIPE_REQUEST と共に使用されます。
Windows 8 で使用できます。 オープン ストリーム要求の URB の書式設定の詳細については、「USB 一括エンドポイントの静的ストリームを開いたり閉じたりする方法」を参照してください。
Status
ホスト コントローラー ドライバーからのリターン時にUSBD_STATUS_XXX コードが含まれます。
UsbdDeviceHandle
引っ込み思案。 使用しないでください。
UsbdFlags
引っ込み思案。 使用しないでください。
備考
_URB_HEADER 構造体は、URB 構造体の一部であるすべての USB 要求のメンバーです。 _URB_HEADER 構造体は、ホスト コントローラー ドライバーに各要求に関する一般的な情報を提供するために使用されます。
この構造体の予約済みメンバーは不透明として扱う必要があり、システムで使用するために予約されています。
必要条件
要件 | 価値 |
---|---|
ヘッダー | usb.h (Usb.h を含む) |
関連項目
_URB_BULK_OR_INTERRUPT_TRANSFER
_URB_CONTROL_DESCRIPTOR_REQUEST
_URB_CONTROL_GET_CONFIGURATION_REQUEST
_URB_CONTROL_GET_INTERFACE_REQUEST
_URB_CONTROL_GET_STATUS_REQUEST
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST