OID_TIMESTAMP_GET_CROSSTIMESTAMP
基になるドライバーは、NIC ハードウェアからクロス タイムスタンプを取得するOID_TIMESTAMP_GET_CROSSTIMESTAMPのオブジェクト識別子 (OID) クエリ要求を発行します。 クロス タイムスタンプは、NIC ハードウェアタイムスタンプとシステムタイムスタンプのセットであり、相互に非常に近い位置で取得されます。 精度タイム プロトコル (PTP) バージョン 2 のアプリケーションは、NIC のハードウェア クロックとシステム クロックの間の関係を確立するには、この OID で提供される情報を使用します。
ミニポート ドライバーは、現在の構成の一部として、NDIS_TIMESTAMP_CAPABILITIES 構造体で TRUE を する CrossTimestamp フィールドを設定する場合、この OID をサポートする必要があります。 現在の構成のレポートの詳細については、NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 状態の表示を参照してください。 クロス タイムスタンプ機能が無効になっている場合は、適切なエラー コード (NDIS_STATUS_NOT_SUPPORTED など) を使用して OID を完了する必要があります。
NDIS_OID_REQUEST 構造体の RequestType メンバーは、NdisRequestQueryInformation されます。
ミニポート ドライバーは、OID_TIMESTAMP_GET_CROSSTIMESTAMPの OID 要求を受信すると、ドライバーは、NDIS_HARDWARE_CROSSTIMESTAMP 構造体を QUERY_INFORMATION で InformationBuffer を入力することによって OID を完了します。 NDIS_HARDWARE_CROSSTIMESTAMP 構造の ヘッダー フィールドの タイプ フィールドを NDIS_OBJECT_TYPE_DEFAULT に設定し、リビジョン フィールドを NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1する必要があります。 ドライバーは、SystemTimestamp1、HardwareClockTimestamp 、SystemTimestamp2 フィールド、可能な限り近い次のタイムスタンプを次の順序で入力する必要があります。
SystemTimestamp1: KeQueryPerformanceCounterを呼び出して取得したパフォーマンス カウンター値 (QPC)。
HardwareClockTimestamp: NIC ハードウェア クロックの現在の値。 これは、NIC の生のハードウェア クロック値である必要があります。
SystemTimestamp2: KeQueryPerformanceCounterを呼び出すことによって取得された別のパフォーマンス カウンター値 (QPC)。
ミニポート ドライバーがOID_TIMESTAMP_GET_CROSSTIMESTAMPを処理する方法の例を次に示します。
{
. . .
NDIS_HARDWARE_CROSSTIMESTAMP crossTimestamp;
LARGE_INTEGER timeStamp;
RtlZeroMemory(&crossTimestamp, sizeof(crossTimestamp));
timeStamp = KeQueryPerformanceCounter(NULL);
crossTimestamp.SystemTimestamp1 = timeStamp.QuadPart;
crossTimestamp.HardwareClockTimestamp = FunctionToRetrieveHardwareTimestampFromNetworkCard();
timeStamp = KeQueryPerformanceCounter(NULL);
crossTimestamp.SystemTimestamp2 = timeStamp.QuadPart;
crossTimestamp.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
crossTimestamp.Header.Size = NDIS_SIZEOF_HARDWARE_CROSSTIMESTAMP_REVISION_1;
crossTimestamp.Header.Revision = NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1;
// Complete the OID by filling the query information buffer with the crossTimestamp
}
NDIS_HARDWARE_CROSSTIMESTAMP 構造体の Flags フィールドは、今後使用するために予約されています。 ミニポート ドライバーは、その値を変更することはできません。
ミニポート ドライバーとハードウェアは、高度なハードウェア機能に応じて、これらのタイムスタンプのコレクションを最適化する自由です。 ただし、SystemTimestamp1 および SystemTimestamp2 値は、キャプチャ時のパフォーマンス カウンター (QPC) 値に正確に対応している必要があります。 HardwareClockTimestamp は、キャプチャ時点での NIC のハードウェア クロック値に対応している必要があります。 特定の実装で、3 つではなく 2 つのタイムスタンプ (たとえば、1 つのシステム タイムスタンプと対応する NIC ハードウェア クロック タイムスタンプ) をより正確に決定できる場合は、SystemTimestamp2 フィールド SystemTimestamp1と同じ値に設定する必要があります。
ミニポート ドライバーは、SystemTimestamp1、HardwareClockTimestamp、または SystemTimestamp2 値を 0 に設定しないでください。
戻り値の状態コード
ミニポート ドライバーは、OID_TIMESTAMP_GET_CROSSTIMESTAMPの OID クエリ要求の次の状態コードのいずれかを返します。
状態コード | 形容 |
---|---|
NDIS_STATUS_SUCCESS | OID 要求が正常に完了しました。 |
NDIS_STATUS_NOT_SUPPORTED | ミニポート ドライバーは、クロス タイムスタンプをサポートしていないか、クロス タイムスタンプ機能が無効になっています。 |
NDIS_STATUS_FAILURE | その他の理由で要求が失敗しました。 |
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 11 |
サポートされている最小サーバー | Windows Server 2022 |
NDIS バージョン | NDIS 6.82 以降 |
ヘッダ | Ntddndis.h (Ndis.h を含む) |