CTRPP

CTRPP 도구는 V2 공급자에 대한 매니페스트를 구문 분석하고 유효성을 검사하는 사전 프로세서입니다. 이 도구는 공급자의 소비자가 필요로 하는 문자열을 사용하여 리소스를 생성 .rc 하고 카운터 데이터를 제공하는 데 사용하는 코드가 포함된 헤더를 생성 .h 합니다. 공급자를 빌드하는 동안 CTRPP 도구를 실행해야 합니다. 이 코드를 직접 생성하는 대신 공급자를 개발할 때 생성된 코드를 시작점으로 사용해야 합니다.

ctrpp -o codeFile -rc rcFile [-legacy] [-MemoryRoutines] [-NotificationCallback] [-prefix prefix] [-ch symFile] [-backcompat] inputFile

인수

옵션 Description
inputFile 필수: 카운터를 정의하는 (XML 매니페스트) 파일의 .man 이름을 지정합니다.
-ocodeFile 필수: CTRPP에서 .h 생성할 코드 파일의 이름을 지정합니다. 이 파일에는 공급자 초기화 및 초기화를 간소화하는 C/C++ 인라인 도우미 함수가 포함됩니다.
-rcrcFile 필수: CTRPP에서 .rc 생성할 (리소스 파일)의 이름을 지정합니다. 이 파일에는 공급자의 문자열 테이블이 포함됩니다.
-chsymFile CTRPP에서 생성할 선택적 .h 기호 파일의 이름을 지정합니다. 이 파일에는 공급자에 있는 각 카운터 세트의 이름 및 GUID에 대한 C/C++ 기호가 포함됩니다.
-접두사접두사 생성된 헤더 파일에 정의된 변수 및 함수에 사용할 접두사를 지정합니다.
-NotificationCallback ControlCallback, AllocateMemoryFreeMemory 콜백 함수의 이름을 지정하기 위한 매개 변수를 포함하도록 CounterInitialize 함수의 기본 서명을 변경합니다. 이 인수는 공급자 요소에 callback 특성을 포함하는 것과 동일한 효과가 있습니다.
-migrateoutputFile .rc 파일을 생성하는 .h 대신 inputFile 매니페스트를 최신 버전으로 업그레이드하고 outputFile에 저장합니다. 이 스위치는 다른 스위치와 함께 사용할 수 없습니다. 사용법: CTRPP -migrate NewFile.man OldFile.man
-BackCompat 되지 않는: 커널 모드 공급자에 대한 지원이 Windows 7에 추가되었습니다. 기본적으로 커널 모드 공급자에 대해 CTRPP에서 생성된 코드는 이전 버전의 Windows와 호환되지 않습니다(누락된 Pcw*** API로 인해 드라이버가 로드되지 않음). 이전 버전의 Windows와 호환성을 사용하도록 설정합니다 -BackCompat . 드라이버는 필요한 API를 동적으로 로드하고 생성된 코드는 API를 사용할 수 없는 경우 공급자를 자동으로 사용하지 않도록 설정합니다.
-MemoryRoutines 되지 않는: 스위치와 -Legacy 함께 사용할 경우 에는 생성된 코드의 메모리 루틴에 대한 템플릿이 포함됩니다. 그렇지 않으면 이 인수가 스위치와 동일한 효과를 옵니다 -NotificationCallback .
-레거시 되지 않는:*.hWindows Vista 코드 템플릿을 사용하여 , *.c, *.rc*_r.h 파일을 생성합니다(CounterInitialize 및 CounterCleanup 대신 PerfAutoInitialize 및 PerfAutoCleanup 생성). 이 스위치는 -MemoryRoutines-NotificationCallback 과 함께 사용할 수 있지만 다른 스위치에서는 사용할 수 없습니다. 이 스위치에는 -o 또는 -rc 스위치를 사용하지 마세요. 생성된 파일의 이름은 매니페스트의 이름을 기반으로 하며 매니페스트가 포함된 디렉터리에 기록됩니다. 사용법: CTRPP -legacy OldFile.man

설명

CTRPP 도구는 코드 파일, .rc 리소스 파일을 생성 .h 하고 필요에 따라 기호 파일을 생성합니다.h.

생성된 리소스 파일 사용

CTRPP 도구는 공급자 카운터 세트의 소비자가 필요로 하는 지역화 가능한 문자열을 포함하는 리소스 파일을 생성 .rc 합니다.

중요

이 파일의 리소스는 공급자 이진 파일에 포함되어야 하며 공급자 매니페스트를 설치하는 동안 공급자 이진 파일에 대한 전체 경로를 등록해야 합니다. 리소스를 찾고 로드할 수 없는 소비자는 공급자의 카운터 세트를 사용할 수 없습니다.

문자열 리소스는 다음과 같이 처리해야 합니다.

  • 개발자는 공급자 매니페스트(.man) 파일을 편집하여 공급자의 특성을 공급자에 대한 문자열 리소스를 포함하고 공급자 구성 요소의 일부로 설치될 공급자 이진 파일(.DLL, .SYS 또는 .EXE)의 이름으로 설정합니다 applicationIdentity .
  • CTRPP 도구는 공급자 매니페스트를 읽고 파일을 생성합니다 .rc .
  • RC(리소스 컴파일러) 도구는 CTRPP 생성 .rc 파일에서 데이터를 컴파일하여 이진 리소스가 .res 포함된 파일을 생성합니다. 이 작업은 CTRPP 생성 .rc 파일을 직접 컴파일하거나 지시문을 통해 #include CTRPP 생성 .rc 파일을 포함하는 다른 .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는 지정된 이진 경로를 매니페스트의 applicationIdentity 특성과 결합하여 전체 경로를 형성합니다.
    • 진단을 위해 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{<ProviderGuid>}의 값을 확인하여 기록된 전체 경로를 검사할 ApplicationIdentity 수 있습니다.
    • 이진 파일이 지역화를 위해 MUI를 사용하는 경우 이진 파일과 함께 MUI 파일을 복사해야 합니다.
  • 카운터셋 수집 중에 소비자는 공급자 이진 파일에 대해 기록된 전체 경로를 사용하여 공급자 이진 파일의 리소스에서 필요한 문자열을 찾아 로드합니다.

