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 |