SetProcessInformation 関数 (processthreadsapi.h)
指定したプロセスの情報を設定します。
構文
BOOL SetProcessInformation(
[in] HANDLE hProcess,
[in] PROCESS_INFORMATION_CLASS ProcessInformationClass,
LPVOID ProcessInformation,
[in] DWORD ProcessInformationSize
);
パラメーター
[in] hProcess
プロセスのハンドル。 このハンドルには、PROCESS_SET_INFORMATION アクセス権が必要です。 詳細については、「プロセス セキュリティとアクセス権の
[in] ProcessInformationClass
設定する情報の種類を指定する PROCESS_INFORMATION_CLASS 列挙体のメンバー。
ProcessInformation
ProcessInformationClass パラメーターで指定された情報の種類を含むオブジェクトへのポインター。
[in] ProcessInformationSize
ProcessInformation パラメーターで指定された構造体のサイズ (バイト単位)。
戻り値
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
備考
システム のパフォーマンスを向上させるために、アプリケーションでは、ProcessMemoryPriority を使用して SetProcessInformation 関数を使用して、バックグラウンド操作を実行するスレッドの既定のメモリ優先度を下げるか、ファイルやデータにアクセスする予定が間もなく再びアクセスされる予定はありません。 たとえば、ファイル インデックス作成アプリケーションでは、インデックス作成タスクを実行するプロセスの既定の優先順位を低く設定できます。
メモリ優先度 は、ページがトリミングされるまでのプロセスの ワーキング セット に残っている期間を判断するのに役立ちます。 プロセスのメモリ優先度によって、そのプロセスのスレッドによってプロセスワーキング セットに追加される物理ページの既定の優先度が決まります。 メモリ マネージャーは、ワーキング セットをトリミングすると、優先順位の低いページを優先順位の高いページの前にトリミングします。 これにより、優先度の高いページがワーキング セットからトリミングされ、再びアクセスされたときにページ フォールトがトリガーされる可能性が低くなるため、システム全体のパフォーマンスが向上します。
ProcessPowerThrottling を使用すると、最適なパフォーマンスが必要ない場合にパフォーマンスと電力効率のバランスを取るために使用できる、プロセスの調整ポリシーが有効になります。
プロセスが PROCESS_POWER_THROTTLING_EXECUTION_SPEED
を有効にすることを選択すると、プロセスは EcoQoS に分類されます。 システムは、CPU 周波数の削減や、より電力効率の高いコアの使用などの戦略を通じて、電力効率の向上を試みます。 EcoQoS は、作業がフォアグラウンド ユーザー エクスペリエンスに貢献していない場合に使用する必要があります。これにより、バッテリ寿命が長くなり、熱とファンのノイズが軽減されます。 パフォーマンスクリティカルまたはフォアグラウンドのユーザー エクスペリエンスには、EcoQoS を使用しないでください。 (Windows 11 より前では、EcoQoS レベルは存在せず、プロセスには LowQoS というラベルが付けられていた)。 アプリケーションが PROCESS_POWER_THROTTLING_EXECUTION_SPEED
を明示的に有効にしていない場合、システムは独自のヒューリスティックを使用して、サービス品質レベルを自動的に推論します。 詳細については、「サービス品質」を参照してください。
プロセスが PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION
の有効化を選択すると、プロセスによって行われた現在のタイマー解決要求はすべて無視されます。 このプロセスに属するタイマーは、より高いタイマー解像度で期限切れになると保証されなくなり、電力効率が向上する可能性があります。
PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION
を明示的に無効にした後、システムはプロセスによって以前のタイマー解決要求を記憶し、受け入れられます。 Windows 11 では、ウィンドウ所有プロセスがエンド ユーザーに対して完全に隠された、最小化された、またはその他の方法で表示されなくなり、聞こえない場合、Windows ではタイマー解決要求が自動的に無視されるため、既定のシステム解像度よりも高い解像度は保証されません。
例
次の例では、
DWORD ErrorCode;
BOOL Success;
MEMORY_PRIORITY_INFORMATION MemPrio;
//
// Set low memory priority on the current process.
//
ZeroMemory(&MemPrio, sizeof(MemPrio));
MemPrio.MemoryPriority = MEMORY_PRIORITY_LOW;
Success = SetProcessInformation(GetCurrentProcess(),
ProcessMemoryPriority,
&MemPrio,
sizeof(MemPrio));
if (!Success) {
ErrorCode = GetLastError();
fprintf(stderr, "Set process memory priority failed: %d\n", ErrorCode);
goto cleanup;
}
次の例は、
PROCESS_POWER_THROTTLING_STATE PowerThrottling;
RtlZeroMemory(&PowerThrottling, sizeof(PowerThrottling));
PowerThrottling.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION;
//
// EcoQoS
// Turn EXECUTION_SPEED throttling on.
// ControlMask selects the mechanism and StateMask declares which mechanism should be on or off.
//
PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED;
PowerThrottling.StateMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED;
SetProcessInformation(GetCurrentProcess(),
ProcessPowerThrottling,
&PowerThrottling,
sizeof(PowerThrottling));
//
// HighQoS
// Turn EXECUTION_SPEED throttling off.
// ControlMask selects the mechanism and StateMask is set to zero as mechanisms should be turned off.
//
PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED;
PowerThrottling.StateMask = 0;
SetProcessInformation(GetCurrentProcess(),
ProcessPowerThrottling,
&PowerThrottling,
sizeof(PowerThrottling));
次の例では、
PROCESS_POWER_THROTTLING_STATE PowerThrottling;
RtlZeroMemory(&PowerThrottling, sizeof(PowerThrottling));
PowerThrottling.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION;
//
// Ignore Timer Resolution Requests.
// Turn IGNORE_TIMER_RESOLUTION throttling on.
// ControlMask selects the mechanism and StateMask declares which mechanism should be on or off.
//
PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION;
PowerThrottling.StateMask = PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION;
SetProcessInformation(GetCurrentProcess(),
ProcessPowerThrottling,
&PowerThrottling,
sizeof(PowerThrottling));
//
// Always honor Timer Resolution Requests.
// Turn IGNORE_TIMER_RESOLUTION throttling off.
// ControlMask selects the mechanism and StateMask is set to zero as mechanisms should be turned off.
//
PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION;
PowerThrottling.StateMask = 0;
SetProcessInformation(GetCurrentProcess(),
ProcessPowerThrottling,
&PowerThrottling,
sizeof(PowerThrottling));
次の例は、
PROCESS_POWER_THROTTLING_STATE PowerThrottling;
RtlZeroMemory(&PowerThrottling, sizeof(PowerThrottling));
PowerThrottling.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION;
//
// Let system manage all power throttling. ControlMask is set to 0 as we don't want
// to control any mechanisms.
//
PowerThrottling.ControlMask = 0;
PowerThrottling.StateMask = 0;
SetProcessInformation(GetCurrentProcess(),
ProcessPowerThrottling,
&PowerThrottling,
sizeof(PowerThrottling));
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 [デスクトップ アプリ |UWP アプリ] |
サポートされる最小サーバー | Windows Server 2012 [デスクトップ アプリ |UWP アプリ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | processthreadsapi.h (Windows.h を含む) |
ライブラリ | Kernel32.lib |
DLL | Kernel32.dll |
関連項目
GetProcessInformation 関数、 SetThreadInformation 関数 MEMORY_PRIORITY_INFORMATION 構造体、 SetProcessInformation 関数、 PROCESS_INFORMATION_CLASS 列挙、 OVERRIDE_PREFETCH_PARAMETER 構造体