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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Ermöglicht dem Aufrufer, einen untergeordneten Prozess auszuführen, der die Prozesseinschränkungen umgeht, die normalerweise automatisch auf den Prozess angewendet würden. |
|
Dieses Flag ermöglicht das Starten sicherer Prozesse, die in der Virtualization-Based Security-Umgebung ausgeführt werden. |
|
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. |
|
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. |
|
Der primäre Thread des neuen Prozesses wird in einem angehaltenen Zustand erstellt und wird erst ausgeführt, wenn die ResumeThread-Funktion aufgerufen wird. |
|
Wenn dieses Flag festgelegt ist, verwendet der Umgebungsblock, auf den von lpEnvironment verwiesen wird, Unicode-Zeichen. Andernfalls verwendet der Umgebungsblock ANSI-Zeichen. |
|
Der aufrufende Thread startet und debuggt den neuen Prozess. Es kann alle zugehörigen Debugereignisse mit der WaitForDebugEvent-Funktion empfangen. |
|
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. |
|
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. |
|
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. |
|
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 |
|