функция обратного вызова 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