Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важный
Из-за значительных ограничений производительности и надежности метод предоставления данных счетчика производительности, описываемых в этом разделе, может быть изменен или недоступен в будущем. Вместо этого корпорация Майкрософт рекомендует использовать метод, описанный в разделе Предоставление данных счетчиков с помощью версии 2.0 для создания новых счетчиков производительности и переноса существующих счетчиков производительности для использования этого метода.
Имена и описания всех объектов производительности версии 1 и их счетчиков должны быть установлены системой. Для хранения имен и описаний объектов и счетчиков от поставщика версии 1:
- Создайте файл заголовка .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] содержатся общие сведения о поставщике. Ключи раздела определяются следующим образом:
| Ключ | Описание |
|---|---|
| DriverName | Укажите имя ключа производительности поставщика, расположенного в реестре под ключом HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Дополнительные сведения о создании ключа производительности приложения см. в Создание ключа производительности приложения. |
| SymbolFile | Укажите файл заголовка ".h", содержащий символические значения объектов и счетчиков вашего поставщика. Во время установки (при вызове lodctr), файл заголовка должен находиться в том же каталоге, что и .INI-файл. |
| Доверенные | Если вы включите этот ключ в раздел [info], lodctr добавит значение реестра кода валидации библиотеки в ключ вашей производительности с двоичной подписью файла производительности DLL. Когда PERFLIB вызывается, он сравнивает сигнатуру с вашей библиотекой DLL, чтобы определить, была ли изменена библиотека DLL. Значение доверенного ключа игнорируется. |
Требуются ключи DriverName и SymbolFile.
[объекты] раздел
В разделе [objects] представлен список объектов производительности, поддерживаемых поставщиком. Он используется для определения того, относится ли каждый символ из раздела [text] к объекту или счетчику.
Для каждого объекта (набор счетчиков), поддерживаемого поставщиком, добавьте один ключ с именем <symbol>_<langid>_NAME= в раздел [objects], где <symbol> — это имя объекта, а <langid> — идентификатор поддерживаемого языка. Значение игнорируется.
Важный
Раздел [objects] повышает производительность системы. Хотя раздел объектов является необязательным, вы всегда должны включать его в свой .INI-файл. Если вы включите этот раздел, библиотека DLL производительности вызывается только в том случае, если вы поддерживаете запрошенный объект. Если вы не включаете раздел объектов, библиотека DLL вызывается для каждого запроса, так как система не знает, какие объекты поддерживает поставщик. Если раздел объекта не включен, lodctr создает сообщение в журнале событий приложения, указывающее, что . INI-файл не содержал раздел объектов. Идентификатор события этого сообщения — 2000.
[языки] раздел
В разделе [languages] представлен список идентификаторов языка каждого языка, для которого поставщик предоставляет имя и строки справки. Все поставщики должны поддерживать 009 (английский).
Для каждого поддерживаемого языка добавьте один ключ с именем <langid>=. Значение игнорируется, но в целях документации значение обычно присваивается имени соответствующего языка, например 009=English.
Для большинства языков следует использовать идентификатор первичного языка. Полный список идентификаторов языка находится в файле заголовка Winnt.h под заголовком "Идентификаторы основного языка". Преобразуйте значение, найденное в Winnt.h, в последовательность из 3 шестнадцатеричных цифр путем удаления префикса 0x и добавления ведущих 0 цифр до тех пор, пока последовательность не будет длинна 3 цифры. Например, чтобы указать английские строки (0x9), используйте 009. Чтобы указать итальянские строки (0x10), используйте 010.
Для китайских и португальских языков требуются как первичные, так и вложенные идентификаторы. Используйте 404, 804, 416 или 816 вместо 004 или 016.
раздел [текст]
В разделе [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 (во время установки вашего поставщика), выполните средство lodctr из папки, содержащей ваш файл .INI и заголовочный файл. Средство идет в комплекте с компьютером. Необходимо запустить 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 также добавляет следующие значения в узел служб для приложения. В большинстве случаев приложение и поставщик будут иметь связь "один к одному"; однако поставщик может предоставлять данные счетчика для нескольких приложений, поэтому ключ основан на приложении, а не на поставщике.
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