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で、ResourceTypeOverflow のPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPEを指定する PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR 型の構造体を指定します。
オーバーフロー ハンドラーのプロトタイプの例を次に示します。
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 |