ControlTraceW 函式 (evntrace.h)
ControlTrace函式會排清、查詢、更新或停止指定的事件追蹤會話。
語法
ULONG WMIAPI ControlTraceW(
[in] TRACEHANDLE TraceHandle,
[in] LPCWSTR InstanceName,
[in, out] PEVENT_TRACE_PROPERTIES Properties,
[in] ULONG ControlCode
);
參數
[in] TraceHandle
事件追蹤會話的控制碼,或 0。 如果InstanceName為Null,您必須指定非零TraceHandle。 如果 InstanceName 不是 Null,ETW 會忽略控制碼。
StartTrace函式會在啟動新的追蹤時傳回此控制碼。 若要取得現有追蹤的控制碼,請使用ControlTrace根據追蹤的名稱查詢追蹤屬性,然後從傳 EVENT_TRACE_PROPERTIES
回資料的Wnode.HistoricalCoNtext欄位取得控制碼。
[in] InstanceName
事件追蹤會話的名稱,或 Null。 如果TraceHandle為 0,您必須指定InstanceName。
若要指定 NT 核心記錄器會話,請將 InstanceName 設定為 KERNEL_LOGGER_NAME。
[in, out] Properties
初始化 EVENT_TRACE_PROPERTIES 結構的指標。 設定任何欄位之前,此結構應該為零。
如果ControlCode指定EVENT_TRACE_CONTROL_STOP、EVENT_TRACE_CONTROL_QUERY或EVENT_TRACE_CONTROL_FLUSH,您只需要設定EVENT_TRACE_PROPERTIES結構的Wnode.BufferSize、Wnode.Guid、LoggerNameOffset和LogFileNameOffset成員。 如果會話是私人會話,您也需要設定 LogFileMode。 您可以使用最大會話名稱 (1024 個字元) 和記錄檔名稱上限 (1024 個字元,) 長度來計算緩衝區大小和不已知位移。
如果 ControlCode 指定 EVENT_TRACE_CONTROL_UPDATE,在輸入時,成員必須指定要更新之屬性的新值。 在輸出中, Properties 包含事件追蹤會話的屬性和統計資料。 您可以更新下列屬性。
EnableFlags:將此成員設定為 0 以停用所有系統提供者。 將此設定為非零值,以指定您想要啟用或保持啟用的系統提供者。 這可以是非零,僅適用于 系統記錄器。
FlushTimer:如果您想要變更排清緩衝區之前等候的時間,請設定此成員。 如果這個成員是 0,則成員不會更新。
LogFileNameOffset:如果您想要切換至另一個記錄檔,或將緩衝模式追蹤排清到新的記錄檔,請設定此成員。 如果這個成員為 0,則不會更新檔案名。 如果位移不是零,而且您未變更記錄檔名稱,則函式會傳回錯誤。
LogFileMode:如果您想要開啟和關閉 EVENT_TRACE_REAL_TIME_MODE ,請設定此成員。 若要關閉即時耗用,請將此成員設定為 0。 若要在 (建立記錄到磁片的會話以及以即時) 傳遞事件,請將此成員設定為 EVENT_TRACE_REAL_TIME_MODE ,而且會是目前模式的 OR。
MaximumBuffers:如果您想要變更 ETW 使用的緩衝區數目上限,請設定此成員。 如果這個成員是 0,則成員不會更新。
對於私人記錄器會話,您只能更新 LogFileNameOffset 和 FlushTimer 成員。
如果您使用新初始化 EVENT_TRACE_PROPERTIES 結構、零出結構、設定 Wnode.BufferSize、 Wnode.Guid和 Wnode.Flags,以及您想要更新的值。
如果您要重複使用EVENT_TRACE_PROPERTIES結構 (亦即,使用您先前傳遞至StartTrace 或 ControlTrace) 的結構,請務必將LogFileNameOffset成員設定為 0,除非您變更記錄檔名稱,而且請務必設定EVENT_TRACE_PROPERTIES。要WNODE_FLAG_TRACED_GUID的 Wnode.Flags。
從 1703 版Windows 10開始:若要在跨進程案例中提升效能,您現在可以將篩選資訊傳遞至全系統私人記錄器的ControlTrace。 您必須使用 EVENT_TRACE_PROPERTIES_V2 結構來包含篩選資訊。 如需詳細資訊,請參閱 設定和啟動私人記錄器會話 。
[in] ControlCode
要求的控制項函式。 您可以指定下列其中一個值:
EVENT_TRACE_CONTROL_FLUSH:排清會話的作用中緩衝區。
這可以與記憶體內部會話搭配使用, (以 EVENT_TRACE_BUFFERING_MODE 旗標開頭的會話,) 將資料從追蹤寫入檔案。
您通常不需要排清以檔案為基礎的或即時會話,因為 ETW 會在緩衝區已滿時自動排清緩衝區 (亦即當它沒有空間供下一個事件) 、追蹤會話的 FlushTimer 到期或追蹤會話關閉時。
Windows 2000: 不支援這個值。
EVENT_TRACE_CONTROL_QUERY:擷取會話屬性和統計資料。
EVENT_TRACE_CONTROL_STOP:停止會話。 會話控制碼不再有效。
EVENT_TRACE_CONTROL_UPDATE:更新會話屬性。
EVENT_TRACE_CONTROL_INCREMENT_FILE:如果會話具有
EVENT_TRACE_FILE_MODE_NEWFILE
,請更新會話以立即切換至下一個檔案,而不是等候先前的檔案填滿。 從 Windows 10 2018 年 10 月更新開始支援。EVENT_TRACE_CONTROL_CONVERT_TO_REALTIME:將檔案模式會話變更為即時會話 (啟用即時傳遞,並停用將事件寫入 ETL 檔案) 。 從 2020 年 10 月更新Windows 10開始支援。
注意
從 DllMain 排清緩衝區或停止追蹤會話並不安全, (可能會導致死結) 。
傳回值
如果函式成功,傳回值會ERROR_SUCCESS。
如果函式失敗,傳回值就是其中一個 系統錯誤碼。 以下是一些常見的錯誤及其原因。
ERROR_BAD_LENGTH
以下其中一項為正確:
- Properties的Wnode.BufferSize成員指定了不正確的大小。
- 如果) ,屬性沒有足夠的空間配置來保存會話名稱和記錄檔名稱的複本 (。
ERROR_INVALID_PARAMETER
以下其中一項為正確:
- 屬性 為 Null。
- InstanceName 和 TraceHandle 都是 Null。
- InstanceName 為 Null ,且 TraceHandle 不是有效的控制碼。
- Properties的LogFileNameOffset成員無效。
- Properties的LoggerNameOffset成員無效。
- Properties的LogFileMode成員會指定無效旗標的組合。
- Properties的Wnode.Guid成員是SystemTraceControlGuid,但InstanceName參數不是
KERNEL_LOGGER_NAME
。
ERROR_BAD_PATHNAME
另一個會話已經使用Properties結構的LogFileNameOffset成員所指定的檔案名。
ERROR_MORE_DATA
EVENT_TRACE_PROPERTIES的緩衝區太小,無法保存會話的所有資訊。 如果您不需要會話的屬性資訊,您可以忽略此錯誤。 如果您在停止會話時收到此錯誤,ETW 將已在產生此錯誤之前停止會話。
ERROR_ACCESS_DENIED
只有以提升系統管理許可權執行的使用者、效能記錄使用者群組中的使用者,以及以 LocalSystem、LocalService、NetworkService 執行的服務可以控制事件追蹤會話。 若要授與受限制的使用者控制追蹤會話的能力,請將它們新增至效能記錄使用者群組。 只有以 LocalSystem 身分執行之系統管理許可權和服務的使用者,才能控制 NT 核心記錄器會話。
Windows XP 和 Windows 2000: 任何人都可以控制追蹤會話。
ERROR_WMI_INSTANCE_NOT_FOUND
指定的會話未執行。
ERROR_ACTIVE_CONNECTIONS
從EVENT_TRACE_CONTROL_STOP呼叫傳回時,這表示會話已在停止過程中。
備註
事件追蹤控制器會呼叫此函式。
此函式會取代FlushTrace、QueryTrace、StopTrace和UpdateTrace函式。
注意
evntrace.h 標頭會將 ControlTrace 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程式碼,可能會導致編譯或執行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
需求
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | evntrace.h |
程式庫 | Windows 8.1 和 Windows Server 2012 R2 上的 Sechost.lib;Windows 8、Windows Server 2012、Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista 和 Windows XP 上的 Advapi32.lib |
Dll | Windows 8.1和 Windows Server 2012 上的 Sechost.dll;windows 8、Windows Server 2012、Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista 和 Windows XP 上的 Advapi32.dll |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應