Freigeben über


PPHYSICAL_COUNTER_OVERFLOW_HANDLER Rückruffunktion (ntddk.h)

Die PPHYSICAL_COUNTER_OVERFLOW_HANDLER wird vom Clienttreiber implementiert, um Gegenüberläufe von den Leistungsindikatorenressourcen zu verarbeiten, die über die HalAllocateHardwareCounters Routine erworben wurden.

Syntax

PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;

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

Parameter

OverflowBits

Stellt eine Bitmap bereit, die beschreibt, welche Indikatoren überlaufen.

OwningHandle

Stellt die HANDLE- bereit, die dem Ressourcensatz entsprechen, zu dem die Überlaufzähler gehören.

Rückgabewert

Nichts

Bemerkungen

Registrieren Sie ihre Implementierung dieser Rückruffunktion, indem Sie HalAllocateHardwareCounters mit einer Struktur vom Typ PHYSICAL_COUNTER_RESOURCE_LISTaufrufen. Geben Sie in der PHYSICAL_COUNTER_RESOURCE_LISTeine Struktur vom Typ PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR an, die eine PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE von ResourceTypeOverflow-angibt.

Hier ist ein Beispielprototyp für einen Überlaufhandler:

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.

--*/
{
}

Verwenden Sie code wie folgt, um den Überlaufhandler zu registrieren:

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

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

Dieser Rückruf wird bei IRQL = PROFILE_LEVEL aufgerufen. Dies bedeutet, dass es immer speicherresident sein muss. Der Rückruf sollte so schnell wie möglich zurückgegeben werden und sollte nicht versuchen, eine der folgenden Aktionen auszuführen.

  • Erwerben oder Freigeben von Drehsperren.

  • Zugriff auf seitenseitigen Pool, der nicht im Arbeitsspeicher gesperrt ist

  • Rufen Sie eine seitenfähige Routine auf.

Der Rückruf muss das Löschen von Überlaufregistern nicht verarbeiten, da er von der HAL behandelt wird.

Anforderungen

Anforderung Wert
Zielplattform- Fenster
Header- ntddk.h
IRQL- PROFILE_LEVEL