共用方式為


使用 2.0 版提供計數器數據

新式效能數據提供者會使用指令清單來定義計數器數據,並使用性能計數器提供者 API 來管理提供者內容中的數據。 使用指令清單與效能計數器提供者 API 實作的提供者通常稱為 V2 提供者。 Windows 支援 Windows Vista 或更新版本上的使用者模式 V2 提供者,以及 Windows 7 或更新版本上的核心模式 V2 提供者。

此頁面描述使用者模式 V2 提供者。 如需核心模式 V2 提供者的相關信息,請參閱 核心模式效能監視

在運行時間,V2 提供者的運作方式如下:

  • 提供者進程會呼叫 PerfStartProvider 和 PerfSetCounterSetInfo,向 Windows 性能計數器系統註冊自己。 供應者可以選擇提供一個回呼函數,該函數會通知有關消費者請求的資訊。
  • 提供者進程會視需要使用 PerfCreateInstance 和 PerfDeleteInstance 新增或移除實例。 提供者會在計數器值變動時使用 PerfSet*** API 更新。
  • 取用者會向計數器集提出數據要求。 系統會確認呼叫端具有收集數據的許可權。 接著,系統會使用在提供者進程中執行的背景工作線程來處理要求,並視需要叫用提供者的回呼函式。 工作執行緒會將收集的數據複製到系統管理的緩衝區,然後系統會將數據傳回給消費者。

建立提供者的步驟

  1. 撰寫指令清單,以定義提供者將提供的計數器數據。 如需撰寫指令清單的詳細資訊,請參閱 性能計數器架構

  2. 使用 CTRPP 來產生您包含在提供者中的範本程式碼。 範本程式代碼包含定義計數器集合的結構、CounterInitializeCounterCleanup 函式,以及資源字串。

    您的提供者必須呼叫 CounterInitializeCounterCleanup 函式。 CounterInitialize 會呼叫 PerfStartProvider 函式來註冊提供者,並呼叫 PerfSetCounterSetInfo 函式來初始化計數器集合。 CounterCleanup 會呼叫 PerfStopProvider 函式,以移除提供者的註冊。

  3. 在專案中包含上一個步驟中的範本代碼,並完成提供者的設置。

    若要完成提供者,您必須針對您提供之計數器集的每個實例呼叫 PerfCreateInstance 函式。

    若要設定計數器值,請呼叫下列其中一個函式:

    使用 PerfSetCounterRefValue 的優點是,您不需要進行函數調用來設定或更新計數器值,您只需更新本機計數器變數(參考點所在的變數),而性能計數器會使用指標來存取計數器值。

    如果您沒有使用 PerfSetCounterRefValue,您可以使用下列函式來遞增或遞減計數器值:

    提供者退出之前,它必須針對其創建的每個計數器集實例呼叫 PerfDeleteInstance

    如果您在指令清單 提供者 元素中指定 回呼 屬性,或在呼叫 CTRPP時,使用 -NotificationCallback 自變數,則必須實作 ControlCallback 回呼函式。 您會將回呼函式傳遞至 CounterInitialize

    如果您在呼叫 CTRPP時使用 -MemoryRoutines,則必須實作 AllocateMemory,並 FreeMemory 回呼函式。 您將回呼函式傳遞至 CounterInitialize

  4. 安裝提供者時,請使用LodCtr工具,將包含本地化資源字串和資源識別符的二進位檔名稱寫入登錄。 如需使用 LodCtr 的詳細資訊,請參閱 性能計數器架構

  5. 卸載提供者時,請使用 UnlodCtr 工具從登錄中移除提供者的資訊。