Compartir a través de


Función SetProcessInformation (processthreadsapi.h)

Establece información para el proceso especificado.

Sintaxis

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

Parámetros

[in] hProcess

Identificador del proceso. Este identificador debe tener el derecho de acceso PROCESS_SET_INFORMATION. Para obtener más información, consulte Derechos de acceso y seguridad de procesos.

[in] ProcessInformationClass

Miembro de la enumeración PROCESS_INFORMATION_CLASS que especifica el tipo de información que se va a establecer.

ProcessInformation

Puntero a un objeto que contiene el tipo de información especificado por el parámetro ProcessInformationClass.

Si el parámetro processInformationClass es ProcessMemoryPriority, este parámetro debe apuntar a una estructura MEMORY_PRIORITY_INFORMATION.

Si el parámetro processInformationClass es ProcessPowerThrottling, este parámetro debe apuntar a una estructura PROCESS_POWER_THROTTLING_STATE.

Si el parámetro ProcessInformationClass es ProcessLeapSecondInfo, este parámetro debe apuntar a una estructura PROCESS_LEAP_SECOND_INFO.

Si el parámetro ProcessInformationClass es ProcessOverrideSubsequentPrefetchParameter, este parámetro debe apuntar a una estructura OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

Tamaño en bytes de la estructura especificada por el parámetro ProcessInformation.

Si el parámetro processInformationClass es processMemoryPriority, este parámetro debe ser .

Si el parámetro ProcessInformationClass es ProcessPowerThrottling, este parámetro debe ser sizeof(PROCESS_POWER_THROTTLING_STATE).

Si el parámetro ProcessInformationClass es processLeapSecondInfo, este parámetro debe ser .

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero.

Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Observaciones

Para ayudar a mejorar el rendimiento del sistema, las aplicaciones deben usar la función SetProcessInformation con ProcessMemoryPriority para reducir la prioridad de memoria predeterminada de los subprocesos que realizan operaciones en segundo plano o acceden a archivos y datos a los que no se espera que se vuelva a acceder pronto. Por ejemplo, una aplicación de indexación de archivos podría establecer una prioridad predeterminada inferior para el proceso que realiza la tarea de indexación.

de prioridad memoria ayuda a determinar cuánto tiempo permanecen las páginas en el conjunto de trabajo de de un proceso antes de que se recorten. La prioridad de memoria de un proceso determina la prioridad predeterminada de las páginas físicas que se agregan al conjunto de trabajo del proceso por los subprocesos de ese proceso. Cuando el administrador de memoria recorta el conjunto de trabajo, recorta las páginas de prioridad inferior antes de las páginas de prioridad más alta. Esto mejora el rendimiento general del sistema porque es menos probable que las páginas de prioridad más alta se recorten del conjunto de trabajo y, a continuación, desencadenen un error de página cuando se vuelva a acceder a ellas.

ProcessPowerThrottling permite las directivas de limitación en un proceso, que se pueden usar para equilibrar el rendimiento y la eficiencia energética en los casos en los que no se requiera un rendimiento óptimo.

Cuando un proceso opta por habilitar PROCESS_POWER_THROTTLING_EXECUTION_SPEED, el proceso se clasificará como EcoQoS. El sistema intentará aumentar la eficiencia energética a través de estrategias como reducir la frecuencia de CPU o usar núcleos más eficientes. EcoQoS debe usarse cuando el trabajo no contribuye a la experiencia del usuario en primer plano, lo que proporciona una mayor duración de la batería y reduce el calor y el ruido del ventilador. EcoQoS no debe usarse para las experiencias de usuario críticas o en primer plano del rendimiento. (Antes de Windows 11, el nivel EcoQoS no existía y el proceso se etiquetaba como LowQoS). Si una aplicación no habilita explícitamente PROCESS_POWER_THROTTLING_EXECUTION_SPEED, el sistema usará su propia heurística para deducir automáticamente un nivel de calidad de servicio. Para obtener más información, consulte Calidad de servicio.

Cuando un proceso opta por habilitar PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, se omitirán las solicitudes de resolución del temporizador actuales realizadas por el proceso. Ya no se garantiza que los temporizadores que pertenecen al proceso expiren con una resolución de temporizador más alta, lo que puede mejorar la eficiencia energética. Después de deshabilitar explícitamente PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, el sistema recuerda y respeta cualquier solicitud de resolución del temporizador anterior por el proceso. De forma predeterminada, en Windows 11 si un proceso propietario de ventanas se vuelve completamente ocluido, minimizado o no visible para el usuario final y, de lo contrario, Windows puede omitir automáticamente la solicitud de resolución del temporizador y, por lo tanto, no garantiza una resolución más alta que la resolución predeterminada del sistema.

Ejemplos

En el ejemplo siguiente se muestra cómo llamar a setProcessInformation con ProcessMemoryPriority para establecer una prioridad de memoria baja como valor predeterminado para el proceso de llamada.

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

En el ejemplo siguiente se muestra cómo llamar a setProcessInformation con ProcessPowerThrottling para controlar la calidad del servicio de un proceso.

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

En el ejemplo siguiente se muestra cómo llamar a setProcessInformation con ProcessPowerThrottling para controlar la resolución del temporizador de un proceso.

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

En el ejemplo siguiente se muestra cómo llamar a SetProcessInformation con ProcessPowerThrottling para restablecer el comportamiento predeterminado administrado por el 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));
 

Requisitos

Requisito Valor
cliente mínimo admitido Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de processthreadsapi.h (incluya Windows.h)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

función GetProcessInformation, función SetThreadInformation, estructura MEMORY_PRIORITY_INFORMATION, función SetProcessInformation, PROCESS_INFORMATION_CLASS enumeración, estructura OVERRIDE_PREFETCH_PARAMETER