那麼控制檯子系統如何工作?我瞭解高級別的東西,例如Windows會自動爲程序創建控制檯窗口,然後給出控制檯窗口的句柄,您可以使用WriteConsole和ReadConsole編寫和讀取該窗口,但窗口本身是如何工作的? Windows使用GDI將字符繪製到控制檯中?或一些隱藏的內部功能?窗簾後面發生了什麼?Windows控制檯子系統如何工作?
-2
A
回答
1
這個問題太模糊了,沒有詳細回答,但我會給它一個鏡頭。
有在32位Windows控制檯中的至少3個不同的實施方式中:
- 在Windows MS-DOS箱95/98/ME
- CSRSS資控制檯上NT4/2000/XP窗口/ 2003/Vista的
- ConHost擁有7控制檯窗口,後來
的NT控制檯使用IPC客戶端應用程序和CONSO之間進行通信樂手過程。 ReadFile
和WriteFile
函數具有特殊的黑客攻擊,並且在給定控制檯句柄時也可以與控制檯所有者通信(而不是象調用「普通」句柄那樣調用內核)。
控制檯窗口是一個正常的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功能。
相關問題
- 1. 如何判斷一個Windows PE文件是編程控制檯子系統還是Windows子系統?
- 2. 在Windows操作系統中隱藏C程序的控制檯
- 3. 如何在Windows操作系統上安裝influxdb並訪問管理控制檯
- 4. Ruby系統命令不能在控制檯以外工作
- 5. Windows文件系統如何工作?
- 6. 分散版本控制系統如何改進工作流程?
- 7. 緩存系統。控制檯輸出
- 8. 從Swing GUI到系統控制檯?
- 9. 如何通過控制檯應用程序在Windows中延遲系統關機?
- 10. Windows控制檯
- 11. 本地版本控制系統(Windows)
- 12. 軌控制檯不工作
- 13. Rails控制檯不工作
- 14. 控制檯不能工作
- 15. 如何將字符串打印到系統控制檯?
- 16. 如何在系統調用中打印到控制檯(終端)
- 17. 如何在新控制檯上使用「rvm系統」?
- 18. 我如何查看谷歌地球的系統控制檯?
- 19. 如何使用JScript或VBScript控制Windows系統卷?
- 20. Windows控制檯API
- 21. 源控制系統
- 22. 如何製作真正透明的控制系統?
- 23. 深層複製在工作臺系統中總是失敗
- 24. 如何讓我的控制檯C++程序在後臺工作?
- 25. 如何與操作系統Windows
- 26. 如何從安裝在linux上的ruby在windows操作系統上執行控制檯應用程序?
- 27. 如何製作操作系統?
- 28. Skydrive作爲版本控制系統
- 29. 在系統控制檯上運行CLion(如Visual Studio)
- 30. Windows工作流程與控制檯/ MVC應用程序集成
您提出的問題只能由Microsoft解答。這是一個封閉的系統,所以人們只能猜測發生了什麼。 –
@EmettSpeer是的,但這裏有很多問題「只能通過微軟回答」,比如「什麼是HANDLE?」。已經在這裏回答了,爲什麼downvote? –
這個問題是很大的,任何不適合那個項目的人都不能回答。我也沒有倒下你的問題,但可能是因爲你問了一個大問題。 –