Função SetProcessInformation (processthreadsapi.h)

Define informações para o processo especificado.

Sintaxe

BOOL SetProcessInformation(
  [in] HANDLE                    hProcess,
  [in] PROCESS_INFORMATION_CLASS ProcessInformationClass,
       LPVOID                    ProcessInformation,
  [in] DWORD                     ProcessInformationSize
);

Parâmetros

[in] hProcess

Um identificador para o processo. Esse identificador deve ter o direito de acesso PROCESS_SET_INFORMATION . Para obter mais informações, consulte Direitos de acesso e segurança do processo.

[in] ProcessInformationClass

Um membro da enumeração PROCESS_INFORMATION_CLASS especificando o tipo de informação a ser definida.

ProcessInformation

Ponteiro para um objeto que contém o tipo de informação especificado pelo parâmetro ProcessInformationClass .

Se o parâmetro ProcessInformationClass for ProcessMemoryPriority, esse parâmetro deverá apontar para uma estrutura MEMORY_PRIORITY_INFORMATIONMEMORY_PRIORITY_INFORMATION estrutura.

Se o parâmetro ProcessInformationClass for ProcessPowerThrottling, esse parâmetro deverá apontar para uma estrutura PROCESS_POWER_THROTTLING_STATE.

Se o parâmetro ProcessInformationClass for ProcessLeapSecondInfo, esse parâmetro deverá apontar para uma estrutura PROCESS_LEAP_SECOND_INFO.

Se o parâmetro ProcessInformationClass for ProcessOverrideSubsequentPrefetchParameter, esse parâmetro deverá apontar para uma estrutura OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

O tamanho em bytes da estrutura especificada pelo parâmetro ProcessInformation .

Se o parâmetro ProcessInformationClass for ProcessMemoryPriority, esse parâmetro deverá ser sizeof(MEMORY_PRIORITY_INFORMATION).

Se o parâmetro ProcessInformationClass for ProcessPowerThrottling, esse parâmetro deverá ser sizeof(PROCESS_POWER_THROTTLING_STATE).

Se o parâmetro ProcessInformationClass for ProcessLeapSecondInfo, esse parâmetro deverá ser sizeof(PROCESS_LEAP_SECOND_INFO).

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Para ajudar a melhorar o desempenho do sistema, os aplicativos devem usar a função SetProcessInformation com ProcessMemoryPriority para reduzir a prioridade de memória padrão de threads que executam operações em segundo plano ou acessar arquivos e dados que não devem ser acessados novamente em breve. Por exemplo, um aplicativo de indexação de arquivos pode definir uma prioridade padrão mais baixa para o processo que executa a tarefa de indexação.

A prioridade de memória ajuda a determinar por quanto tempo as páginas permanecem no conjunto de trabalho de um processo antes de serem cortadas. A prioridade de memória de um processo determina a prioridade padrão das páginas físicas que são adicionadas ao processo de trabalho definido pelos threads desse processo. Quando o gerenciador de memória corta o conjunto de trabalho, ele corta páginas de prioridade mais baixas antes das páginas de prioridade mais alta. Isso melhora o desempenho geral do sistema porque as páginas de prioridade mais alta são menos propensas a serem cortadas do conjunto de trabalho e, em seguida, disparam uma falha de página quando são acessadas novamente.

ProcessPowerThrottling permite políticas de limitação em um processo, que podem ser usadas para equilibrar o desempenho e a eficiência de energia nos casos em que o desempenho ideal não é necessário.

Quando um processo optar por habilitar PROCESS_POWER_THROTTLING_EXECUTION_SPEED, o processo será classificado como EcoQoS. O sistema tentará aumentar a eficiência de energia por meio de estratégias como reduzir a frequência da CPU ou usar núcleos mais eficientes em termos de energia. O EcoQoS deve ser usado quando o trabalho não está contribuindo para a experiência do usuário em primeiro plano, que fornece maior duração da bateria e redução do calor e do ruído do ventilador. O EcoQoS não deve ser usado para experiências de usuário críticas ou em primeiro plano de desempenho. (Antes de Windows 11, o nível ecoQoS não existia e o processo era rotulado como LowQoS). Se um aplicativo não habilitar PROCESS_POWER_THROTTLING_EXECUTION_SPEEDexplicitamente , o sistema usará sua própria heurística para inferir automaticamente um nível de Qualidade de Serviço. Para obter mais informações, consulte Qualidade de serviço.

Quando um processo optar por habilitar PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, todas as solicitações de resolução de temporizador atuais feitas pelo processo serão ignoradas. Não há mais garantia de que os temporizadores pertencentes ao processo expirem com uma resolução de temporizador mais alta, o que pode melhorar a eficiência de energia. Depois de desabilitar PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONexplicitamente , o sistema lembra e respeita qualquer solicitação de resolução de temporizador anterior pelo processo. Por padrão, em Windows 11 se um processo de propriedade de janela se tornar totalmente ocluído, minimizado ou não visível para o usuário final e não audível, o Windows poderá ignorar automaticamente a solicitação de resolução do temporizador e, portanto, não garantir uma resolução mais alta do que a resolução padrão do sistema.

Exemplos

O exemplo a seguir mostra como chamar SetProcessInformation com ProcessMemoryPriority para definir a baixa prioridade de memória como o padrão para o processo de chamada.

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

O exemplo a seguir mostra como chamar SetProcessInformation com ProcessPowerThrottling para controlar a Qualidade de Serviço de um processo.

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

O exemplo a seguir mostra como chamar SetProcessInformation com ProcessPowerThrottling para controlar a Resolução de Temporizador de um processo.

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

O exemplo a seguir mostra como chamar SetProcessInformation com ProcessPowerThrottling para redefinir para o comportamento gerenciado do sistema padrão.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho processthreadsapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Função GetProcessInformation, função SetThreadInformation, estrutura MEMORY_PRIORITY_INFORMATION, função SetProcessInformation, enumeração PROCESS_INFORMATION_CLASS, estrutura OVERRIDE_PREFETCH_PARAMETER