Freigeben über


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 PROCESS_SET_INFORMATION Zugriffsrecht verfügen. Weitere Informationen finden Sie unter Prozesssicherheits- und Zugriffsberechtigungen.

[in] ProcessInformationClass

Ein Element der PROCESS_INFORMATION_CLASS-Aufzählung, die die Art der festzulegenden Informationen angibt.

ProcessInformation

Zeigen Sie auf ein Objekt, das den Vom ProcessInformationClass Parameter angegebenen Informationstyp enthält.

Wenn der ProcessInformationClass Parameter ProcessMemoryPriority-ist, muss dieser Parameter auf eine MEMORY_PRIORITY_INFORMATION Strukturverweisen.

Wenn der parameter ProcessInformationClassProcessPowerThrottlingist, muss dieser Parameter auf eine PROCESS_POWER_THROTTLING_STATE Strukturverweisen.

Wenn der ProcessInformationClass Parameter ProcessLeapSecondInfoist, muss dieser Parameter auf eine PROCESS_LEAP_SECOND_INFO Strukturverweisen.

Wenn der parameter ProcessInformationClassProcessOverrideSubsequentPrefetchParameterist, muss dieser Parameter auf eine OVERRIDE_PREFETCH_PARAMETER Strukturverweisen.

[in] ProcessInformationSize

Die Größe in Byte der struktur, die durch den parameter ProcessInformation angegeben wird.

Wenn der parameter ProcessInformationClassProcessMemoryPriorityist, muss dieser Parameter sizeof(MEMORY_PRIORITY_INFORMATION)werden.

Wenn der parameter ProcessInformationClassProcessPowerThrottlingist, muss dieser Parameter sizeof(PROCESS_POWER_THROTTLING_STATE)werden.

Wenn der parameter ProcessInformationClassProcessLeapSecondInfoist, muss dieser Parameter sizeof(PROCESS_LEAP_SECOND_INFO)werden.

Rückgabewert

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

Wenn die Funktion fehlschlägt, ist der Rückgabewert null. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

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 in Kürze nicht mehr zugegriffen werden soll. Eine Dateiindizierungsanwendung kann z. B. eine niedrigere Standardpriorität für den Prozess festlegen, der die Indizierungsaufgabe ausführt.

Speicherpriorität hilft zu bestimmen, wie lange Seiten im Arbeitssatz eines Prozesses verbleiben, bevor sie gekürzt werden. Die Speicherpriorität eines Prozesses bestimmt die Standardpriorität der physischen Seiten, die dem Prozessarbeitsvorgang durch die Threads dieses Prozesses hinzugefügt werden. Wenn der Arbeitsspeicher-Manager den Arbeitssatz abschneidet, werden Seiten mit niedrigerer Priorität vor Seiten mit höherer Priorität gekürzt. Dies verbessert die Gesamtsystemleistung, da Seiten mit höherer Priorität weniger wahrscheinlich vom Arbeitssatz gekürzt werden und dann einen Seitenfehler auslösen, wenn erneut auf sie zugegriffen wird.

ProcessPowerThrottling- ermöglicht Drosselungsrichtlinien für einen Prozess, der verwendet werden kann, um leistung und Energieeffizienz in Fällen auszugleichen, in denen eine optimale Leistung nicht erforderlich ist.

Wenn sich ein Prozess für die Aktivierung von PROCESS_POWER_THROTTLING_EXECUTION_SPEEDentscheidet, wird der Prozess als EcoQoS klassifiziert. Das System versucht, die Energieeffizienz durch Strategien wie das Reduzieren der CPU-Frequenz oder die Nutzung effizienterer Kerne zu erhöhen. EcoQoS sollte verwendet werden, wenn die Arbeit nicht zur Vordergrund-Benutzererfahrung beiträgt, was eine längere Akkulaufzeit bietet, und verringerte Wärme- und Lüftergeräusche. EcoQoS sollte nicht für leistungskritische oder Vordergrundbenutzeroberflächen verwendet werden. (Vor Windows 11 war die EcoQoS-Ebene nicht vorhanden und der Prozess wurde als LowQoS bezeichnet). Wenn eine Anwendung PROCESS_POWER_THROTTLING_EXECUTION_SPEEDnicht explizit aktiviert, verwendet das System seine eigenen Heuristiken, um automatisch eine Quality of Service-Ebene abzuleiten. Weitere Informationen finden Sie unter Quality of Service.

Wenn sich ein Prozess entscheidet, PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONzu aktivieren, werden alle aktuellen Anforderungen zur Zeitgeberauflösung, die vom Prozess vorgenommen werden, ignoriert. Zeitgeber, die zum Prozess gehören, laufen nicht mehr mit höherer Zeitgeberauflösung ab, wodurch die Energieeffizienz verbessert werden kann. Nach der expliziten Deaktivierung von PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONmerkt sich das System jede vorherige Zeitgeberauflösungsanforderung durch den Prozess und berücksichtigt diese. In Windows 11 wird standardmäßig ein Fenster, das einen Eigenenprozess besitzt, vollständig verdeckt, minimiert oder anderweitig nicht sichtbar für den Endbenutzer und nicht hörbar, Windows ignoriert möglicherweise automatisch die Zeitgeberauflösungsanforderung und garantiert somit keine höhere Auflösung als die Standardsystemauflösung.

Beispiele

Das folgende Beispiel zeigt, wie sie SetProcessInformation- mit ProcessMemoryPriority- aufrufen, um eine niedrige Speicherpriorität als Standard für den Aufrufvorgang 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 sie SetProcessInformation- mit ProcessPowerThrottling- aufrufen, um die Quality of Service 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 standardmäßige vom System verwaltete Verhalten 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
mindestens unterstützte Client- Windows 8 [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- processthreadsapi.h (include Windows.h)
Library 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