사용자 모드 공급자에서 생성된 코드 파일 사용

CTRPP 도구는 C/C++ 코드 파일을 생성 .h 합니다. 공급자 매니페스트의 providerType 특성이 로 설정된 userMode경우 생성된 코드 파일에는 사용자 모드 공급자를 코딩하는 데 도움이 되는 다음 정의가 포함됩니다.

  • CounterInitialize 접두사라는 공급자 초기화 함수입니다.
  • PrefixCounterCleanup이라는 공급자 정리 함수입니다.
  • CounterInitialize 함수 접두사에서 연 공급자 핸들을 저장하는 전역 공급자 변수입니다. 변수의 이름은 매니페스트에 symbol 있는 요소의 provider 특성 값입니다. 이 변수는 공급자의 데이터를 제어하기 위해 PerfCreateInstance, PerfDeleteInstance및 기타 API 호출에 사용해야 합니다.
  • 각 카운터 세트에 대해 카운터 세트GUID가 있는 전역 카운터 세트 GUID 변수입니다. 변수의 이름은 요소 symbol 특성 값 counterSet 과 접미사 "GUID"(예: )입니다. MyCounterSetGUID 이 변수는 공급자의 데이터를 제어하기 위해 PerfCreateInstance, PerfDeleteInstance및 기타 API 호출에 사용해야 합니다.
  • 각 카운터에 대해 카운터 값이 있는 카운터 매크로입니다 id . 매크로의 이름은 요소 특성의 counter 값입니다 symbol . 이 매크로는 공급자의 데이터를 설정하기 위해 PerfSetCounterRefValue, PerfSetULongLongCounterValue및 기타 API 호출에 사용해야 합니다.

함수 이름에서 접두사는 명령줄 매개 변수의 -prefix 값을 나타냅니다. 매개 변수를 -prefix 사용하지 않으면 함수의 이름은 CounterInitializeCounterCleanup입니다.

커널 모드 공급자에서 생성된 코드 파일 사용

CTRPP 도구는 C/C++ 코드 파일을 생성 .h 합니다. 공급자 매니페스트의 providerType 특성이 로 설정된 kernelMode경우 생성된 코드 파일에는 커널 모드 공급자의 카운터 세트를 코딩하는 데 유용한 다음 정의가 포함됩니다.

  • 접두사Register Counterset이라는 카운터 세트 초기화 함수입니다. 이 함수는 RegInfo 구조체를 채운 다음 PcwRegister를 호출하여 결과 카운터 세트 등록 핸들을 전역 Counterset 변수에 넣습니다.
  • 접두사UnregisterCounterset이라는 카운터 세트 정리 함수입니다. 이 함수는 전역 Counterset 변수의 카운터셋 등록 핸들에서 PcwUnregister를 호출합니다.
  • counterset 만들기 접두사라는 instance 만들기 함수입니다. 이 함수는 PcwData 구조의 배열을 채운 다음, 전역 Counterset 변수의 카운터셋 등록 핸들을 사용하여 PcwCreateInstance를 호출합니다.
  • 접두사닫기카운터 집합이라는 instance 정리 함수입니다. 이 함수는 PcwCloseInstance를 호출합니다.
  • 카운터 세트 콜백 함수에서 사용할 접두사Counterset 추가라는 instance 보고 함수입니다. 이 함수는 PcwData 구조체 배열을 채운 다음 PcwAddInstance를 호출합니다.
  • Windows SDK 20H1 이상: 고급 시나리오에서 사용할 접두사InitRegistrationInformationCounterset이라는 RegInfo 초기화 함수입니다. 이 함수는 RegInfo 구조를 채웁니다. 이 함수는 생성된 접두사RegisterCounterset 이 요구 사항을 충족하지 않는 경우(예: RegInfo 구조의 값을 사용자 지정하려는 경우 또는 반환된 핸들을 다른 변수에 저장하려는 경우)에서 사용할 수 있습니다.

함수 이름에서 접두사는 명령줄 매개 변수의 -prefix 값을 나타냅니다. 매개 변수를 -prefix 사용하지 않으면 함수에 접두사는 없습니다.

참고

카운터 세트 콜백이 있는 경우 생성된 접두사Counterset 추가 함수가 사용됩니다. 카운터 집합 콜백이 없는 경우 생성된 접두Counterset 만들기 및 접사 닫기카운터 세트 함수가 사용됩니다.

생성된 기호 파일 사용

명령줄에 -ch 매개 변수를 지정하면 CTRPP 도구에서 .h 기호 파일을 생성합니다. 이 파일에는 공급자에 있는 각 카운터 세트의 이름 및 GUID에 대한 C/C++ 기호가 포함되어 있습니다. 기호는 PerfLib V2 소비자 함수를 사용하여 이 카운터셋의 데이터를 사용하기 위해 하드 코딩된 프로그램을 작성할 때 사용할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]