为什么Windows让你在整个屏幕上画画?

时间:2009-07-16 12:18:04

标签: c++ windows winapi gdi

我一直在与CreateDC(L"DISPLAY",NULL,NULL,NULL)得到的DC一起玩,我一直想知道为什么Windows让你轻松地在整个屏幕上画画,因为我觉得你可以做一些非常邪恶的东西就像把TIMER放在1ms并在每次计时器滴答时在整个屏幕上画一个黑色矩形。

8 个答案:

答案 0 :(得分:33)

事实上,你可以做一些非常邪恶的东西并不意味着窗户不应该让你这样做。想想你可以做的所有其他邪恶的事情:

  • 以无限循环运行并占用所有cpu时间。
  • 将随机位写入文件,直到填满整个硬盘。
  • 删除所有地方的随机文件。
  • 在计算机慢慢爬行之前,像疯了一样分配内存。

仅仅因为你能做到这些并不意味着windows会阻止你写入硬盘或分配内存或删除文件。

Windows的目的是提供一个可以运行程序的环境。他们创建环境越灵活,开发人员就可以创建更有趣(而且不幸的是,狡猾)的程序。

如果他们开始对你可以做的事情施加任意限制,因为你可能会滥用它......好吧,那就不是windows,它就是iPhone:)

答案 1 :(得分:10)

为什么Windows可以让您轻松地写入硬盘?

你可以做一些非常邪恶的事情,比如覆盖硬盘上的每个文件。

答案 2 :(得分:7)

桌面的安全性是给运行桌面的用户的,如果您不是特权用户,则无法在桌面上绘制。

请注意,在桌面上通常不会创建CreateDC(),但在WM_PAINT消息处理程序期间通常会为特定窗口使用GetDC()。

程序还可以删除文件系统,或者销毁注册表(如果获得适当的许可),桌面就像任何其他用户一样是用户许可的资源。如果他们使用安全凭证运行应用程序,他们可以按照自己的意愿行事。

然而在实践中,人们会在其中创建一个窗口和绘画。

答案 3 :(得分:4)

因为它应该那么容易。

这很简单,因为将规则和控件放在适当位置意味着您将减少使用语言和Windows框架可以执行的操作。如果发生这种情况,那么围栏的另一边会发出尖叫声,大喊你怎么做不到这一点。

正是这些能力使语言变得强大,但是这种能力带来了危险。仅仅因为你可以做某事,并不意味着你应该做。您可以格式化硬盘驱动器...并不意味着您应该在启动时钟应用程序时执行此操作。

如果您对此级别的“责任”不满意,请选择其他语言或框架进行写作。

答案 4 :(得分:3)

一切都是窗口,每个窗口都有一个手柄。所以,如果你有DesktopHandle,那么你可以在上面画任何东西。它有什么问题。

当然,正在做恶行的应用程序(就像你说的那样)已被允许自己在机器上运行,因此,它可以做更多的回忆,比如格式化你的硬盘等。

答案 5 :(得分:2)

如果您使用的方法(获取屏幕DC)被禁用,则不会阻止人们执行以下操作。

你可以创建一个窗口,你可以在窗口中绘画,你可以设置窗口的大小来覆盖整个屏幕,因此你可以在整个屏幕上绘画。

您可以抓取整个屏幕的位图,这样您就可以在窗口中绘制底层屏幕内容,然后对其进行调整。

因此,使用自身完全有效且非常有用的东西组合来模拟相同的效果会非常容易。

答案 6 :(得分:1)

因为有时候你需要做这些事情。我相信你现在无法想到任何东西,但在屏幕上写字可能会有用。

在OS X上,有许多应用程序直接在屏幕上书写。有用的信息,如CPU时间甚至是日历。那很酷!

但并非所有可以完成的事情都必须完成。

答案 7 :(得分:-3)

Windows受到恶意软件攻击的主要原因之一是缺乏与您描述的内容相关的安全性。其他人引用了诸如填充硬盘驱动器,删除随机文件或占用CPU时间等示例......所有这些都是安全问题,所有这些都被其他两个主要操作系统(Linux和OSX)阻止。这并不意味着您不能在这些操作系统上执行类似的操作,但这意味着普通用户无法执行此操作。他们必须被授予正确的权限,并且通常还被迫使用限制性很强的API来限制他们可以做的事情。因此,您的问题的答案是“因为它的设计并未考虑到安全性”。这使得程序员可以获得更大的灵活性,并且这些功能可以很好地使用,但恕我直言,它更经常滋生懒惰(人们使用蛮力的方式而不是花时间找出“正确”的方式做某事)并打开门安全问题(恶意软件)。