共用方式為


ControlTraceA 函式 (evntrace.h)

ControlTrace 函式會排清、查詢、更新或停止指定的事件追蹤會話。

語法

ULONG WMIAPI ControlTraceA(
            CONTROLTRACE_ID         TraceId,
  [in]      LPCSTR                  InstanceName,
  [in, out] PEVENT_TRACE_PROPERTIES Properties,
  [in]      ULONG                   ControlCode
);

參數

TraceId

[in] InstanceName

事件追蹤會話的名稱,或 NULL。 如果 TraceHandle 為 0,您必須指定 InstanceName

若要指定NT核心記錄器會話,請將 InstanceName 設定為 KERNEL_LOGGER_NAME

[in, out] Properties

初始化 EVENT_TRACE_PROPERTIES 結構的指標。 設定任何欄位之前,這個結構應該要以零為零。

如果 ControlCode 指定EVENT_TRACE_CONTROL_STOPEVENT_TRACE_CONTROL_QUERYEVENT_TRACE_CONTROL_FLUSH,您只需要設定EVENT_TRACE_PROPERTIES結構的 Wnode.BufferSizeWnode.GuidLoggerNameOffsetLogFileNameOffset 成員。 如果會話是私人會話,您也需要設定 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,則不會更新成員。

對於私人記錄器會話,您只能更新 LogFileNameOffsetFlushTimer 成員。

如果您使用新初始化 的 EVENT_TRACE_PROPERTIES 結構、將 結構零出,然後設定 Wnode.BufferSizeWnode.GuidWnode.Flags,以及您想要更新的值。

如果您要重複使用EVENT_TRACE_PROPERTIES結構 (,也就是使用您先前傳遞至 StartTraceControlTrace) 的結構,請務必將 LogFileNameOffset 成員設定為 0,除非您變更記錄檔名稱,而且請務必設定EVENT_TRACE_PROPERTIES。要WNODE_FLAG_TRACED_GUID的 Wnode.Flags

從 Windows 10 版本 1703 開始: 為了提升跨進程案例的效能,您現在可以將篩選資訊傳遞至全系統私人記錄器的 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 檔案) 。 從 Windows 10 2020 年 10 月更新開始支援。

注意

從 DllMain (排清緩衝區或停止追蹤會話並不安全,可能會導致死結) 。

傳回值

如果函式成功,傳回值會ERROR_SUCCESS。

如果函式失敗,傳回值就是其中一個 系統錯誤碼。 以下是一些常見的錯誤及其原因。

  • ERROR_BAD_LENGTH

    以下其中一項為正確:

    • PropertiesWnode.BufferSize 成員會指定不正確的大小。
    • 屬性 沒有足夠的空間配置來保存會話名稱和記錄檔名稱的複本, (如果使用) 。
  • ERROR_INVALID_PARAMETER

    以下其中一項為正確:

    • 屬性NULL
    • InstanceNameTraceHandle 都是 NULL
    • InstanceNameNULL ,且 TraceHandle 不是有效的句柄。
    • PropertiesLogFileNameOffset 成員無效。
    • PropertiesLoggerNameOffset 成員無效。
    • PropertiesLogFileMode 成員會指定無效的旗標組合。
    • PropertiesWnode.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

    指定的工作階段未執行。

備註

事件追蹤控制器會呼叫此函式。

此函式會取代 FlushTraceQueryTraceStopTraceUpdateTrace 函式。

注意

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

另請參閱

EVENT_TRACE_PROPERTIES

QueryAllTraces

StartTrace