PPHYSICAL_COUNTER_OVERFLOW_HANDLER Rückruffunktion (ntddk.h)

Die PPHYSICAL_COUNTER_OVERFLOW_HANDLER wird vom Clienttreiber implementiert, um Zählerüberläufe aus den Leistungsindikatorenressourcen zu verarbeiten, die über die HalAllocateHardwareCounters-Routine abgerufen wurden.

Syntax

PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;

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

Parameter

OverflowBits

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

OwningHandle

Stellt den HANDLE bereit, der dem Ressourcensatz entspricht, zu dem die überlaufenden Indikatoren gehören.

Rückgabewert

Keine

Bemerkungen

Registrieren Sie Ihre Implementierung dieser Rückruffunktion, indem Sie HalAllocateHardwareCounters mit einer Struktur vom Typ PHYSICAL_COUNTER_RESOURCE_LIST aufrufen. Geben Sie im PHYSICAL_COUNTER_RESOURCE_LIST eine Struktur vom Typ PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR an, die eine PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE von ResourceTypeOverflow angibt.

Hier sehen Sie einen 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.

--*/
{
}

Um den Überlaufhandler zu registrieren, verwenden Sie Code wie folgt:

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 unter 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 es sollte nicht versucht werden, eine der folgenden Aktionen auszuführen.

  • Abrufen oder Freigeben von Drehsperren.

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

  • Rufen Sie eine auslagerungsfähige Routine auf.

Der Rückruf muss keine Überlaufregister löschen, da er von der HAL verarbeitet wird.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile ntddk.h
IRQL PROFILE_LEVEL