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 的結構,指定 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 |