2017-08-01 82 views
-2

那麼控制檯子系統如何工作?我瞭解高級別的東西,例如Windows會自動爲程序創建控制檯窗口,然後給出控制檯窗口的句柄,您可以使用WriteConsole和ReadConsole編寫和讀取該窗口,但窗口本身是如何工作的? Windows使用GDI將字符繪製到控制檯中?或一些隱藏的內部功能?窗簾後面發生了什麼?Windows控制檯子系統如何工作?

+0

您提出的問題只能由Microsoft解答。這是一個封閉的系統,所以人們只能猜測發生了什麼。 –

+0

@EmettSpeer是的,但這裏有很多問題「只能通過微軟回答」,比如「什麼是HANDLE?」。已經在這裏回答了,爲什麼downvote? –

+0

這個問題是很大的,任何不適合那個項目的人都不能回答。我也沒有倒下你的問題,但可能是因爲你問了一個大問題。 –

回答

1

這個問題太模糊了,沒有詳細回答,但我會給它一個鏡頭。

有在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功能。