Condividi tramite


Funzione SetProcessInformation (processthreadsapi.h)

Imposta le informazioni per il processo specificato.

Sintassi

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

Parametri

[in] hProcess

Handle per il processo. Questo handle deve avere il diritto di accesso PROCESS_SET_INFORMATION. Per altre informazioni, vedere Process Security and Access Rights.

[in] ProcessInformationClass

Membro dell'enumerazione PROCESS_INFORMATION_CLASS che specifica il tipo di informazioni da impostare.

ProcessInformation

Puntatore a un oggetto che contiene il tipo di informazioni specificate dal parametro ProcessInformationClass.

Se il parametro ProcessInformationClass è ProcessMemoryPriority, questo parametro deve puntare a una struttura MEMORY_PRIORITY_INFORMATION.

Se il parametro ProcessInformationClass è ProcessPowerThrottling, questo parametro deve puntare a una struttura PROCESS_POWER_THROTTLING_STATE.

Se il parametro ProcessInformationClass è ProcessLeapSecondInfo, questo parametro deve puntare a una struttura PROCESS_LEAP_SECOND_INFO.

Se il parametro ProcessInformationClass è ProcessOverrideSubsequentPrefetchParameter, questo parametro deve puntare a una struttura OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

Dimensioni in byte della struttura specificata dal parametro ProcessInformation .

Se il parametro ProcessInformationClass è ProcessMemoryPriority, questo parametro deve essere .

Se il parametro ProcessInformationClass è ProcessPowerThrottling, questo parametro deve essere sizeof(PROCESS_POWER_THROTTLING_STATE).

Se il parametro ProcessInformationClass è ProcessLeapSecondInfo, questo parametro deve essere sizeof(PROCESS_LEAP_SECOND_INFO).

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni estese sull'errore, chiamare GetLastError.

Osservazioni

Per migliorare le prestazioni del sistema, le applicazioni devono usare la funzione SetProcessInformation con ProcessMemoryPriority per ridurre la priorità di memoria predefinita dei thread che eseguono operazioni in background o accedono a file e dati che non devono essere nuovamente accessibili a breve. Ad esempio, un'applicazione di indicizzazione di file potrebbe impostare una priorità predefinita inferiore per il processo che esegue l'attività di indicizzazione.

priorità memoria consente di determinare per quanto tempo le pagine rimangono nel working set di di un processo prima di essere tagliate. La priorità di memoria di un processo determina la priorità predefinita delle pagine fisiche aggiunte al processo di lavoro impostato dai thread di tale processo. Quando il gestore della memoria taglia il working set, taglia le pagine con priorità inferiore prima delle pagine con priorità più alta. Ciò migliora le prestazioni complessive del sistema perché le pagine con priorità più alta hanno meno probabilità di essere tagliate dal working set e quindi attivano un errore di pagina quando si accede di nuovo.

ProcessPowerThrottling abilita i criteri di limitazione in un processo, che può essere usato per bilanciare le prestazioni e l'efficienza energetica nei casi in cui non sono necessarie prestazioni ottimali.

Quando un processo sceglie di abilitare PROCESS_POWER_THROTTLING_EXECUTION_SPEED, il processo verrà classificato come EcoQoS. Il sistema tenterà di aumentare l'efficienza energetica tramite strategie come la riduzione della frequenza della CPU o l'uso di core più efficienti per l'alimentazione. EcoQoS deve essere usato quando il lavoro non contribuisce all'esperienza utente in primo piano, che offre una durata della batteria più lunga e riduce il calore e il rumore della ventola. EcoQoS non deve essere usato per le esperienze utente critiche o in primo piano per le prestazioni. (Prima di Windows 11, il livello EcoQoS non esisteva e il processo è stato etichettato come LowQoS). Se un'applicazione non abilita in modo esplicito PROCESS_POWER_THROTTLING_EXECUTION_SPEED, il sistema userà le proprie euristiche per dedurre automaticamente un livello di qualità del servizio. Per altre informazioni, vedere Quality of Service.

Quando un processo sceglie di abilitare PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, tutte le richieste di risoluzione timer correnti effettuate dal processo verranno ignorate. I timer appartenenti al processo non sono più garantiti per scadere con una risoluzione timer più elevata, che può migliorare l'efficienza energetica. Dopo aver disabilitato in modo esplicito PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, il sistema memorizza e rispetta qualsiasi richiesta di risoluzione timer precedente da parte del processo. Per impostazione predefinita in Windows 11 se un processo proprietario di una finestra diventa completamente occluso, ridotto a icona o altrimenti non visibile all'utente finale e non udibile, Windows può ignorare automaticamente la richiesta di risoluzione del timer e pertanto non garantisce una risoluzione superiore rispetto alla risoluzione di sistema predefinita.

Esempi

L'esempio seguente illustra come chiamare SetProcessInformation con ProcessMemoryPriority per impostare la priorità di memoria bassa come predefinita per il processo chiamante.

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

L'esempio seguente illustra come chiamare SetProcessInformation con ProcessPowerThrottling per controllare la qualità del servizio di un 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));

L'esempio seguente illustra come chiamare SetProcessInformation con ProcessPowerThrottling per controllare la risoluzione timer di un 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));

L'esempio seguente illustra come chiamare SetProcessInformation con ProcessPowerThrottling per ripristinare il comportamento predefinito gestito dal sistema.

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

Fabbisogno

Requisito Valore
client minimo supportato Windows 8 [app desktop | App UWP]
server minimo supportato Windows Server 2012 [app desktop | App UWP]
piattaforma di destinazione Finestre
intestazione processthreadsapi.h (include Windows.h)
libreria Kernel32.lib
dll Kernel32.dll

Vedere anche

funzione GetProcessInformation, funzione SetThreadInformation, MEMORY_PRIORITY_INFORMATION struttura, funzione SetProcessInformation, PROCESS_INFORMATION_CLASS enumerazione, OVERRIDE_PREFETCH_PARAMETER struttura