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 следующими метками времени, взятыми как можно ближе друг к другу и в следующем порядке:
SystemTimestamp1: значение счетчика производительности (QPC), полученное путем вызова KeQueryPerformanceCounter.
HardwareClockTimestamp: текущее значение аппаратных часов сетевой карты. Это должно быть необработанное значение аппаратных часов сетевого адаптера.
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) |