NDIS_STATUS_TIMESTAMP_CAPABILITY

ミニポート ドライバーは、NIC のハードウェア タイムスタンプ機能とミニポート ドライバーのソフトウェア タイムスタンプ機能を、NDIS と上位ドライバーに報告する NDIS_STATUS_TIMESTAMP_CAPABILITY ステータス指示を使用します。

このステータス指示は、現在有効または無効な機能ではなく、ハードウェアおよびミニポート ドライバーのタイムスタンプ機能を表します。 現在のタイムスタンプ構成のレポートについて詳しくは、NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG をご覧ください。

解説

初期化中、ミニポート ドライバーは、その MiniportInitializeEx 関数内からハードウェアとソフトウェアのタイムスタンプ機能を示す必要があります。 ドライバーは次の手順を実行する必要があります:

  1. NIC のハードウェアとソフトウェアのタイムスタンプ機能を使用して、NDIS_TIMESTAMP_CAPABILITIES 構造を初期化します。 ドライバーは、NDIS_TIMESTAMP_CAPABILITIES 構造のメンバーを次のように設定します。

    • ドライバーは、TimestampFlags フィールドを使用し、ハードウェアとソフトウェアのタイムスタンプ機能を示します。

    Note

    実装では、ハードウェア タイムスタンプとクロス タイムスタンプがサポートされている必要があります。 ソフトウェア タイムスタンプのサポートは省略可能です。

    • ドライバーは、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);
. . .
}

要件

要件 Value
サポートされている最小のクライアント 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