OID_TIMESTAMP_GET_CROSSTIMESTAMP

지나치게 많은 드라이버는 NIC 하드웨어에서 크로스 타임스탬프를 얻기 위해 OID_TIMESTAMP_GET_CROSSTIMESTAMP OID(개체 식별자) 쿼리 요청을 실행합니다. 크로스 타임스탬프는 서로 매우 가깝게 얻은 NIC 하드웨어 타임스탬프 및 시스템 타임스탬프 집합입니다. PTP(정밀 시간 프로토콜) 버전 2 애플리케이션은 이 OID에 제공된 정보를 사용하여 NIC의 하드웨어 클록과 시스템 클록 간의 관계를 설정합니다.

미니포트 드라이버는 현재 구성의 일부로 NDIS_TIMESTAMP_CAPABILITIES 구조에서 CrossTimestamp 필드를 TRUE로 설정하는 경우 이 OID를 지원해야 합니다. 현재 구성 보고에 대한 자세한 내용은 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 상태 표시를 참조하세요. 크로스 타임스탬프 기능을 사용하지 않도록 설정하면 적절한 오류 코드(예: NDIS_STATUS_NOT_SUPPORTED)로 OID를 완료해야 합니다.

NDIS_OID_REQUEST 구조체의 RequestType 멤버는 NdisRequestQueryInformation입니다.

미니포트 드라이버가 OID_TIMESTAMP_GET_CROSSTIMESTAMP OID 요청을 받으면 드라이버는 QUERY_INFORMATION InformationBufferNDIS_HARDWARE_CROSSTIMESTAMP 구조로 채워 OID를 완료합니다. NDIS_HARDWARE_CROSSTIMESTAMP 구조체의 헤더 필드에 있는 형식 필드는 NDIS_OBJECT_TYPE_DEFAULT 설정해야 하며 수정 필드가 NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. 드라이버는 SystemTimestamp1, HardwareClockTimestampSystemTimestamp2 필드를 가능한 한 가까이에서 다음 순서로 가져온 다음 타임스탬프로 채워야 합니다.

  1. SystemTimestamp1: KeQueryPerformanceCounter를 호출하여 얻은 QPC(성능 카운터 값)입니다.

  2. HardwareClockTimestamp: NIC 하드웨어 클록의 현재 값입니다. NIC의 원시 하드웨어 클록 값이어야 합니다.

  3. SystemTimestamp2: KeQueryPerformanceCounter를 호출하여 얻은 또 다른 QPC(성능 카운터 값)입니다.

미니포트 드라이버가 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 구조의 Flags 필드는 나중에 사용하도록 예약되어 있습니다. 미니포트 드라이버는 해당 값을 변경해서는 안됩니다.

미니포트 드라이버 및 하드웨어는 고급 하드웨어 기능에 따라 이러한 타임스탬프의 컬렉션을 자유롭게 최적화할 수 있습니다. 그러나 OID 완성 시 반환된 SystemTimestamp1SystemTimestamp2 값은 캡처 시 QPC(성능 카운터) 값과 정확하게 일치해야 합니다. HardwareClockTimestamp는 캡처할 때 NIC의 하드웨어 클록 값에 해당해야 합니다. 특정 구현이 3개가 아닌 두 개의 타임스탬프(예: 하나의 시스템 타임스탬프 및 해당 NIC 하드웨어 클록 타임스탬프)를 보다 정확하게 결정할 수 있는 경우 SystemTimestamp2 필드를 SystemTimestamp1과 동일한 값으로 설정해야 합니다.

미니포트 드라이버는 SystemTimestamp1, HardwareClockTimestamp 또는 SystemTimestamp2 값을 0으로 설정하면 안 됩니다.

반환 상태 코드

미니포트 드라이버는 OID_TIMESTAMP_GET_CROSSTIMESTAMP OID 쿼리 요청에 대해 다음 상태 코드 중 하나를 반환합니다.

상태 코드 Description
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