PPHYSICAL_COUNTER_OVERFLOW_HANDLER função de retorno de chamada (ntddk.h)

O PPHYSICAL_COUNTER_OVERFLOW_HANDLER é implementado pelo driver do cliente para lidar com estouros de contador dos recursos de contadores adquiridos por meio da rotina HalAllocateHardwareCounters .

Sintaxe

PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;

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

Parâmetros

OverflowBits

Fornece um bitmap que descreve quais contadores estouraram.

OwningHandle

Fornece o HANDLE correspondente ao conjunto de recursos ao qual os contadores de estouro pertencem.

Retornar valor

Nenhum

Comentários

Registre sua implementação dessa função de retorno de chamada chamando HalAllocateHardwareCounters com uma estrutura do tipo PHYSICAL_COUNTER_RESOURCE_LIST. No PHYSICAL_COUNTER_RESOURCE_LIST, forneça uma estrutura do tipo PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR que especifica um PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE de ResourceTypeOverflow.

Aqui está um protótipo de exemplo para um manipulador de estouro:

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 o manipulador de estouro, use um código como este:

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

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

Esse retorno de chamada é chamado em IRQL = PROFILE_LEVEL. Isso significa que ele sempre deve ser residente de memória. O retorno de chamada deve retornar o mais rápido possível e não deve tentar fazer nenhum dos seguintes procedimentos.

  • Adquirir ou liberar bloqueios de rotação.

  • Acessar o pool de páginas que não está bloqueado na memória

  • Chame uma rotina paginável.

O retorno de chamada não precisa lidar com a limpeza de nenhum registro de estouro, pois ele será tratado pelo HAL.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho ntddk.h
IRQL PROFILE_LEVEL