OID_TIMESTAMP_GET_CROSSTIMESTAMP
過度的驅動程式會發出OID_TIMESTAMP_GET_CROSSTIMESTAMP的物件標識碼 (OID) 查詢要求,以從 NIC 硬體取得跨時間戳。 交叉時間戳是一組非常接近的 NIC 硬體時間戳和系統時間戳。 精確度時間通訊協定 (PTP) 第 2 版應用程式會使用此 OID 中提供的資訊來建立 NIC 硬體時鐘與系統時鐘之間的關聯性。
如果迷你埠驅動程式將 [CrossTimestamp] 字段設定 為目前組態的一部分,NDIS_TIMESTAMP_CAPABILITIES 結構中的 TRUE,則必須支援此 OID。 如需報告目前設定的詳細資訊,請參閱 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 狀態指示。 如果停用交叉時間戳功能,則 OID 應該以適當的錯誤碼完成(例如,NDIS_STATUS_NOT_SUPPORTED)。
RequestTypeNDIS_OID_REQUEST 結構的成員將會 NdisRequestQueryInformation。
當迷你埠驅動程式收到 OID_TIMESTAMP_GET_CROSSTIMESTAMP 的 OID 要求時,驅動程式會填滿 InformationBufferQUERY_INFORMATION 中的 NDIS_HARDWARE_CROSSTIMESTAMP 結構來完成 OID。 NDIS_HARDWARE_CROSSTIMESTAMP 結構的 [標頭] 字段中的 [類型] 字段應設定為 [NDIS_OBJECT_TYPE_DEFAULT],並將 [修訂] 字段設定為 [NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1]。 驅動程式應填入 SystemTimestamp1、HardwareClockTimestamp 和 SystemTimestamp2 字段,並盡可能以下列順序採用下列時間戳:
SystemTimestamp1:呼叫 KeQueryPerformanceCounter取得的性能計數器值 (QPC)。
HardwareClockTimestamp:NIC 硬體時鐘目前的值。 這應該是 NIC 的原始硬體時鐘值。
SystemTimestamp2:呼叫 KeQueryPerformanceCounter取得的另一個性能計數器值 (QPC)。
以下是迷你埠驅動程式如何處理OID_TIMESTAMP_GET_CROSSTIMESTAMP的範例:
{
. . .
NDIS_HARDWARE_CROSSTIMESTAMP crossTimestamp;
LARGE_INTEGER timeStamp;
RtlZeroMemory(&crossTimestamp, sizeof(crossTimestamp));
timeStamp = KeQueryPerformanceCounter(NULL);
crossTimestamp.SystemTimestamp1 = timeStamp.QuadPart;
crossTimestamp.HardwareClockTimestamp = FunctionToRetrieveHardwareTimestampFromNetworkCard();
timeStamp = KeQueryPerformanceCounter(NULL);
crossTimestamp.SystemTimestamp2 = timeStamp.QuadPart;
crossTimestamp.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
crossTimestamp.Header.Size = NDIS_SIZEOF_HARDWARE_CROSSTIMESTAMP_REVISION_1;
crossTimestamp.Header.Revision = NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1;
// Complete the OID by filling the query information buffer with the crossTimestamp
}
NDIS_HARDWARE_CROSSTIMESTAMP 結構中的 [旗標] 字段會保留供日後使用。 迷你埠驅動程式不得變更其值。
迷你埠驅動程式和硬體可根據任何進階硬體功能,將這些時間戳的集合優化。 不過,在擷取時,SystemTimestamp1 和 SystemTimestamp2 值必須準確地對應到擷取時的性能計數器 (QPC) 值。 HardwareClockTimestamp 必須對應至擷取點的 NIC 硬體時鐘值。 如果特定實作可以更準確地判斷兩個時間戳,而不是三個時間戳(例如,一個系統時間戳和對應的 NIC 硬體時鐘時間戳),則它應該將 SystemTimestamp2 字段設定為與 systemTimestamp1 相同的值。
迷你埠驅動程式不應將 SystemTimestamp1、HardwareClockTimestamp或 SystemTimestamp2 值設定為 零。
傳回狀態代碼
迷你埠驅動程式會針對 OID_TIMESTAMP_GET_CROSSTIMESTAMP 的 OID 查詢要求傳回下列其中一個狀態代碼。
狀態代碼 | 描述 |
---|---|
NDIS_STATUS_SUCCESS | OID 要求已順利完成。 |
NDIS_STATUS_NOT_SUPPORTED | 迷你埠驅動程序不支援交叉時間戳或停用交叉時間戳功能。 |
NDIS_STATUS_FAILURE | 要求因其他原因而失敗。 |
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 11 |
最低支援的伺服器 | Windows Server 2022 |
NDIS 版本 | NDIS 6.82 和更新版本 |
頁眉 | Ntddndis.h (包括 Ndis.h) |