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

时间:2017-08-01 15:49:33

标签: windows internal internals

那么控制台子系统如何工作?我理解高级别的东西,比如windows自动为程序创建控制台窗口,然后提供控制台窗口的句柄,你可以使用WriteConsole和ReadConsole写入和读取,但 window 本身如何工作? Windows使用GDI将字符绘制到控制台中吗?还是一些隐藏的内部功能?窗帘背后会发生什么?

1 个答案:

答案 0 :(得分:2)

这个问题太模糊了,无法以详细的方式回答,但我会试一试。

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

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

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

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

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

在较新版本的Windows中,全屏模式已被删除,因为DWM并且非特权进程(ConHost.exe)拥有控制台窗口以防止shatter attacks针对CSRSS。 ConHost.exe导入PolyTextOutW所以我认为它是用于绘制文本的内容。

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

所有这些当然都是未记录的实施细节,可能随时发生变化。您最接近官方文档的可能是this blog post,其中还显示使用的IPC方法是未记录的LPC功能。