5

我一直在用获得的 DC 玩大游戏CreateDC(L"DISPLAY",NULL,NULL,NULL),我一直想知道为什么 windows 可以让你轻松地在整个屏幕上绘图,因为我认为你可以用它做一些非常邪恶的事情,比如将 TIMER 设置为 1ms 和每次计时器滴答时在整个屏幕上绘制一个黑色矩形。

4

8 回答 8

34

您可以做一些非常邪恶的事情这一事实并不意味着 Windows 不应该让您这样做。想想你能做的所有其他邪恶的事情:

  • 无限循环运行并耗尽所有cpu时间。
  • 将随机位写入文件,直到填满整个硬盘。
  • 到处删除随机文件。
  • 疯狂地分配内存,直到计算机慢到爬行。

仅仅因为你可以做这些事情并不意味着 Windows 应该阻止你写入硬盘驱动器或分配内存或删除文件。

Windows 的目的是提供一个程序可以运行的环境。他们使该环境变得越灵活,开发人员创建的程序就越有趣(不幸的是,它也变得更加曲折)。

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

于 2009-07-16T12:24:08.380 回答
10

为什么windows让你写硬盘这么容易?

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

于 2009-07-16T12:22:13.683 回答
7

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

请注意,通常不是在桌面上使用 CreateDC(),而是在 WM_PAINT 消息处理程序期间针对特定窗口通常使用 GetDC()。

程序还可以删除文件系统,或破坏注册表(如果有适当的许可),桌面是用户许可的资源,就像任何其他资源一样。如果他们使用他们的安全凭证运行应用程序,他们可以做他们想做的事。

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

于 2009-07-16T12:25:24.260 回答
4

因为它应该是那么容易。

这很容易,因为设置规则和控制意味着您将减少您可以使用语言和 Windows 框架做的事情。如果发生这种情况,那么栅栏的另一边就会发出尖叫声,大喊你怎么不能这样那样做。

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

如果您对这种级别的“责任”不满意,请选择一种不同的语言或框架来编写。

于 2009-07-16T12:24:19.487 回答
3

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

当然,做坏事的应用程序(就像你说的那样)已经被允许自己在机器上运行,因此,它可以做比这更坏的事情,比如格式化你的硬盘驱动器等。

于 2009-07-16T12:25:21.860 回答
2

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

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

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

因此,使用本身完全有效且非常有用的事物组合来模拟相同的效果将非常容易。

于 2009-07-16T12:27:45.340 回答
1

因为有时您可能需要做这些事情。我敢肯定,目前您想不出任何办法,但在屏幕上书写可能会有用。

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

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

于 2009-07-16T12:38:28.400 回答
-3

Windows 如此受恶意软件影响的主要原因之一是您所描述的这些事情缺乏安全性。其他人引用了诸如填充硬盘驱动器、擦除随机文件或占用 CPU 时间等示例……所有这些都是安全问题,而其他两个主要操作系统(Linux 和 OSX)都阻止了它们。这并不意味着你不能在那些操作系统上做类似的事情,而是意味着普通用户做不到。他们必须被授予正确的权限,并且通常还被迫使用非常严格的 API 来限制他们可以做的事情。所以你的问题的答案是“因为它的设计没有考虑到安全性”。这给程序员带来了更大的灵活性,并且这些能力可以很好地使用,

于 2009-07-16T13:40:49.153 回答