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 InformationBuffer를 NDIS_HARDWARE_CROSSTIMESTAMP 구조로 채워 OID를 완료합니다. NDIS_HARDWARE_CROSSTIMESTAMP 구조체의 헤더 필드에 있는 형식 필드는 NDIS_OBJECT_TYPE_DEFAULT 설정해야 하며 수정 필드가 NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1. 드라이버는 SystemTimestamp1, HardwareClockTimestamp 및 SystemTimestamp2 필드를 가능한 한 가까이에서 다음 순서로 가져온 다음 타임스탬프로 채워야 합니다.
SystemTimestamp1: KeQueryPerformanceCounter를 호출하여 얻은 QPC(성능 카운터 값)입니다.
HardwareClockTimestamp: NIC 하드웨어 클록의 현재 값입니다. NIC의 원시 하드웨어 클록 값이어야 합니다.
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 완성 시 반환된 SystemTimestamp1 및 SystemTimestamp2 값은 캡처 시 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 포함) |