Compartilhar via


OID_TIMESTAMP_GET_CROSSTIMESTAMP

Um driver sobreposto emite uma solicitação de consulta OID (identificador de objeto) de OID_TIMESTAMP_GET_CROSSTIMESTAMP para obter um carimbo de data/hora cruzado do hardware nic. Um carimbo de data/hora cruzado é o conjunto de carimbos de data/hora de hardware nic e carimbos de data/hora do sistema obtidos muito próximos uns dos outros. Os aplicativos PTP (Precision Time Protocol) versão 2 usam as informações fornecidas neste OID para estabelecer uma relação entre o relógio de hardware da NIC e um relógio do sistema.

O driver de miniporta deverá dar suporte a esse OID se definir o campo CrossTimestamp como TRUE na estrutura NDIS_TIMESTAMP_CAPABILITIES como parte da configuração atual. Para obter mais detalhes sobre como relatar a configuração atual, consulte a indicação status NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG. Se a capacidade de carimbo de data/hora transversais estiver desabilitada, o OID deverá ser concluído com um código de erro apropriado (por exemplo, NDIS_STATUS_NOT_SUPPORTED).

O membro RequestType da estrutura NDIS_OID_REQUEST será NdisRequestQueryInformation.

Quando um driver de miniporta recebe a solicitação OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP, o driver conclui o OID preenchendo o InformationBuffer no QUERY_INFORMATION com uma estrutura NDIS_HARDWARE_CROSSTIMESTAMP . O campo Tipo no campo Cabeçalho da estrutura NDIS_HARDWARE_CROSSTIMESTAMP deve ser definido como NDIS_OBJECT_TYPE_DEFAULT e o campo Revisão para NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. O driver deve preencher os campos SystemTimestamp1, HardwareClockTimestamp e SystemTimestamp2 com os seguintes carimbos de data/hora obtidos o mais próximo possível um do outro e na seguinte ordem:

  1. SystemTimestamp1: QPC (valor do contador de desempenho) obtido chamando KeQueryPerformanceCounter.

  2. HardwareClockTimestamp: o valor atual do relógio de hardware nic. Esse deve ser o valor bruto do relógio de hardware da NIC.

  3. SystemTimestamp2: outro QPC (valor de contador de desempenho) obtido chamando KeQueryPerformanceCounter.

Veja um exemplo de como um driver de miniporta lida com 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
}

O campo Sinalizadores na estrutura NDIS_HARDWARE_CROSSTIMESTAMP é reservado para uso futuro. O driver de miniporta não deve alterar seu valor.

O driver de miniporta e o hardware são livres para otimizar a coleção desses carimbos de data/hora, dependendo de quaisquer funcionalidades avançadas de hardware. No entanto, os valores SystemTimestamp1 e SystemTimestamp2 retornados na conclusão do OID devem corresponder com precisão ao valor do contador de desempenho (QPC) no momento da captura. O HardwareClockTimestamp deve corresponder ao valor do relógio de hardware da NIC no ponto de captura. Se uma implementação específica puder determinar com mais precisão dois carimbos de data/hora em vez de três (por exemplo, um carimbo de data/hora do sistema e o carimbo de data/hora do relógio de hardware nic correspondente), ele deverá definir o campo SystemTimestamp2 com o mesmo valor que SystemTimestamp1.

O driver de miniporta não deve definir os valores SystemTimestamp1, HardwareClockTimestamp ou SystemTimestamp2 como zero.

Códigos de status de retorno

O driver de miniporta retorna um dos seguintes códigos de status para a solicitação de consulta OID de OID_TIMESTAMP_GET_CROSSTIMESTAMP.

Código de status Descrição
NDIS_STATUS_SUCCESS A solicitação OID foi concluída com êxito.
NDIS_STATUS_NOT_SUPPORTED O driver de miniporta não dá suporte ao carimbo de data/hora cruzado ou a capacidade de carimbo de data/hora cruzada está desabilitada.
NDIS_STATUS_FAILURE A solicitação falhou por outros motivos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 11
Servidor mínimo com suporte Windows Server 2022
Versão do NDIS NDIS 6.82 e posterior
Cabeçalho Ntddndis.h (inclua Ndis.h)

Confira também

NDIS_STATUS_TIMESTAMP_CAPABILITY

OID_TIMESTAMP_CURRENT_CONFIG

OID_TIMESTAMP_CAPABILITY

NDIS_OID_REQUEST