ミニポート ドライバーは、NIC のハードウェア タイムスタンプ機能とミニポート ドライバーのソフトウェア タイムスタンプ機能を NDIS と上にあるドライバーに報告する NDIS_STATUS_TIMESTAMP_CAPABILITY 状態の表示を使用します。
この状態表示は、現在有効または無効になっている機能ではなく、ハードウェアおよびミニポート ドライバーのタイムスタンプ機能を表します。 現在のタイムスタンプ設定のレポートの詳細については、NDIS_STATUS_TIMESTAMP_CURRENT_CONFIGを参照してください。
備考
初期化中、ミニポート ドライバーは、ミニポートInitializeEx 関数内から、そのハードウェアとソフトウェアのタイムスタンプ機能を示す必要があります。 ドライバーは次の手順を実行する必要があります。
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(ndis-status-timestamp-capability.md) 状態の表示も生成する必要があります。
ミニポート ドライバーがサポートされているタイムスタンプ機能を示す方法を次に示します。
// 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_STATUS_TIMESTAMP_CURRENT_CONFIG
NdisMIndicateStatusExの