SetProcessInformation-Funktion (processthreadsapi.h)

Legt Informationen für den angegebenen Prozess fest.

Syntax

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

Parameter

[in] hProcess

Ein Handle für den Prozess. Dieses Handle muss über das Zugriffsrecht PROCESS_SET_INFORMATION verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.

[in] ProcessInformationClass

Ein Member der PROCESS_INFORMATION_CLASS-Enumeration , die die Art der festzulegenden Informationen angibt.

ProcessInformation

Zeiger auf ein Objekt, das den vom Parameter ProcessInformationClass angegebenen Informationstyp enthält.

Wenn der ProcessInformationClass-ParameterProcessMemoryPriority ist, muss dieser Parameter auf eine MEMORY_PRIORITY_INFORMATION StrukturMEMORY_PRIORITY_INFORMATION Struktur verweisen.

Wenn der ProcessInformationClass-ParameterProcessPowerThrottling ist, muss dieser Parameter auf eine PROCESS_POWER_THROTTLING_STATE-Struktur verweisen.

Wenn der Parameter ProcessInformationClassProcessLeapSecondInfo lautet, muss dieser Parameter auf eine PROCESS_LEAP_SECOND_INFO-Struktur verweisen.

Wenn der ProcessInformationClass-ParameterProcessOverrideSubsequentPrefetchParameter ist, muss dieser Parameter auf eine OVERRIDE_PREFETCH_PARAMETER-Struktur verweisen.

[in] ProcessInformationSize

Die Größe der durch den Parameter ProcessInformation angegebenen Struktur in Byte.

Wenn der ProcessInformationClass-ParameterProcessMemoryPriority ist, muss dieser Parameter sein sizeof(MEMORY_PRIORITY_INFORMATION).

Wenn der ProcessInformationClass-ParameterProcessPowerThrottling ist, muss dieser Parameter sein sizeof(PROCESS_POWER_THROTTLING_STATE).

Wenn der ProcessInformationClass-ParameterProcessLeapSecondInfo ist, muss dieser Parameter sein sizeof(PROCESS_LEAP_SECOND_INFO).

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Um die Systemleistung zu verbessern, sollten Anwendungen die SetProcessInformation-Funktion mit ProcessMemoryPriority verwenden, um die Standardspeicherpriorität von Threads zu senken, die Hintergrundvorgänge ausführen oder auf Dateien und Daten zugreifen, auf die nicht bald wieder zugegriffen werden soll. Beispielsweise kann eine Dateiindizierungsanwendung eine niedrigere Standardpriorität für den Prozess festlegen, der die Indizierungsaufgabe ausführt.

Mit der Speicherpriorität kann ermittelt werden, wie lange Seiten im Arbeitssatz eines Prozesses verbleiben, bevor sie gekürzt werden. Die Arbeitsspeicherpriorität eines Prozesses bestimmt die Standardpriorität der physischen Seiten, die dem von den Threads dieses Prozesses festgelegten Prozessarbeit hinzugefügt werden. Wenn der Arbeitsspeicher-Manager den Arbeitssatz schneidet, schneidet er Seiten mit niedrigerer Priorität vor Seiten mit höherer Priorität ab. Dies verbessert die Gesamtsystemleistung, da Seiten mit höherer Priorität weniger wahrscheinlich aus dem Arbeitssatz entfernt werden und dann einen Seitenfehler auslösen, wenn erneut darauf zugegriffen wird.

ProcessPowerThrottling ermöglicht Drosselungsrichtlinien für einen Prozess, die verwendet werden können, um Leistung und Energieeffizienz in Fällen auszugleichen, in denen keine optimale Leistung erforderlich ist.

Wenn sich ein Prozess für die Aktivierung PROCESS_POWER_THROTTLING_EXECUTION_SPEEDentscheidet, wird der Prozess als EcoQoS klassifiziert. Das System versucht, die Energieeffizienz durch Strategien wie die Verringerung der CPU-Frequenz oder die Verwendung von energieeffizienteren Kernen zu erhöhen. EcoQoS sollte verwendet werden, wenn die Arbeit nicht zur Benutzerfreundlichkeit im Vordergrund beiträgt, was eine längere Akkulaufzeit und geringere Wärme- und Lüftergeräusche bietet. EcoQoS sollte nicht für leistungskritische Benutzeroberflächen oder Benutzeroberflächen im Vordergrund verwendet werden. (Vor Windows 11 war die EcoQoS-Ebene nicht vorhanden, und der Prozess wurde als LowQoS bezeichnet. Wenn eine Anwendung nicht explizit aktiviert PROCESS_POWER_THROTTLING_EXECUTION_SPEED, verwendet das System eine eigene Heuristik, um automatisch eine Quality of Service-Ebene abzuleiten. Weitere Informationen finden Sie unter Servicequalität.

Wenn ein Prozess die Aktivierung PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONvon aktiviert, werden alle aktuellen Zeitgeberauflösungsanforderungen des Prozesses ignoriert. Timer, die zum Prozess gehören, laufen nicht mehr mit höherer Timerauflösung ab, was die Energieeffizienz verbessern kann. Nach der expliziten Deaktivierung PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONspeichert das System jede vorherige Timerauflösungsanforderung des Prozesses und berücksichtigt diese. Standardmäßig in Windows 11 wenn ein Fenster besitzender Prozess vollständig verdeckt, minimiert oder anderweitig nicht sichtbar für den Endbenutzer und nicht hörbar ist, ignoriert Windows möglicherweise automatisch die Zeitgeberauflösungsanforderung und garantiert daher keine höhere Auflösung als die Standardsystemauflösung.

Beispiele

Das folgende Beispiel zeigt, wie SetProcessInformation mit ProcessMemoryPriority aufgerufen wird, um eine niedrige Arbeitsspeicherpriorität als Standard für den aufrufenden Prozess festzulegen.

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

Das folgende Beispiel zeigt, wie SetProcessInformation mit ProcessPowerThrottling aufgerufen wird, um die Dienstqualität eines Prozesses zu steuern.

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

Das folgende Beispiel zeigt, wie SetProcessInformation mit ProcessPowerThrottling aufgerufen wird, um die Timerauflösung eines Prozesses zu steuern.

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

Das folgende Beispiel zeigt, wie SetProcessInformation mit ProcessPowerThrottling aufgerufen wird, um auf das vom System verwaltete Standardverhalten zurückzusetzen.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile processthreadsapi.h (include Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

GetProcessInformation-Funktion, SetThreadInformation-Funktion, MEMORY_PRIORITY_INFORMATION-Struktur, SetProcessInformation-Funktion, PROCESS_INFORMATION_CLASS-Enumeration, OVERRIDE_PREFETCH_PARAMETER-Struktur