Compartir a través de


PPHYSICAL_COUNTER_OVERFLOW_HANDLER función de devolución de llamada (ntddk.h)

El controlador cliente implementa el PPHYSICAL_COUNTER_OVERFLOW_HANDLER para controlar los desbordamientos de contadores de los recursos de contadores adquiridos a través de la rutinahalAllocateHardwareCounters.

Sintaxis

PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;

void PphysicalCounterOverflowHandler(
  ULONGLONG OverflowBits,
  HANDLE OwningHandle
)
{...}

Parámetros

OverflowBits

Proporciona un mapa de bits que describe qué contadores se desbordan.

OwningHandle

Proporciona el HANDLE correspondiente al conjunto de recursos al que pertenecen los contadores de desbordamiento.

Valor devuelto

Ninguno

Observaciones

Registre la implementación de esta función de devolución de llamada llamando a HalAllocateHardwareCounters con una estructura de tipo PHYSICAL_COUNTER_RESOURCE_LIST. En el PHYSICAL_COUNTER_RESOURCE_LIST, proporcione una estructura de tipo PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR que especifique un PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE de ResourceTypeOverflow.

Este es un prototipo de ejemplo para un controlador de desbordamiento:

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.

--*/
{
}

Para registrar el controlador de desbordamiento, use código similar al siguiente:

VOID
CreateOverflowDescriptor (
    _Inout_ PPHYSICAL_COUNTER_RESOURCE_LIST CounterResourceList,
    _In_ ULONG DescriptorIndex
    )
{

    CounterResourceList->Descriptors[DescriptorIndex].Type = ResourceTypeOverflow;
    CounterResourceList->Descriptors[DescriptorIndex].u.OverflowHandler = PmuAwareOverflowHandler;
}

Esta devolución de llamada se llama en IRQL = PROFILE_LEVEL. Esto significa que siempre debe ser residente en memoria. La devolución de llamada debe devolverse lo antes posible y no debe intentar realizar ninguna de las acciones siguientes.

  • Adquiera o libere bloqueos de número.

  • Acceso al grupo paginado que no está bloqueado en la memoria

  • Llame a una rutina paginable.

La devolución de llamada no necesita controlar el borrado de los registros de desbordamiento, ya que el HAL lo controlará.

Requisitos

Requisito Valor
de la plataforma de destino de Windows
encabezado de ntddk.h
irQL PROFILE_LEVEL