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

问题描述:

那么控制台子系统如何工作?我了解高级别的东西,例如Windows会自动为程序创建控制台窗口,然后给出控制台窗口的句柄,您可以使用WriteConsole和ReadConsole编写和读取该窗口,但窗口本身是如何工作的? Windows使用GDI将字符绘制到控制台中?或一些隐藏的内部功能?窗帘后面发生了什么?Windows控制台子系统如何工作?

+0

您提出的问题只能由Microsoft解答。这是一个封闭的系统,所以人们只能猜测发生了什么。 –

+0

@EmettSpeer是的,但这里有很多问题“只能通过微软回答”,比如“什么是HANDLE?”。已经在这里回答了,为什么downvote? –

+0

这个问题是很大的,任何不适合那个项目的人都不能回答。我也没有倒下你的问题,但可能是因为你问了一个大问题。 –

这个问题太模糊了,没有详细回答,但我会给它一个镜头。

有在32位Windows控制台中的至少3个不同的实施方式中:

  • 在Windows MS-DOS箱95/98/ME
  • CSRSS资控制台上NT4/2000/XP窗口/ 2003/Vista的
  • ConHost拥有7控制台窗口,后来
基于

的NT控制台使用IPC客户端应用程序和CONSO之间进行通信乐手过程。 ReadFileWriteFile函数具有特殊的黑客攻击,并且在给定控制台句柄时也可以与控制台所有者通信(而不是象调用“普通”句柄那样调用内核)。

控制台窗口是一个正常的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功能。