將計數器名稱和描述新增至登錄檔
重要
基於顯著的效能和可靠性限制,提供本主題描述的性能計數器數據的方法未來可能會改變或無法使用。 相反地,Microsoft 建議您使用在 提供計數器數據使用版本 2.0 中所描述的方法來建立新的效能計數器,並將現有的效能計數器遷移至使用該方法。
所有 V1 性能物件及其計數器的名稱和描述都必須安裝在系統中。 若要從 V1 提供者儲存物件和計數器的名稱和描述,:
- 建立 .h 頭檔,其中包含物件和計數器位移的符號常數。
- 建立初始化 (.INI) 檔案 包含字串。
- 安裝元件時,執行 lodctr 工具,以將名稱和描述安裝到登錄中。
- 卸載元件時,請執行 unlodctr 工具,從登錄中移除名稱和描述。
建立符號常數 (.h) 檔案
建立 .h 頭文件,定義提供者所提供之物件和計數器的位移常數(巨集)。 在安裝您的提供者期間,.h 標頭會作為 lodctr 的輸入,並且也可能由提供者的 C/C++ 代碼使用。
常數值必須是連續的,甚至是以零開頭的數位。 將常數依物件分組(即以每個物件的位移開始該群組,然後依次加入該物件的計數器位移)。
標頭中的常數會決定計數器新增至登錄檔中的名稱與輔助說明文字的順序。 提供者會使用位移來判斷要查詢的物件,以及傳回數據時要使用的索引值。 如需詳細資訊,請參閱 實作 OpenPerformanceData。
下列範例顯示名為 CounterOffsets.h 的符號常數檔案範例,該檔案用於 建立效能延伸模組 DLL 範例中。
#ifndef OFFSETS_H
#define OFFSETS_H
// Symbol file that defines constant values for the objects
// and counters that the provider provides. The counters should be
// grouped by object.
#define TRANSFER_OBJECT 0 // First object must be at offset 0.
#define BYTES_SENT 2 // Counters for the object follow.
#define AVAILABLE_BANDWIDTH 4 // Offsets must be even numbers.
// Not required, but for convenience in implementing the Open function:
#define LAST_TRANSFER_OBJECT_COUNTER_OFFSET AVAILABLE_BANDWIDTH
#define PEER_OBJECT 6 // Second object must be at the next offset.
#define BYTES_SERVED 8 // Counter for the second object.
// Not required, but for convenience in implementing the Open function:
#define LAST_PEER_OBJECT_COUNTER_OFFSET BYTES_SERVED
#endif // OFFSETS_H
建立初始化 (。INI) 檔案
初始化 (.INI) 檔案包含符號檔中定義之每個物件和計數器的名稱和說明字串。 這個 .INI 檔案在安裝提供者期間被作為 lodctr 的輸入使用。
這。INI 檔案應編碼為 UTF-16LE(具有位元節順序標記),且應該具有下列區段和索引鍵:
[info]
drivername=ServiceKeyName
symbolfile=SymbolFile.h
trusted=(Unused)
[objects]
<symbol>_<langid>_NAME=(Unused)
[languages]
<langid>=(Unused)
[text]
<symbol>_<langid>_NAME=Name
<symbol>_<langid>_HELP=Description
[info] 區段
[info]
區段包含提供者的一般資訊。 區段鍵的定義如下:
鑰匙 | 描述 |
---|---|
驅動程式名稱 | 指定位於登錄中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 機碼下的提供者的效能金鑰名稱。 如需建立此金鑰的詳細資訊,請參閱 建立應用程式的效能金鑰。 |
SymbolFile | 指定 .h 頭檔,其中包含提供者對象和計數器的符號值。 在安裝期間(叫用 lodctr時),標頭檔案必須與 INI 檔案位於相同的目錄中。 |
受信任的 | 如果您在 [[info] ] 區段中包含此機碼,lodctr 將會使用效能 DLL 的二進位簽章,將連結庫驗證碼登錄值新增至您的效能密鑰。 當 PERFLIB 呼叫 DLL 時,它會比較簽章與 DLL,以判斷 DLL 是否已修改。 會忽略 信任 密鑰的值。 |
需要 DriverName
和 SymbolFile
金鑰。
[objects] 區段
[[objects]
] 區段提供提供者支援的效能物件清單。 這可用來判斷 [text]
區段中的每個符號是否參考物件或計數器。
針對提供者所支援的每個物件(counterset),將一個名為 <symbol>_<langid>_NAME=
的索引鍵新增至 [objects]
區段,其中 <symbol>
是對象的名稱,<langid>
是其中一種支援語言的語言標識符。 該值將被忽略。
重要
[objects]
區段可改善系統的效能。 雖然物件區段是選擇性的,但您應該一律在 INI 檔案中加入這個區段。 如果您包含本節,則只有在支援要求的物件時,才會呼叫您的效能 DLL。 如果您未包含 objects 區段,系統會針對每個查詢呼叫 DLL,因為系統不知道提供者支持的物件。 如果未包含物件區段,lodctr 在應用程式事件記錄檔中產生訊息,指出 。INI 檔案未包含物件區段。 此訊息的事件標識碼為 2000。
[languages] 區段
[[languages]
] 區段提供了供應商提供名稱和說明字串的各種語言的識別符清單。 所有提供者都應該支援 009
(英文)。
針對每個支持的語言,新增一個名為 <langid>=
的索引鍵。 會忽略此值,但為了檔案目的,值通常會設定為對應語言的名稱,例如 009=English
。
對於大部分的語言,您應該使用主要語言標識符。 語言標識碼的完整清單位於 Winnt.h 頭檔中,標題為「主要語言識別碼」。將 Winnt.h 中找到的值轉換成 3 個十六進位數位序列,方法是移除 0x
前置詞,並新增前置 0
位數,直到序列長度為 3 位數為止。 例如,若要指定英文字符串 (0x9),請使用 009。 若要指定義大利文字串 (0x10),請使用 010。
中文和葡萄牙文同時需要主要和子語言標識符。 使用 404、804、416 或 816,而不是 004 或 016。
[text] 區段
[text]
區段會為您的物件和計數器提供名稱和說明字串。
針對每個物件或計數器,以及每個支援的語言,您必須提供 NAME 索引鍵(包含物件或計數器的名稱或標題字串),而且您可以選擇性地提供 HELP 鍵(包含物件或計數器的描述或說明字串)。 索引鍵應該命名為 <symbol>_<langid>_NAME
和 <symbol>_<langid>_HELP
,其中 <symbol>
是物件或計數器的符號常數(如符號常數 .h 檔案中所定義),而 <langid>
是用於此字串的語言標識符。
例如,具有符號 MY_COUNTER
之計數器的英文字串會指定為:
MY_COUNTER_009_NAME=My Counter
MY_COUNTER_009_HELP=Description for My Counter.
文本鍵可以以任何順序出現。 文字字串不應包含格式化字元,例如索引標籤。
範例 INI 檔案
以下是 建立效能延伸模組 DLL 範例中使用的初始化檔案範例。
[info]
drivername=MyApplication
symbolfile=CounterOffsets.h
trusted=
[objects]
TRANSFER_OBJECT_009_NAME=
PEER_OBJECT_009_NAME=
[languages]
009=English
00C=French
[text]
// English strings
TRANSFER_OBJECT_009_NAME=Transfer
TRANSFER_OBJECT_009_HELP=Provides information related to transferring files.
BYTES_SENT_009_NAME=Bytes Sent
BYTES_SENT_009_HELP=Number of bytes sent in the last transfer.
AVAILABLE_BANDWIDTH_009_NAME=Available Bandwidth
AVAILABLE_BANDWIDTH_009_HELP=Available bandwidth on the network, in bytes.
PEER_OBJECT_009_NAME=Peer
PEER_OBJECT_009_HELP=Provides information related to peer-caching.
BYTES_SERVED_009_NAME=Bytes Served
BYTES_SERVED_009_HELP=Number of bytes served from the cache.
// French strings
TRANSFER_OBJECT_00C_NAME=Transfert
TRANSFER_OBJECT_00C_HELP=Fournit des informations liées aux transferts de fichiers.
BYTES_SENT_00C_NAME=Octets Envoyés
BYTES_SENT_00C_HELP=Nombre d'octets envoyés dans le dernier transfert.
AVAILABLE_BANDWIDTH_00C_NAME=Bande Passante Disponible
AVAILABLE_BANDWIDTH_00C_HELP=Bande passante disponible sur le réseau, en octets.
PEER_OBJECT_00C_NAME=Pair
PEER_OBJECT_00C_HELP=Fournit des informations liées é mise en cache homologue.
BYTES_SERVED_00C_NAME=Octets Servis
BYTES_SERVED_00C_HELP=Le nombre d'octets servis du cache.
執行 Lodctr 工具
在安裝您的提供者期間,若要載入在 .INI 檔案中定義的名稱和說明字串,請從包含 .INI 檔案和標頭檔的資料夾中執行 lodctr 工具。 此工具隨附於計算機中。 您必須以較高的許可權執行lodctr lodctr。 要將 lodctr 的參數設定為您的 .INI 檔案的路徑。 例如,lodctr "C:\Program Files\MyCompany\MyProvider\MyProvider.ini"
。
若要在卸載時卸除名稱和說明字串,請執行 unlodctr 工具。 您必須以提升的權限執行 unlodctr。 要用於 unlodctr 的參數是提供者的 DriverName(提供者的效能密鑰名稱)。 例如,unlodctr "MyProvider"
。
在執行 lodctr之前,請確定您的應用程式在 Services 機碼下有項目。 如需詳細資訊,請參閱 建立應用程式的效能金鑰。 如果機碼不存在,lodctr 將不會以您的名稱和描述更新登錄。
除了執行 lodctr之外,您也可以從安裝程式中呼叫 LoadPerfCounterTextStrings(定義於 Loadperf.h)來載入計數器名稱描述。 然後,您可以在卸載期間呼叫 UnloadPerfCounterTextStrings。
lodctr 公用程式會將字串從 .INI 檔案複製到 計數器 和 說明 登錄值,並在適當的語言子機碼下進行。 如果對應的語言子機碼不存在,則不會複製該語言的字串。 工具也會更新 Last Counter 和 Last Help 的值。 性能計數器名稱和描述會儲存在登錄中的下列位置。
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\Windows NT
\CurrentVersion
\Perflib
Last Counter = highest counter index
Last Help = highest help index
\009
Counters = 2 System 4 Memory...
Help = 3 The System Object Type...
\supported language, other than English
Counters = ...
Help = ...
除了在 PerfLib 索引鍵下新增值之外,lodctr 工具也會將以下數值加入應用程式的 Services 節點。 在大部分情況下,應用程式和提供者會有一對一關係;不過,提供者可以為多個應用程式提供計數器數據,這就是為什麼索引鍵是以應用程式為基礎,而不是提供者的原因。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\MyApplication
\Performance
First Counter = lowest counter index assigned to provider
First Help = lowest help index assigned to provider
Last Counter = highest counter index assigned to provider
Last Help = highest help index assigned to provider
Object List = list of object index values if the .INI includes the [objects] section
Library Validation Code = if the [info] section contains a "trusted" key