OID_TIMESTAMP_GET_CROSSTIMESTAMP
En överdrivande drivrutin utfärdar en OID-frågebegäran (object identifier) för OID_TIMESTAMP_GET_CROSSTIMESTAMP för att hämta en korstidsstämpel från nätverkskortets maskinvara. En korstidsstämpel är uppsättningen med en NIC-maskinvarutidsstämpel och systemtidsstämpel som erhålls mycket nära varandra. Ptp-program (Precision Time Protocol) version 2 använder informationen i denna OID för att upprätta en relation mellan nätverkskortets maskinvaruklocka och en systemklocka.
Miniportdrivrutinen måste ha stöd för den här OID:en om den anger fältet CrossTimestamp till TRUE- i NDIS_TIMESTAMP_CAPABILITIES-strukturen som en del av den aktuella konfigurationen. Mer information om hur du rapporterar den aktuella konfigurationen finns i statusindikeringen NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG. Om korstidsstämplingsförmågan är inaktiverad bör OID slutföras med en lämplig felkod (till exempel NDIS_STATUS_NOT_SUPPORTED).
RequestType medlem i NDIS_OID_REQUEST-strukturen NdisRequestQueryInformation.
När en miniportdrivrutin tar emot OID-begäran om OID_TIMESTAMP_GET_CROSSTIMESTAMP slutför drivrutinen OID genom att fylla i InformationBuffer- i QUERY_INFORMATION med en NDIS_HARDWARE_CROSSTIMESTAMP struktur. Fältet Type i fältet Header i NDIS_HARDWARE_CROSSTIMESTAMP-strukturen ska anges till NDIS_OBJECT_TYPE_DEFAULT och fältet Revision till NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. Drivrutinen ska fylla i fälten SystemTimestamp1, HardwareClockTimestamp och SystemTimestamp2 med följande tidsstämplar så nära varandra som möjligt och i följande ordning:
SystemTimestamp1: Prestandaräknarens värde (QPC) som hämtas genom att anropa KeQueryPerformanceCounter.
HardwareClockTimestamp: NIC-maskinvaruklockans aktuella värde. Detta bör vara det råa maskinvaruklockavärdet för nätverkskortet.
SystemTimestamp2: Ett annat prestandaräknarevärde (QPC) som hämtas genom att anropa KeQueryPerformanceCounter.
Här är ett exempel på hur en miniportdrivrutin hanterar 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
}
Fältet Flags i NDIS_HARDWARE_CROSSTIMESTAMP-strukturen är reserverat för framtida användning. Miniportdrivrutinen får inte ändra sitt värde.
Miniportdrivrutinen och maskinvaran kan optimera insamlingen av dessa tidsstämplar beroende på eventuella avancerade maskinvarufunktioner. Men SystemTimestamp1 och SystemTimestamp2 värden som returneras vid OID-slutförande måste korrekt motsvara prestandaräknarens (QPC) värde vid tidpunkten för avbildningen. HardwareClockTimestamp- måste motsvara nätverkskortets maskinvaruklockavärde vid avbildningspunkten. Om en viss implementering mer exakt kan fastställa två tidsstämplar i stället för tre (till exempel en systemtidsstämpel och motsvarande tidsstämpel för NIC-maskinvara) bör den ange fältet SystemTimestamp2 till samma värde som SystemTimestamp1.
Miniportdrivrutinen bör inte ange värdena SystemTimestamp1, HardwareClockTimestampeller SystemTimestamp2 till noll.
Miniportdrivrutinen returnerar någon av följande statuskoder för OID-frågebegäran för OID_TIMESTAMP_GET_CROSSTIMESTAMP.
Statuskod | Beskrivning |
---|---|
NDIS_STATUS_SUCCESS | OID-begäran har slutförts. |
NDIS_STATUS_NOT_SUPPORTED | Miniportdrivrutinen stöder antingen inte korstidsstämpling eller så är korstidsstämplingsförmågan inaktiverad. |
NDIS_STATUS_FAILURE | Begäran misslyckades av andra skäl. |
Krav | Värde |
---|---|
Lägsta klient som stöds | Windows 11 |
Lägsta server som stöds | Windows Server 2022 |
NDIS-version | NDIS 6.82 och senare |
Rubrik | Ntddndis.h (inkludera Ndis.h) |