KeSetHardwareCounterConfiguration 関数 (ntddk.h)
KeSetHardwareCounterConfiguration ルーチンは、スレッド プロファイリングに使用するハードウェア カウンターの一覧を指定します。
NTSTATUS KeSetHardwareCounterConfiguration(
[in] PHARDWARE_COUNTER CounterArray,
[in] ULONG Count
);
[in] CounterArray
スレッド プロファイリングに使用するハードウェア カウンター構成を記述する HARDWARE_COUNTER 配列へのポインター。 各配列要素は、ハードウェア カウンターを記述する構造体です。 ルーチンが戻る前に、この配列の内容を内部データ構造にコピーします。
[in] Count
CounterArray パラメーターが指す配列内の要素の数を指定します。
KeSetHardwareCounterConfiguration は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 考えられるエラー戻り値は次のとおりです。
リターン コード | 形容 |
---|---|
STATUS_INVALID_PARAMETER | Count パラメーターの値が、Ntddk.h ヘッダー ファイルで定義されているMAX_HW_COUNTERS定数で指定されているカウンターの最大数を超えています。 |
STATUS_WMI_ALREADY_ENABLED | CounterArray 配列で指定されている 1 つ以上のカウンターが既に有効になっています。 |
STATUS_NOT_IMPLEMENTED | このルーチンは、呼び出し元が実行されているプロセッサ アーキテクチャには実装されません。 |
Windows 7 では、このルーチンは x86 ベース、x64 ベース、および Itanium ベースのアーキテクチャにのみ実装されます。 呼び出し元がサポートされていないプロセッサ アーキテクチャで実行されている場合、ルーチンはSTATUS_NOT_IMPLEMENTEDを返します。
このルーチンは、スレッド プロファイルに使用するハードウェア カウンターをオペレーティング システムに指示します。 スレッド プロファイリングが無効になっている場合にのみ、このルーチンを呼び出します。 CounterArray 配列で現在使用されているハードウェア カウンターが指定されている場合、ルーチンは失敗し、STATUS_WMI_ALREADY_ENABLEDを返します。
アプリケーション スレッドは、スレッド プロファイリングを有効にして、ローカル プロセッサのパフォーマンス監視ユニット (PMU) のハードウェア カウンターからパフォーマンス測定のセットを取得できます。 オペレーティング システムでは、一度に 1 つのプロファイリング アプリケーションのみがサポートされます。 スレッド プロファイル アプリケーションの同時実行インスタンスはサポートされていません。 スレッドは、それ自体に対してスレッド プロファイリングを有効にできますが、他のスレッドには有効にできません。
スレッド プロファイリングが有効になっている場合、オペレーティング システムは、KeSetHardwareCounterConfiguration への最後の呼び出しで指定ハードウェア カウンターを使用します。 KeSetHardwareCounterConfiguration 呼び出し 成功するたびに、以前の KeSetHardwareCounterConfiguration 呼び出しで設定されていたハードウェア カウンター構成が置き換えられます。
Count = 0 を設定して、空のハードウェア カウンター構成を指定します。 この構成により、スレッド プロファイリングにハードウェア カウンターが効果的に使用できなくなります。 システムの起動後、および KeSetHardwareCounterConfiguration 呼び出しの初期 前に存在する既定のハードウェア カウンター構成は、空の構成です。
KeSetHardwareCounterConfiguration 呼び出し 成功した場合の影響はグローバルです。 プロセス内のスレッドがプロファイリングされている場合、プロファイラーは、KeSetHardwareCounterConfiguration への最後の呼び出しによって設定されたハードウェア カウンター構成使用します。 マルチプロセッサ システムでは、KeSetHardwareCounterConfiguration 呼び出しによって、システム内のすべてのプロセッサのスレッド プロファイリングに使用するハードウェア カウンター構成が設定されますが、各プロセッサは独自のハードウェア カウンター セットを使用します。
リソースの競合を回避するには、カウンター リソースを使用するすべてのドライバーで、halAllocateHardwareCounters を使用し、HalFreeHardwareCounters ルーチンを して、これらのリソースの共有を調整する必要があります。
特定のスレッドに対してスレッド プロファイルが有効になっているかどうかを確認するには、QueryThreadProfiling 関数を呼び出します。
スレッド プロファイリングで現在有効になっているハードウェア カウンター構成をオペレーティング システムに照会するには、KeQueryHardwareCounterConfiguration ルーチンを呼び出します。
仮想化ソフトウェアは、通常、ハードウェア パフォーマンス カウンターを仮想化しません。 したがって、ハードウェア パフォーマンス カウンターが仮想マシンで使用できる可能性は低くなります。
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 7 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntddk.h (Ntddk.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |