NDIS_STATUS_TIMESTAMP_CAPABILITY
미니포트 드라이버는 NDIS_STATUS_TIMESTAMP_CAPABILITY 상태 표시를 사용하여 NIC의 하드웨어 타임스탬프 기능과 미니포트 드라이버의 소프트웨어 타임스탬프 기능을 NDIS 및 지나치게 많은 드라이버에 보고합니다.
이 상태 표시는 하드웨어 및 미니포트 드라이버의 타임스탬프 기능을 나타내며 현재 사용하거나 사용하지 않도록 설정된 기능이 아닙니다. 현재 타임스탬프 구성을 보고하는 방법에 대한 자세한 내용은 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 참조하세요.
설명
초기화 중에 미니포트 드라이버는 MiniportInitializeEx 함수 내에서 하드웨어 및 소프트웨어 타임스탬프 기능을 나타내야 합니다. 드라이버는 다음을 수행해야 합니다.
NIC의 하드웨어 및 소프트웨어 타임스탬프 기능을 사용하여 NDIS_TIMESTAMP_CAPABILITIES 구조를 초기화합니다. 드라이버는 다음과 같이 NDIS_TIMESTAMP_CAPABILITIES 구조체의 멤버를 설정합니다.
- 드라이버는 TimestampFlags 필드를 사용하여 하드웨어 및 소프트웨어 타임스탬프 기능을 나타냅니다.
참고
구현은 하드웨어 타임스탬프 및 크로스 타임스탬프를 지원해야 합니다. 소프트웨어 타임스탬프 지원은 선택 사항입니다.
드라이버는 CrossTimestamp 필드를 TRUE로 설정해야 합니다.
HardwareClockFrequencyHz 필드에는 NIC의 타임스탬프에 사용되는 하드웨어 클록의 명목 작동 빈도가 포함되어야 합니다. 이 데이터는 정보를 위해 최종 사용자에게 명목 클록 빈도를 표시하는 데 사용할 수 있습니다.
헤더 필드의 형식 필드는 NDIS_OBJECT_TYPE_DEFAULT, 수정 버전은NDIS_TIMESTAMP_CAPABILITIES_REVISION_1 설정해야 합니다.
NdisMIndicateStatusEx를 호출하여 타임스탬프 기능을 보고하여 NDIS_STATUS_TIMESTAMP_CAPABILITY 상태 표시를 생성합니다. NDIS_STATUS_INDICATION 구조체의 StatusBuffer 필드는 초기화된 NDIS_TIMESTAMP_CAPABILITIES 구조를 가리킵니다.
또한 미니포트 드라이버는 기본 하드웨어 기능의 변화를 감지할 때마다 NDIS_STATUS_TIMESTAMP_CAPABILITY 상태 표시를 생성해야 합니다.
미니포트 드라이버가 지원되는 타임스탬프 기능을 나타내는 방법은 다음과 같습니다.
// From within its initialization routine, the miniport in this
// example indicates that it supports the following capabilities:
// - PtpV2OverUdpIPv4EventMsgReceiveHw
// - PtpV2OverUdpIPv6EventMsgReceiveHw
// - TaggedTransmitHw
// - CrossTimestamp
NDIS_STATUS MiniportInitializeEx(
_In_ NDIS_HANDLE MiniportAdapterHandle,
_In_ NDIS_HANDLE MiniportDriverContext,
_In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
)
{
. . .
NDIS_TIMESTAMP_CAPABILITIES timeStampCapabilities;
NDIS_STATUS_INDICATION timeStampStatus;
. . .
// Initialize an NDIS_TIMESTAMP_CAPABILITIES structure
RtlZeroMemory(&timeStampCapabilities, sizeof(timeStampCapabilities));
RtlZeroMemory(&timeStampStatus, sizeof(timeStampStatus));
timeStampCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
timeStampCapabilities.Header.Size = sizeof(timeStampCapabilities);
timeStampCapabilities.Header.Revision = NDIS_TIMESTAMP_CAPABILITIES_REVISION_1;
timeStampCapabilities.CrossTimestamp = TRUE;
timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv4EventMsgReceiveHw = TRUE;
timeStampCapabilities.TimestampFlags.PtpV2OverUdpIPv6EventMsgReceiveHw = TRUE;
timeStampCapabilities.TimestampFlags.TaggedTransmitHw = TRUE;
timeStampCapabilities.HardwareClockFrequencyHz = 150000;
timeStampStatus.Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION;
timeStampStatus.Header.Revision = NDIS_STATUS_INDICATION_REVISION_1;
timeStampStatus.Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1;
timeStampStatus.SourceHandle = MiniportAdapterHandle;
timeStampStatus.StatusBuffer = &timeStampCapabilities;
timeStampStatus.StatusBufferSize = sizeof(timeStampCapabilities);
timeStampStatus.StatusCode = NDIS_STATUS_TIMESTAMP_CAPABILITY;
// Generate an NDIS_STATUS_TIMESTAMP_CAPABILITY status indication
NdisMIndicateStatusEx(MiniportAdapterHandle, &timeStampStatus);
. . .
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 11 |
지원되는 최소 서버 | Windows Server 2022 |
NDIS 버전 | NDIS 6.82 이상 |
헤더 | Ntddndis.h(Ndis.h 포함) |