функция обратного вызова 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 , соответствующий набору ресурсов, к которому относятся счетчики переполнения.
Возвращаемое значение
None
Remarks
Зарегистрируйте реализацию этой функции обратного вызова, вызвав 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.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | ntddk.h |
IRQL | PROFILE_LEVEL |