OID_TIMESTAMP_GET_CROSSTIMESTAMP

Ein überlastender Treiber gibt eine Objektbezeichnerabfrageanforderung (Object Identifier, OID) von OID_TIMESTAMP_GET_CROSSTIMESTAMP aus, um einen Kreuzzeitstempel von der NIC-Hardware abzurufen. Ein Kreuzzeitstempel ist der Satz eines NIC-Hardwarezeitstempels und eines Systemzeitstempels, der sehr nahe beieinander abgerufen wird. PtP-Anwendungen (Precision Time Protocol, Version 2) verwenden die in dieser OID bereitgestellten Informationen, um eine Beziehung zwischen der Hardwareuhr der NIC und einer Systemuhr herzustellen.

Der Miniporttreiber muss diese OID unterstützen, wenn er das CrossTimestamp-Feld in der NDIS_TIMESTAMP_CAPABILITIES-Struktur als Teil der aktuellen Konfiguration auf TRUE festlegt. Weitere Informationen zum Melden der aktuellen Konfiguration finden Sie unter NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG status Hinweis. Wenn die Kreuzzeitstempelfunktion deaktiviert ist, sollte die OID mit einem entsprechenden Fehlercode (z. B. NDIS_STATUS_NOT_SUPPORTED) abgeschlossen werden.

Das RequestType-Element der NDIS_OID_REQUEST-Struktur ist NdisRequestQueryInformation.

Wenn ein Miniporttreiber die OID-Anforderung von OID_TIMESTAMP_GET_CROSSTIMESTAMP empfängt, schließt der Treiber die OID ab, indem er den InformationBuffer im QUERY_INFORMATION mit einer NDIS_HARDWARE_CROSSTIMESTAMP-Struktur füllt. Das Feld Typ im Feld Header der NDIS_HARDWARE_CROSSTIMESTAMP-Struktur sollte auf NDIS_OBJECT_TYPE_DEFAULT und das Feld Revision auf NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1 festgelegt werden. Der Treiber sollte die Felder SystemTimestamp1, HardwareClockTimestamp und SystemTimestamp2 mit den folgenden Zeitstempeln füllen, die so nah wie möglich und in der folgenden Reihenfolge angeordnet sind:

  1. SystemTimestamp1: Leistungsindikatorwert (QPC), der durch Aufrufen von KeQueryPerformanceCounter abgerufen wird.

  2. HardwareClockTimestamp: Der aktuelle Wert der NIC-Hardwareuhr. Dies sollte der Rohdatenwert der Hardwareuhr der NIC sein.

  3. SystemTimestamp2: Ein weiterer Leistungsindikatorwert (QPC), der durch Aufrufen von KeQueryPerformanceCounter abgerufen wird.

Hier sehen Sie ein Beispiel dafür, wie ein Miniporttreiber OID_TIMESTAMP_GET_CROSSTIMESTAMP verarbeitet:

{
. . .
    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
}

Das Feld Flags in der NDIS_HARDWARE_CROSSTIMESTAMP-Struktur ist für die zukünftige Verwendung reserviert. Der Miniporttreiber darf seinen Wert nicht ändern.

Der Miniporttreiber und die Hardware können die Sammlung dieser Zeitstempel je nach erweiterten Hardwarefunktionen optimieren. Die systemTimestamp1 - und SystemTimestamp2-Werte , die bei der OID-Vervollständigung zurückgegeben werden, müssen jedoch genau dem QPC-Wert (Performance Counter) zum Zeitpunkt der Erfassung entsprechen. Der HardwareClockTimestamp muss dem Hardwareuhrwert der NIC zum Zeitpunkt der Erfassung entsprechen. Wenn eine bestimmte Implementierung zwei Zeitstempel statt drei genauer bestimmen kann (z. B. einen Systemzeitstempel und den entsprechenden Zeitstempel der NIC-Hardwareuhr), sollte das SystemTimestamp2-Feld auf denselben Wert wie SystemTimestamp1 festgelegt werden.

Der Miniporttreiber sollte die Werte SystemTimestamp1, HardwareClockTimestamp oder SystemTimestamp2 nicht auf 0 festlegen.

Rückgabestatuscodes

Der Miniporttreiber gibt einen der folgenden status-Codes für die OID-Abfrageanforderung von OID_TIMESTAMP_GET_CROSSTIMESTAMP zurück.

Statuscode BESCHREIBUNG
NDIS_STATUS_SUCCESS Die OID-Anforderung wurde erfolgreich abgeschlossen.
NDIS_STATUS_NOT_SUPPORTED Der Miniporttreiber unterstützt entweder keine Kreuzzeitstempel, oder die Kreuzzeitstempel-Funktion ist deaktiviert.
NDIS_STATUS_FAILURE Die Anforderung ist aus anderen Gründen fehlgeschlagen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 11
Unterstützte Mindestversion (Server) Windows Server 2022
NDIS-Version NDIS 6.82 und höher
Header Ntddndis.h (include Ndis.h)

Weitere Informationen

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST