C++ 为什么windows允许您在整个屏幕上绘图?

C++ 为什么windows允许您在整个屏幕上绘图?,c++,windows,winapi,gdi,C++,Windows,Winapi,Gdi,我一直在使用CreateDC(L“DISPLAY”,NULL,NULL,NULL)获得的DC玩大游戏,我一直在想为什么windows让你可以如此轻松地在整个屏幕上绘制,因为我认为你可以用它做一些非常邪恶的事情,比如把计时器设为1ms,每次计时器滴答作响时在整个屏幕上画一个黑色矩形。为什么windows让你这么容易地写入硬盘 你可以做一些非常邪恶的事情,比如覆盖硬盘上的每个文件。你可以做一些非常邪恶的事情并不意味着windows不应该让你这么做。想想你能做的所有其他坏事: 在无限循环中运行,消耗

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

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


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

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

  • 在无限循环中运行,消耗所有cpu时间
  • 将随机位写入文件,直到填满整个硬盘
  • 删除各地的随机文件
  • 疯狂地分配内存,直到计算机慢到爬行
仅仅因为你可以做这些事情并不意味着windows应该阻止你写入硬盘、分配内存或删除文件

Windows的目的是提供一个程序可以运行的环境。环境越灵活,开发人员创建的程序就越有趣(不幸的是,也越迂回)


如果他们开始任意限制你的行为,因为你可能会滥用它。。。嗯,那就不是windows,而是iPhone:)

因为它应该很简单

这很容易,因为将规则和控件放在适当的位置将意味着您将减少使用该语言和windows框架可以做的事情。如果发生这种情况,那么会有来自围栏另一边的尖叫声,喊叫着你不能这样那样做

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


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

一切都是一个窗口,每个窗口都有一个句柄。因此,如果你有
桌面手柄
,那么你可以在上面画任何东西。有什么问题吗


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

桌面的安全性是给运行桌面的用户的,如果你不是特权用户,你不能利用它

请注意,在WM_PAINT消息处理程序期间,通常不会在桌面上创建DC(),而是为特定窗口创建GetDC()

程序还可以删除文件系统,或销毁注册表(如果有适当的许可),桌面与其他任何资源一样是用户许可的资源。如果他们使用安全凭据运行应用程序,他们可以随心所欲


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

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

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

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


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

因为可能有一段时间你需要做这些事情。我相信现在你想不出什么,但在屏幕上写字可能会有用

在OSX上有许多直接在屏幕上编写的应用程序。有用的信息,如CPU时间,甚至日历。太酷了


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

Windows受到恶意软件困扰的主要原因之一是您所描述的这些事情缺乏安全性。其他人举了一些例子,比如填满硬盘、擦除随机文件或占用CPU时间。。。所有这些都是安全问题,而其他两个主要操作系统(Linux和OSX)都阻止了这些问题。这并不意味着你不能在那些操作系统上做类似的事情,但这意味着普通用户不能这样做。他们必须被授予正确的权限,并且通常还被迫使用限制性很强的API来限制他们所能做的事情。所以你的问题的答案是“因为它的设计没有考虑到安全性”。这让程序员有了更大的灵活性,这些能力也可以用来做好事,但它更容易滋生懒惰(人们使用暴力的方式,而不是花时间找出“正确”的方式来做某事),并为安全问题(恶意软件)打开了大门.

如今,在有限的用户帐户内运行Windows确实非常安全。可能至少和Linux一样好,有DBUS安全漏洞,X服务器运行set UID root。@Zan:现代Windows,如服务器2k8,应用了所有更新,并正确使用UAC,可能接近正确配置的Linux系统提供的安全性。但这在实践中几乎从未发生过。所谓的恶意软件困扰的主要原因是人们坐在管理帐户上——仅此而已。而且,越是流行的平台,就越是蹩脚的程序员将他们的“软件”放在平台上,因此他们中间就有明显的懒惰。您可以使用根帐户在linux中删除几乎整个
/
(或者至少
/etc
)。这是安全问题吗