2017-08-01 5 views
-2

Wie funktioniert das Konsolensubsystem? Ich verstehe High-Level-Sachen wie Windows automatisch erstellt Konsole-Fenster für Programme und gibt dann behandeln Konsole Fenster, mit dem Sie schreiben und lesen mit WriteConsole und ReadConsole, aber wie funktioniert Fenster selbst arbeiten? verwendet Windows GDI, um Zeichen in die Konsole zu zeichnen? oder einige versteckte interne Funktionen? Was passiert hinter den Vorhängen?Wie funktioniert das Windows-Konsolen-Subsystem?

+0

Die Frage, die Sie stellen, kann nur von Microsoft beantwortet werden. Es ist ein geschlossenes System, so dass die Leute nur erraten können, was passiert. –

+0

@EmettSpeer Ja, aber es gibt viele Fragen hier, die "nur von Microsoft beantwortet werden können" wie "Was ist HANDLE?" das wurde hier beantwortet, und warum downvote? –

+0

Die Frage ist zu groß und kann von niemand beantwortet werden, der nicht an diesem Projekt arbeitet. Ich habe deine Frage auch nicht abgelehnt, aber es ist wahrscheinlich, weil du eine große Frage gestellt hast. –

Antwort

1

Diese Frage ist zu vage, um wirklich ausführlich zu antworten, aber ich werde es versuchen.

Es gibt mindestens 3 verschiedene Implementierungen der Konsole in 32-Bit-Windows:

  • MS-DOS-Box unter Windows 95/98/ME
  • CSRSS Besitz Konsolenfenster auf NT4/2000/XP/2003/Vista
  • ConHost Besitz Konsolenfenster auf 7 und später

die NT-basierte Konsolen IPC verwenden, um zwischen der Client-Anwendung und der conso zu kommunizieren le Besitzer Prozess. Die Funktionen ReadFile und WriteFile haben einen speziellen Hack und kommunizieren auch mit dem Konsolenbesitzer, wenn sie ein Konsolen-Handle erhalten (anstatt wie bei einem "normalen" Handle den Kernel aufzurufen).

Das Konsolenfenster ist ein normales HWND und verwendet größtenteils normale GDI.

Die ältere Konsole unterstützt auch nativen Hardware-Vollbildmodus, wo es wahrscheinlich BIOS/VGA-Zeug direkt verwendet. Im Fenstermodus glaube ich, dass es die undokumentierte GdiConsoleTextOut Funktion verwendet. Da CSRSS ein Kernprozess ist, könnten sie einige undokumentierte NT-Funktionen aufrufen, um das Laden von DLLs höherer Ebenen zu vermeiden, aber es gibt nichts wirklich Besonderes an dem eigentlichen Zeichencode.

In neueren Versionen von Windows wurde der Vollbildmodus wegen der DWM entfernt und ein unprivilegierter Prozess (ConHost.exe) besitzt das Konsolenfenster, um shatter attacks gegen CSRSS zu verhindern. ConHost.exe importiert PolyTextOutW, also nehme ich an, dass es verwendet wird, um den Text zu zeichnen.

Die NT-Konsolen unterstützen auch einen nicht dokumentierten Bitmap-Grafikmodus und ich nehme an, dass auch Plain-GDI verwendet wird.

All dies ist natürlich undokumentierte Implementierungsdetails und könnte jederzeit ändern. Am ehesten kommen Sie zur offiziellen Dokumentation: this blog post, wo sie auch zeigen, dass die verwendete IPC-Methode die undokumentierte LPC-Funktion ist.