Marcas de creación de procesos
Las siguientes marcas de creación de procesos las usan las funciones CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW y CreateProcessWithTokenW. Se pueden especificar en cualquier combinación, excepto como se indica.
Ejemplo
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
Ejemplo de ejemplos clásicos de Windows en GitHub.
Marcas
Constante o valor | Descripción |
---|---|
|
Los procesos secundarios de un proceso asociado a un trabajo no están asociados al trabajo. Si el proceso de llamada no está asociado a un trabajo, esta constante no tiene ningún efecto. Si el proceso de llamada está asociado a un trabajo, el trabajo debe establecer el límite de JOB_OBJECT_LIMIT_BREAKAWAY_OK . |
|
El nuevo proceso no hereda el modo de error del proceso de llamada. En su lugar, el nuevo proceso obtiene el modo de error predeterminado. Esta característica es especialmente útil para las aplicaciones de shell multiproceso que se ejecutan con errores duros deshabilitados. El comportamiento predeterminado es para que el nuevo proceso herede el modo de error del autor de la llamada. Al establecer esta marca, se cambia ese comportamiento predeterminado. |
|
El nuevo proceso tiene una nueva consola, en lugar de heredar la consola de su elemento primario (el valor predeterminado). Para obtener más información, consulte Creación de una consola. Esta marca no se puede usar con DETACHED_PROCESS. |
|
El nuevo proceso es el proceso raíz de un nuevo grupo de procesos. El grupo de procesos incluye todos los procesos descendientes de este proceso raíz. El identificador de proceso del nuevo grupo de procesos es el mismo que el identificador de proceso, que se devuelve en el parámetro lpProcessInformation . La función GenerateConsoleCtrlEvent usa los grupos de procesos para habilitar el envío de una señal CTRL+BREAK a un grupo de procesos de consola. Si se especifica esta marca, las señales CTRL+C se deshabilitarán para todos los procesos del nuevo grupo de procesos. Esta marca se omite si se especifica con CREATE_NEW_CONSOLE. |
|
El proceso es una aplicación de consola que se ejecuta sin una ventana de consola. Por lo tanto, no se establece el identificador de consola de la aplicación. Esta marca se omite si la aplicación no es una aplicación de consola o si se usa con CREATE_NEW_CONSOLE o DETACHED_PROCESS. |
|
El proceso se va a ejecutar como un proceso protegido. El sistema restringe el acceso a procesos protegidos y a los subprocesos de procesos protegidos. Para obtener más información sobre cómo los procesos pueden interactuar con los procesos protegidos, consulte Derechos de acceso y seguridad de procesos. Para activar un proceso protegido, el binario debe tener una firma especial. Microsoft proporciona esta firma, pero no está disponible actualmente para archivos binarios que no son de Microsoft. Actualmente hay cuatro procesos protegidos: base multimedia, motor de audio, informes de errores de Windows y sistema. Los componentes que se cargan en estos archivos binarios también deben estar firmados. Las empresas multimedia pueden aprovechar los dos primeros procesos protegidos. Para obtener más información, vea Información general sobre la ruta de acceso de medios protegidos. Windows Server 2003 y Windows XP: Este valor no se admite. |
|
Permite al autor de la llamada ejecutar un proceso secundario que omite las restricciones de proceso que normalmente se aplicarían automáticamente al proceso. |
|
Esta marca permite que se inicien procesos seguros, que se ejecutan en el entorno de seguridad de Virtualization-Based. |
|
Esta marca solo es válida al iniciar una aplicación basada en Windows de 16 bits. Si se establece, el nuevo proceso se ejecuta en una máquina VIRTUAL DOS privada (VDM). De forma predeterminada, todas las aplicaciones basadas en Windows de 16 bits se ejecutan como subprocesos en un único VDM compartido. La ventaja de ejecutarse por separado es que un bloqueo solo finaliza el VDM único; cualquier otro programa que se ejecute en máquinas virtuales distintas seguirá funcionando con normalidad. Además, las aplicaciones basadas en Windows de 16 bits que se ejecutan en máquinas virtuales independientes tienen colas de entrada independientes. Esto significa que si una aplicación deja de responder momentáneamente, las aplicaciones de máquinas virtuales independientes siguen recibiendo entradas. La desventaja de ejecutarse por separado es que se necesita mucho más memoria para hacerlo. Debe usar esta marca solo si el usuario solicita que las aplicaciones de 16 bits se ejecuten en su propio VDM. |
|
La marca solo es válida al iniciar una aplicación basada en Windows de 16 bits. Si el modificador DefaultSeparateVDM de la sección Windows de WIN.INI es TRUE, esta marca invalida el modificador. El nuevo proceso se ejecuta en la máquina DOS virtual compartida. |
|
El subproceso principal del nuevo proceso se crea en un estado suspendido y no se ejecuta hasta que se llama a la función ResumeThread . |
|
Si se establece esta marca, el bloque de entorno al que apunta lpEnvironment usa caracteres Unicode. De lo contrario, el bloque de entorno usa caracteres ANSI. |
|
El subproceso que realiza la llamada inicia y depura el nuevo proceso. Puede recibir todos los eventos de depuración relacionados mediante la función WaitForDebugEvent . |
|
El subproceso que realiza la llamada inicia y depura el nuevo proceso y todos los procesos secundarios creados por el nuevo proceso. Puede recibir todos los eventos de depuración relacionados mediante la función WaitForDebugEvent . Un proceso que usa DEBUG_PROCESS se convierte en la raíz de una cadena de depuración. Esto continúa hasta que se crea otro proceso de la cadena con DEBUG_PROCESS. Si esta marca se combina con DEBUG_ONLY_THIS_PROCESS, el autor de la llamada depura solo el nuevo proceso, no ningún proceso secundario. |
|
En el caso de los procesos de consola, el nuevo proceso no hereda la consola de su elemento primario (el valor predeterminado). El nuevo proceso puede llamar a la función AllocConsole más adelante para crear una consola. Para obtener más información, consulte Creación de una consola. Este valor no se puede usar con CREATE_NEW_CONSOLE. |
|
El proceso se crea con información de inicio extendida; El parámetro lpStartupInfo especifica una estructura STARTUPINFOEX . Windows Server 2003 y Windows XP: Este valor no se admite. |
|
El proceso hereda la afinidad de su elemento primario. Si el proceso primario tiene subprocesos en más de un grupo de procesadores, el nuevo proceso hereda la afinidad relativa al grupo de un grupo arbitrario en uso por el elemento primario. Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no se admite. |
Comentarios
En Windows de 32 bits, las aplicaciones de 16 bits se simulan mediante ntvdm.exe, no se ejecutan como procesos individuales. Por lo tanto, las marcas de creación de procesos se aplican a ntvdm.exe. Dado que ntvdm.exe persiste después de ejecutar la primera aplicación de 16 bits, al iniciar otra aplicación de 16 bits, no se aplican las nuevas marcas de creación, excepto CREATE_NEW_CONSOLE y CREATE_SEPARATE_WOW_VDM, que crean un nuevo ntvdm.exe.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado |
|