Flags zur Prozesserstellung

Die folgenden Prozesserstellungsflags werden von den Funktionen CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW und CreateProcessWithTokenW verwendet. Sie können in beliebiger Kombination angegeben werden, außer wie angegeben.

Beispiel

     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

Beispiel aus klassischen Windows-Beispielen auf GitHub.

Flags

Konstante/Wert BESCHREIBUNG
CREATE_BREAKAWAY_FROM_JOB
0x01000000
Die untergeordneten Prozesse eines Prozesses, der einem Auftrag zugeordnet ist, sind dem Auftrag nicht zugeordnet.
Wenn der aufrufende Prozess keinem Auftrag zugeordnet ist, hat diese Konstante keine Auswirkung. Wenn der aufrufende Prozess einem Auftrag zugeordnet ist, muss der Auftrag das JOB_OBJECT_LIMIT_BREAKAWAY_OK-Limit festlegen.
CREATE_DEFAULT_ERROR_MODE
0x04000000
Der neue Prozess erbt nicht den Fehlermodus des aufrufenden Prozesses. Stattdessen ruft der neue Prozess den Standardfehlermodus ab.
Dieses Feature ist besonders nützlich für Multithread-Shellanwendungen, die mit deaktivierten harten Fehlern ausgeführt werden.
Das Standardverhalten besteht darin, dass der neue Prozess den Fehlermodus des Aufrufers erbt. Das Festlegen dieses Flags ändert dieses Standardverhalten.
CREATE_NEW_CONSOLE
0x00000010
Der neue Prozess verfügt über eine neue Konsole, anstatt die Konsole seiner übergeordneten Konsole (Standard) zu erben. Weitere Informationen finden Sie unter Erstellen einer Konsole.
Dieses Flag kann nicht mit DETACHED_PROCESS verwendet werden.
CREATE_NEW_PROCESS_GROUP
0x00000200
Der neue Prozess ist der Stammprozess einer neuen Prozessgruppe. Die Prozessgruppe umfasst alle Prozesse, die nachfolger dieses Stammprozesses sind. Der Prozessbezeichner der neuen Prozessgruppe ist identisch mit dem Prozessbezeichner, der im lpProcessInformation-Parameter zurückgegeben wird. Prozessgruppen werden von der Funktion GenerateConsoleCtrlEvent verwendet, um das Senden eines STRG+BREAK-Signals an eine Gruppe von Konsolenprozessen zu aktivieren.
Wenn dieses Flag angegeben ist, werden STRG+C-Signale für alle Prozesse innerhalb der neuen Prozessgruppe deaktiviert.
Dieses Flag wird ignoriert, wenn es mit CREATE_NEW_CONSOLE angegeben wird.
CREATE_NO_WINDOW
0x08000000
Der Prozess ist eine Konsolenanwendung, die ohne Konsolenfenster ausgeführt wird. Daher ist das Konsolenhandle für die Anwendung nicht festgelegt.
Dieses Flag wird ignoriert, wenn die Anwendung keine Konsolenanwendung ist oder mit CREATE_NEW_CONSOLE oder DETACHED_PROCESS verwendet wird.
CREATE_PROTECTED_PROCESS
0x00040000
Der Prozess soll als geschützter Prozess ausgeführt werden. Das System schränkt den Zugriff auf geschützte Prozesse und die Threads geschützter Prozesse ein. Weitere Informationen dazu, wie Prozesse mit geschützten Prozessen interagieren können, finden Sie unter Prozesssicherheit und Zugriffsrechte.
Um einen geschützten Prozess zu aktivieren, muss die Binärdatei über eine spezielle Signatur verfügen. Diese Signatur wird von Microsoft bereitgestellt, ist aber derzeit nicht für Nicht-Microsoft-Binärdateien verfügbar. Derzeit gibt es vier geschützte Prozesse: Media Foundation, Audio-Engine, Windows-Fehlerberichterstattung und System. Komponenten, die in diese Binärdateien geladen werden, müssen ebenfalls signiert sein. Multimediaunternehmen können die ersten beiden geschützten Prozesse nutzen. Weitere Informationen finden Sie unter Übersicht über den Pfad für geschützte Medien.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt.
CREATE_PRESERVE_CODE_AUTHZ_LEVEL
0x02000000
Ermöglicht dem Aufrufer, einen untergeordneten Prozess auszuführen, der die Prozesseinschränkungen umgeht, die normalerweise automatisch auf den Prozess angewendet würden.
CREATE_SECURE_PROCESS
0x00400000
Dieses Flag ermöglicht das Starten sicherer Prozesse, die in der Virtualization-Based Security-Umgebung ausgeführt werden.
CREATE_SEPARATE_WOW_VDM
0x00000800
Dieses Flag ist nur gültig, wenn eine 16-Bit-Windows-basierte Anwendung gestartet wird. Wenn festgelegt, wird der neue Prozess auf einem privaten virtuellen DOS-Computer (VDM) ausgeführt. Standardmäßig werden alle 16-Bit-Windows-basierten Anwendungen als Threads in einem einzelnen, freigegebenen VDM ausgeführt. Der Vorteil der getrennten Ausführung besteht darin, dass ein Absturz nur den einzelnen VDM beendet. alle anderen Programme, die in unterschiedlichen VDMs ausgeführt werden, funktionieren weiterhin normal. Außerdem verfügen 16-Bit-Windows-basierte Anwendungen, die in separaten VDMs ausgeführt werden, über separate Eingabewarteschlangen. Das bedeutet, dass Anwendungen in separaten VDMs weiterhin Eingaben erhalten, wenn eine Anwendung vorübergehend nicht mehr reagiert. Der Nachteil der getrennten Ausführung besteht darin, dass dafür deutlich mehr Arbeitsspeicher benötigt wird. Sie sollten dieses Flag nur verwenden, wenn der Benutzer fordert, dass 16-Bit-Anwendungen in ihrem eigenen VDM ausgeführt werden sollen.
CREATE_SHARED_WOW_VDM
0x00001000
Das Flag ist nur gültig, wenn eine 16-Bit-Windows-basierte Anwendung gestartet wird. Wenn der DefaultSeparateVDM-Schalter im Windows-Abschnitt von WIN.INI true ist, überschreibt dieses Flag den Switch. Der neue Prozess wird auf dem freigegebenen virtuellen DOS-Computer ausgeführt.
CREATE_SUSPENDED
0x00000004
Der primäre Thread des neuen Prozesses wird in einem angehaltenen Zustand erstellt und wird erst ausgeführt, wenn die ResumeThread-Funktion aufgerufen wird.
CREATE_UNICODE_ENVIRONMENT
0x00000400
Wenn dieses Flag festgelegt ist, verwendet der Umgebungsblock, auf den von lpEnvironment verwiesen wird, Unicode-Zeichen. Andernfalls verwendet der Umgebungsblock ANSI-Zeichen.
DEBUG_ONLY_THIS_PROCESS
0x00000002
Der aufrufende Thread startet und debuggt den neuen Prozess. Es kann alle zugehörigen Debugereignisse mit der WaitForDebugEvent-Funktion empfangen.
DEBUG_PROCESS
0x00000001
Der aufrufende Thread startet und debuggt den neuen Prozess und alle untergeordneten Prozesse, die vom neuen Prozess erstellt wurden. Es kann alle zugehörigen Debugereignisse mit der WaitForDebugEvent-Funktion empfangen.
Ein Prozess, der DEBUG_PROCESS verwendet, wird zum Stamm einer Debugkette. Dies wird fortgesetzt, bis ein weiterer Prozess in der Kette mit DEBUG_PROCESS erstellt wird.
Wenn dieses Flag mit DEBUG_ONLY_THIS_PROCESS kombiniert wird, debuggt der Aufrufer nur den neuen Prozess, nicht alle untergeordneten Prozesse.
DETACHED_PROCESS
0x00000008
Bei Konsolenprozessen erbt der neue Prozess nicht die Konsole des übergeordneten Elements (Standard). Der neue Prozess kann die Funktion AllocConsole zu einem späteren Zeitpunkt aufrufen, um eine Konsole zu erstellen. Weitere Informationen finden Sie unter Erstellen einer Konsole.
Dieser Wert kann nicht mit CREATE_NEW_CONSOLE verwendet werden.
EXTENDED_STARTUPINFO_PRESENT
0x00080000
Der Prozess wird mit erweiterten Startinformationen erstellt. der lpStartupInfo-Parameter gibt eine STARTUPINFOEX-Struktur an.
Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt.
INHERIT_PARENT_AFFINITY
0x00010000
Der Prozess erbt die Affinität seiner übergeordneten Elemente. Wenn der übergeordnete Prozess Threads in mehr als einer Prozessorgruppe enthält, erbt der neue Prozess die gruppenrelative Affinität einer beliebigen Gruppe, die vom übergeordneten Prozess verwendet wird.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt.

Bemerkungen

Unter 32-Bit-Windows werden 16-Bit-Anwendungen von ntvdm.exe simuliert und nicht als einzelne Prozesse ausgeführt. Daher gelten die Prozesserstellungsflags für ntvdm.exe. Da ntvdm.exe nach dem Ausführen der ersten 16-Bit-Anwendung beibehalten wird, werden die neuen Erstellungsflags beim Starten einer weiteren 16-Bit-Anwendung nicht angewendet, mit Ausnahme von CREATE_NEW_CONSOLE und CREATE_SEPARATE_WOW_VDM, die eine neue ntvdm.exe erstellen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
Header
WinBase.h (einschließlich Windows.h)