레지스트리에 카운터 이름 및 설명 추가
중요
상당한 성능 및 안정성 제한으로 인해 이 항목에서 설명하는 성능 카운터 데이터를 제공하는 방법은 나중에 변경되거나 사용할 수 없게 될 수 있습니다. 대신 새 성능 카운터를 만들기 위해 버전 2.0을 사용하여 카운터 데이터 제공 에 설명된 메서드를 사용하고 해당 메서드를 사용하도록 기존 성능 카운터를 마이그레이션하는 것이 좋습니다.
모든 V1 성능 개체 및 해당 카운터의 이름과 설명은 시스템을 설치해야 합니다. V1 공급자의 개체 및 카운터에 대한 이름과 설명을 저장하려면 다음을 수행합니다.
- 개체 및 카운터 오프셋에 대한 기호 상수를 포함하는 .h 헤더 파일을 만듭니다.
- 문자열을 포함하는 초기화(.INI) 파일을 만듭니다.
- 구성 요소를 설치할 때 lodctr 도구를 실행하여 레지스트리에 이름 및 설명을 설치합니다.
- 구성 요소를 제거할 때 unlodctr 도구를 실행하여 레지스트리에서 이름과 설명을 제거합니다.
기호 상수(.h) 파일 만들기
공급자가 제공하는 개체 및 카운터에 대한 오프셋에 대한 상수(매크로)를 정의하는 .h 헤더 파일을 만듭니다. .h 헤더는 공급자를 설치하는 동안 lodctr에 대한 입력으로 사용되며 공급자의 C/C++ 코드에서도 사용할 수 있습니다.
상수 값은 연속되어야 하며 0으로 시작하는 짝수여야 합니다. 상수를 개체별로 그룹화합니다(즉, 개체 오프셋을 사용하여 각 그룹을 시작한 다음 해당 개체에 대한 카운터의 오프셋을 따릅니다).
헤더의 상수는 레지스트리의 이름 및 도움말 텍스트에 카운터가 추가되는 순서를 결정합니다. 공급자는 오프셋을 사용하여 쿼리할 개체와 데이터를 반환할 때 사용할 인덱스 값을 결정합니다. 자세한 내용은 OpenPerformanceData 구현을 참조하세요.
다음은 성능 확장 DLL 만들기 예제에 사용되는 CounterOffsets.h라는 기호 상수 파일의 예제를 보여 줍니다.
#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]
공급자에 대한 일반 정보가 포함되어 있습니다. 섹션 키는 다음과 같이 정의됩니다.
키 | Description |
---|---|
DriverName | 레지스트리에 있는 공급자의 성능 키 이름을 키 아래에 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 지정합니다. 이 키를 만드는 방법에 대한 자세한 내용은 애플리케이션의 성능 키 만들기를 참조하세요. |
SymbolFile | 공급자의 개체 및 카운터의 기호 값이 포함된 .h 헤더 파일을 지정합니다. 설치하는 동안( lodctr을 호출할 때) 헤더 파일은 .INI 파일과 동일한 디렉터리에 있어야 합니다. |
신뢰할 수 있는 | 이 키를 섹션에 [info] 포함하는 경우 lodctr 는 성능 DLL의 이진 서명을 사용하여 성능 키에 라이브러리 유효성 검사 코드 레지스트리 값을 추가합니다. PERFLIB가 DLL을 호출하면 DLL과 서명을 비교하여 DLL이 수정되었는지 확인합니다.
신뢰할 수 있는 키의 값은 무시됩니다. |
DriverName
및 SymbolFile
키가 필요합니다.
[objects] 섹션
이 섹션에서는 [objects]
공급자가 지원하는 성능 개체의 목록을 제공합니다. 섹션의 각 기호가 개체 또는 카운터를 [text]
참조하는지 여부를 확인하는 데 사용됩니다.
공급자가 지원하는 각 개체(카운터 세트)에 대해 섹션에 [objects]
라는 <symbol>_<langid>_NAME=
키를 하나 추가합니다. 여기서 <symbol>
은 개체의 이름이고 <langid>
는 지원되는 언어 중 하나의 언어 ID입니다. 값은 무시됩니다.
중요
섹션은 [objects]
시스템의 성능을 향상시킵니다. 개체 섹션은 선택 사항이지만 항상 이 섹션을 .INI 파일에 포함해야 합니다. 이 섹션을 포함하는 경우 요청된 개체를 지원하는 경우에만 성능 DLL이 호출됩니다. 개체 섹션을 포함하지 않으면 시스템에서 공급자가 지원하는 개체를 모르기 때문에 모든 쿼리에 대해 DLL이 호출됩니다. 개체 섹션이 포함되지 않은 경우 lodctr 는 애플리케이션 이벤트 로그에 .INI 파일에 개체 섹션이 포함되어 있지 않다는 메시지를 생성합니다. 이 메시지의 이벤트 식별자는 2000입니다.
[언어] 섹션
이 섹션에서는 [languages]
공급자가 이름 및 도움말 문자열을 제공하는 각 언어의 언어 식별자 목록을 제공합니다. 모든 공급자는 (영어)를 지원 009
해야 합니다.
지원되는 각 언어에 대해 라는 <langid>=
키를 하나 추가합니다. 값은 무시되지만 설명서를 위해 값은 일반적으로 해당 언어의 이름(예: )으로 설정됩니다. 009=English
대부분의 언어에서는 기본 언어 식별자를 사용해야 합니다. 전체 언어 식별자 목록은 Winnt.h 헤더 파일의 제목 "기본 언어 ID"에 있습니다. 접두사를 제거하고 0x
시퀀스가 3자리 길이가 될 때까지 선행 0
숫자를 추가하여 Winnt.h에 있는 값을 36진수 시퀀스로 변환합니다. 예를 들어 영어 문자열(0x9)을 지정하려면 009를 사용합니다. 이탈리아어 문자열(0x10)을 지정하려면 010을 사용합니다.
중국어 및 포르투갈어 언어에는 기본 및 하위 언어 식별자가 모두 필요합니다. 004 또는 016 대신 404, 804, 416 또는 816을 사용합니다.
[text] 섹션
섹션에서는 [text]
개체 및 카운터의 이름 및 도움말 문자열을 제공합니다.
각 개체 또는 카운터 및 지원되는 각 언어에 대해 NAME 키(개체 또는 카운터의 이름 또는 제목 문자열 포함)를 제공해야 하며 필요에 따라 도움말 키(개체 또는 카운터에 대한 설명 또는 설명 문자열 포함)를 제공할 수 있습니다. 키의 이름은 <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에 대한 매개 변수는 .INI 파일의 경로입니다. 예들 들어 lodctr "C:\Program Files\MyCompany\MyProvider\MyProvider.ini"
입니다.
이름 및 도움말 문자열을 언로드하려면(제거하는 동안) unlodctr 도구를 실행합니다. 관리자 권한으로 unlodctr 을 실행해야 합니다.
unlodctr에 대한 매개 변수는 공급자의 DriverName(공급자의 성능 키 이름)입니다. 예들 들어 unlodctr "MyProvider"
입니다.
lodctr를 실행하기 전에 애플리케이션에 서비스 키 아래에 항목이 있는지 확인합니다. 자세한 내용은 애플리케이션의 성능 키 만들기를 참조하세요. 키가 없는 경우 lodctr 는 사용자의 이름과 설명으로 레지스트리를 업데이트하지 않습니다.
lodctr를 실행하는 대신 설치 프로그램에서 LoadPerfCounterTextStrings(Loadperf.h에 정의됨)를 호출하여 카운터 이름 설명을 로드할 수 있습니다. 그런 다음, 제거하는 동안 UnloadPerfCounterTextStrings를 호출할 수 있습니다.
lodctr 유틸리티는 .INI 파일의 문자열을 적절한 언어 하위 키 아래의 카운터 및 도움말 레지스트리 값으로 복사합니다. 해당 언어 하위 키가 없으면 해당 언어의 문자열이 복사되지 않습니다. 이 유틸리티는 마지막 카운터 및 마지막 도움말 값도 업데이트합니다. 성능 카운터 이름 및 설명은 레지스트리의 다음 위치에 저장됩니다.
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 = ...
Lodctr 도구는 PerfLib 키 아래에 값을 추가하는 것 외에도 애플리케이션의 서비스 노드에 다음 값을 추가합니다. 대부분의 경우 애플리케이션과 공급자는 일대일 관계를 맺습니다. 그러나 공급자가 여러 애플리케이션에 대한 카운터 데이터를 제공할 수 있으므로 키가 공급자가 아닌 애플리케이션을 기반으로 합니다.
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