функция обратного вызова PPHYSICAL_COUNTER_OVERFLOW_HANDLER (ntddk.h)
PPHYSICAL_COUNTER_OVERFLOW_HANDLER реализуется драйвером клиента для обработки переполнения счетчиков из ресурсов счетчиков, приобретенных с помощью процедуры HalAllocateHardwareCounters.
Синтаксис
PPHYSICAL_COUNTER_OVERFLOW_HANDLER PphysicalCounterOverflowHandler;
void PphysicalCounterOverflowHandler(
ULONGLONG OverflowBits,
HANDLE OwningHandle
)
{...}
Параметры
OverflowBits
Предоставляет растровое изображение, описывающее, какие счетчики переполнены.
OwningHandle
Предоставляет HANDLE, соответствующие набору ресурсов, к которому относятся счетчики переполнения.
Возвращаемое значение
Никакой
Замечания
Зарегистрируйте реализацию этой функции обратного вызова, вызвав HalAllocateHardwareCounters со структурой типа PHYSICAL_COUNTER_RESOURCE_LIST. В PHYSICAL_COUNTER_RESOURCE_LISTукажите структуру типа PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, указывающую PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPEResourceTypeOverflow.
Ниже приведен пример прототипа обработчика переполнения:
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.
--*/
{
}
Чтобы зарегистрировать обработчик переполнения, используйте следующий код:
VOID
CreateOverflowDescriptor (
_Inout_ PPHYSICAL_COUNTER_RESOURCE_LIST CounterResourceList,
_In_ ULONG DescriptorIndex
)
{
CounterResourceList->Descriptors[DescriptorIndex].Type = ResourceTypeOverflow;
CounterResourceList->Descriptors[DescriptorIndex].u.OverflowHandler = PmuAwareOverflowHandler;
}
Этот обратный вызов вызывается в IRQL = PROFILE_LEVEL. Это означает, что это всегда должно быть резидентом памяти. Обратный вызов должен возвращаться как можно быстрее и не должен пытаться выполнить одно из следующих действий.
Получение или освобождение блокировок спина.
Доступ к пулу страниц, который не заблокирован в памяти
Вызов подпрограммы, доступный для страниц.
Обратный вызов не требует обработки очистки регистров переполнения, так как он будет обрабатываться HAL.
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
заголовка | ntddk.h |
IRQL | PROFILE_LEVEL |