Windows 控制台子系统如何工作?

Ble*_*ice 1 windows internals internal

那么控制台子系统是如何工作的呢?我了解高级别的东西,例如 Windows 自动为程序创建控制台窗口,然后提供控制台窗口的句柄,您可以使用 WriteConsole 和 ReadConsole 对其进行写入和读取,但是窗口本身如何工作?Windows 使用 GDI 将字符绘制到控制台吗?或者一些隐藏的内部功能?幕后发生了什么?

And*_*ers 5

这个问题太模糊了,无法详细回答,但我会尝试一下。

32 位 Windows 中至少有 3 种不同的控制台实现:

  • Windows 95/98/ME 中的 MS-DOS 框
  • CSRSS在 NT4/2000/XP/2003/Vista 上拥有控制台窗口
  • ConHost 在 7 及更高版本上拥有控制台窗口

基于 NT 的控制台使用IPC在客户端应用程序和控制台所有者进程之间进行通信。和函数有一个特殊的技巧ReadFileWriteFile并且在给定控制台句柄时也与控制台所有者进行通信(而不是像使用“正常”句柄那样调用内核)。

控制台窗口是普通的 HWND,并且大部分使用普通的 GDI。

较旧的控制台还支持本机硬件全屏模式,它可能直接使用 BIOS/VGA 内容。在窗口模式下,我相信它使用了未记录的GdiConsoleTextOut功能。因为 CSRSS 是一个核心进程,所以它们可能会调用一些未记录的 NT 函数来避免加载更高级别的 DLL,但实际的绘图代码并没有什么特别之处。

在较新版本的 Windows 中,由于DWM和非特权进程 (ConHost.exe) 拥有控制台窗口,全屏模式已被删除,以防止针对 CSRSS 的粉碎攻击。ConHost.exe 导入,PolyTextOutW所以我假设它是用来绘制文本的。

NT 控制台还支持未记录的位图图形模式,我假设它也使用纯 GDI。

当然,所有这些都是未记录的实施细节,并且可能随时更改。最接近官方文档的可能是这篇博客文章,其中还揭示了所使用的 IPC 方法是未记录的LPC功能。

在 Windows 10 中,为新的 Windows 终端添加了一种称为伪控制台的替代模式,但实际上允许任何人成为控制台主机。