Bendera Pembuatan Proses

Bendera pembuatan proses berikut digunakan oleh fungsi CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, dan CreateProcessWithTokenW . Mereka dapat ditentukan dalam kombinasi apa pun, kecuali sebagaimana disebutkan.

Contoh

     BOOL creationResult;
    
    creationResult = CreateProcess(
        NULL,                   // No module name (use command line)
        cmdLine,                // Command line
        NULL,                   // Process handle not inheritable
        NULL,                   // Thread handle not inheritable
        FALSE,                  // Set handle inheritance to FALSE
        NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, // creation flags
        NULL,                   // Use parent's environment block
        NULL,                   // Use parent's starting directory 
        &startupInfo,           // Pointer to STARTUPINFO structure
        &processInformation);   // Pointer to PROCESS_INFORMATION structure

Contoh dari sampel klasik Windows di GitHub.

Bendera

Konstanta/nilai Deskripsi
CREATE_BREAKAWAY_FROM_JOB
0x01000000
Proses anak dari proses yang terkait dengan pekerjaan tidak terkait dengan pekerjaan.
Jika proses panggilan tidak terkait dengan pekerjaan, konstanta ini tidak berpengaruh. Jika proses panggilan dikaitkan dengan pekerjaan, pekerjaan harus menetapkan batas JOB_OBJECT_LIMIT_BREAKAWAY_OK .
CREATE_DEFAULT_ERROR_MODE
0x04000000
Proses baru tidak mewarisi mode kesalahan dari proses panggilan. Sebaliknya, proses baru mendapatkan mode kesalahan default.
Fitur ini sangat berguna untuk aplikasi shell multithreaded yang berjalan dengan kesalahan keras dinonaktifkan.
Perilaku default adalah agar proses baru mewarisi mode kesalahan pemanggil. Mengatur bendera ini mengubah perilaku default tersebut.
CREATE_NEW_CONSOLE
0x00000010
Proses baru memiliki konsol baru, alih-alih mewarisi konsol induknya (default). Untuk informasi selengkapnya, lihat Pembuatan Konsol.
Bendera ini tidak dapat digunakan dengan DETACHED_PROCESS.
CREATE_NEW_PROCESS_GROUP
0x00000200
Proses baru adalah proses akar dari grup proses baru. Grup proses mencakup semua proses yang merupakan keturunan dari proses akar ini. Pengidentifikasi proses grup proses baru sama dengan pengidentifikasi proses, yang dikembalikan dalam parameter lpProcessInformation . Grup proses digunakan oleh fungsi GenerateConsoleCtrlEvent untuk mengaktifkan pengiriman sinyal CTRL+BREAK ke sekelompok proses konsol.
Jika bendera ini ditentukan, sinyal CTRL+C akan dinonaktifkan untuk semua proses dalam grup proses baru.
Bendera ini diabaikan jika ditentukan dengan CREATE_NEW_CONSOLE.
CREATE_NO_WINDOW
0x08000000
Prosesnya adalah aplikasi konsol yang sedang dijalankan tanpa jendela konsol. Oleh karena itu, handel konsol untuk aplikasi tidak diatur.
Bendera ini diabaikan jika aplikasi bukan aplikasi konsol, atau jika digunakan dengan CREATE_NEW_CONSOLE atau DETACHED_PROCESS.
CREATE_PROTECTED_PROCESS
0x00040000
Proses ini akan dijalankan sebagai proses yang dilindungi. Sistem membatasi akses ke proses yang dilindungi dan utas proses yang dilindungi. Untuk informasi selengkapnya tentang bagaimana proses dapat berinteraksi dengan proses yang dilindungi, lihat Keamanan Proses dan Hak Akses.
Untuk mengaktifkan proses yang dilindungi, biner harus memiliki tanda tangan khusus. Tanda tangan ini disediakan oleh Microsoft tetapi saat ini tidak tersedia untuk biner non-Microsoft. Saat ini ada empat proses yang dilindungi: fondasi media, mesin audio, pelaporan kesalahan Windows, dan sistem. Komponen yang dimuat ke biner ini juga harus ditandatangani. Perusahaan multimedia dapat memanfaatkan dua proses pertama yang dilindungi. Untuk informasi selengkapnya, lihat Gambaran Umum Jalur Media Terproteksi.
Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
Memungkinkan penelepon untuk menjalankan proses anak yang melewati pembatasan proses yang biasanya akan diterapkan secara otomatis ke proses.
CREATE_SECURE_PROCESS
0x00400000
Bendera ini memungkinkan proses aman, yang berjalan di lingkungan keamanan Virtualization-Based, untuk diluncurkan.
CREATE_SEPARATE_WOW_VDM
0x00000800
Bendera ini hanya valid ketika memulai aplikasi berbasis Windows 16-bit. Jika diatur, proses baru berjalan di Virtual DOS Machine (VDM) privat. Secara default, semua aplikasi berbasis Windows 16-bit berjalan sebagai utas dalam satu VDM bersama. Keuntungan berjalan secara terpisah adalah bahwa crash hanya mengakhiri VDM tunggal; program lain yang berjalan dalam VDM yang berbeda terus berfungsi secara normal. Selain itu, aplikasi berbasis Windows 16-bit yang dijalankan dalam VDM terpisah memiliki antrean input terpisah. Itu berarti bahwa jika satu aplikasi berhenti merespons sesaat, aplikasi di VDM terpisah terus menerima input. Kerugian berjalan secara terpisah adalah dibutuhkan lebih banyak memori untuk melakukannya secara signifikan. Anda harus menggunakan bendera ini hanya jika pengguna meminta agar aplikasi 16-bit harus berjalan di VDM mereka sendiri.
CREATE_SHARED_WOW_VDM
0x00001000
Bendera hanya valid saat memulai aplikasi berbasis Windows 16-bit. Jika sakelar DefaultSeparateVDM di bagian Windows WIN.INI TRUE, bendera ini akan menggantikan sakelar. Proses baru dijalankan di Virtual DOS Machine bersama.
CREATE_SUSPENDED
0x00000004
Alur utama proses baru dibuat dalam status ditangguhkan, dan tidak berjalan sampai fungsi ResumeThread dipanggil.
CREATE_UNICODE_ENVIRONMENT
0x00000400
Jika bendera ini diatur, blok lingkungan yang ditunjukkan oleh lpEnvironment menggunakan karakter Unicode. Jika tidak, blok lingkungan menggunakan karakter ANSI.
DEBUG_ONLY_THIS_PROCESS
0x00000002
Utas panggilan dimulai dan men-debug proses baru. Ini dapat menerima semua peristiwa debug terkait menggunakan fungsi WaitForDebugEvent .
DEBUG_PROCESS
0x00000001
Alur panggilan dimulai dan men-debug proses baru dan semua proses anak yang dibuat oleh proses baru. Ini dapat menerima semua peristiwa debug terkait menggunakan fungsi WaitForDebugEvent .
Proses yang menggunakan DEBUG_PROCESS menjadi akar rantai penelusuran kesalahan. Ini berlanjut sampai proses lain dalam rantai dibuat dengan DEBUG_PROCESS.
Jika bendera ini dikombinasikan dengan DEBUG_ONLY_THIS_PROCESS, pemanggil hanya men-debug proses baru, bukan proses turunan apa pun.
DETACHED_PROCESS
0x00000008
Untuk proses konsol, proses baru tidak mewarisi konsol induknya (default). Proses baru dapat memanggil fungsi AllocConsole di lain waktu untuk membuat konsol. Untuk informasi selengkapnya, lihat Pembuatan Konsol.
Nilai ini tidak dapat digunakan dengan CREATE_NEW_CONSOLE.
EXTENDED_STARTUPINFO_PRESENT
0x00080000
Proses ini dibuat dengan informasi startup yang diperluas; parameter lpStartupInfo menentukan struktur STARTUPINFOEX .
Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.
INHERIT_PARENT_AFFINITY
0x00010000
Proses ini mewarisi afinitas induknya. Jika proses induk memiliki utas dalam lebih dari satu grup prosesor, proses baru mewarisi afinitas relatif grup dari grup arbitrer yang digunakan oleh induk.
Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

Keterangan

Pada Windows 32-bit, aplikasi 16-bit disimulasikan oleh ntvdm.exe, tidak berjalan sebagai proses individual. Oleh karena itu, bendera pembuatan proses berlaku untuk ntvdm.exe. Karena ntvdm.exe bertahan setelah Anda menjalankan aplikasi 16-bit pertama, saat Anda meluncurkan aplikasi 16-bit lain, bendera pembuatan baru tidak diterapkan, kecuali untuk CREATE_NEW_CONSOLE dan CREATE_SEPARATE_WOW_VDM, yang membuat ntvdm.exe baru.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows XP [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2003 [hanya aplikasi desktop]
Header
WinBase.h (termasuk Windows.h)