Partager via


NDIS_STATUS_TIMESTAMP_CAPABILITY

Les pilotes miniport utilisent l’indication d’état NDIS_STATUS_TIMESTAMP_CAPABILITY pour signaler les fonctionnalités d’horodatage matériel de la carte réseau et les fonctionnalités d’horodatage logiciel du pilote miniport à NDIS et aux pilotes overlying.

Cette indication d’état représente les fonctionnalités d’horodatage du pilote matériel et miniport, et non les fonctionnalités actuellement activées ou désactivées. Pour plus d’informations sur la création de rapports sur la configuration actuelle de l’horodatage, consultez NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG.

Remarques

Lors de l’initialisation, le pilote miniport doit indiquer ses fonctionnalités d’horodatage matériel et logiciel à partir de sa fonction MiniportInitializeEx. Le pilote doit :

  1. Initialisez une structure NDIS_TIMESTAMP_CAPABILITIES avec les fonctionnalités d’horodatage matériel et logiciel de la carte réseau. Le pilote définit les membres de la structure NDIS_TIMESTAMP_CAPABILITIES comme suit :

    • Le pilote utilise le champ TimestampFlags pour indiquer les fonctionnalités d’horodatage matériel et logiciel.

    Note

    Une implémentation doit prendre en charge les horodatages matériels et les horodatages croisés. La prise en charge des horodatages logiciels est facultative.

    • Le pilote doit définir le champ CrossTimestamp sur TRUE.

    • Le champ HardwareClockFrequencyHz doit contenir la fréquence d’exploitation nominale de l’horloge matérielle utilisée pour l’horodatage par la carte réseau. Ces données peuvent être utilisées pour afficher la fréquence d’horloge nominale aux utilisateurs finaux à des fins d’information.

    • Le champ type de dans le champ d’en-tête doit être défini sur NDIS_OBJECT_TYPE_DEFAULT et le révision sur NDIS_TIMESTAMP_CAPABILITIES_REVISION_1.

  2. Générez une indication d’état NDIS_STATUS_TIMESTAMP_CAPABILITY en appelant NdisMIndicateStatusEx pour signaler les fonctionnalités d’horodatage. Le champ StatusBuffer de la structure NDIS_STATUS_INDICATION doit pointer vers la structure de NDIS_TIMESTAMP_CAPABILITIES initialisée.

Le pilote miniport doit également générer l’indication d’état NDIS_STATUS_TIMESTAMP_CAPABILITY(ndis-status-timestamp-capability.md) chaque fois qu’il détecte une modification des fonctionnalités matérielles sous-jacentes.

Voici comment un pilote miniport peut indiquer ses fonctionnalités d’horodatage prises en charge :

// From within its initialization routine, the miniport in this 
// example indicates that it supports the following capabilities:
// - PtpV2OverUdpIPv4EventMsgReceiveHw
// - PtpV2OverUdpIPv6EventMsgReceiveHw
// - TaggedTransmitHw
// - CrossTimestamp

NDIS_STATUS MiniportInitializeEx(
    _In_ NDIS_HANDLE MiniportAdapterHandle,
    _In_ NDIS_HANDLE MiniportDriverContext,
    _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
)
{
. . .
    NDIS_TIMESTAMP_CAPABILITIES timeStampCapabilities;
    NDIS_STATUS_INDICATION timeStampStatus;
. . .

    // Initialize an NDIS_TIMESTAMP_CAPABILITIES structure

    RtlZeroMemory(&timeStampCapabilities, sizeof(timeStampCapabilities));
    RtlZeroMemory(&timeStampStatus, sizeof(timeStampStatus));

    timeStampCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    timeStampCapabilities.Header.Size = sizeof(timeStampCapabilities);
    timeStampCapabilities.Header.Revision = NDIS_TIMESTAMP_CAPABILITIES_REVISION_1;

    timeStampCapabilities.CrossTimestamp = TRUE;
    timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv4EventMsgReceiveHw = TRUE;
    timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv6EventMsgReceiveHw = TRUE;
    timeStampCapabilities.TimestampFlags.TaggedTransmitHw = TRUE;

    timeStampCapabilities.HardwareClockFrequencyHz = 150000;

    timeStampStatus.Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION;
    timeStampStatus.Header.Revision = NDIS_STATUS_INDICATION_REVISION_1;
    timeStampStatus.Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1;

    timeStampStatus.SourceHandle = MiniportAdapterHandle;
    timeStampStatus.StatusBuffer = &timeStampCapabilities;
    timeStampStatus.StatusBufferSize = sizeof(timeStampCapabilities);
    timeStampStatus.StatusCode = NDIS_STATUS_TIMESTAMP_CAPABILITY;

    // Generate an NDIS_STATUS_TIMESTAMP_CAPABILITY status indication
    NdisMIndicateStatusEx(MiniportAdapterHandle, &timeStampStatus);
. . .
}

Exigences

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

Voir aussi

fonctionnalités d’horodatage Reporting et de configuration actuelle

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION