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。
返回值
没有
言论
通过调用 HalAllocateHardwareCountersPHYSICAL_COUNTER_RESOURCE_LIST类型的结构来注册此回调函数的实现。 在 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 处理。
要求
要求 | 价值 |
---|---|
目标平台 | 窗户 |
标头 | ntddk.h |
IRQL | PROFILE_LEVEL |