次の方法で共有


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 パラメーターで指定された情報の種類を含むオブジェクトへのポインター。

ProcessInformationClass パラメーターが ProcessMemoryPriority場合、このパラメーターはMEMORY_PRIORITY_INFORMATION 構造体を指す必要があります。

ProcessInformationClass パラメーターが ProcessPowerThrottling場合、このパラメーターはPROCESS_POWER_THROTTLING_STATE 構造体を指す必要があります。

ProcessInformationClass パラメーターが ProcessLeapSecondInfo場合、このパラメーターはPROCESS_LEAP_SECOND_INFO 構造体を指す必要があります。

ProcessInformationClass パラメーターが ProcessOverrideSubsequentPrefetchParameter場合、このパラメーターはOVERRIDE_PREFETCH_PARAMETER 構造体を指す必要があります。

[in] ProcessInformationSize

ProcessInformation パラメーターで指定された構造体のサイズ (バイト単位)。

ProcessInformationClass パラメーターが ProcessMemoryPriority場合、このパラメーターは する必要があります。

ProcessInformationClass パラメーターが ProcessPowerThrottling場合、このパラメーターは する必要があります。

ProcessInformationClass パラメーターが ProcessLeapSecondInfo場合、このパラメーターは する必要があります。

戻り値

関数が成功した場合、戻り値は 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 ではタイマー解決要求が自動的に無視されるため、既定のシステム解像度よりも高い解像度は保証されません。

次の例では、ProcessMemoryPriority を使用して SetProcessInformation を呼び出して、呼び出し元のプロセスの既定値として低いメモリ優先度を設定する方法を示します。

    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;
    }

次の例は、ProcessPowerThrottling を使用して SetProcessInformation 呼び出して、プロセスのサービス品質を制御する方法を示しています。

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));

次の例では、ProcessPowerThrottling を使用して SetProcessInformation 呼び出して、プロセスのタイマー解決を制御する方法を示します。

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));

次の例は、ProcessPowerThrottling を使用して SetProcessInformation を呼び出して、既定のシステム管理動作にリセットする方法を示しています。

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 構造体