進程建立旗標

CreateProcess、CreateProcessAsUserCreateProcessWithLogonWCreateProcessWithTokenW函式會使用下列程式建立旗標。 它們可以在任何組合中指定,但未注明。

範例

     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

GitHub 上的 Windows 傳統範例 範例範例。

Flags

常數/值 Description
CREATE_BREAKAWAY_FROM_JOB
0x01000000
與作業相關聯的進程子進程不會與作業相關聯。
如果呼叫進程未與作業相關聯,這個常數就不會有任何作用。 如果呼叫進程與作業相關聯,作業必須設定 JOB_OBJECT_LIMIT_BREAKAWAY_OK 限制。
CREATE_DEFAULT_ERROR_MODE
0x04000000
新進程不會繼承呼叫進程的錯誤模式。 相反地,新進程會取得預設的錯誤模式。
這項功能特別適用于停用硬式錯誤的多執行緒殼層應用程式。
預設行為是讓新進程繼承呼叫端的錯誤模式。 設定此旗標會變更預設行為。
CREATE_NEW_CONSOLE
0x00000010
新的進程有新的主控台,而不是繼承其父代的主控台, (預設) 。 如需詳細資訊,請參閱 建立主控台
此旗標不能與 DETACHED_PROCESS搭配使用。
CREATE_NEW_PROCESS_GROUP
0x00000200
新進程是新進程群組的根進程。 進程群組包含此根進程子代的所有進程。 新進程群組的進程識別碼與進程識別碼相同,此識別碼會在 lpProcessInformation 參數中傳回。 GenerateConsoleCtrlEvent函式會使用進程群組,以啟用將 CTRL+BREAK 訊號傳送至主控台進程的群組。
如果指定此旗標,將會針對新進程群組內的所有進程停用 CTRL+C 訊號。
如果使用 CREATE_NEW_CONSOLE指定,則會忽略此旗標。
CREATE_NO_WINDOW
0x08000000
此程式是在沒有主控台視窗的情況下執行的主控台應用程式。 因此,不會設定應用程式的主控台控制碼。
如果應用程式不是主控台應用程式,或與 CREATE_NEW_CONSOLEDETACHED_PROCESS搭配使用,則會忽略此旗標。
CREATE_PROTECTED_PROCESS
0x00040000
此程式會以受保護的進程執行。 系統會限制受保護進程的存取權,以及受保護進程的執行緒。 如需進程如何與受保護進程互動的詳細資訊,請參閱 處理安全性和存取權限
若要啟用受保護的進程,二進位檔必須具有特殊簽章。 此簽章是由 Microsoft 提供,但目前不適用於非 Microsoft 二進位檔。 目前有四個受保護的程式:媒體基礎、音訊引擎、Windows 錯誤報告和系統。 載入這些二進位檔的元件也必須簽署。 多媒體公司可以利用前兩個受保護的程式。 如需詳細資訊,請參閱 受保護媒體路徑的概觀
Windows Server 2003 和 Windows XP: 不支援此值。
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
允許呼叫端執行子進程,略過通常會自動套用至進程的進程限制。
CREATE_SECURE_PROCESS
0x00400000
此旗標允許在Virtualization-Based安全性環境中執行的安全進程啟動。
CREATE_SEPARATE_WOW_VDM
0x00000800
只有在啟動以 16 位 Windows 為基礎的應用程式時,此旗標才有效。 如果設定,新的進程會在私人 Virtual DOS Machine (VDM) 中執行。 根據預設,所有 16 位 Windows 應用程式都會在單一共用 VDM 中以執行緒的形式執行。 個別執行的優點是當機只會終止單一 VDM;在相異 VM 中執行的任何其他程式會繼續正常運作。 此外,在個別 VM 中執行的 16 位 Windows 應用程式具有個別的輸入佇列。 這表示,如果一個應用程式暫時停止回應,個別 VM 中的應用程式會繼續接收輸入。 個別執行的缺點是需要更多記憶體才能這麼做。 只有當使用者要求 16 位應用程式應該在其自己的 VDM 中執行時,才應該使用此旗標。
CREATE_SHARED_WOW_VDM
0x00001000
只有在啟動以 16 位 Windows 為基礎的應用程式時,旗標才有效。 如果 WIN.INI Windows 區段中的 DefaultSeparateVDM 參數為 TRUE,則此旗標會覆寫參數。 新的程式會在共用的虛擬 DOS 機器中執行。
CREATE_SUSPENDED
0x00000004
新進程的主要執行緒會以暫停狀態建立,而且在呼叫 ResumeThread 函式之前不會執行。
CREATE_UNICODE_ENVIRONMENT
0x00000400
如果設定此旗標, lpEnvironment 所指向的環境區塊會使用 Unicode 字元。 否則,環境區塊會使用 ANSI 字元。
DEBUG_ONLY_THIS_PROCESS
0x00000002
呼叫執行緒會啟動並偵錯新的進程。 它可以使用 WaitForDebugEvent 函式來接收所有相關的偵錯事件。
DEBUG_PROCESS
0x00000001
呼叫執行緒會啟動並偵錯新進程,以及新進程所建立的所有子進程。 它可以使用 WaitForDebugEvent 函式來接收所有相關的偵錯事件。
使用 DEBUG_PROCESS 的進程會成為偵錯鏈結的根目錄。 這會繼續,直到鏈結中的另一個 程式建立DEBUG_PROCESS為止。
如果這個旗標與 DEBUG_ONLY_THIS_PROCESS結合,呼叫端只會偵錯新的進程,而不是任何子進程。
DETACHED_PROCESS
0x00000008
針對主控台進程,新進程不會繼承其父代的主控台, (預設) 。 新的進程可以在稍後呼叫 AllocConsole 函式,以建立主控台。 如需詳細資訊,請參閱 建立主控台
此值不能與 CREATE_NEW_CONSOLE搭配使用。
EXTENDED_STARTUPINFO_PRESENT
0x00080000
此程式是使用擴充啟動資訊所建立; lpStartupInfo 參數會指定 STARTUPINFOEX 結構。
Windows Server 2003 和 Windows XP: 不支援這個值。
INHERIT_PARENT_AFFINITY
0x00010000
進程會繼承其父系的親和性。 如果父進程在多個 處理器群組中有線程,新進程會繼承父代使用中任意群組的群組相對親和性。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支援這個值。

備註

在 32 位 Windows 上,16 位應用程式會由 ntvdm.exe 模擬,而不是以個別進程的形式執行。 因此,程式建立旗標會套用至 ntvdm.exe。 因為ntvdm.exe在執行前 16 位應用程式之後會持續存在,所以當您啟動另一個 16 位應用程式時,不會套用新的建立旗標,除了 建立新的CREATE_NEW_CONSOLECREATE_SEPARATE_WOW_VDM以外,這會建立新的ntvdm.exe。

規格需求

需求
最低支援的用戶端
Windows XP [僅限傳統型應用程式]
最低支援的伺服器
Windows Server 2003 [僅限桌面應用程式]
標頭
WinBase.h (包含 Windows.h)