共用方式為


EnableTraceEx 函式 (evntrace.h)

追蹤會話控制器會呼叫 EnableTraceEx ,以設定 ETW 事件提供者如何將事件記錄到追蹤會話。

此函式已過時。 EnableTraceEx2 函式會取代此函式。

語法

ULONG WMIAPI EnableTraceEx(
  [in]           LPCGUID                  ProviderId,
  [in, optional] LPCGUID                  SourceId,
                 CONTROLTRACE_ID          TraceId,
  [in]           ULONG                    IsEnabled,
  [in]           UCHAR                    Level,
  [in]           ULONGLONG                MatchAnyKeyword,
  [in]           ULONGLONG                MatchAllKeyword,
  [in]           ULONG                    EnableProperty,
  [in, optional] PEVENT_FILTER_DESCRIPTOR EnableFilterDesc
);

參數

[in] ProviderId

您要設定之事件提供者的提供者識別碼 (控制 GUID) 。

[in, optional] SourceId

GUID,可唯一識別此組態要求的來源,如果不需要任何來源識別,則為 NULL , (相當於將 SourceId 設定為 &GUID_NULL) 。 如果指定,當叫用提供者的 EnableCallback 時,這個值會當做 SourceId 參數使用。

注意

EnableTrace 的呼叫與提供者 EnableCallback 的對應呼叫之間不一定有直接對應。 例如,如果針對尚未註冊的提供者呼叫 EnableTrace則對 EnableCallback 的呼叫將會延後直到註冊發生,而且如果追蹤取用者會話已停止,ETW 仍會叫用 EnableCallback ,即使沒有對應的 EnableTrace 呼叫也一樣。 在這種情況下,將會叫用 EnableTrace ,並將 SourceId 設定為 GUID_NULL

TraceId

[in] IsEnabled

設定為 1,以啟用從提供者接收事件,或調整從提供者接收事件時所使用的設定 (,例如變更層級和關鍵詞) 。 設定為 0,以停用來自提供者的接收事件。

[in] Level

值,表示您想要提供者寫入的事件層級上限。 除了符合 MatchAnyKeywordMatchAllKeyword 準則之外,提供者通常會在事件層級小於或等於此值時寫入事件。

Microsoft 定義層級 1-5 的語意,如下所示。 較低的值表示更嚴重的事件。 EnableLevel 的每個值都會啟用指定的層級和更嚴重層級。 例如,如果您指定 TRACE_LEVEL_WARNING,則取用者會收到警告、錯誤和重大事件。

意義
TRACE_LEVEL_CRITICAL (1) 異常結束或終止事件
TRACE_LEVEL_ERROR (2) 嚴重錯誤事件
TRACE_LEVEL_WARNING (3) 配置失敗等警告事件
TRACE_LEVEL_INFORMATION (4) 非錯誤資訊事件
TRACE_LEVEL_VERBOSE (5) 詳細的診斷事件

TRACE_LEVEL常數定義於 evntrace.h 中。 對等 WINMETA_LEVEL 常數定義於 winmeta.h 中。

[in] MatchAnyKeyword

64 位的關鍵詞掩碼,決定您想要提供者寫入的事件類別。 除了符合 LevelMatchAllKeyword 準則之外,提供者通常會寫入事件,如果事件的關鍵詞位符合此值中設定的任何位,或事件沒有設定任何關鍵字位,則此事件通常會寫入事件。

[in] MatchAllKeyword

64 位的關鍵詞掩碼,可限制您想要提供者寫入的事件。 除了符合 LevelMatchAnyKeyword 準則之外,提供者通常會在事件關鍵字位符合此值中設定的所有位,或事件沒有設定任何關鍵詞位時寫入事件。

此值經常設定為 0。

[in] EnableProperty

旗標,指定從這個提供者收集事件時,ETW 運行時間應該啟用的特殊行為。 若要啟用特殊行為,請指定下列一或多個旗標。 否則,請將 EnableProperty 設定為 0。

注意

其中幾個旗標表示 ETW 應該在每個事件中包含額外的資訊。 數據會寫入事件的 擴充數據項 區段。

意義
EVENT_ENABLE_PROPERTY_SID 在擴充數據中包含使用者的安全性標識碼 (SID) 。
EVENT_ENABLE_PROPERTY_TS_ID 在擴充數據中包含終端機會話標識碼。
EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0 追蹤會話不應該記錄關鍵詞為 0 的事件。

[in, optional] EnableFilterDesc

指向篩選數據的 EVENT_FILTER_DESCRIPTOR 結構。 提供者會使用此來篩選數據,以防止不符合篩選準則的事件寫入會話。 提供者會決定數據的版面配置,以及其如何將篩選套用至事件的數據。 會話只能將一個篩選傳遞給提供者。

會話可以呼叫 TdhEnumerateProviderFilters 函式,以查閱提供者已註冊支持的篩選。

傳回值

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

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

  • ERROR_INVALID_PARAMETER

    以下其中一項為正確:

    • ProviderIdNULL
    • TraceHandleNULL
  • ERROR_INVALID_FUNCTION

    當提供者未註冊時,您無法更新層級。

  • ERROR_NO_SYSTEM_RESOURCES

    超過可啟用提供者的追蹤會話數目。

  • ERROR_ACCESS_DENIED

    只有具有系統管理許可權、群組中的 Performance Log Users 使用者,以及以 LocalSystemLocalService執行的服務,或 NetworkService 可以啟用跨進程會話的事件提供者。 若要授與受限制的使用者啟用事件提供者的能力,請將他們新增至 Performance Log Users 群組或查看 EventAccessControl

    Windows XP 和 Windows 2000: 任何人都可以啟用事件提供者。

備註

事件追蹤控制器會呼叫此函式,以設定將事件寫入會話的事件提供者。 例如,控制器可能會呼叫此函式以開始從提供者收集事件、調整從提供者收集之事件的層級或關鍵詞,或停止從提供者收集事件。

此函式已過時。 如需其他功能,新的程式碼應該使用 EnableTraceEx2

在大部分情況下, 對 EnableTraceEx 的呼叫可以轉換成 EnableTraceEx2 ,如下所示:

// Obsolete:
Status =
EnableTraceEx(
    ProviderId,
    NULL,           // SourceId
    TraceHandle,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,              // EnableProperty
    NULL);          // EnableFilterDesc

// Updated equivalent code:
Status = EnableTraceEx2(
    TraceHandle,
    ProviderId,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,              // Timeout
    NULL);          // EnableParameters

在更複雜的案例中, EnableTraceEx 的呼叫可以轉換成 EnableTraceEx2 ,如下所示:

// Obsolete:
Status =
EnableTraceEx(
    ProviderId,
    SourceId,
    TraceHandle,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    EnableProperty,
    EnableFilterDesc);

// Updated equivalent code:
ENABLE_TRACE_PARAMETERS EnableParameters = {
    ENABLE_TRACE_PARAMETERS_VERSION_2,
    EnableProperty,
    0,                 // ControlFlags
    SourceId ? *SourceId : GUID_NULL,
    EnableFilterDesc,
    EnableFilterDesc ? 1 : 0 };
Status = EnableTraceEx2(
    TraceHandle,
    ProviderId,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,                 // Timeout
    &EnableParameters);

如需設定會話提供者語意的其他詳細數據,請參閱 EnableTraceEx2 的檔。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 evntrace.h
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

StartTrace

EnableTraceEx2