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:
SystemTimestamp1: QPC (valor do contador de desempenho) obtido chamando KeQueryPerformanceCounter.
HardwareClockTimestamp: o valor atual do relógio de hardware nic. Esse deve ser o valor bruto do relógio de hardware da NIC.
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) |