Поделиться через


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