EventWrite 函式 (evntprov.h)

寫入使用目前線程活動識別碼的 ETW 事件。

語法

ULONG EVNTAPI EventWrite(
  [in]           REGHANDLE              RegHandle,
  [in]           PCEVENT_DESCRIPTOR     EventDescriptor,
  [in]           ULONG                  UserDataCount,
  [in, optional] PEVENT_DATA_DESCRIPTOR UserData
);

參數

[in] RegHandle

提供者的註冊控制碼。 控制碼來自 EventRegister。 產生的事件將使用與控制碼相關聯的 ProviderId。

[in] EventDescriptor

使用 事件資訊EVENT_DESCRIPTOR (中繼資料) ,包括識別碼、版本、層級、關鍵字、通道、Opcode 和工作。

重要

ProviderId、Level 和 Keyword 是篩選事件的主要方法。 其他類型的篩選是可行的,但額外負荷較高。 一律將非零層級和關鍵字指派給每個事件。

[in] UserDataCount

UserData中的EVENT_DATA_DESCRIPTOR結構數目。 最大數目為 128。

[in, optional] UserData

UserDataCount的陣列EVENT_DATA_DESCRIPTOR結構,描述要包含在事件中的資料。 如果UserDataCount為零,則 UserData可能是Null

每個 EVENT_DATA_DESCRIPTOR 都會描述事件中要包含的一個記憶體區塊。 指定的區塊會依序串連,沒有填補或對齊方式,以形成事件內容。 如果使用以資訊清單為基礎的解碼,事件內容必須符合與資訊清單中事件相關聯之範本中指定的配置。

傳回值

如果成功或錯誤碼,則傳回 ERROR_SUCCESS 。 可能的錯誤碼包括下列各項:

  • ERROR_INVALID_PARAMETER:一或多個參數無效。
  • ERROR_INVALID_HANDLE:提供者的註冊控制碼無效。
  • ERROR_ARITHMETIC_OVERFLOW:事件大小大於允許的最大 (64KB - 標頭) 。
  • ERROR_MORE_DATA:會話緩衝區大小對事件而言太小。
  • ERROR_NOT_ENOUGH_MEMORY:當填滿緩衝區嘗試排清到磁片時發生,但磁片 IO 的速度不夠快。 當磁片變慢且事件流量過重時,就會發生這種情況。 最後,沒有任何可用 (空的) 緩衝區,而且會卸載事件。
  • STATUS_LOG_FILE_FULL:即時播放檔案已滿。 事件不會記錄到會話,直到即時取用者從播放檔案取用事件為止。

錯誤碼主要是用於偵錯和診斷案例。 大部分的生產程式碼應該繼續執行並繼續報告事件,即使無法撰寫 ETW 事件,發行組建通常應該忽略錯誤碼。

備註

大部分的事件提供者都不會直接呼叫 EventWrite 。 相反地,大部分的事件提供者都是使用 ETW 架構來實作,以包裝 對 EventRegisterEventWriteEventUnregister的呼叫。 例如,您可以 撰寫事件資訊清單 ,然後使用 訊息編譯 程式為事件產生 C/C++ 程式碼,或者您可以使用 TraceLogging 來避免資訊清單的需求。

EventWrite 會根據 RegHandle) 、Level、Keyword 和其他事件特性所決定的 ProviderId (,將事件路由傳送至適當的追蹤會話。 如果沒有追蹤會話正在錄製此事件,此函式不會執行任何動作,並 傳回ERROR_SUCCESS

若要減少任何追蹤會話未記錄之事件的效能影響,您可以呼叫 EventEnabled 來判斷是否有任何追蹤會話正在記錄事件,再準備資料和呼叫 EventWrite

EventWrite 會將事件的活動識別碼設定為目前線程的活動識別碼。 EventWrite 不會在 事件中包含相關的活動識別碼。 若要指定不同的活動識別碼或新增相關的活動識別碼,請使用 EventWriteTransfer

EventWrite相當於EventWriteExFilter為 0、標為 0、ActivityIdNull以及 RelatedActivityIdNull

需求

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

另請參閱

EventActivityIdControl

EventRegister

EventWriteTransfer

EventWriteEx

撰寫以資訊清單為基礎的事件