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 |