微型端口驱动程序使用 NDIS_STATUS_TIMESTAMP_CAPABILITY 状态指示向 NDIS 和过度应用驱动程序报告 NIC 的硬件时间戳功能和微型端口驱动程序的软件时间戳功能。
此状态指示表示硬件和微型端口驱动程序的时间戳功能,而不是当前启用或禁用的功能。 有关报告当前时间戳配置的详细信息,请参阅 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(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) |