Почему окна позволяют рисовать на весь экран? - PullRequest
5 голосов
/ 16 июля 2009

Я играл по-крупному с DC, полученным с CreateDC(L"DISPLAY",NULL,NULL,NULL), и мне было интересно, почему окна позволяют так легко рисовать на весь экран, потому что я думаю, что вы могли бы сделать довольно злые вещи с таким установка ТАЙМЕРА на 1 мс и рисование черного прямоугольника на весь экран каждый раз, когда срабатывает таймер.

Ответы [ 8 ]

33 голосов
/ 16 июля 2009

Тот факт, что вы можете делать довольно злые вещи, не означает, что окна не должны позволять вам это делать. Просто подумайте обо всех других злых вещах, которые вы могли бы сделать:

  • Запустите бесконечный цикл и съедите все время процессора.
  • Записывайте случайные биты в файл, пока не заполните весь жесткий диск.
  • Удалить случайные файлы повсюду.
  • Выделите память как сумасшедшую, пока компьютер не замедлится.

То, что вы МОЖЕТЕ делать эти вещи, не означает, что окна должны препятствовать записи на жесткий диск, выделению памяти или удалению файлов.

Цель Windows - предоставить среду, в которой могут работать программы. Чем гибче они создают эту среду, тем более интересные (и, к сожалению, изощренные) программы могут создавать разработчики.

Если бы они начали накладывать произвольные ограничения на то, что вы можете сделать, потому что вы могли бы злоупотреблять этим ... ну, тогда это были бы не окна, а iPhone:)

10 голосов
/ 16 июля 2009

Почему Windows позволяет так легко записывать на жесткий диск?

Вы могли бы сделать что-то довольно злое, например, перезаписать каждый файл на жестком диске.

7 голосов
/ 16 июля 2009

Безопасность рабочего стола предоставляется пользователю, работающему на рабочем столе, вы не можете использовать его, если вы не являетесь привилегированным пользователем.

Обратите внимание, что обычно нет CreateDC () на рабочем столе, но обычно GetDC () для определенного окна во время обработчика сообщений WM_PAINT.

Программа также может удалить файловую систему или уничтожить реестр (если это разрешено соответствующим образом), рабочий стол является ресурсом, разрешенным пользователем, как и любой другой. Если они запускают приложение со своими учетными данными, они могут делать то, что хотят.

Однако на практике можно создать окно и рисовать в нем.

4 голосов
/ 16 июля 2009

Потому что это должно быть так просто.

Это так просто, потому что введение правил и элементов управления означает, что вы будете сокращать то, что вы можете делать с языком и структурой Windows. Если это произойдет, то с другой стороны забора будут крики о том, как вы не можете делать то и это.

Именно эти способности делают язык мощным, но с этой силой возникает опасность. То, что вы можете что-то сделать, не означает, что вы должны это делать. Вы можете отформатировать жесткий диск ... это не значит, что вы должны делать это при запуске приложения часов.

Если вас не устраивает этот уровень «ответственности», выберите другой язык или структуру для написания.

3 голосов
/ 16 июля 2009

Все окно, и у каждого окна есть РУЧКА. Итак, если у вас есть DesktopHandle, то вы можете нарисовать на нем что угодно. В чем проблема с этим.

Вне всякого сомнения, приложению, которое делает что-то плохое (как вы сказали), разрешено запускать на машине самостоятельно, поэтому оно может выполнять больше злых дел, чем это, например, форматирование жесткого диска и т. Д.

2 голосов
/ 16 июля 2009

Если метод, который вы используете (получение постоянного тока экрана), был отключен, это не помешает людям делать следующее.

Вы можете создать окно, вы можете рисовать в окне, вы можете установить размер окна, чтобы покрыть весь экран, поэтому вы можете рисовать на весь экран.

И вы можете получить растровое изображение всего экрана, чтобы нарисовать содержимое основного экрана в окне, а затем внести в него изменения.

Так что было бы очень легко смоделировать тот же эффект, используя комбинацию вещей, которые сами по себе являются совершенно действительными и чрезвычайно полезными.

1 голос
/ 16 июля 2009

Потому что может быть время, когда вам нужно делать эти вещи. Я уверен, что в настоящее время вы не можете думать ни о чем, но запись на экране может быть полезной.

В OS X есть много приложений, которые пишут прямо на экране. Полезная информация, такая как процессорное время или даже календарь. Это круто!

Но не все, что можно сделать, должно быть сделано.

0 голосов
/ 16 июля 2009

Одной из основных причин, по которой Windows так поражена вредоносными программами, является отсутствие безопасности в отношении таких вещей, которые вы описываете. Другие приводили примеры, такие как заполнение жесткого диска, стирание случайных файлов или использование процессорного времени ... все это - проблемы безопасности, и все они предотвращаются двумя другими основными операционными системами (Linux и OSX). Это не означает, что вы не можете делать подобные вещи в этих операционных системах, но это означает, что обычный пользователь не может сделать это. Им должны быть предоставлены правильные разрешения, и, как правило, они также вынуждены использовать очень ограничительный API-интерфейс для ограничения своих возможностей. Таким образом, ответ на ваш вопрос «потому что он не был разработан с учетом безопасности». Это дает программистам значительно большую гибкость, и эти возможности могут быть использованы навсегда, но, по-моему, это чаще порождает лень (люди используют метод грубой силы вместо того, чтобы тратить время на поиск «правильного» способа сделать что-то) и открывают дверь для проблем безопасности (вредоносная программа).

...