OID_TIMESTAMP_GET_CROSSTIMESTAMP
過度配置驅動程式會在 OID (OID) 查詢要求發出OID_TIMESTAMP_GET_CROSSTIMESTAMP的物件識別碼,以從 NIC 硬體取得交叉時間戳記。 交叉時間戳記是一組 NIC 硬體時間戳記和系統時間戳記, () 彼此非常接近。 精確度時間通訊協定 (PTP) 第 2 版應用程式,使用此 OID 中提供的資訊來建立 NIC 硬體時鐘與系統時鐘之間的關聯性。
如果迷你埠驅動程式將 NDIS_TIMESTAMP_CAPABILITIES結構中的CrossTimestamp欄位設定為TRUE,則必須支援此 OID,作為目前組態的一部分。 如需報告目前設定的詳細資訊,請參閱 NDIS_STATUS_TIMESTAMP_CURRENT_CONFIG 狀態指示。 如果停用交叉時間戳記功能,則 OID 應該以適當的錯誤碼完成,例如 (,NDIS_STATUS_NOT_SUPPORTED) 。
NDIS_OID_REQUEST結構的RequestType成員將會是NdisRequestQueryInformation。
當迷你埠驅動程式收到 OID_TIMESTAMP_GET_CROSSTIMESTAMP 的 OID 要求時,驅動程式會填入QUERY_INFORMATION NDIS_HARDWARE_CROSSTIMESTAMP結構中的InformationBuffer來完成 OID。 NDIS_HARDWARE_CROSSTIMESTAMP結構的[標頭] 欄位中的[類型] 欄位應該設定為[NDIS_OBJECT_TYPE_DEFAULT],[修訂] 欄位設為[NDIS_HARDWARE_CROSSTIMESTAMP_REVISION_1]。 驅動程式應該填入 SystemTimestamp1、 HardwareClockTimestamp 和 SystemTimestamp2 欄位,其時間戳記會盡可能接近彼此,並依下列順序:
SystemTimestamp1:呼叫 KeQueryPerformanceCounter取得的 Q) PC (效能計數器值。
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結構中的[旗標] 欄位會保留供日後使用。 迷你埠驅動程式不得變更其值。
迷你埠驅動程式和硬體可以視任何進階硬體功能而定,將這些時間戳記的集合優化。 不過,在 OID 完成時傳回 的 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) |