核心模式元件會使用適用于 Windows (PCW 的效能計數器) API 來提供效能計數器。
使用下列步驟來開發新的計數器資料提供者:
撰寫描述提供者及其計數器集的計數器資訊清單。 計數器資訊清單是 XML 格式檔案,可定義效能計數器提供者及其計數器集。
- 將
applicationIdentity屬性設定為二進位檔的名稱,該二進位檔會安裝為核心模式元件的一部分,而且會包含效能資料取用者所需的字串資源。 - 將
providerType屬性設定為kernelMode。 - 使用 C/C++ 結構的名稱,定義至少一個
struct元素) 底下counterSet/structs(,此結構會在將計數器值從元件傳遞至 PCW API 時使用。 -
counter在每個 中,定義structPCW 應該從中讀取計數器值的 和field。
- 將
作為元件建置程式的一部分,請使用 CTRPP 工具來 編譯計數器資訊清單。 (計數器預處理器 (CTRPP) 工具組含在 WDK 中,並可在 開發人員命令提示 字元中輸入
ctrpp.) CTRPP 工具會產生檔案.rc和.h檔案。- CTRPP 產生的
.rc檔案必須由資源編譯器 (RC.exe) 工具編譯,而且產生的.res檔案必須連結到 屬性中名為 的applicationIdentity二進位檔。 您可以直接編譯 CTRPP 產生的.rc檔案,也可以#include將 CTRPP 產生的.rc檔案編譯成編譯成二進位檔的現有.rc檔案。 - CTRPP 產生的
.h檔案包含包裝基礎 PCW API 的協助程式函式。 例如,CTRPP 產生的.h檔案將包含代表您呼叫PcwRegister的RegisterXxx函式。 在大部分情況下,您將呼叫 CTRPP 產生的協助程式函式,而不是直接呼叫任何 PCW API,但您可以參考 PCW API 的檔,以瞭解對應的 CTRPP 產生的函式正在執行什麼。 協助程式函式會管理將元件的計數器資料配置轉譯成PCW_DATAPCW API 預期的版面配置。
- CTRPP 產生的
在元件初始化時,叫用 CTRPP 產生的 RegisterXxx 函式,其會呼叫 PcwRegister。 在元件關機時,叫用 CTRPP 產生的 UnregisterXxx 函式,其會呼叫 PcwUnregister。
新增程式碼以提供計數器資料。 做法是實作 PCW_CALLBACK回 呼函式,或維護具有每個實例計數器值的資料結構,並在實例建立和終結時叫用 CTRPP 產生的 CreateInstanceXxx 和 CloseInstanceXxx 函式。
在元件安裝時,使用
lodctr /m:<CounterManifest> <InstallPath>來安裝提供者。 在元件卸載時,請使用unlodctr(搭配/m或/g參數) 來卸載提供者。 安裝提供者會將提供者的計數器集新增至可用計數器集的系統範圍存放庫,讓效能資料取用者可以使用計數器集,例如 perfmon、typeperf 或 WMI。 特別是,安裝提供者會記錄包含提供者字串資料表之二進位 (DLL、SYS 或 EXE 檔案的完整路徑) 。 二進位檔的完整路徑取決於將資訊清單的applicationIdentity屬性與<CounterManifest>命令列上lodctr所使用的 和<InstallPath>值結合,如下所示:-
applicationIdentity如果屬性是完整路徑,則會使用它。 - 否則,如果
<InstallationPath>參數是完整路徑,則會使用它。 - 否則,如果
<CounterManifest>參數是完整路徑,則 from<CounterManifest>的目錄將會與 屬性中的applicationIdentity檔案名合併。 - 否則,目前的工作目錄將會與 屬性中的
applicationIdentity檔案名結合。
-
如需核心模式 PCW 提供者的範例,請參閱 GitHub 上Windows 驅動程式範例存放庫中的核心計數器範例 (Kcs) 。