CTRPP 工具是一個預處理器,用於分析和驗證 V2 提供程式的清單。 該工具使用提供程式的消費者所需的字串生成 .rc 資源,並使用用於提供計數器數據的代碼生成 .h 標頭。 您應該在建構提供程式期間執行 CTRPP 工具。 在開發提供程式時,您應該使用生成的代碼作為起點,而不是嘗試自己生成此代碼。
ctrpp -o codeFile -rc rcFile [-legacy] [-MemoryRoutines] [-NotificationCallback] [-prefix prefix] [-ch symFile] [-backcompat] inputFile
論點
| 選項 | 說明 |
|---|---|
| input檔 |
必填: 指定定義計數器的 .man (XML 清單) 檔案的名稱。 |
| -o代碼檔 |
必填: 指定 CTRPP 產生的代碼檔的名稱 .h 。 此檔將包含 C/C++ 內聯幫助程式函數,這些函數可簡化提供程式的初始化和取消初始化。 |
| -rcrc檔 |
必填: 指定要由 CTRPP 產生的(資源檔案)的名稱 .rc 。 此檔案將包含提供程式的字串表。 |
| -chsymFile | 指定要由 CTRPP 產生的可選 .h 符號檔的名稱。 此檔案將包含提供程式中每個計數器集的名稱和 GUID 的 C/C++ 符號。 |
| -prefix前綴 | 指定要用於生成的標頭檔中定義的變數和函數的前置綴。 |
| -NotificationCallback 回調 | 更改 CounterInitialize 函數的預設簽名,以包含用於指定 ControlCallback、 AllocateMemory 和 FreeMemory 回調函數名稱的參數。 此參數與在 provider 元素中包含callback屬性具有相同的效果。 |
| -migrate輸出檔 | 將 inputFile 清單升級到最新版本並將其保存到 outputFile,而不是生成 .h and .rc 檔。 此開關不能與其他開關一起使用。 使用方式:CTRPP -migrate NewFile.man OldFile.man |
| -BackCompat |
荒廢的: Windows 7 中添加了對內核模式提供程序的支援。 默認情況下,CTRPP 為內核模式提供程式生成的代碼將與早期版本的 Windows 不相容(由於缺少 Pcw*** API,驅動程式將無法載入)。 設置為 -BackCompat 啟用與早期版本的 Windows 的相容性。 驅動程式將動態載入必要的 API,如果 API 不可用,生成的代碼將以靜默方式禁用提供程式。 |
| -記憶體例程 |
荒廢的: 與 switch 一起使用 -Legacy 時,在生成的代碼中包含記憶體例程的範本。 否則,此參數與 switch 具有相同的效果 -NotificationCallback 。 |
| -遺產 |
荒廢的:使用 Windows Vista 代碼範本生成 *.h、 *.c*.rc、 和 *_r.h 檔案 (生成 PerfAutoInitialize 和 PerfAutoCleanup,而不是 CounterInitialize 和 CounterCleanup) 。 此開關可與 -MemoryRoutines 和 -NotificationCallback 一起使用,但不能與任何其他開關一起使用。 不要將 -o 或 -rc 開關與此開關一起使用。 生成的檔將根據清單的名稱進行命名,並寫入包含清單的目錄。 使用方式:CTRPP -legacy OldFile.man |
備註
CTRPP 工具生成代碼 .h 檔、資源 .rc 檔,並選擇性地生成符號 .h 檔。
使用生成的資源檔
CTRPP 工具將生成一個 .rc 資源檔,其中包含提供程式計數器集的消費者所需的可當地語系化字串。
這很重要
此檔中的資源必須包含在您的供應商二進位檔中,並且必須在安裝供應商的清單期間註冊提供者二進位檔的完整路徑。 無法找到和載入資源的消費者將無法使用提供程式的計數器集。
字串資源應按如下方式處理:
- 開發人員編輯提供程式清單 ()
.man檔案,將提供程式的屬性設置為applicationIdentity提供程式二進位檔(.DLL、.SYS 或 .EXE)的名稱,該二進位檔將包含提供程式的字串資源,並將作為提供程式元件的一部分進行安裝。 - CTRPP 工具讀取提供程式清單並生成檔
.rc。 -
RC (資源編譯器) 工具編譯 CTRPP 產生的
.rc文件中的數據,以生成.res包含二進位資源的檔。 這可以通過直接編譯 CTRPP 生成的.rc檔或通過指令編譯包含 CTRPP 生成的.rc檔#include的另一個.rc檔來完成。 - 鏈接器將 RC 產生的
.res檔案中的數據嵌入到提供程式二進位檔中。 - 在安裝過程中,提供程式二進位檔將複製到用戶的系統上,並使用 lodctr工具註冊提供程式清單。 lodctr 工具將
applicationIdentity提供程式清單的屬性轉換為完整路徑,並在註冊表中記錄提供程式二進位檔的完整路徑。- 如果提供者二進位檔案與清單位於同一目錄中,請使用:
lodctr.exe /m:"C:\full\manifest\path\manifest.man"。 LODCTR 會將指定的清單路徑與清單的屬性applicationIdentity組合在一起,以形成完整路徑。 - 否則,請使用
lodctr.exe /m:"C:\full\manifest\path\manifest.man" "c:\full\binary\path"。 LODCTR 會將指定的二進位路徑與 manifest 的屬性applicationIdentity組合在一起,以形成完整路徑。 - 出於診斷目的,您可以通過檢查
ApplicationIdentityregistry keyHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{<ProviderGuid>}的值來檢查記錄的完整路徑。 - 如果二進位檔使用 MUI 進行當地語系化,請務必將 MUI 檔與二進位檔一起複製。
- 如果提供者二進位檔案與清單位於同一目錄中,請使用:
- 在計數器集收集期間,消費者使用記錄的提供者二進位檔的完整路徑從提供者二進位檔的資源中查找和載入必要的字串。
在使用者模式提供程式式中使用生成的代碼檔
CTRPP 工具將生成 .h C/C++ 程式碼檔。 如果提供程式清單的屬性 providerType 設定為 userMode,則生成的代碼檔將包含以下定義,這些定義有助於對使用者模式提供程式進行編碼:
- n 名為 prefixCounterInitialize 的提供程式初始化函數。
- 名為 prefixCounterCleanup 的提供程式清理函數。
- 一個全域 提供程式 變數,用於存儲 由前綴CounterInitialize 函數打開的提供程式句柄。 變數的 name 是清單中元素的屬性
provider值symbol。 此變數應用於對PerfCreateInstance、PerfDeleteInstance和其他 API 的呼叫,以控制供應商的數據。 - 對於每個計數器集,一個具有計數器集 GUID 的全域 計數器集GUID 變數。 變數的名稱是元素屬性的值
counterSet加上後綴 「GUID」 例如MyCounterSetGUID.symbol此變數應用於對PerfCreateInstance、PerfDeleteInstance和其他 API 的呼叫,以控制供應商的數據。 - 對於每個計數器,一個具有counter
id值的counter 巨集。 巨集的 name 是元素屬性symbol的值counter。 此巨集應用於對PerfSetCounterRefValue、PerfSetULongLongCounterValue和其他 API 的呼叫,以設置提供程式的數據。
在函數名稱中, prefix 是指命令行參數的值 -prefix 。 如果未使用該參數, -prefix 則函數將被命名為 CounterInitialize 和 CounterCleanup。
在內核模式提供程式式中使用生成的代碼檔
CTRPP 工具將生成 .h C/C++ 程式碼檔。 如果提供程式清單的屬性 providerType 設定為 kernelMode,則生成的代碼檔將包含以下定義,這些定義有助於對內核模式提供程式的計數器集進行編碼:
- 名為 prefixRegisterCounterset 的計數器集初始化函數。 此函數填充 RegInfo 結構,然後調用 PcwRegister,將生成的計數器集註冊句柄放入全域 Counterset 變數中。
- 名為 prefixUnregisterCounterset 的計數器集清理函數。 此函數在全域 Counterset 變數中的計數器集註冊句柄上調用 PcwUnregister。
- 名為 prefixCreateCounterset 的實例創建函數。 此函數填充 PcwData 結構數位,然後使用全域 Counterset 變數中的計數器集註冊句柄調用 PcwCreateInstance 。
- 名為 prefixCloseCounterset 的實例清理函數。 此函數調用 PcwCloseInstance。
- 名為 prefixAddCounterset 的實例報告函數,用於 counterset 回調函數。 此函數填充 PcwData 結構數位,然後調用 PcwAddInstance。
- Windows SDK 20H1 及更高版本: 名為 prefixInitRegistrationInformationCounterset 的 RegInfo 初始化函數,用於高級方案。 此函數填充 RegInfo 結構。 此函數可用於生成的 前綴RegisterCounterset 無法滿足您的需求的情況,例如,當您想要自定義 RegInfo 結構中的值或要將返回的句柄存儲在另一個變數中時。
在函數名稱中, prefix 是指命令行參數的值 -prefix 。 如果未使用該 -prefix 參數,則函數將沒有前綴。
備註
當您有計數器集回調時,將使用生成的 前綴AddCounterset 函數。 當您沒有計數器集回調時,將使用生成的 前綴CreateCounterset 和 前綴CloseCounterset 函數。
使用生成的元件檔
如果在命令行上指定了 -ch 參數,則 CTRPP 工具將生成一個 .h 符號檔。 此檔案包含提供程式中每個計數器集的名稱和 GUID 的 C/C++ 符號。 編寫硬編碼的程式以使用 PerfLib V2 使用者函數使用此計數器集中的數據時,可以使用這些符號。
需求
| 要求 | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
| 最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |