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 |