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

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

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 identificador correspondiente al conjunto de recursos al que pertenecen los contadores de desbordamiento.

Valor devuelto

None

Observaciones

Registre la implementación de esta función de devolución de llamada mediante una llamada 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 siguientes acciones.

  • Adquirir o liberar bloqueos de giro.

  • 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 Value
Plataforma de destino Windows
Encabezado ntddk.h
IRQL PROFILE_LEVEL