我一直在玩DC與CreateDC(L"DISPLAY",NULL,NULL,NULL)
得到一個大,我一直想知道爲什麼窗戶讓你在整個屏幕上很容易畫,因爲我認爲你可以做一些非常邪惡的東西,如把一個定時器在1ms的時間內,每當計時器滴答時在整個屏幕上繪製一個黑色的矩形。爲什麼窗戶讓你在整個屏幕上畫畫?
回答
事實上,你可以做一些非常邪惡的東西並不意味着Windows不應該讓你這樣做。想想你可以做的所有其他的惡事:
- 在一個無限循環中運行,吃掉所有的CPU時間。
- 將隨機位寫入文件,直到填滿整個硬盤。
- 全部刪除隨機文件。
- 像瘋了一樣分配內存,直到電腦變慢抓取。
只是因爲你可以做這些事情並不意味着Windows應該阻止你寫入硬盤或分配內存或刪除文件。
Windows的目的是提供一個程序可以運行的環境。他們創造這種環境的靈活性越高,開發人員就可以創建更有趣的(而且不幸的是,迂迴)程序。
如果他們開始把任意限制,你可以做什麼,因爲你可能會濫用它......好吧,那就不是在Windows,這將是一個iPhone :)
爲什麼windows讓你輕鬆寫入硬盤?
你可以做一些非常邪惡的東西,如覆蓋硬盤上的每個文件。
因爲它應該是簡單。
這很容易,因爲將規則和控制放在適當的位置意味着您將削減您可以使用語言和Windows框架執行的操作。如果發生這種情況,那麼圍欄另一邊將會發出尖叫聲,吼叫你不能做到這一點。
正是這些能力使語言變得強大,但以這種力量來危險。只是因爲你可以做點什麼,並不意味着你應該這樣做。你可以格式化你的硬盤...並不意味着你應該這樣做,當你啓動時鐘應用程序。
如果你不滿意這個級別的「責任」,然後選擇不同的語言或框架來寫。
一切都是一個窗口,每個窗口都有一個句柄。所以,如果你有DesktopHandle
,那麼你可以在其上畫任何東西。它有什麼問題。
Offcourse,就是作惡的東西(像你說的)已獲准通過自己的機器上運行的應用程序,因此,它可以比這這樣做更eviler的東西,格式化你的硬盤驅動器等
桌面的安全性授予運行桌面的用戶,如果您不是特權用戶,則無法使用桌面。
請注意,在WM_PAINT消息處理程序期間,通常不在桌面上創建DC,而是通常在特定窗口使用GetDC()。
程序也可以刪除文件系統或銷燬註冊表(如果適當地允許的話),桌面是一個像其他任何用戶權限的資源。如果他們用他們的安全證書運行一個應用程序,他們可以做他們想做的事情。
然而在實踐中,人們會在其中創建一個窗口和繪畫。
如果您正在使用的方法(獲取屏幕DC)被禁用,它不會阻止人們執行以下操作。
您可以創建一個窗口,您可以在窗口中繪製,您可以設置窗口的大小以覆蓋整個屏幕,因此您可以在整個屏幕上進行繪製。
而且您可以抓取整個屏幕的位圖,以便您可以在窗口中繪製底層屏幕內容,然後對其進行調整。
因此,使用各自獨立的,完全有效且非常有用的組合來模擬相同的效果將非常容易。
「你可以抓住整個屏幕的位圖」......這也是一個應該拒絕不受信任的應用程序的操作。 – 2013-08-08 21:04:22
因爲可能有時候你需要做這些事情。我相信目前你無法想到,但在屏幕上寫字可能會有用。
在OS X上,有許多應用程序直接在屏幕上書寫。像CPU時間甚至日曆等有用的信息。這很酷!
但並非所有可以完成的事情都必須完成。
Windows受惡意軟件困擾的主要原因之一是圍繞您描述的這類事情缺乏安全性。其他人則列舉了一些例子,比如填補硬盤空間,擦除隨機文件或者佔用CPU時間......所有這些都是安全問題,所有這些都被另外兩個主要操作系統(Linux和OSX)阻止。這並不意味着你不能在這些操作系統上做類似的事情,但這意味着一個普通用戶不能這樣做。他們必須被授予正確的權限,並且通常也被迫使用非常嚴格的API來限制他們可以執行的操作。所以你的問題的答案是「因爲它沒有考慮到安全性」。這使得程序員可以獲得更大的靈活性,這些權力可以被用於良好的方式,但是恕我直言,它更容易滋生懶惰(人們用蠻力的方式,而不是花時間搞清楚「正確」的做法),並打開門用於安全問題(惡意軟件)。
現在在有限的用戶帳戶中運行Windows真的非常安全。可能至少與Linux的DBUS安全漏洞和運行set-UID root的X服務器一樣好。 – 2009-07-16 14:55:13
@贊:一個現代的Windows,如服務器2k8,應用了所有更新,並正確使用UAC,_might_接近正確配置的Linux系統提供的安全性。但是這在實踐中幾乎從未做過。 – rmeador 2009-07-16 15:23:21
所謂的惡意軟件折磨的主要原因是人們坐在管理賬戶上 - 就是這樣。另外,更流行的平臺,更蹩腳的程序員針對他們的「軟件」,因此他們之間表現出的懶惰。您可以使用root帳戶在Linux中刪除幾乎整個'/'(或至少'/ etc')。這也是你的安全問題嗎? – macbirdie 2009-07-16 21:26:11
- 1. 你如何讓窗戶填滿整個屏幕?
- 2. 爲什麼這個位圖不能在整個屏幕上動畫? Android App
- 3. 在屏幕上畫線?
- 4. 在屏幕上android動畫
- 5. 如何在整個屏幕上在畫布上繪製位圖?
- 6. 爲什麼我的屏幕上沒有畫任何東西?
- 7. 請告訴我如何將整個屏幕畫在褥子上?
- 8. 如何讓畫布100%適合屏幕?
- 9. 如何讓iPhone屏幕滑出? (動畫)
- 10. 爲什麼Cairo.set_source_rgb繪製整個畫布?
- 11. 什麼是一個好的圖書館畫在c + +的屏幕?
- 12. 你畫整個物體嗎?
- 13. Android:爲什麼不能在旋轉屏幕後在畫布位圖上繪製?
- 14. 在Quartz上畫畫屏
- 15. 如何讓動畫UIImage在屏幕上移動?
- 16. UIlabel動畫不適合在屏幕上
- 17. 如何在OS X上畫屏幕?
- 18. UIImage沒有畫在屏幕上
- 19. Android動畫不留在屏幕上
- 20. 畫廊在屏幕上重置旋轉
- 21. 用Java在屏幕上畫圖
- 22. 爲什麼我的CSS3 SVG Object動畫不能在整個屏幕上一直走?
- 23. 從動畫屏幕
- 24. 爲什麼你畫我猜不工作
- 25. 爲什麼動畫在屏幕上重新啓動然後啓動?
- 26. 爲什麼我無法在畫布上畫畫?
- 27. 你如何讓你的精靈在屏幕上反射屏幕邊緣?
- 28. 如何僅在屏幕上調整HTML畫布的大小?
- 29. 讓用戶在視圖上繪畫的技術是什麼?
- 30. 爲什麼屏幕上有多個virtualenvs?
操作系統的目的是管理系統的資源。屏幕是這些資源之一。操作系統限制了一個進程可以對另一個進程的資源做些什麼(例如,你通常不能觸及另一個進程的地址空間)。操作系統保證,即使你有一個無限循環,其他進程將得到預定的CPU時間。操作系統可以強制執行磁盤配額和訪問權限。工作集限制會阻止您使用所有物理RAM。即使在用戶界面級別,Windows也會限制應用程序竊取焦點。那麼爲什麼不限制應用程序可以在屏幕上塗寫的地方? – 2009-09-21 21:49:51
@Adrian - 因爲它會對您可以對操作系統做什麼進行人爲限制。例如,創建像Jing這樣的小部件不可能在所有窗口上漂浮在屏幕的頂部。 – 2009-09-22 12:10:07