다음을 통해 공유


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_LISTResourceTypeOverflowPHYSICAL_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