Ich habe mit dem DC, der mit CreateDC(L"DISPLAY",NULL,NULL,NULL)
erzielt wurde, einen großen gespielt und ich habe mich gefragt, warum Windows so leicht auf dem ganzen Bildschirm zeichnen kann, weil ich denke, dass man damit ziemlich böse Sachen machen könnte, wie einen TIMER bei 1ms und zeichnen jedes Mal, wenn der Timer tickt, ein schwarzes Rechteck auf dem gesamten Bildschirm.Warum können Sie mit Windows auf dem gesamten Bildschirm zeichnen?
Antwort
Die Tatsache, dass Sie einige ziemlich böse Dinge tun können, bedeutet nicht, dass Windows Sie nicht lassen sollte. Denken Sie nur an all die anderen bösen Dinge, die Sie tun könnten:
Nur weil Sie diese Dinge tun können, bedeutet nicht, dass Windows Sie daran hindern sollte, auf die Festplatte zu schreiben oder Speicher zuzuweisen oder Dateien zu löschen.
Der Zweck von Windows ist die Bereitstellung einer Umgebung, in der Programme ausgeführt werden können. Je flexibler sie diese Umgebung gestalten, desto interessanter (und leider auch hinterlistiger) können Programme für Entwickler erstellt werden.
Wenn sie in willkürlichen Einschränkungen gestartet setzen auf das, was Sie tun können, weil Sie es missbrauchen könnte ... na ja, dann wäre es keine Fenster, es wäre ein iPhone sein :)
Warum lässt Windows so einfach auf die Festplatte schreiben?
Sie könnten einige ziemlich böse Sachen wie überschreiben jede Datei auf der Festplatte.
Da sollte es sein, dass einfach.
Es ist so einfach, weil das Setzen von Regeln und Kontrollen bedeuten würde, dass Sie die Dinge reduzieren würden, die Sie mit der Sprache und dem Windows-Framework machen können. Wenn das passierte, würde es Schreie von der anderen Seite des Zauns geben, die schreit, wie man das und das nicht tun kann.
Es sind diese Fähigkeiten, die die Sprache mächtig machen, aber mit dieser Macht kommt die Gefahr. Nur weil du etwas tun kannst, heißt das nicht, dass du es tun solltest. Sie können Ihre Festplatte formatieren ... bedeutet nicht, dass Sie dies tun sollten, wenn Sie die Uhr-Anwendung starten.
Wenn Sie nicht zufrieden mit dieser Ebene der ‚Verantwortung‘ sind dann wählen Sie eine andere Sprache oder Rahmen in schreiben.
Alles ist ein Fenster und jedes Fenster hat einen Griff. Also, wenn Sie DesktopHandle
haben, dann können Sie etwas darauf zeichnen. Was ist das Problem damit?
Offcourse, die Anwendung, die böse Dinge tut (wie Sie gesagt haben) wurde erlaubt, an der Maschine selbst laufen, deshalb kann es tun mehr Eviler Sachen als diese, wie die Formatierung Ihrer Festplatte usw.
Die Sicherheit des Desktops wird dem Benutzer gegeben, der den Desktop ausführt. Sie können nicht darauf zeichnen, wenn Sie kein privilegierter Benutzer sind.
Beachten Sie, dass normalerweise nicht CreateDC() auf dem Desktop, sondern normalerweise GetDC() für ein bestimmtes Fenster während der WM_PAINT-Nachrichtenhandler erstellt.
Ein Programm kann auch das Dateisystem löschen oder die Registrierung zerstören (wenn entsprechend berechtigt), der Desktop ist eine vom Benutzer genehmigte Ressource wie jede andere. Wenn sie eine Anwendung mit ihren Sicherheitsanmeldeinformationen ausführen, können sie tun, was sie wollen.
In der Praxis würde man jedoch ein Fenster erstellen und darin malen.
Wenn die verwendete Methode (den Bildschirm DC abrufen) deaktiviert wurde, würde dies die Benutzer nicht daran hindern, Folgendes zu tun.
Sie können ein Fenster erstellen, Sie können im Fenster malen, Sie können die Größe des Fensters auf den gesamten Bildschirm einstellen, daher können Sie auf dem gesamten Bildschirm malen.
Und Sie können eine Bitmap des gesamten Bildschirms greifen, so dass Sie den zugrunde liegenden Bildschirminhalt im Fenster malen und dann Anpassungen daran vornehmen können.
So wäre es sehr einfach, den gleichen Effekt mit einer Kombination von Dingen zu simulieren, die für sich genommen vollkommen gültig und äußerst nützlich sind.
"Sie können ein Bitmap des ganzen Bildschirms" "greifen, das ist auch eine Operation, die nicht vertrauenswürdigen Apps verweigert werden sollte. –
Weil es eine Zeit geben kann, wenn Sie diese Dinge tun müssen. Ich bin mir sicher, dass Sie im Moment nicht an etwas denken können, aber das Schreiben auf dem Bildschirm kann nützlich sein.
Auf OS X gibt es viele Anwendungen, die direkt auf dem Bildschirm schreiben. Nützliche Informationen wie CPU-Zeit oder sogar ein Kalender. Das ist cool!
Aber nicht alles, was getan werden kann, muss getan werden.
Einer der Hauptgründe, warum Windows so mit Malware behaftet ist, ist der Mangel an Sicherheit in Bezug auf Dinge, die Sie beschreiben. Andere haben Beispiele angeführt, wie das Ausfüllen der Festplatte, das Löschen zufälliger Dateien oder das Essen von CPU-Zeit ... all diese Dinge sind Sicherheitsbedenken und werden von den anderen beiden Hauptbetriebssystemen (Linux und OSX) verhindert. Dies bedeutet nicht, dass Sie auf diesen Betriebssystemen keine ähnlichen Dinge tun können, aber das bedeutet, dass ein normaler Benutzer das nicht tun kann. Sie müssten die richtigen Berechtigungen erhalten und normalerweise auch gezwungen werden, eine sehr restriktive API zu verwenden, um zu begrenzen, was sie tun können. Die Antwort auf Ihre Frage lautet also "weil sie nicht mit Sicherheit konzipiert wurde". Dies ermöglicht Programmierern deutlich mehr Flexibilität, und diese Befugnisse können für gute verwendet werden, aber IMHO es häufiger Faulheit züchtet (Menschen nutzen die brachiale Kraft, anstatt die Zeit herauszufinden, die "richtige" Weg, etwas zu tun) und öffnet die Tür für Sicherheitsprobleme (Malware).
Das Ausführen von Windows in einem eingeschränkten Benutzerkonto ist heutzutage ziemlich sicher. Wahrscheinlich mindestens so gut wie Linux mit seinen DBUS-Sicherheits-Bugs und dem X-Server, auf dem set-UID root läuft. –
@Zan: ein modernes Windows, wie Server 2k8, mit allen Updates angewendet, und die ordnungsgemäße Verwendung von UAC, _might_ Ansatz die Sicherheit von einem ordnungsgemäß konfigurierten Linux-System angeboten. Aber das wird in der Praxis fast nie gemacht. – rmeador
Der Hauptgrund für das sogenannte Malware-Problem ist, dass die Leute auf Administratorkonten sitzen - das ist es. Auch, je beliebter die Plattform, desto beschissenere Programmierer zielen auf ihre "Software" ab, daher die scheinbare Faulheit unter ihnen. Sie können fast ganz '/' (oder mindestens '/ etc') in Linux mit einem root-Account entfernen. Ist das ein Sicherheitsproblem für Sie? – macbirdie
Der Zweck eines Betriebssystems besteht darin, die Systemressourcen zu verwalten. Der Bildschirm ist eine dieser Ressourcen. Das Betriebssystem legt Grenzen fest, was ein Prozess mit den Ressourcen eines anderen Prozesses tun kann (z. B. können Sie den Adressraum eines anderen Prozesses im Allgemeinen nicht berühren). Das Betriebssystem garantiert, dass auch bei einer Endlosschleife andere Prozesse die CPU-Zeit einplanen. Das Betriebssystem kann Datenträgerkontingente und Zugriffsberechtigungen erzwingen. Beschränkungen des Arbeitssatzes verhindern, dass Sie den gesamten physischen Arbeitsspeicher verbrauchen. Selbst auf UI-Ebene schränkt Windows Apps den Fokus ein. Warum also nicht einschränken, wo Apps auf dem Bildschirm kritzeln können? –
@Adrian - weil es künstliche Grenzen setzen würde, was man mit dem Betriebssystem machen kann. Beispielsweise wäre es unmöglich, ein Widget wie Jing zu erstellen, das über alle Fenster am oberen Bildschirmrand schwebt. –