Поделиться через


NDIS_STATUS_TIMESTAMP_CAPABILITY

Драйверы минипорта используют индикатор состояния NDIS_STATUS_TIMESTAMP_CAPABILITY , чтобы сообщить о возможностях аппаратной метки времени сетевого адаптера и возможностях метки времени программного обеспечения драйвера минипорта в NDIS и чрезмерной загрузке драйверов.

Это указание состояния представляет возможности метки времени аппаратного и минипорта драйвера, а не возможности, которые в настоящее время включены или отключены. Дополнительные сведения о текущей конфигурации метки времени см. в NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG.

Замечания

Во время инициализации минипорт-драйвер должен указать возможности метки времени оборудования и программного обеспечения из функции MiniportInitializeEx . Драйвер должен:

  1. Инициализировать структуру NDIS_TIMESTAMP_CAPABILITIES с помощью возможностей аппаратной и программной метки времени сетевого адаптера. Драйвер задает элементы структуры NDIS_TIMESTAMP_CAPABILITIES следующим образом:

    • Драйвер использует поле TimestampFlags для указания возможностей метки времени оборудования и программного обеспечения.

    Замечание

    Реализация должна поддерживать метки времени оборудования и перекрестные метки времени. Поддержка меток времени программного обеспечения является необязательным.

    • Драйвер должен задать для поля CrossTimestampзначение TRUE.

    • Поле HardwareClockFrequencyHz должно содержать номинальную рабочую частоту аппаратных часов, используемых для метки времени сетевой картой. Эти данные могут использоваться для отображения номинальной частоты часов конечным пользователям в информационных целях.

    • Поле типа в поле заголовка должно иметь значение NDIS_OBJECT_TYPE_DEFAULT, а редакции — NDIS_TIMESTAMP_CAPABILITIES_REVISION_1.

  2. Создайте указание состояния NDIS_STATUS_TIMESTAMP_CAPABILITY путем вызова NdisMIndicateStatusEx , чтобы сообщить о возможностях метки времени. Поле StatusBuffer структуры NDIS_STATUS_INDICATION должно указывать на инициализированную структуру NDIS_TIMESTAMP_CAPABILITIES.

Минипорт-драйвер также должен создавать индикатор состояния NDIS_STATUS_TIMESTAMP_CAPABILITY(ndis-status-timestamp-capability.md) при обнаружении изменений в базовых возможностях оборудования.

Вот как минипорт-драйвер может указать поддерживаемые возможности метки времени:

// 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);
. . .
}

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 11
Минимальный поддерживаемый сервер Windows Server 2022
Версия NDIS NDIS 6.82 и более поздних версий
Заголовок Ntddndis.h (include Ndis.h)

См. также

Отчеты о возможностях метки времени и текущей конфигурации

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION