Partager via


SetProcessInformation, fonction (processthreadsapi.h)

Définit des informations pour le processus spécifié.

Syntaxe

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

Paramètres

[in] hProcess

Handle du processus. Ce handle doit disposer du droit d’accès PROCESS_SET_INFORMATION. Pour plus d’informations, consultez Processus de sécurité et de droits d’accès.

[in] ProcessInformationClass

Membre de l’énumération PROCESS_INFORMATION_CLASS spécifiant le type d’informations à définir.

ProcessInformation

Pointeur vers un objet qui contient le type d’informations spécifié par le paramètre ProcessInformationClass.

Si le paramètre ProcessInformationClass est ProcessMemoryPriority, ce paramètre doit pointer vers une structure MEMORY_PRIORITY_INFORMATIONMEMORY_PRIORITY_INFORMATION.

Si le paramètre ProcessInformationClass est ProcessPowerThrottling, ce paramètre doit pointer vers une structure PROCESS_POWER_THROTTLING_STATE.

Si le paramètre ProcessInformationClass est ProcessLeapSecondInfo, ce paramètre doit pointer vers une structure PROCESS_LEAP_SECOND_INFO.

Si le paramètre ProcessInformationClass est ProcessOverrideSubsequentPrefetchParameter, ce paramètre doit pointer vers une structure OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

Taille en octets de la structure spécifiée par le paramètre ProcessInformation.

Si le paramètre ProcessInformationClass est ProcessMemoryPriority, ce paramètre doit être .

Si le paramètre ProcessInformationClass est ProcessPowerThrottling, ce paramètre doit être sizeof(PROCESS_POWER_THROTTLING_STATE).

Si le paramètre ProcessInformationClass est ProcessLeapSecondInfo, ce paramètre doit être .

Valeur de retour

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Remarques

Pour améliorer les performances du système, les applications doivent utiliser la fonction SetProcessInformation avec ProcessMemoryPriority pour réduire la priorité de mémoire par défaut des threads qui effectuent des opérations en arrière-plan ou accèdent à des fichiers et des données qui ne sont pas attendus à nouveau prochainement. Par exemple, une application d’indexation de fichiers peut définir une priorité par défaut inférieure pour le processus qui effectue la tâche d’indexation.

priorité mémoire permet de déterminer la durée pendant laquelle les pages restent dans le jeu de travail d’un processus avant qu’elles ne soient coupées. La priorité de mémoire d’un processus détermine la priorité par défaut des pages physiques ajoutées au processus défini par les threads de ce processus. Lorsque le gestionnaire de mémoire supprime le jeu de travail, il supprime les pages de priorité inférieure avant les pages de priorité supérieure. Cela améliore les performances globales du système, car les pages de priorité supérieure sont moins susceptibles d’être supprimées de l’ensemble de travail, puis déclenchent une erreur de page lorsqu’elles sont consultées à nouveau.

ProcessPowerThrottling permet des stratégies de limitation sur un processus, qui peuvent être utilisées pour équilibrer les performances et l’efficacité de l’alimentation dans les cas où les performances optimales ne sont pas requises.

Lorsqu’un processus choisit d’activer PROCESS_POWER_THROTTLING_EXECUTION_SPEED, le processus sera classé comme EcoQoS. Le système tentera d’augmenter l’efficacité de l’alimentation par le biais de stratégies telles que la réduction de la fréquence du processeur ou l’utilisation de cœurs plus efficaces. EcoQoS doit être utilisé lorsque le travail ne contribue pas à l’expérience utilisateur de premier plan, qui offre une durée de vie plus longue de la batterie, et réduit le bruit de la chaleur et du ventilateur. EcoQoS ne doit pas être utilisé pour les expériences utilisateur critiques ou de premier plan. (Avant Windows 11, le niveau EcoQoS n’existait pas et le processus était étiqueté comme LowQoS). Si une application n’active pas explicitement PROCESS_POWER_THROTTLING_EXECUTION_SPEED, le système utilise ses propres heuristiques pour déduire automatiquement un niveau de qualité de service. Pour plus d’informations, consultez qualité de service.

Lorsqu’un processus choisit d’activer PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, toutes les demandes de résolution de minuteur actuelles effectuées par le processus sont ignorées. Les minuteurs appartenant au processus ne sont plus garantis pour expirer avec une résolution plus élevée du minuteur, ce qui peut améliorer l’efficacité de l’alimentation. Après avoir désactivé explicitement PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, le système se souvient et respecte toute demande de résolution du minuteur précédente par le processus. Par défaut, dans Windows 11, si un processus propriétaire de fenêtre devient entièrement obstrué, réduit ou non visible pour l’utilisateur final et non audible, Windows peut ignorer automatiquement la demande de résolution du minuteur et ne garantit donc pas une résolution supérieure à la résolution système par défaut.

Exemples

L’exemple suivant montre comment appeler SetProcessInformation avec ProcessMemoryPriority définir une priorité de mémoire faible comme valeur par défaut pour le processus appelant.

    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’exemple suivant montre comment appeler SetProcessInformation avec ProcessPowerThrottling pour contrôler la qualité de service d’un processus.

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’exemple suivant montre comment appeler SetProcessInformation avec ProcessPowerThrottling pour contrôler la résolution du minuteur d’un processus.

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’exemple suivant montre comment appeler SetProcessInformation avec ProcessPowerThrottling pour réinitialiser le comportement géré par le système par défaut.

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

Exigences

Exigence Valeur
client minimum pris en charge Windows 8 [applications de bureau | Applications UWP]
serveur minimum pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
plateforme cible Windows
d’en-tête processthreadsapi.h (include Windows.h)
bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

fonction GetProcessInformation, fonction SetThreadInformation, MEMORY_PRIORITY_INFORMATIONde structure , fonction SetProcessInformation, PROCESS_INFORMATION_CLASS énumération, OVERRIDE_PREFETCH_PARAMETER structure