Bagikan melalui


Fungsi SetProcessInformation (processthreadsapi.h)

Mengatur informasi untuk proses yang ditentukan.

Sintaks

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

Parameter

[in] hProcess

Handel untuk proses. Handel ini harus memiliki hak akses PROCESS_SET_INFORMATION . Untuk informasi selengkapnya, lihat Keamanan Proses dan Hak Akses.

[in] ProcessInformationClass

Anggota enumerasi PROCESS_INFORMATION_CLASS yang menentukan jenis informasi yang akan diatur.

ProcessInformation

Penunjuk ke objek yang berisi jenis informasi yang ditentukan oleh parameter ProcessInformationClass .

Jika parameter ProcessInformationClass adalah ProcessMemoryPriority, parameter ini harus menunjuk ke struktur MEMORY_PRIORITY_INFORMATIONMEMORY_PRIORITY_INFORMATION struktur.

Jika parameter ProcessInformationClass adalah ProcessPowerThrottling, parameter ini harus menunjuk ke struktur PROCESS_POWER_THROTTLING_STATE.

Jika parameter ProcessInformationClass adalah ProcessLeapSecondInfo, parameter ini harus menunjuk ke struktur PROCESS_LEAP_SECOND_INFO.

Jika parameter ProcessInformationClass adalah ProcessOverrideSubsequentPrefetchParameter, parameter ini harus menunjuk ke struktur OVERRIDE_PREFETCH_PARAMETER.

[in] ProcessInformationSize

Ukuran dalam byte struktur yang ditentukan oleh parameter ProcessInformation .

Jika parameter ProcessInformationClass adalah ProcessMemoryPriority, parameter ini harus sizeof(MEMORY_PRIORITY_INFORMATION).

Jika parameter ProcessInformationClass adalah ProcessPowerThrottling, parameter ini harus sizeof(PROCESS_POWER_THROTTLING_STATE).

Jika parameter ProcessInformationClass adalah ProcessLeapSecondInfo, parameter ini harus sizeof(PROCESS_LEAP_SECOND_INFO).

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Untuk membantu meningkatkan performa sistem, aplikasi harus menggunakan fungsi SetProcessInformation dengan ProcessMemoryPriority untuk menurunkan prioritas memori default utas yang melakukan operasi latar belakang atau mengakses file dan data yang tidak diharapkan akan segera diakses lagi. Misalnya, aplikasi pengindeksan file mungkin menetapkan prioritas default yang lebih rendah untuk proses yang melakukan tugas pengindeksan.

Prioritas memori membantu menentukan berapa lama halaman tetap berada dalam rangkaian proses yang berfungsi sebelum dipangkas. Prioritas memori proses menentukan prioritas default halaman fisik yang ditambahkan ke proses yang diatur oleh utas proses tersebut. Saat manajer memori memangkas set kerja, manajer memori memangkas halaman prioritas yang lebih rendah sebelum halaman prioritas yang lebih tinggi. Ini meningkatkan performa sistem secara keseluruhan karena halaman prioritas yang lebih tinggi cenderung tidak dipangkas dari set kerja dan kemudian memicu kesalahan halaman ketika diakses lagi.

ProcessPowerThrottling memungkinkan kebijakan pembatasan pada suatu proses, yang dapat digunakan untuk menyeimbangkan performa dan efisiensi daya jika performa optimal tidak diperlukan.

Ketika proses memilih untuk mengaktifkan PROCESS_POWER_THROTTLING_EXECUTION_SPEED, proses akan diklasifikasikan sebagai EcoQoS. Sistem akan mencoba meningkatkan efisiensi daya melalui strategi seperti mengurangi frekuensi CPU atau menggunakan inti yang lebih hemat daya. EcoQoS harus digunakan ketika pekerjaan tidak berkontribusi pada pengalaman pengguna latar depan, yang memberikan masa pakai baterai yang lebih lama, dan mengurangi kebisingan panas dan kipas. EcoQoS tidak boleh digunakan untuk pengalaman pengguna kritis performa atau latar depan. (Sebelum Windows 11, tingkat EcoQoS tidak ada dan prosesnya dilabeli sebagai LowQoS). Jika aplikasi tidak secara eksplisit mengaktifkan PROCESS_POWER_THROTTLING_EXECUTION_SPEED, sistem akan menggunakan heuristiknya sendiri untuk secara otomatis menyimpulkan tingkat Kualitas Layanan. Untuk informasi selengkapnya, lihat Kualitas Layanan.

Ketika proses memilih untuk mengaktifkan PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION, setiap permintaan resolusi timer saat ini yang dibuat oleh proses akan diabaikan. Timer milik proses tidak lagi dijamin kedaluwarsa dengan resolusi timer yang lebih tinggi, yang dapat meningkatkan efisiensi daya. Setelah secara eksplisit PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTIONmenonaktifkan , sistem mengingat dan mematuhi permintaan resolusi timer sebelumnya oleh proses. Secara default dalam Windows 11 jika proses pemilik jendela menjadi sepenuhnya terhambat, diminimalkan, atau tidak terlihat oleh pengguna akhir, dan tidak dapat didengar, Windows dapat secara otomatis mengabaikan permintaan resolusi timer dan dengan demikian tidak menjamin resolusi yang lebih tinggi daripada resolusi sistem default.

Contoh

Contoh berikut menunjukkan cara memanggil SetProcessInformation dengan ProcessMemoryPriority untuk mengatur prioritas memori rendah sebagai default untuk proses panggilan.

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

Contoh berikut menunjukkan cara memanggil SetProcessInformation dengan ProcessPowerThrottling untuk mengontrol Kualitas Layanan proses.

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

Contoh berikut menunjukkan cara memanggil SetProcessInformation dengan ProcessPowerThrottling untuk mengontrol Resolusi Timer proses.

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

Contoh berikut menunjukkan cara memanggil SetProcessInformation dengan ProcessPowerThrottling untuk mengatur ulang ke perilaku terkelola sistem default.

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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2012 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header processthreadsapi.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

Fungsi GetProcessInformation, fungsi SetThreadInformation, struktur MEMORY_PRIORITY_INFORMATION, fungsi SetProcessInformation, enumerasi PROCESS_INFORMATION_CLASS, struktur OVERRIDE_PREFETCH_PARAMETER