那么控制台子系统如何工作?我理解高级别的东西,比如windows自动为程序创建控制台窗口,然后提供控制台窗口的句柄,你可以使用WriteConsole和ReadConsole写入和读取,但 window 本身如何工作? Windows使用GDI将字符绘制到控制台中吗?还是一些隐藏的内部功能?窗帘背后会发生什么?
答案 0 :(得分:2)
这个问题太模糊了,无法以详细的方式回答,但我会试一试。
32位Windows中至少有3种不同的控制台实现:
基于NT的控制台使用IPC在客户端应用程序和控制台所有者进程之间进行通信。 ReadFile
和WriteFile
函数有一个特殊的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功能。