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


OID_TIMESTAMP_GET_CROSSTIMESTAMP

Слишком важный драйвер выдает запрос на запрос идентификатора объекта (OID) OID_TIMESTAMP_GET_CROSSTIMESTAMP, чтобы получить перекрестную метку времени от оборудования сетевой карты. Перекрестная метка времени — это набор меток времени оборудования сетевой карты и системных меток времени, полученных очень близко друг к другу. Приложения протокола точного времени (PTP) версии 2 используют сведения, предоставленные в этом OID, для установления связи между аппаратными часами сетевого адаптера и системными часами.

Драйвер мини-порта должен поддерживать этот OID, если он задает для поля CrossTimestampзначение TRUE в структуре NDIS_TIMESTAMP_CAPABILITIES в рамках текущей конфигурации. Дополнительные сведения о том, как сообщить о текущей конфигурации, см . в описании состояния NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG . Если возможность перекрестной метки времени отключена, OID должен быть заполнен соответствующим кодом ошибки (например, NDIS_STATUS_NOT_SUPPORTED).

Элементом RequestType структуры NDIS_OID_REQUEST будет NdisRequestQueryInformation.

Когда драйвер мини-порта получает запрос OID OID_TIMESTAMP_GET_CROSSTIMESTAMP, драйвер завершает OID, заполняя InformationBuffer в QUERY_INFORMATIONструктурой NDIS_HARDWARE_CROSSTIMESTAMP . Для поля Тип в поле Заголовокструктуры NDIS_HARDWARE_CROSSTIMESTAMP следует задать значение NDIS_OBJECT_TYPE_DEFAULT , а для поля Редакция— значение NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. Драйвер должен заполнить поля SystemTimestamp1, HardwareClockTimestamp и SystemTimestamp2 следующими метками времени, взятыми как можно ближе друг к другу и в следующем порядке:

  1. SystemTimestamp1: значение счетчика производительности (QPC), полученное путем вызова KeQueryPerformanceCounter.

  2. HardwareClockTimestamp: текущее значение аппаратных часов сетевой карты. Это должно быть необработанное значение аппаратных часов сетевого адаптера.

  3. SystemTimestamp2: другое значение счетчика производительности (QPC), полученное путем вызова KeQueryPerformanceCounter.

Ниже приведен пример того, как драйвер минипорта обрабатывает 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
}

Поле Флаги в структуре NDIS_HARDWARE_CROSSTIMESTAMP зарезервировано для использования в будущем. Драйвер мини-порта не должен изменять свое значение.

Драйвер и оборудование мини-порта могут бесплатно оптимизировать сбор этих меток времени в зависимости от дополнительных возможностей оборудования. Однако значения SystemTimestamp1 и SystemTimestamp2 , возвращаемые при завершении OID, должны точно соответствовать значению счетчика производительности (QPC) на момент записи. Метка HardwareClockTimestamp должна соответствовать значению аппаратных часов сетевого адаптера в точке записи. Если конкретная реализация может более точно определить две метки времени, а не три (например, одну системную метку времени и соответствующую метку времени аппаратных часов сетевого адаптера), она должна задать для поля SystemTimestamp2 то же значение, что и SystemTimestamp1.

Драйвер мини-порта не должен задавать значения SystemTimestamp1, HardwareClockTimestamp или SystemTimestamp2равным нулю.

Коды состояния возврата

Драйвер мини-порта возвращает один из следующих кодов состояния для запроса OID OID_TIMESTAMP_GET_CROSSTIMESTAMP.

Код состояния Описание
NDIS_STATUS_SUCCESS Запрос OID успешно завершен.
NDIS_STATUS_NOT_SUPPORTED Драйвер мини-порта либо не поддерживает перекрестную метку времени, либо возможность перекрестной метки времени отключена.
NDIS_STATUS_FAILURE Сбой запроса по другим причинам.

Требования

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

См. также раздел

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST