2009-07-16 11 views
5

Grałem bardzo dobrze z DC uzyskanym z CreateDC(L"DISPLAY",NULL,NULL,NULL) i zastanawiałem się, dlaczego okna pozwalają ci na rysowanie na całym ekranie tak łatwo, ponieważ myślę, że możesz zrobić coś złego z tym, jak na przykład TIMERA na 1 ms i rysowanie czarnego prostokąta na całym ekranie za każdym razem, gdy tykasz zegar.Dlaczego okna umożliwiają rysowanie na całym ekranie?

Odpowiedz

31

Fakt, że można zrobić coś złego, nie oznacza, że ​​okna nie pozwalają na to. Pomyśl o wszystkich innych złych rzeczach, które możesz zrobić:

  • Uruchom w nieskończonej pętli i zjedz cały czas procesora.
  • Zapisuj losowe bity do pliku, aż wypełnisz cały dysk twardy.
  • Usuń losowe pliki w dowolnym miejscu.
  • Przydzielanie pamięci jak szalonej, aż komputer spowolni indeksowanie.

Tylko dlatego, że MOŻESZ zrobić takie rzeczy, nie oznacza to, że okna powinny uniemożliwiać zapisywanie na dysku twardym lub przydzielanie pamięci lub usuwanie plików.

Celem systemu Windows jest zapewnienie środowiska, w którym można uruchamiać programy. Im bardziej elastyczne są te środowiska, tym ciekawsze (i niestety przebiegle) programy są tworzone przez programistów.

Jeśli zaczęli wprowadzenie arbitralnych ograniczeń, co można zrobić, ponieważ można go nadużywać ... dobrze, to nie byłoby okna, byłoby iPhone :)

+5

Celem systemu operacyjnego jest zarządzanie zasobami systemu. Ekran jest jednym z tych zasobów. System operacyjny nakłada ograniczenia na to, co jeden proces może zrobić na zasoby innego procesu (np. Zazwyczaj nie można dotknąć przestrzeni adresowej innego procesu). System operacyjny gwarantuje, że nawet jeśli masz nieskończoną pętlę, inne procesy otrzymają zaplanowany czas procesora. System operacyjny może wymuszać przydziały dysków i uprawnienia dostępu. Ograniczenia zestawu roboczego uniemożliwiają wykorzystanie całej fizycznej pamięci RAM. Nawet na poziomie interfejsu, Windows ogranicza aplikacje do kradzieży fokusu. Dlaczego więc nie ograniczyć miejsca, w których aplikacje mogą zapisywać się na ekranie? –

+0

@Adrian - ponieważ wprowadziłoby sztuczne limity na to, co można zrobić z systemem operacyjnym. Na przykład utworzenie widgetu takiego jak Jing, który unosi się u góry ekranu nad wszystkimi oknami, byłoby niemożliwe. –

10

dlaczego okna umożliwiają tak łatwe zapisywanie na dysku twardym?

można zrobić kilka złych rzeczy, takich jak nadpisanie każdego pliku na dysku twardym.

4

Bo powinno być tak, że łatwo.

To takie proste, ponieważ wprowadzenie reguł i kontroli oznaczałoby, że ograniczylibyście to, co można zrobić z językiem i ramą okna. Gdyby tak się stało, po drugiej stronie płotu rozległyby się krzyki, krzyczące, że nie możesz tego zrobić.

To właśnie te umiejętności sprawiają, że język jest potężny, ale z tą mocą wiąże się niebezpieczeństwo. Tylko dlatego, że możesz coś zrobić, nie znaczy, że powinieneś. Możesz sformatować dysk twardy ... nie oznacza to, że powinieneś to zrobić po uruchomieniu aplikacji zegara.

Jeżeli nie jesteś zadowolony z tego poziomu „odpowiedzialność”, a następnie wybrać inny język lub ram do napisania w.

3

Wszystko to okno i każde okno posiada uchwyt. Tak więc, jeśli masz DesktopHandle, możesz narysować cokolwiek na nim. Z czym jest problem.

Offcourse, wniosek, że robi złe rzeczy (jak powiedziałeś) została dopuszczona do pracy na maszynie przez siebie, zatem może zrobić więcej niż to eviler rzeczy takie jak formatowanie dysku twardego itp

7

Zabezpieczenie pulpitu jest przyznawane użytkownikowi, który uruchamia pulpit, nie można go narysować, jeśli nie jesteś uprzywilejowanym użytkownikiem.

Należy zauważyć, że zazwyczaj nie jest to CreateDC() na pulpicie, ale zazwyczaj GetDC() dla określonego okna podczas obsługi komunikatów WM_PAINT.

Program może również usunąć system plików lub zniszczyć rejestr (jeśli jest to odpowiednio dozwolone), pulpit jest zasobem dozwolonym przez użytkownika, jak każdy inny. Jeśli uruchomią aplikację ze swoimi danymi uwierzytelniającymi, będą mogli robić, co chcą.

Jednak w praktyce można utworzyć okno i pomalować w nim.

2

Jeśli metoda, z której korzystasz (wyłączając ekran DC), została wyłączona, nie powstrzymałoby ludzi przed zrobieniem następujących czynności.

Możesz stworzyć okno, możesz malować w oknie, możesz ustawić rozmiar okna tak, aby obejmował cały ekran, dlatego możesz malować na całym ekranie.

Można pobrać mapę bitową całego ekranu, aby można było pomalować zawartość ekranu w oknie, a następnie wprowadzić do niej poprawki.

Bardzo łatwo byłoby symulować ten sam efekt, stosując kombinację rzeczy, które same w sobie są całkowicie poprawne i niezwykle użyteczne.

+0

"Możesz pobrać mapę bitową całego ekranu" ... to także operacja, której należy odmówić niezaufanych aplikacji. –

1

Ponieważ może być czas, kiedy trzeba zrobić te rzeczy. Jestem pewien, że w tej chwili nie można myśleć o niczym innym, ale pisanie na ekranie może być przydatne.

W systemie OS X istnieje wiele aplikacji, które piszą bezpośrednio na ekranie. Przydatne informacje, takie jak czas procesora, a nawet kalendarz. To super!

Ale nie wszystko, co można zrobić, musi zostać zrobione.

-3

Jednym z głównych powodów, dla których system Windows jest tak zainfekowany złośliwym oprogramowaniem, jest brak bezpieczeństwa wokół takich rzeczy, które opisujesz. Inni cytowali przykłady, takie jak wypełnianie dysku twardego, kasowanie losowych plików lub spożywanie czasu procesora. Wszystkie te kwestie są problemami bezpieczeństwa, a wszystkie z nich są blokowane przez dwa pozostałe główne systemy operacyjne (Linux i OSX). Nie oznacza to, że nie można wykonywać podobnych czynności w tych systemach operacyjnych, ale oznacza to, że zwykły użytkownik nie może tego zrobić. Musieliby otrzymać odpowiednie uprawnienia, a także zwykle zmuszeni do użycia bardzo restrykcyjnego API, aby ograniczyć to, co potrafią. Tak więc odpowiedź na twoje pytanie brzmi: "ponieważ nie została zaprojektowana z myślą o bezpieczeństwie". To pozwala programistom na znacznie większą elastyczność, a te moce można wykorzystać na dobre, ale IMHO częściej rodzi lenistwo (ludzie używają brutalnej siły zamiast spędzać czas na szukaniu "właściwego" sposobu na zrobienie czegoś) i otwierają drzwi w przypadku problemów z bezpieczeństwem (złośliwe oprogramowanie).

+3

Prowadzenie systemu Windows wewnątrz ograniczonego konta użytkownika jest obecnie naprawdę bezpieczne. Prawdopodobnie co najmniej tak dobry jak Linux z błędami bezpieczeństwa DBUS i serwerem X z ustawionym rootem UID. –

+0

@Zan: nowoczesny system Windows, taki jak serwer 2k8, ze wszystkimi zastosowanymi aktualizacjami i właściwym użyciem UAC, _możący_ podejście do bezpieczeństwa oferowanego przez poprawnie skonfigurowany system Linux. Ale prawie nigdy nie zostało to zrobione w praktyce. – rmeador

+3

Główną przyczyną tak zwanego problemu ze szkodliwym oprogramowaniem jest fakt, że ludzie zasiadają na kontach administracyjnych - to wszystko. Co więcej, im bardziej popularna platforma, tym bardziej nieudolni programiści, którzy celują w swoje "oprogramowanie", stąd widoczne wśród nich lenistwo. Możesz usunąć prawie całe '/' (lub przynajmniej '/ etc') w systemie Linux z kontem root. Czy to także dotyczy ciebie? – macbirdie

Powiązane problemy