2.系統和事件提供者定義
Windows Performance Recorder (WPR) 錄製設定檔會儲存在副檔名為 .wprp 的 XML 檔案中。 系統提供者定義會指定 .wprp 檔案中的系統關鍵字、堆疊和記憶體集區標籤。
提供者定義
.wprp 檔案中的專案必須以下列順序定義:
所有收集器
系統提供者
事件提供者
堆積提供者,如果有的話
所有設定檔
在某些情況下,可以在 設定檔定義之前定義提供者,而不是之前定義提供者。 例如:
<EventCollector Id="Collector1" Name="Sample Event Collector">
<BufferSize Value="128"/>
<Buffers Value="64"/>
</EventCollector>
<Profile Id="Sample.Verbose.File" Name="Sample" Description="Sample profile" DetailLevel="Verbose" LoggingMode="File">
<Collectors>
<EventCollectorId Value="Collector1">
<EventProviders>
<EventProvider Id="EventProvider_Microsoft-Windows-Kernel-Power" Name="Microsoft-Windows-Kernel-Power" NonPagedMemory="true">
<Keywords>
<Keyword Value="0x4"/>
</Keywords>
</EventProvider>
</EventProviders>
</EventCollectorId>
</Collectors>
</Profile>
系統提供者
系統提供者定義的唯一必要屬性是 Id。內部 XML 標記會指定要啟用的關鍵字、堆疊和集區標籤。 如需所有支援的關鍵字和堆疊清單,請參閱SystemProvider) 中的Stack和關鍵字 (。
下列程式碼範例顯示系統提供者定義。
<SystemProvider
Id="system-provider">
<Keywords>
<Keyword
Value="ProcessThread"/>
<Keyword
Value="Loader"/>
<Keyword
Value="CSwitch"/>
</Keywords>
<Stacks>
<Stack
Value="ThreadCreate"/>
<Stack
Value="ReadyThread"/>
<Stack
Value="CSwitch"/>
</Stacks>
<PoolTags>
<PoolTag
Value="a*"/>
<PoolTag
Value="b*"/>
<PoolTag
Value="c*"/>
<PoolTag
Value="d*"/>
</PoolTags>
</SystemProvider>
事件提供者
事件提供者定義會指定要使用的 Windows (ETW 事件追蹤) 提供者,以及要啟用的關鍵字和層級。 事件提供者定義需要強制 的 Name 屬性和必要的 Id 屬性。
Name屬性會指定下列其中一個名稱:
已註冊的 Crimson 提供者名稱,例如 「Microsoft-Windows-Search-Core」。
提供者 GUID,例如 「49c2c27c-fe2d-40bf-8c4e-c3fb518037e7」。
舊版提供者的名稱,例如 「IE6」。
特殊大小寫名稱,例如 「PerfTrack」 或 「DotNetProvider」。
您可以使用下列選擇性屬性來微調提供者參數:
堆疊:指出提供者是否擷取堆疊。 預設設定為 「false」。
層級:指定 ETW 記錄層級。 預設設定為 0xFF。
NonPagedMemory:指出 WPR 是否針對這個提供者的緩衝區使用非分頁式記憶體。 預設設定為 「false」。
警告 某些 Windows 事件提供者需要在追蹤擷取期間使用非分頁式記憶體。 需要 NonPagedMemory 的事件提供者範例為
EventProvider_Microsoft-Windows-Win32k
。CaptureStateOnly:如果設定為 「true」,表示 WPR 只會在指定的擷取狀態啟用此提供者。
SID:指定記錄事件的擴充資料是否包含使用者的安全性識別碼 (SID) 。
TSID:如果設定為 「true」,則會指定終端機會話識別碼來擴充記錄事件的資料。
選擇性的內部 XML 標籤會指定要啟用的關鍵字。 不同于系統提供者,事件提供者沒有定義的文字常數。 因此,事件提供者具有十六進位值。 不過,語法與系統提供者的語法相同。 如果您未指定關鍵字,則預設值為 0xFFFFFFFFFFFFFFFF。
堆積事件提供者
堆積提供者定義會指定 WPR 擷取堆積事件之進程的進程識別碼。 識別碼 是唯一的必要屬性。 HeapProcessId子項目並非必要專案。 此元素會指定您要分析之進程的進程 識別碼 屬性。 下列範例示範如何執行。
<HeapEventProvider
Id="Base_Heap_Provider">
</HeapEventProvider>
<HeapEventProvider
Base="Base_Heap_Provider"
Id="Derived_Heap_Provider">
<HeapProcessIds Operation="Set">
<HeapProcessId Value="2314"/>
</HeapProcessIds>
</HeapEventProvider>
擷取狀態提供者
不同于在整個追蹤會話中啟用的一般提供者,只有在您儲存或啟動擷取會話時,才會啟用擷取狀態提供者。 下列範例顯示一般和擷取狀態提供者。
<EventProvider Id="sample-provider" Name="SampleProvider" NonPagedMemory="true" Level="5">
<Keywords>
<Keyword Value="0x98"/> <!-- Provider is enabled with these keywords throughout the tracing session. -->
</Keywords>
<CaptureStateOnStart>
<Keyword Value="0xff4"/> <!-- Provider is enabled with these keywords when tracing is started. -->
</CaptureStateOnStart>
<CaptureStateOnSave>
<Keyword Value="0x118"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
</CaptureStateOnSave>
</EventProvider>
<EventProvider Id="EventProvider_DWMWin32k_CaptureState" Name="e7ef96be-969f-414f-97d7-3ddb7b558ccc" NonPagedMemory="true" CaptureStateOnly="true" >
<!-- CaptureStateOnly="true" means provider is not enabled throughout the tracing session. -->
<CaptureStateOnSave>
<Keyword Value="0x80000"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
</CaptureStateOnSave>
</EventProvider>
範例
下列程式碼範例會定義兩個事件提供者。
<EventProvider
Id="Win32K-provider"
Name="Microsoft-Windows-Win32K"
NonPagedMemory="true"
Stack="true">
<Keywords>
<Keyword
Value="0x240000"/>
</Keywords>
</EventProvider>
<EventProvider
Id="Search-Core-provider"
Name="Microsoft-Windows-Search-Core"/>