Флаги создания процесса
Следующие флаги создания процесса используются функциями 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
Пример из классических примеров Для Windows на сайте GitHub.
Констант/значение | Описание |
---|---|
|
Дочерние процессы процесса, связанного с заданием, не связаны с заданием. Если вызывающий процесс не связан с заданием, эта константа не оказывает никакого влияния. Если вызывающий процесс связан с заданием, задание должно задать ограничение JOB_OBJECT_LIMIT_BREAKAWAY_OK . |
|
Новый процесс не наследует режим ошибок вызывающего процесса. Вместо этого новый процесс получает режим ошибки по умолчанию. Эта функция особенно полезна для многопоточных приложений оболочки, работающих с отключенными жесткими ошибками. По умолчанию новый процесс наследует режим ошибок вызывающего объекта. Установка этого флага изменяет поведение по умолчанию. |
|
Новый процесс имеет новую консоль, а не наследование родительской консоли (по умолчанию). Дополнительные сведения см. в разделе Создание консоли. Этот флаг нельзя использовать с DETACHED_PROCESS. |
|
Новый процесс является корневым процессом новой группы процессов. Группа процессов включает все процессы, которые являются потомками этого корневого процесса. Идентификатор процесса новой группы процессов совпадает с идентификатором процесса, который возвращается в параметре lpProcessInformation . Группы процессов используются функцией GenerateConsoleCtrlEvent для отправки сигнала CTRL+BREAK группе консольных процессов. Если этот флаг указан, сигналы CTRL+C будут отключены для всех процессов в новой группе процессов. Этот флаг игнорируется, если он указан с CREATE_NEW_CONSOLE. |
|
Процесс представляет собой консольное приложение, которое выполняется без окна консоли. Поэтому дескриптор консоли для приложения не задан. Этот флаг игнорируется, если приложение не является консольным или используется с CREATE_NEW_CONSOLE или DETACHED_PROCESS. |
|
Процесс должен выполняться как защищенный процесс. Система ограничивает доступ к защищенным процессам и потокам защищенных процессов. Дополнительные сведения о том, как процессы могут взаимодействовать с защищенными процессами, см. в разделе Управление безопасностью и правами на доступ. Чтобы активировать защищенный процесс, двоичный файл должен иметь специальную сигнатуру. Эта подпись предоставляется корпорацией Майкрософт, но в настоящее время недоступна для двоичных файлов, не относящихся к корпорации Майкрософт. В настоящее время существует четыре защищенных процесса: media foundation, звуковой модуль, отчеты об ошибках Windows и система. Компоненты, загружаемые в эти двоичные файлы, также должны быть подписаны. Мультимедийные компании могут использовать первые два защищенных процесса. Дополнительные сведения см. в статье Обзор пути к защищенному носителю. Windows Server 2003 и Windows XP: Это значение не поддерживается. |
|
Позволяет вызывающей объекту выполнять дочерний процесс, который обходит ограничения процесса, которые обычно применяются к процессу автоматически. |
|
Этот флаг позволяет запускать безопасные процессы, которые выполняются в среде Virtualization-Based Security. |
|
Этот флаг действителен только при запуске 16-разрядного приложения windows. Если этот параметр задан, новый процесс выполняется на частной виртуальной машине DOS (VDM). По умолчанию все 16-разрядные приложения windows выполняются как потоки в одном общем VDM. Преимущество запуска по отдельности заключается в том, что при сбое завершается только один VDM; все другие программы, работающие на отдельных виртуальных машинах, продолжают работать нормально. Кроме того, 16-разрядные приложения Windows, которые выполняются в отдельных виртуальных машинах, имеют отдельные очереди ввода. Это означает, что если одно приложение мгновенно перестает отвечать, приложения на отдельных виртуальных машинах продолжают получать входные данные. Недостаток работы отдельно заключается в том, что для этого требуется значительно больше памяти. Этот флаг следует использовать только в том случае, если пользователь запрашивает, чтобы 16-разрядные приложения запускались в собственном VDM. |
|
Флаг действителен только при запуске 16-разрядного приложения windows. Если параметр DefaultSeparateVDM в разделе Windows WIN.INI имеет значение TRUE, этот флаг переопределяет параметр. Новый процесс выполняется на общей виртуальной машине DOS. |
|
Основной поток нового процесса создается в приостановленном состоянии и не запускается до вызова функции ResumeThread . |
|
Если этот флаг установлен, блок среды, на который указывает lpEnvironment , использует символы Юникода. В противном случае блок среды использует символы 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. Так как ntvdm.exe сохраняется после запуска первого 16-разрядного приложения, при запуске другого 16-разрядного приложения новые флаги создания не применяются, за исключением CREATE_NEW_CONSOLE и CREATE_SEPARATE_WOW_VDM, которые создают новую ntvdm.exe.
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [только классические приложения] |
Минимальная версия сервера |
Windows Server 2003 [только классические приложения] |
Заголовок |
|