IOCTL_USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC IOCTL (usbioctl.h)

フレームおよびマイクロフレームと同期されたシステム クエリ パフォーマンス カウンター (QPC) 値を取得します。

メジャー コード

IRP_MJ_DEVICE_CONTROL

入力/出力バッファー

IOCTL_USB_START_TRACKING_FOR_TIME_SYNC要求によって取得された時間追跡を含むUSB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION構造体へのポインター。 入力時に、呼び出し元は、QPC 値を取得するフレーム番号とマイクロフレーム番号を指定できます。

出力時に、 CurrentQueryPerformanceCounter メンバーは USB ドライバー スタックによって予測される値に設定されます。 値は、システム QPC 値をマイクロ秒単位で表します。

入力/出力バッファーの長さ

USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION構造体のサイズ。

ステータス ブロック

Irp->要求が成功した場合、IoStatus.Status はSTATUS_SUCCESSに設定されます。 それ以外の場合、 StatusNTSTATUS コードとして適切なエラー条件を示します。

注釈

入力時に、呼び出し元は必要に応じて、関連するシステム QPC 値を知ることに呼び出し元が関心を持っているフレームとマイクロフレームを指定できます。 これらの値は、USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATIONInputFrameNumber メンバーと InputMicroFrameNumber メンバーにそれぞれ指定する必要があります。 出力時に、USB ドライバー スタックは QueryPerformanceCounterAtInputFrameOrMicroFrame メンバーに、USB ドライバー スタックによって計算されるシステム QPC 値を入力します。

呼び出し元がこれらの値に関心がない場合は、 InputFrameNumberInputMicroFrameNumber の値を 0 に初期化する必要があります。 出力では、 QueryPerformanceCounterAtInputFrameOrMicroFrame が 0 に設定されます。

USB ドライバー スタックでフレーム境界が検出された場合、 PredictedAccuracyInMicroSeconds 値は 125 マイクロ秒単位の精度を示します。 また、追跡が有効になってから十分な時間が経過した場合も考慮されます。

USB ドライバー スタックは、ホスト コントローラーから直接取得されたバス フレームとマイクロフレーム番号と同期されるシステム QPC 値を予測することもできます。

正確に QPC 値を予測するために、USB ドライバー スタックはフレームとマイクロフレームのタイム ソースをポーリングする場合があります。 そのポーリング操作では、IRQL を上げたり下げたりして、値の精度に干渉するスケジューリング遅延を排除する必要がある場合があります (特定の回数の試行でパッシブ IRQL からレジスタ/QPC タイマーを読み取ろうとした後)。 この追加の CPU コストが発生する可能性がある場合、このインターフェイスは、関連付けられた USB バスと QPC 値を取得するためにのみ使用する必要があり、USB バス時間のみを取得するための既存のメソッドの代わりに使用することはできません。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 1709
サポートされている最小のサーバー Windows Server 2016
Header usbioctl.h
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

ドライバー内での IOCTL 要求の作成

WdfIoTargetSendInternalIoctlOthersSynchronously

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendIoctlSynchronously