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

返回值

备注

通过使用 PHYSICAL_COUNTER_RESOURCE_LIST 类型的结构调用 HalAllocateHardwareCounters 来注册此回调函数的实现。 在PHYSICAL_COUNTER_RESOURCE_LIST中,提供 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR 类型的结构,该结构指定 ResourceTypeOverflow的PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE

下面是溢出处理程序的示例原型:

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
标头 ntddk.h
IRQL PROFILE_LEVEL