Compartir a través de


OID_TIMESTAMP_GET_CROSSTIMESTAMP

Un controlador de exceso emite una solicitud de consulta de identificador de objeto (OID) de OID_TIMESTAMP_GET_CROSSTIMESTAMP para obtener una marca de tiempo cruzada del hardware NIC. Una marca de tiempo cruzada es el conjunto de una marca de tiempo de hardware de NIC y marcas de tiempo del sistema obtenidas muy cerca entre sí. Las aplicaciones del Protocolo de tiempo de precisión (PTP) versión 2 usan la información proporcionada en este OID para establecer una relación entre el reloj de hardware de la NIC y un reloj del sistema.

El controlador de minipuerto debe admitir este OID si establece el campo CrossTimestamp en TRUE en la estructura NDIS_TIMESTAMP_CAPABILITIES como parte de la configuración actual. Para obtener más información sobre cómo informar de la configuración actual, consulte la indicación de estado de NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG . Si la capacidad de marca de tiempo cruzada está deshabilitada, el OID debe completarse con un código de error adecuado (por ejemplo, NDIS_STATUS_NOT_SUPPORTED).

El miembro RequestType de la estructura NDIS_OID_REQUEST será NdisRequestQueryInformation.

Cuando un controlador de minipuerto recibe la solicitud OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP, el controlador completa el OID rellenando informationBuffer en el QUERY_INFORMATION con una estructura de NDIS_HARDWARE_CROSSTIMESTAMP . El campo Tipo del campo Encabezado de la estructura NDIS_HARDWARE_CROSSTIMESTAMP debe establecerse en NDIS_OBJECT_TYPE_DEFAULT y el campo Revisión en NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. El controlador debe rellenar los campos SystemTimestamp1, HardwareClockTimestamp y SystemTimestamp2 con las siguientes marcas de tiempo tomadas entre sí lo más posible y en el orden siguiente:

  1. SystemTimestamp1: valor del contador de rendimiento (QPC) obtenido mediante una llamada a KeQueryPerformanceCounter.

  2. HardwareClockTimestamp: el valor actual del reloj de hardware NIC. Debe ser el valor de reloj de hardware sin procesar de la NIC.

  3. SystemTimestamp2: otro valor de contador de rendimiento (QPC) obtenido mediante una llamada a KeQueryPerformanceCounter.

Este es un ejemplo de cómo un controlador de minipuerto controla 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
}

El campo Marcas de la estructura NDIS_HARDWARE_CROSSTIMESTAMP está reservado para su uso futuro. El controlador de minipuerto no debe cambiar su valor.

El controlador de miniporte y el hardware son gratuitos para optimizar la colección de estas marcas de tiempo en función de las funcionalidades avanzadas de hardware. Sin embargo, los valores SystemTimestamp1 y SystemTimestamp2 devueltos en la finalización del OID deben corresponder con precisión al valor del contador de rendimiento (QPC) en el momento de la captura. HardwareClockTimestamp debe corresponder al valor de reloj de hardware de la NIC en el punto de captura. Si una implementación determinada puede determinar con más precisión dos marcas de tiempo en lugar de tres (por ejemplo, una marca de tiempo del sistema y la marca de tiempo del reloj de hardware NIC correspondiente), debe establecer el campo SystemTimestamp2 en el mismo valor que SystemTimestamp1.

El controlador de minipuerto no debe establecer los valores SystemTimestamp1, HardwareClockTimestamp o SystemTimestamp2 en cero.

Códigos de estado de devolución

El controlador de minipuerto devuelve uno de los siguientes códigos de estado para la solicitud de consulta OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP.

Código de estado Descripción
NDIS_STATUS_SUCCESS La solicitud OID se completó correctamente.
NDIS_STATUS_NOT_SUPPORTED El controlador de minipuerto no admite la marca de tiempo cruzada o la capacidad de marca de tiempo cruzada está deshabilitada.
NDIS_STATUS_FAILURE Error en la solicitud por otros motivos.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 11
Servidor mínimo compatible Windows Server 2022
Versión de NDIS NDIS 6.82 y versiones posteriores
Encabezado Ntddndis.h (include Ndis.h)

Consulte también

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST