Vererbung

Ein untergeordneter Prozess kann mehrere Eigenschaften und Ressourcen von seinem übergeordneten Prozess erben. Sie können auch verhindern, dass ein untergeordneter Prozess Eigenschaften vom übergeordneten Prozess erbt. Folgendes kann geerbt werden:

  • Öffnen Sie handles, die von der CreateFile-Funktion zurückgegeben werden. Dies umfasst Handles für Dateien, Konsoleneingabepuffer, Konsolenbildschirmpuffer, Named Pipes, serielle Kommunikationsgeräte und Mailslots.
  • Öffnen Sie Handles für Verarbeitungs-, Thread-, Mutex-, Ereignis-, Semaphor-, Named-Pipe-, anonymous-pipe- und Dateizuordnungsobjekte. Diese werden von den Funktionen CreateProcess, CreateThread, CreateMutex, CreateEvent, CreateSemaphore, CreateNamedPipe, CreatePipe und CreateFileMapping zurückgegeben.
  • Umgebungsvariablen.
  • Das aktuelle Verzeichnis.
  • Die Konsole, es sei denn, der Prozess wird getrennt oder eine neue Konsole erstellt. Ein untergeordneter Konsolenprozess kann auch die Standardhandles des übergeordneten Elements sowie den Zugriff auf den Eingabepuffer und den aktiven Bildschirmpuffer erben.
  • Der Von der SetErrorMode-Funktion festgelegte Fehlermodus.
  • Die Affinitätsmaske des Prozessors.
  • Die Zuordnung zu einem Auftrag.

Der untergeordnete Prozess erbt folgendes nicht:

Erben von Handles

Ein untergeordneter Prozess kann einige der übergeordneten Handles erben, aber nicht andere. Damit ein Handle geerbt wird, müssen Sie zwei Dinge tun:

  • Geben Sie an, dass das Handle geerbt werden soll, wenn Sie das Handle erstellen, öffnen oder duplizieren. Erstellungsfunktionen verwenden in der Regel das bInheritHandle-Element einer SECURITY_ATTRIBUTES-Struktur zu diesem Zweck. DuplicateHandle verwendet den bInheritHandles-Parameter .
  • Geben Sie an, dass vererbbare Handles geerbt werden sollen, indem Sie den bInheritHandles-Parameter beim Aufrufen der CreateProcess-Funktion auf TRUE festlegen. Darüber hinaus muss das dwFlags-Element der STARTUPINFO-Struktur STARTF_USESTDHANDLES enthalten, um die Standardeingabe, die Standardausgabe und die Standardfehlerhandles zu erben.

Um eine Liste der Handles anzugeben, die von einem bestimmten untergeordneten Prozess geerbt werden sollen, rufen Sie die UpdateProcThreadAttribute-Funktion mit dem flag PROC_THREAD_ATTRIBUTE_HANDLE_LIST auf.

Ein geerbter Handle verweist auf dasselbe Objekt im untergeordneten Prozess wie im übergeordneten Prozess. Es verfügt auch über den gleichen Wert und die gleichen Zugriffsberechtigungen. Wenn ein Prozess den Zustand des Objekts ändert, wirkt sich die Änderung daher auf beide Prozesse aus. Um ein Handle zu verwenden, muss der untergeordnete Prozess den Handle-Wert abrufen und das Objekt "kennen", auf das er verweist. In der Regel kommuniziert der übergeordnete Prozess diese Informationen an den untergeordneten Prozess über seine Befehlszeile, den Umgebungsblock oder eine Form der Interprozesskommunikation.

Verwenden Sie die SetHandleInformation-Funktion , um zu steuern, ob ein vorhandenes Handle vererbt werden kann oder nicht.

Erben von Umgebungsvariablen

Ein untergeordneter Prozess erbt standardmäßig die Umgebungsvariablen des übergeordneten Prozesses. CreateProcess ermöglicht es dem übergeordneten Prozess jedoch, einen anderen Block von Umgebungsvariablen anzugeben. Weitere Informationen finden Sie unter Umgebungsvariablen.

Erben des aktuellen Verzeichnisses

Die GetCurrentDirectory-Funktion ruft das aktuelle Verzeichnis des aufrufenden Prozesses ab. Ein untergeordneter Prozess erbt standardmäßig das aktuelle Verzeichnis des übergeordneten Prozesses. CreateProcess ermöglicht es dem übergeordneten Prozess jedoch, ein anderes aktuelles Verzeichnis für den untergeordneten Prozess anzugeben. Um das aktuelle Verzeichnis des aufrufenden Prozesses zu ändern, verwenden Sie die SetCurrentDirectory-Funktion .