Share via


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 Elaborare diritti di sicurezza e accesso.

[in] ProcessInformationClass

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

ProcessInformation

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

Se il parametro ProcessInformationClass è ProcessMemoryPriority, questo parametro deve puntare a una struttura MEMORY_PRIORITY_INFORMATION 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 sizeof(MEMORY_PRIORITY_INFORMATION).

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 informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

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 accedere ai file e ai dati che non devono essere nuovamente accessibili. Ad esempio, un'applicazione di indicizzazione file potrebbe impostare una priorità predefinita inferiore per il processo che esegue l'attività di indicizzazione.

La priorità di memoria consente di determinare quanto tempo rimangono le pagine nel set di lavoro di un processo prima di tagliare. La priorità di memoria di un processo determina la priorità predefinita delle pagine fisiche aggiunte al processo impostato dai thread di tale processo. Quando la gestione memoria taglia il set di lavoro, taglia le pagine con priorità inferiore prima delle pagine con priorità superiore. Ciò migliora le prestazioni complessive del sistema perché è meno probabile che le pagine con priorità superiore vengano tagliate dal set di lavoro e quindi attivano un errore di pagina quando si accede di nuovo.

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

Quando un processo opta per l'abilitazione 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. EcoQoS deve essere usato quando il lavoro non contribuisce all'esperienza utente in primo piano, che offre una maggiore durata della batteria e riduzione del calore e rumore della ventola. EcoQoS non deve essere usato per le esperienze utente critiche o in primo piano. Prima di Windows 11, il livello EcoQoS non esiste e il processo è stato etichettato come LowQoS. Se un'applicazione non abilita PROCESS_POWER_THROTTLING_EXECUTION_SPEEDin modo esplicito , il sistema userà le proprie euristiche per dedurre automaticamente un livello qualità di servizio. Per altre informazioni, vedere Qualità del servizio.

Quando un processo opta per abilitare PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, tutte le richieste di risoluzione del 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 PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONin modo esplicito , il sistema ricorda e rispetta qualsiasi richiesta di risoluzione timer precedente dal processo. Per impostazione predefinita, in Windows 11 se un processo proprietario di una finestra diventa completamente occluso, ridotto al minimo o altrimenti non visibile all'utente finale e non udibile, Windows può ignorare automaticamente la richiesta di risoluzione del timer e quindi non garantisce una risoluzione superiore rispetto alla risoluzione predefinita del sistema.

Esempio

Nell'esempio seguente viene illustrato come chiamare SetProcessInformation con ProcessMemoryPriority per impostare la priorità di memoria bassa come impostazione 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;
    }

Nell'esempio seguente viene illustrato 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));

Nell'esempio seguente viene illustrato 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));

Nell'esempio seguente viene illustrato come chiamare SetProcessInformation con ProcessPowerThrottling per reimpostare il comportamento gestito dal sistema predefinito.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione processthreadsapi.h (includere Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

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