커널 모드 성능 카운터 사용
커널 모드 구성 요소는 PCW(Windows용 성능 카운터) API를 사용하여 성능 카운터를 제공합니다.
다음 단계를 사용하여 새 카운터 데이터 공급자를 개발합니다.
공급자 및 해당 카운터 세트를 설명하는 카운터 매니페스트를 작성합니다. 카운터 매니페스트는 성능 카운터 공급자 및 해당 카운터 세트를 정의하는 XML 형식 파일입니다.
applicationIdentity
특성을 커널 모드 구성 요소의 일부로 설치되고 성능 데이터 소비자가 필요로 하는 문자열 리소스를 포함하는 이진 파일의 이름으로 설정합니다.providerType
특성을kernelMode
으로 설정합니다.- 구성 요소에서 PCW API로 카운터 값을 전달할 때 사용할 C/C++ 구조체의 이름으로 하나
struct
이상의 요소(아래counterSet/structs
)를 정의합니다. - 각
counter
에서 PCW에서 카운터 값을 읽어야 하는 및field
을 정의struct
합니다.
구성 요소에 대한 빌드 프로세스의 일부로 CTRPP 도구를 사용하여 카운터 매니페스트를 컴파일합니다. (CTRPP(카운터 전처리기) 도구는 WDK에 포함되어 있으며 를 입력하여
ctrpp
개발자 명령 프롬프트에서 사용할 수 있습니다. CTRPP 도구는 파일과 파일을 생성.rc
합니다.h
.- CTRPP 생성
.rc
파일은 리소스 컴파일러(RC.exe) 도구에서 컴파일해야 하며, 결과.res
파일은 특성에applicationIdentity
명명된 이진 파일에 연결되어야 합니다. CTRPP 생성.rc
파일을 직접 컴파일하거나 CTRPP 생성.rc
파일을 이진 파일로 컴파일되는 기존.rc
파일로 컴파일할 수 있습니다#include
. - CTRPP에서
.h
생성된 파일에는 기본 PCW API를 래핑하는 도우미 함수가 포함되어 있습니다. 예를 들어 CTRPP에서 생성된.h
파일에는 사용자를 대신하여 를 호출PcwRegister
하는 Register Xxx 함수가 포함됩니다. 대부분의 경우 PCW API를 직접 호출하는 대신 CTRPP 생성 도우미 함수를 호출하지만 PCW API에 대한 설명서를 참조하여 해당 CTRPP 생성 함수가 수행하는 작업을 이해할 수 있습니다. 도우미 함수는 구성 요소의 카운터 데이터 레이아웃을 PCW API에서PCW_DATA
예상하는 레이아웃으로 변환하는 것을 관리합니다.
- CTRPP 생성
구성 요소 초기화 시 PcwRegister를 호출하는 CTRPP 생성 RegisterXxx 함수를 호출합니다. 구성 요소 종료 시 PcwUnregister를 호출하는 CTRPP 생성 등록 취소Xxx 함수를 호출합니다.
카운터 데이터를 제공하는 코드를 추가합니다. 이 작업은 PCW_CALLBACK 콜백 함수를 구현하거나 각 instance 대한 카운터 값으로 데이터 구조를 유지 관리하고 인스턴스가 만들어지고 제거될 때 CTRPP에서 생성된 CreateInstanceXxx 및 CloseInstanceXxx 함수를 호출하여 수행됩니다.
구성 요소 설치 시 를 사용하여
lodctr /m:<CounterManifest> <InstallPath>
공급자를 설치합니다. 구성 요소 제거 시(또는/g
매개 변수 포함/m
)를 사용하여unlodctr
공급자를 제거합니다. 공급자를 설치하면 성능 데이터 소비자(예: perfmon, typeperf 또는 WMI)가 카운터 세트를 사용할 수 있도록 공급자의 카운터 세트가 사용 가능한 카운터 세트의 시스템 전체 리포지토리에 추가됩니다. 특히 공급자를 설치하면 공급자의 문자열 테이블이 포함된 이진 파일(DLL, SYS 또는 EXE 파일)의 전체 경로가 기록됩니다. 이진 파일의 전체 경로는 다음과 같이 매니페스트의applicationIdentity
특성을<CounterManifest>
명령줄에lodctr
사용되는 및 값과<InstallPath>
결합하여 결정됩니다.- 특성이
applicationIdentity
전체 경로이면 사용됩니다. - 그렇지 않으면 매개 변수가
<InstallationPath>
전체 경로이면 이 매개 변수가 사용됩니다. - 그렇지 않으면 매개 변수가
<CounterManifest>
전체 경로이면 의<CounterManifest>
디렉터리가 특성의 파일 이름과applicationIdentity
결합됩니다. - 그렇지 않으면 현재 작업 디렉터리가 특성의 파일 이름과
applicationIdentity
결합됩니다.
- 특성이
커널 모드 PCW 공급자의 예제는 GitHub의 Windows 드라이버 샘플 리포지토리에서 Kcs(커널 카운터 샘플)를 참조하세요.