EtwWriteEx 函式 (wdm.h)
EtwWriteEx 函式是發佈支援在內核模式驅動程式程式代碼中篩選事件的追蹤函式。
語法
NTSTATUS EtwWriteEx(
[in] REGHANDLE RegHandle,
[in] PCEVENT_DESCRIPTOR EventDescriptor,
[in] ULONG64 Filter,
[in] ULONG Flags,
[in, optional] LPCGUID ActivityId,
[in, optional] LPCGUID RelatedActivityId,
[in] ULONG UserDataCount,
[in, optional] PEVENT_DATA_DESCRIPTOR UserData
);
參數
[in] RegHandle
事件提供者註冊句柄的指標,如果事件提供者註冊成功,則由 EtwRegister 函式傳回。
[in] EventDescriptor
EVENT_DESCRIPTOR 結構的指標。
[in] Filter
實例標識碼,識別事件不會寫入的會話。 也就是說,此值是會話的遮罩,應該從記錄中排除(篩選掉)。 使用位 OR 來指定多個識別碼。 如果您不支持篩選,或事件正在寫入所有工作階段,則設定為零(沒有篩選失敗)。 如需取得會話標識符的資訊,請參閱 EtwEnableCallback 回呼的 FilterData 參數。
[in] Flags
保留。 必須是零 (0)。
[in, optional] ActivityId
標識符,表示與事件相關聯的活動。 ActivityID 提供將相關事件分組的方式,並用於端對端追蹤。 如果為 NULL,ETW 會從線程本機記憶體取得標識碼。 如需取得此識別碼的詳細資訊,請參閱 EtwActivityIdControl。
[in, optional] RelatedActivityId
來自上一個元件的活動標識碼。 使用此參數將元件的事件連結至先前元件的事件。 若要取得為上一個元件設定的活動標識碼,請參閱 EtwActivityIdControl 函式 ControlCode 參數的描述。
[in] UserDataCount
UserData中的EVENT_DATA_DESCRIPTOR結構數目。 最大數目為 128。
[in, optional] UserData
EVENT_DATA_DESCRIPTOR 結構的陣列指標。 如果 UserDataCount 為零,請將此參數設定為 NULL。 數據必須依指令清單中指定的順序排列。
傳回值
如果成功或下列其中一個值發生錯誤,則傳回ERROR_SUCCESS。
言論
EtwWriteEx 函式是與 EventWriteEx 函式使用者模式相同的內核 模式。 使用此函式寫入的事件數據需要指令清單。 指令清單內嵌在提供者中,因此提供者必須可供取用者取用數據。 若要確保您發行的事件有取用者,您可以在呼叫 EtwWrite 之前呼叫 EtwEventEnabled 或 EtwProviderEnabled呼叫。
當您想要在端對端追蹤案例中將不同元件中的事件產生關聯時,請使用 ActivityId 和 RelatedActivityId 參數。 例如,元件 A、B 和 C 會對相關活動執行工作,並想要連結其事件,讓取用者可以取用與該活動相關的所有事件。
您可以在任何 IRQL 呼叫 EtwWriteEx。 不過,當 IRQL 大於APC_LEVEL時,任何傳遞至 EtwWrite、EtwWriteEx、EtwWriteString、EtwWriteTransfer 函式的數據都不得分頁。 也就是說,在 IRQL 上執行且大於 APC_LEVEL 的任何內核模式例程都無法存取可分頁記憶體。 傳遞至 EtwWrite、EtwWriteEx、EtwWriteString的數據,以及 EtwWriteTransfer 函式必須位於系統空間記憶體中,不論 IRQL 是什麼。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 7 |
支援的最低伺服器 | Windows Server 2008 R2 |
目標平臺 | 普遍 |
標頭 | wdm.h |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |