Поделиться через


Функция 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.

Если параметр ProcessInformationClassProcessMemoryPriority, этот параметр должен указывать на структуру MEMORY_PRIORITY_INFORMATIONMEMORY_PRIORITY_INFORMATION.

Если параметр ProcessInformationClassProcessPowerThrottling, этот параметр должен указывать на структуру PROCESS_POWER_THROTTLING_STATE.

Если параметр ProcessInformationClassProcessLeapSecondInfo, этот параметр должен указывать на структуру PROCESS_LEAP_SECOND_INFO.

Если параметр ProcessInformationClass имеет значение ProcessOverrideSubsequentPrefetchParameter, этот параметр должен указывать на структуру OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

Размер структуры в байтах, указанной параметром ProcessInformation .

Если параметр ProcessInformationClassProcessMemoryPriority, этот параметр должен быть sizeof(MEMORY_PRIORITY_INFORMATION).

Если параметр ProcessInformationClassProcessPowerThrottling, этот параметр должен быть sizeof(PROCESS_POWER_THROTTLING_STATE).

Если параметр ProcessInformationClassProcessLeapSecondInfo, этот параметр должен быть sizeof(PROCESS_LEAP_SECOND_INFO).

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Замечания

Чтобы повысить производительность системы, приложения должны использовать функцию SetProcessInformation с ProcessMemoryPriority, чтобы снизить приоритет памяти по умолчанию потоков, выполняющих фоновые операции или доступ к файлам и данным, к которым не ожидается получить доступ в ближайшее время. Например, приложение индексирования файлов может задать более низкий приоритет по умолчанию для процесса, выполняющего задачу индексирования.

приоритет памяти помогает определить, как долго страницы остаются в рабочем наборе процесса перед их обрезкой. Приоритет памяти процесса определяет приоритет по умолчанию физических страниц, которые добавляются в рабочий набор процесса потоками этого процесса. Когда диспетчер памяти обрезает рабочий набор, он обрезает страницы с низким приоритетом перед более высоким приоритетом. Это повышает общую производительность системы, так как страницы с более высоким приоритетом меньше шансов быть обрезаны из рабочего набора, а затем активируют ошибку страницы при повторном доступе.

ProcessPowerThrottling включает политики регулирования в процессе, которые можно использовать для балансировки производительности и эффективности питания в случаях, когда оптимальная производительность не требуется.

Когда процесс выбирает включение PROCESS_POWER_THROTTLING_EXECUTION_SPEED, процесс будет классифицироваться как EcoQoS. Система попытается повысить эффективность питания с помощью таких стратегий, как снижение частоты ЦП или использование более эффективных ядер питания. 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, если процесс владения окном становится полностью occluded, свернутым или иным образом невидимым для конечного пользователя, а windows может автоматически игнорировать запрос разрешения таймера и таким образом не гарантирует более высокое разрешение, чем разрешение системы по умолчанию.

Примеры

В следующем примере показано, как вызывать SetProcessInformation с ProcessMemoryPriority, чтобы задать приоритет низкой памяти в качестве значения по умолчанию для вызывающего процесса.

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

В следующем примере показано, как вызывать SetProcessInformation с ProcessPowerThrottling для управления качеством обслуживания процесса.

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

В следующем примере показано, как вызывать SetProcessInformation с ProcessPowerThrottling для управления разрешением таймера процесса.

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

В следующем примере показано, как вызвать SetProcessInformation с ProcessPowerThrottling для сброса в управляемое по умолчанию поведение системы.

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 (include Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

функции GetProcessInformation, функции SetThreadInformation, MEMORY_PRIORITY_INFORMATION структуры, функции SetProcessInformation, PROCESS_INFORMATION_CLASS перечисления, OVERRIDE_PREFETCH_PARAMETER структуры