进程创建标志
CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW 和 CreateProcessWithTokenW 函数使用以下进程创建标志。 可以任意组合指定它们,但如前所述。
示例
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
常量/值 | 说明 |
---|---|
|
与作业关联的进程的子进程不与作业关联。 如果调用进程未与作业关联,则此常量不起作用。 如果调用进程与作业相关联,则作业必须设置 JOB_OBJECT_LIMIT_BREAKAWAY_OK 限制。 |
|
新进程不会继承调用进程的错误模式。 相反,新进程会获取默认错误模式。 此功能对于在运行时禁用了硬错误的多线程 shell 应用程序特别有用。 默认行为是让新进程继承调用方的错误模式。 设置此标志会更改该默认行为。 |
|
新进程具有新的控制台,而不是继承其父级的控制台 (默认) 。 有关详细信息,请参阅 创建控制台。 此标志不能与 DETACHED_PROCESS 一起使用。 |
|
新进程是新进程组的根进程。 进程组包括此根进程的所有子代进程。 新进程组的进程标识符与 lpProcessInformation 参数中返回的进程标识符相同。
GenerateConsoleCtrlEvent 函数使用进程组来向一组控制台进程发送 CTRL+BREAK 信号。 如果指定了此标志,将为新进程组中的所有进程禁用 CTRL+C 信号。 如果使用 CREATE_NEW_CONSOLE 指定,则忽略此标志。 |
|
进程是在没有控制台窗口的情况下运行的控制台应用程序。 因此,未设置应用程序的控制台句柄。 如果应用程序不是控制台应用程序,或者与 CREATE_NEW_CONSOLE 或 DETACHED_PROCESS一起使用,则忽略此标志。 |
|
进程将作为受保护的进程运行。 系统限制对受保护进程和受保护进程的线程的访问。 有关进程如何与受保护进程交互的详细信息,请参阅 进程安全性和访问权限。 若要激活受保护的进程,二进制文件必须具有特殊签名。 此签名由 Microsoft 提供,但当前不适用于非 Microsoft 二进制文件。 目前有四个受保护的进程:媒体基础、音频引擎、Windows 错误报告和系统。 加载到这些二进制文件中的组件也必须签名。 多媒体公司可以利用前两个受保护的流程。 有关详细信息,请参阅 受保护的媒体路径概述。 Windows Server 2003 和 Windows XP: 不支持此值。 |
|
允许调用方执行子进程,该子进程绕过通常自动应用于进程的进程限制。 |
|
此标志允许启动在Virtualization-Based安全环境中运行的安全进程。 |
|
仅当启动基于 Windows 的 16 位应用程序时,此标志才有效。 如果设置,新进程将在专用虚拟 DOS 计算机 (VDM) 中运行。 默认情况下,所有基于 Windows 的 16 位应用程序在单个共享 VDM 中作为线程运行。 单独运行的优点是崩溃仅终止单个 VDM;在其他 VM 中运行的任何其他程序继续正常运行。 此外,在单独的 VM 中运行的基于 Windows 的 16 位应用程序具有单独的输入队列。 这意味着,如果一个应用程序暂时停止响应,则单独的 VM 中的应用程序将继续接收输入。 单独运行的缺点是这样做所需的内存要多得多。 仅当用户请求 16 位应用程序应在其自己的 VDM 中运行时才应使用此标志。 |
|
仅当启动基于 Windows 的 16 位应用程序时,标志才有效。 如果 WIN.INI 的 Windows 部分中的 DefaultSeparateVDM 开关为 TRUE,则此标志将替代该开关。 新进程在共享的虚拟 DOS 计算机中运行。 |
|
新进程的主线程处于挂起状态创建,在调用 ResumeThread 函数之前不会运行。 |
|
如果设置了此标志,则 lpEnvironment 指向的环境块使用 Unicode 字符。 否则,环境块使用 ANSI 字符。 |
|
调用线程启动并调试新进程。 它可以使用 WaitForDebugEvent 函数接收所有相关的调试事件。 |
|
调用线程启动并调试新进程以及新进程创建的所有子进程。 它可以使用 WaitForDebugEvent 函数接收所有相关的调试事件。 使用 DEBUG_PROCESS 的进程将成为调试链的根。 这会一直持续到使用 DEBUG_PROCESS 创建链中的另一个进程。 如果此标志与 DEBUG_ONLY_THIS_PROCESS 结合使用,则调用方仅调试新进程,而不调试任何子进程。 |
|
对于控制台进程,新进程不会继承其父级的控制台 (默认) 。 新进程可以在以后调用 AllocConsole 函数来创建控制台。 有关详细信息,请参阅 创建控制台。 此值不能与 CREATE_NEW_CONSOLE 一起使用。 |
|
使用扩展启动信息创建进程; lpStartupInfo 参数指定 STARTUPINFOEX 结构。 Windows Server 2003 和 Windows XP: 不支持此值。 |
|
进程继承其父级的相关性。 如果父进程在多个 处理器组中具有线程,则新进程将继承父进程正在使用的任意组的组相对相关性。 Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。 |
备注
在 32 位 Windows 上,16 位应用程序通过ntvdm.exe模拟,而不是作为单个进程运行。 因此,进程创建标志适用于 ntvdm.exe。 由于运行第一个 16 位应用程序后,ntvdm.exe仍然存在,因此启动另一个 16 位应用程序时,不会应用新的创建标志,但 CREATE_NEW_CONSOLE 和 CREATE_SEPARATE_WOW_VDM除外,它们创建新ntvdm.exe。
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows XP [仅限桌面应用] |
最低受支持的服务器 |
Windows Server 2003 [仅限桌面应用] |
标头 |
|