PPHYSICAL_COUNTER_OVERFLOW_HANDLER fonction de rappel (ntddk.h)

Le PPHYSICAL_COUNTER_OVERFLOW_HANDLER est implémenté par le pilote client pour gérer les dépassements de compteur à partir des ressources de compteurs acquises via la routine HalAllocateHardwareCounters .

Syntaxe

PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;

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

Paramètres

OverflowBits

Fournit une bitmap décrivant les compteurs qui ont débordé.

OwningHandle

Fournit le HANDLE correspondant au jeu de ressources auquel appartiennent les compteurs de débordement.

Valeur de retour

None

Remarques

Inscrivez votre implémentation de cette fonction de rappel en appelant HalAllocateHardwareCounters avec une structure de type PHYSICAL_COUNTER_RESOURCE_LIST. Dans le PHYSICAL_COUNTER_RESOURCE_LIST, fournissez une structure de type PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR qui spécifie un PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPEde ResourceTypeOverflow.

Voici un exemple de prototype pour un gestionnaire de dépassement de capacité :

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.

--*/
{
}

Pour inscrire le gestionnaire de dépassement de capacité, utilisez le code suivant :

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

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

Ce rappel est appelé dans IRQL = PROFILE_LEVEL. Cela signifie qu’elle doit toujours être résidente en mémoire. Le rappel doit revenir aussi rapidement que possible et ne doit pas tenter d’effectuer l’une des opérations suivantes.

  • Acquérir ou libérer des verrous de rotation.

  • Accéder au pool paginé qui n’est pas verrouillé en mémoire

  • Appelez une routine paginable.

Le rappel n’a pas besoin de gérer l’effacement des registres de dépassement de capacité, car il sera géré par le HAL.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête ntddk.h
IRQL PROFILE_LEVEL