PPHYSICAL_COUNTER_OVERFLOW_HANDLER 콜백 함수(ntddk.h)
PPHYSICAL_COUNTER_OVERFLOW_HANDLER 클라이언트 드라이버가 HalAllocateHardwareCounters 루틴을 통해 획득한 카운터 리소스의 카운터 오버플로를 처리하기 위해 구현됩니다.
구문
PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;
void PphysicalCounterOverflowHandler(
ULONGLONG OverflowBits,
HANDLE OwningHandle
)
{...}
매개 변수
OverflowBits
오버플로된 카운터를 설명하는 비트맵을 제공합니다.
OwningHandle
오버플로 카운터가 속한 리소스 집합에 해당하는 HANDLE 을 제공합니다.
반환 값
없음
설명
PHYSICAL_COUNTER_RESOURCE_LIST 형식의 구조로 HalAllocateHardwareCounters를 호출하여 이 콜백 함수의 구현을 등록합니다. PHYSICAL_COUNTER_RESOURCE_LISTResourceTypeOverflow의 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE 지정하는 형식 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR 구조를 제공합니다.
오버플로 처리기의 프로토타입 예제는 다음과 같습니다.
VOID
PmuAwareOverflowHandler (
_In_ ULONGLONG OverflowStatus,
_In_ HANDLE OwningHandle
)
/*++
Routine Description:
This routine is the PMU Overflow Handler for a sharing driver.
Arguments:
OverflowStatus - The counters which have overflowed.
OwningHandle - The handle owning the counters.
Return Value:
None.
--*/
{
}
오버플로 처리기를 등록하려면 다음과 같은 코드를 사용합니다.
VOID
CreateOverflowDescriptor (
_Inout_ PPHYSICAL_COUNTER_RESOURCE_LIST CounterResourceList,
_In_ ULONG DescriptorIndex
)
{
CounterResourceList->Descriptors[DescriptorIndex].Type = ResourceTypeOverflow;
CounterResourceList->Descriptors[DescriptorIndex].u.OverflowHandler = PmuAwareOverflowHandler;
}
이 콜백은 IRQL = PROFILE_LEVEL 호출됩니다. 즉, 항상 메모리 상주해야 합니다. 콜백은 가능한 한 빨리 반환되어야 하며 다음 중 어느 것을 시도해서는 안 됩니다.
스핀 잠금을 획득하거나 해제합니다.
메모리에 잠겨 있지 않은 페이징 풀에 액세스
페이지가 지정 가능한 루틴을 호출합니다.
콜백은 HAL에서 처리되므로 오버플로 레지스터 지우기를 처리할 필요가 없습니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | ntddk.h |
IRQL | PROFILE_LEVEL |