Compartilhar via


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 acesso PROCESS_SET_INFORMATION correto. Para obter mais informações, consulte Process Security and Access Rights.

[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 estiver 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 de retorno

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

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

Observações

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 acessam 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 menor para o processo que executa a tarefa de indexação.

de 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 a limitação de políticas em um processo, que podem ser usadas para equilibrar o desempenho e a eficiência de energia em 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 do Windows 11, o nível do EcoQoS não existia e o processo era rotulado como LowQoS). Se um aplicativo não habilitar explicitamente PROCESS_POWER_THROTTLING_EXECUTION_SPEED, 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 do 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. Os temporizadores que pertencem ao processo não têm mais garantia de expirar com maior resolução de temporizador, o que pode melhorar a eficiência de energia. Depois de desabilitar explicitamente PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, o sistema se lembra e respeita qualquer solicitação de resolução de temporizador anterior pelo processo. Por padrão, no Windows 11, se um processo proprietário de janela se tornar totalmente ccluded, 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 de temporizador e, portanto, não garantir uma resolução maior do que a resolução padrão do sistema.

Exemplos

O exemplo a seguir mostra como chamar SetProcessInformation com ProcessMemoryPriority para definir a prioridade de memória baixa 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 do 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
de cliente com suporte mínimo Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho processthreadsapi.h (inclua Windows.h)
biblioteca Kernel32.lib
de DLL Kernel32.dll

Consulte também

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