Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Konsolenprozess verwendet Handles für den Zugriff auf die Eingabe- und Bildschirmpuffer der Konsole. Ein Prozess kann die GetStdHandle-, CreateFile- oder CreateConsoleScreenBuffer-Funktion verwenden, um einen dieser Handles zu öffnen.
Die GetStdHandle-Funktion stellt einen Mechanismus zum Abrufen der Standardeingabe (STDIN), der Standardausgabe (STDOUT) und des Standardfehlers (STDERR) bereit, der einem Prozess zugeordnet ist. Während der Konsolenerstellung erstellt das System diese Handles. Zunächst handelt es sich um STDIN ein Handle für den Eingabepuffer der Konsole und STDOUTSTDERR handelt es sich um Handles des aktiven Bildschirmpuffers der Konsole. Die SetStdHandle-Funktion kann jedoch die Standardhandles umleiten, indem der mit STDIN, STDOUToder STDERR. Da die Standardhandles des übergeordneten Elements von einem untergeordneten Prozess geerbt werden, geben nachfolgende Aufrufe von GetStdHandle das umgeleitete Handle zurück. Ein von GetStdHandle zurückgegebenes Handle kann sich daher auf etwas anderes als Konsolen-E/A beziehen. Vor dem Erstellen eines untergeordneten Prozesses kann ein übergeordneter Prozess beispielsweise SetStdHandle verwenden, um ein Pipehandle als Handle festzulegen, das STDIN vom untergeordneten Prozess geerbt wird. Wenn der untergeordnete Prozess GetStdHandle aufruft, ruft er den Pipehandle ab. Dies bedeutet, dass der übergeordnete Prozess die Standardhandles des untergeordneten Prozesses steuern kann. Die von GetStdHandle zurückgegebenen Handles haben GENERIC_READ | GENERIC_WRITE Zugriff, es sei denn , SetStdHandle wurde verwendet, um den Standardhandle auf einen geringeren Zugriff festzulegen.
Der Wert der von GetStdHandle zurückgegebenen Handles ist nicht 0, 1 und 2, sodass die standardmäßigen vordefinierten Streamkonstanten in Stdio.h (STDIN, und STDERR) nicht in Funktionen verwendet werden können, STDOUTdie ein Konsolenhandle erfordern.
Mit der CreateFile-Funktion kann ein Prozess einen Handle zum Eingabepuffer und aktiven Bildschirmpuffer der Konsole abrufen, auch wenn STDIN sie STDOUT umgeleitet wurden. Um ein Handle für den Eingabepuffer einer Konsole zu öffnen, geben Sie den CONIN$ Wert in einem Aufruf von CreateFile an. Geben Sie den CONOUT$ Wert in einem Aufruf von CreateFile an, um ein Handle für den aktiven Bildschirmpuffer einer Konsole zu öffnen.
Mit CreateFile können Sie den Lese-/Schreibzugriff des zurückgegebenen Handles angeben.
Die CreateConsoleScreenBuffer-Funktion erstellt einen neuen Bildschirmpuffer und gibt einen Handle zurück. Dieses Handle kann in jeder Funktion verwendet werden, die ein Handle für die Konsolenausgabe akzeptiert. Der neue Bildschirmpuffer ist erst aktiv (angezeigt), wenn sein Handle in einem Aufruf der SetConsoleActiveScreenBuffer-Funktion angegeben wird. Beachten Sie, dass sich das Ändern des aktiven Bildschirmpuffers nicht auf das von GetStdHandle zurückgegebene Handle auswirkt. Ebenso wirkt sich die Verwendung von SetStdHandle zum Ändern des STDOUT Handles nicht auf den aktiven Bildschirmpuffer aus.
Konsolenhandles, die von CreateFile und CreateConsoleScreenBuffer zurückgegeben werden, können in einer der Konsolenfunktionen verwendet werden, die ein Handle für den Eingabepuffer einer Konsole oder eines Konsolenbildschirmpuffers erfordern. Von GetStdHandle zurückgegebene Handles können von den Konsolenfunktionen verwendet werden, wenn sie nicht umgeleitet wurden, um auf etwas anderes als die Konsolen-E/A zu verweisen. Wenn ein Standardhandle umgeleitet wurde, um auf eine Datei oder eine Pipe zu verweisen, kann das Handle jedoch nur von den Funktionen ReadFile und WriteFile verwendet werden.
GetFileType kann bei der Ermittlung des Gerätetyps helfen, auf den sich das Handle bezieht. Ein Konsolenziehpunkt wird als FILE_TYPE_CHAR.
Ein Prozess kann die DuplicateHandle-Funktion verwenden, um ein doppeltes Konsolenhandle-Handle zu erstellen, das über einen anderen Zugriff oder eine andere Vererbung vom ursprünglichen Handle verfügt. Beachten Sie jedoch, dass ein Prozess nur für die eigene Verwendung ein dupliziertes Konsolenhandle erstellen kann. Dies unterscheidet sich von anderen Handletypen (z. B. Datei-, Pipe- oder Mutex-Objekten), für die DuplicateHandle ein Duplikat erstellen kann, das für einen anderen Prozess gültig ist. Der Zugriff auf eine Konsole muss während der Erstellung des anderen Prozesses freigegeben oder vom anderen Prozess über den AttachConsole-Mechanismus angefordert werden.
Zum Schließen eines Konsolenhandles kann ein Prozess die CloseHandle-Funktion verwenden.