KeSetHardwareCounterConfiguration 함수(ntddk.h)

KeSetHardwareCounterConfiguration 루틴은 스레드 프로파일링에 사용할 하드웨어 카운터 목록을 지정합니다.

구문

NTSTATUS KeSetHardwareCounterConfiguration(
  [in] PHARDWARE_COUNTER CounterArray,
  [in] ULONG             Count
);

매개 변수

[in] CounterArray

스레드 프로파일링에 사용할 하드웨어 카운터 구성을 설명하는 HARDWARE_COUNTER 배열에 대한 포인터입니다. 각 배열 요소는 하드웨어 카운터를 설명하는 구조체입니다. 루틴이 반환되기 전에 이 배열의 내용을 내부 데이터 구조로 복사합니다.

[in] Count

CounterArray 매개 변수가 가리키는 배열의 요소 수를 지정합니다.

반환 값

호출에 성공하면 KeSetHardwareCounterConfiguration 은 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음이 포함됩니다.

반환 코드 설명
STATUS_INVALID_PARAMETER Count 매개 변수의 값은 Ntddk.h 헤더 파일에 정의된 MAX_HW_COUNTERS 상수로 지정된 최대 카운터 수를 초과합니다.
STATUS_WMI_ALREADY_ENABLED CounterArray 배열에 지정된 하나 이상의 카운터가 이미 활성화되어 있습니다.
STATUS_NOT_IMPLEMENTED 이 루틴은 호출자가 실행 중인 프로세서 아키텍처에 대해 구현되지 않습니다.

설명

Windows 7에서 이 루틴은 x86 기반, x64 기반 및 Itanium 기반 아키텍처에 대해서만 구현됩니다. 호출자가 지원되지 않는 프로세서 아키텍처에서 실행 중인 경우 루틴은 STATUS_NOT_IMPLEMENTED 반환합니다.

이 루틴은 스레드 프로파일링에 사용할 하드웨어 카운터를 운영 체제에 알려줍니다. 스레드 프로파일링을 사용하지 않도록 설정한 경우에만 이 루틴을 호출합니다. CounterArray 배열이 현재 사용 중인 하드웨어 카운터를 지정하면 루틴이 실패하고 STATUS_WMI_ALREADY_ENABLED 반환합니다.

애플리케이션 스레드는 스레드 프로파일링을 사용하여 로컬 프로세서의 PMU(성능 모니터링 단위)에 있는 하드웨어 카운터에서 성능 측정 집합을 가져올 수 있습니다. 운영 체제는 한 번에 하나의 프로파일링 애플리케이션만 지원합니다. 스레드 프로파일링 애플리케이션의 동시 인스턴스는 지원되지 않습니다. 스레드는 자체 스레드 프로파일링을 사용하도록 설정할 수 있지만 다른 스레드에는 사용할 수 없습니다.

스레드 프로파일링을 사용하도록 설정하면 운영 체제는 KeSetHardwareCounterConfiguration에 대한 마지막 호출에서 지정된 하드웨어 카운터를 사용합니다. 성공한 각 KeSetHardwareCounterConfiguration 호출은 이전 KeSetHardwareCounterConfiguration 호출에서 설정되었을 수 있는 모든 하드웨어 카운터 구성을 대체합니다.

Count = 0을 설정하여 빈 하드웨어 카운터 구성을 지정합니다. 이 구성은 스레드 프로파일링에 하드웨어 카운터를 효과적으로 사용하지 못하게 합니다. 시스템 시작 후 및 초기 KeSetHardwareCounterConfiguration 호출 전에 존재하는 기본 하드웨어 카운터 구성은 빈 구성입니다.

성공적인 KeSetHardwareCounterConfiguration 호출의 효과는 전역입니다. 모든 프로세스의 스레드를 프로파일하는 경우 프로파일러는 KeSetHardwareCounterConfiguration에 대한 마지막 호출에 의해 설정된 하드웨어 카운터 구성을 사용합니다. 다중 프로세서 시스템에서 KeSetHardwareCounterConfiguration 호출은 각 프로세서가 자체 하드웨어 카운터 집합을 사용하지만 시스템의 모든 프로세서에서 스레드 프로파일링에 사용할 하드웨어 카운터 구성을 설정합니다.

리소스 충돌을 방지하려면 카운터 리소스를 사용하는 모든 드라이버는 HalAllocateHardwareCountersHalFreeHardwareCounters 루틴을 사용하여 이러한 리소스의 공유를 조정해야 합니다.

지정된 스레드에 대해 스레드 프로파일링을 사용할 수 있는지 확인하려면 QueryThreadProfiling 함수를 호출합니다 .

현재 스레드 프로파일링에 적용되는 하드웨어 카운터 구성에 대한 운영 체제를 쿼리하려면 KeQueryHardwareCounterConfiguration 루틴을 호출합니다.

가상화 소프트웨어는 일반적으로 하드웨어 성능 카운터를 가상화하지 않습니다. 따라서 하드웨어 성능 카운터는 가상 머신에서 사용할 수 없을 것입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

하드웨어 카운터 프로파일링 참조

HARDWARE_COUNTER

HalAllocateHardwareCounters

HalFreeHardwareCounters

KeQueryHardwareCounterConfiguration