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_INFORMATIONMEMORY_PRIORITY_INFORMATION estructura.
Si el parámetro processInformationClass
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
Si el parámetro ProcessInformationClass es ProcessPowerThrottling, este parámetro debe ser sizeof(PROCESS_POWER_THROTTLING_STATE)
.
Si el parámetro
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