NDIS_STATUS_TIMESTAMP_CAPABILITY

미니포트 드라이버는 NDIS_STATUS_TIMESTAMP_CAPABILITY 상태 표시를 사용하여 NIC의 하드웨어 타임스탬프 기능과 미니포트 드라이버의 소프트웨어 타임스탬프 기능을 NDIS 및 지나치게 많은 드라이버에 보고합니다.

이 상태 표시는 하드웨어 및 미니포트 드라이버의 타임스탬프 기능을 나타내며 현재 사용하거나 사용하지 않도록 설정된 기능이 아닙니다. 현재 타임스탬프 구성을 보고하는 방법에 대한 자세한 내용은 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 참조하세요.

설명

초기화 중에 미니포트 드라이버는 MiniportInitializeEx 함수 내에서 하드웨어 및 소프트웨어 타임스탬프 기능을 나타내야 합니다. 드라이버는 다음을 수행해야 합니다.

  1. NIC의 하드웨어 및 소프트웨어 타임스탬프 기능을 사용하여 NDIS_TIMESTAMP_CAPABILITIES 구조를 초기화합니다. 드라이버는 다음과 같이 NDIS_TIMESTAMP_CAPABILITIES 구조체의 멤버를 설정합니다.

    • 드라이버는 TimestampFlags 필드를 사용하여 하드웨어 및 소프트웨어 타임스탬프 기능을 나타냅니다.

    참고

    구현은 하드웨어 타임스탬프 및 크로스 타임스탬프를 지원해야 합니다. 소프트웨어 타임스탬프 지원은 선택 사항입니다.

    • 드라이버는 CrossTimestamp 필드를 TRUE로 설정해야 합니다.

    • HardwareClockFrequencyHz 필드에는 NIC의 타임스탬프에 사용되는 하드웨어 클록의 명목 작동 빈도가 포함되어야 합니다. 이 데이터는 정보를 위해 최종 사용자에게 명목 클록 빈도를 표시하는 데 사용할 수 있습니다.

    • 헤더 필드의 형식 필드는 NDIS_OBJECT_TYPE_DEFAULT, 수정 버전은NDIS_TIMESTAMP_CAPABILITIES_REVISION_1 설정해야 합니다.

  2. 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 포함)

추가 정보

타임스탬프 기능 및 현재 구성 보고

NDIS_TIMESTAMP_CAPABILITIES

NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG

MiniportInitializeEx

NdisMIndicateStatusEx

NDIS_STATUS_INDICATION