Share via


OID_TIMESTAMP_GET_CROSSTIMESTAMP

Un pilote overlying émet une demande de requête d’identificateur d’objet (OID) de OID_TIMESTAMP_GET_CROSSTIMESTAMP pour obtenir un horodatage croisé à partir du matériel de la carte réseau. Un horodatage croisé est l’ensemble d’un horodatage matériel de carte réseau et d’un ou plusieurs horodatages système obtenus très près l’un de l’autre. Les applications PTP (Precision Time Protocol) version 2 utilisent les informations fournies dans cet OID pour établir une relation entre l’horloge matérielle de la carte réseau et une horloge système.

Le pilote miniport doit prendre en charge cet OID s’il définit le champ CrossTimestamp sur TRUE dans la structure NDIS_TIMESTAMP_CAPABILITIES dans le cadre de la configuration actuelle. Pour plus d’informations sur la création de rapports sur la configuration actuelle, consultez l’indication status NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG. Si la capacité d’horodatage croisé est désactivée, l’OID doit être complété avec un code d’erreur approprié (par exemple, NDIS_STATUS_NOT_SUPPORTED).

Le membre RequestType de la structure NDIS_OID_REQUEST sera NdisRequestQueryInformation.

Lorsqu’un pilote miniport reçoit la requête OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP, il termine l’OID en remplissant informationBuffer dans le QUERY_INFORMATION avec une structure de NDIS_HARDWARE_CROSSTIMESTAMP . Le champ Type dans le champ En-tête de la structure NDIS_HARDWARE_CROSSTIMESTAMP doit être défini sur NDIS_OBJECT_TYPE_DEFAULT et le champ Révisionsur NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. Le pilote doit remplir les champs SystemTimestamp1, HardwareClockTimestamp et SystemTimestamp2 avec les horodatages suivants aussi proches que possible et dans l’ordre suivant :

  1. SystemTimestamp1 : valeur du compteur de performances (QPC) obtenue en appelant KeQueryPerformanceCounter.

  2. HardwareClockTimestamp : valeur actuelle de l’horloge matérielle de la carte réseau. Il doit s’agir de la valeur d’horloge matérielle brute de la carte réseau.

  3. SystemTimestamp2 : autre valeur de compteur de performances (QPC) obtenue en appelant KeQueryPerformanceCounter.

Voici un exemple de la façon dont un pilote miniport gère 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
}

Le champ Indicateurs dans la structure NDIS_HARDWARE_CROSSTIMESTAMP est réservé pour une utilisation ultérieure. Le pilote miniport ne doit pas modifier sa valeur.

Le pilote et le matériel miniport sont gratuits pour optimiser la collecte de ces horodatages en fonction des fonctionnalités matérielles avancées. Toutefois, les valeurs SystemTimestamp1 et SystemTimestamp2 retournées lors de la saisie semi-automatique OID doivent correspondre avec précision à la valeur du compteur de performances (QPC) au moment de la capture. HardwareClockTimestamp doit correspondre à la valeur d’horloge matérielle de la carte réseau au point de capture. Si une implémentation particulière peut déterminer plus précisément deux horodatages au lieu de trois (par exemple, un horodatage système et l’horodatage de l’horloge matérielle de la carte réseau correspondant), elle doit définir le champ SystemTimestamp2 sur la même valeur que SystemTimestamp1.

Le pilote miniport ne doit pas définir les valeurs SystemTimestamp1, HardwareClockTimestamp ou SystemTimestamp2 sur zéro.

Codes d’état de retour

Le pilote miniport retourne l’un des codes de status suivants pour la requête de requête OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP.

Code d’état Description
NDIS_STATUS_SUCCESS La requête OID s’est terminée avec succès.
NDIS_STATUS_NOT_SUPPORTED Le pilote miniport ne prend pas en charge l’horodatage croisé ou la capacité d’horodatage croisé est désactivée.
NDIS_STATUS_FAILURE La demande a échoué pour d’autres raisons.

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 11
Serveur minimal pris en charge Windows Server 2022
NDIS Version NDIS 6.82 et versions ultérieures
En-tête Ntddndis.h (inclure Ndis.h)

Voir aussi

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST