_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で使用できます。 チェーンされた MDLs の使用方法については、「 How to Send Chained MDLs」を>参照してください。
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で使用できます。 チェーンされた MDLs の使用方法については、「 How to Send Chained MDLs」を>参照してください。
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 デバイスはデバイス側のデータ トグルをリセットする必要があります。 一部の非準拠デバイスではこの機能がサポートされていないため、Microsoft では、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 の書式設定の詳細については、「 HOW to Open and Close Static Streams in a USB Bulk Endpoint」を参照してください。
URB_FUNCTION_CLOSE_STATIC_STREAMS
指定した一括エンドポイントで開いているすべてのストリームを閉じます。 設定した場合、URB はデータ構造として _URB_PIPE_REQUEST と共に使用されます。
Windows 8で使用できます。 オープン ストリーム要求の URB の書式設定の詳細については、「 HOW to Open and Close Static Streams in a USB Bulk Endpoint」を参照してください。
Status
ホスト コントローラー ドライバーから返されたUSBD_STATUS_XXX コードが含まれます。
UsbdDeviceHandle
予約済み。 使用しないでください。
UsbdFlags
予約済み。 使用しないでください。
注釈
_URB_HEADER構造体は、URB 構造体の一部であるすべての USB 要求のメンバーです。 _URB_HEADER構造体は、各要求に関する一般的な情報をホスト コントローラー ドライバーに提供するために使用されます。
この構造体の予約済みメンバーは不透明として扱う必要があり、システム使用のために予約されています。
要件
要件 | 値 |
---|---|
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