使用 2.0 版提供計數器資料
新式效能資料提供者會使用資訊清單來定義計數器資料,並使用效能計數器提供者 API 來管理提供者內容中的資料。 使用資訊清單和效能計數器提供者 API 實作的提供者通常稱為 V2 提供者。 Windows 支援 Windows Vista 或更新版本上的使用者模式 V2 提供者,以及在 Windows 7 或更新版本上支援核心模式 V2 提供者。
此頁面描述使用者模式 V2 提供者。 如需核心模式 V2 提供者的相關資訊,請參閱 核心模式效能監視。
在執行時間,V2 提供者的運作方式如下:
- 提供者進程會藉由呼叫 PerfStartProvider 和 PerfSetCounterSetInfo 向 Windows 效能計數器系統註冊本身。 提供者選擇性地提供回呼函式,以通知取用者要求。
- 提供者進程會視需要使用 PerfCreateInstance 和 PerfDeleteInstance 新增或移除實例。 提供者會在使用 PerfSet** API 變更時更新計數器值。
- 取用者會向計數器集提出資料的要求。 系統會確認呼叫端具有收集資料的許可權。 然後,系統會使用在提供者進程中執行的背景工作執行緒來處理要求,並視需要叫用提供者的回呼函式。 背景工作執行緒會將收集的資料複製到系統管理的緩衝區,然後系統會將資料傳回給取用者。
建立提供者的步驟
撰寫資訊清單,定義提供者將提供的計數器資料。 如需撰寫資訊清單的詳細資訊,請參閱 效能計數器架構。
使用 CTRPP 來產生您在提供者中包含的範本程式碼。 範本程式碼包含定義計數器集合的結構、 CounterInitialize 和 CounterCleanup 函式,以及資源字串。
您的提供者必須呼叫 CounterInitialize 和 CounterCleanup 函式。 CounterInitialize會呼叫PerfStartProvider 函式來註冊提供者,也會呼叫PerfSetCounterSetInfo函式來初始化計數器集合。 CounterCleanup會呼叫PerfStopProvider 函式來移除提供者的註冊。
在專案中包含上一個步驟中的範本程式碼,並完成您的提供者。
若要完成提供者,您必須針對您提供之計數器集的每個實例呼叫 PerfCreateInstance 函式。
若要設定計數器值,請呼叫下列其中一個函式:
使用 PerfSetCounterRefValue 的優點是,您不需要進行函式呼叫來設定或更新計數器值,您只需更新本機計數器變數, (參考點) 的變數,而效能計數器會使用指標來存取計數器值。
如果您未使用 PerfSetCounterRefValue,您可以使用下列函式來遞增或遞減計數器值:
- PerfDecrementULongCounterValue
- PerfDecrementULongLongCounterValue
- PerfIncrementULongCounterValue
- PerfIncrementULongLongCounterValue
提供者結束之前,它必須針對它所建立的每個計數器集實例呼叫 PerfDeleteInstance 。
如果您在資訊清單中的提供者元素中指定回呼屬性,或在呼叫CTRPP時使用-NotificationCallback引數,則必須實作ControlCallback 回呼函式。 您會將回呼函式傳遞至 CounterInitialize。
如果您在呼叫CTRPP時使用了-MemoryRoutines,則必須實作AllocateMemory和FreeMemory 回呼函式。 您會將回呼函式傳遞至 CounterInitialize。
安裝提供者時,請使用 LodCtr 工具,將包含當地語系化資源字串和資源識別碼的二進位檔案名稱寫入登錄。 如需使用 LodCtr 的詳細資訊,請參閱 效能計數器架構。
卸載您的提供者時,請使用 UnlodCtr 工具,從登錄中移除提供者的資訊。