2009-07-16 16 views
5

Ho suonato alla grande con la DC ottenuta con CreateDC(L"DISPLAY",NULL,NULL,NULL) e mi sono chiesto perché Windows ti permette di disegnare su tutto lo schermo così facilmente, perché penso che potresti fare cose piuttosto malvagie con cose come mettere un TIMER a 1 ms e disegnando un rettangolo nero sull'intero schermo ogni volta che il timer scandisce.Perché Windows ti lascia disegnare su tutto lo schermo?

risposta

31

Il fatto che potreste fare cose piuttosto malvagie non significa che Windows non dovrebbe permettervi di farlo. Pensa a tutte le altre cose cattive che potresti fare:

  • Esegui in un ciclo infinito e mangia tutto il tempo della CPU.
  • Scrive i bit casuali in un file fino a riempire l'intero disco rigido.
  • Elimina file casuali dappertutto.
  • Assegna memoria come un matto finché il computer non rallenta.

Solo perché si possono fare queste cose non significa che Windows dovrebbe impedire di scrivere sul disco rigido o allocare memoria o eliminare file.

Lo scopo di Windows è fornire un ambiente in cui i programmi possano essere eseguiti. Più flessibile rendono questo ambiente, più i programmi più interessanti (e, sfortunatamente, ambigui) rendono possibile la creazione da parte degli sviluppatori.

Se hanno iniziato a mettere in restrizioni arbitrarie su cosa si può fare perché si potrebbe abusarne ... beh, allora non sarebbe finestre, sarebbe un iPhone :)

+5

Lo scopo di un sistema operativo è gestire le risorse del sistema. Lo schermo è una di quelle risorse. Il sistema operativo pone dei limiti su ciò che un processo può fare alle risorse di un altro processo (ad esempio, generalmente non è possibile toccare lo spazio degli indirizzi di un altro processo). Il sistema operativo garantisce che, anche se si dispone di un ciclo infinito, altri processi avranno un tempo di CPU pianificato. Il sistema operativo può imporre quote disco e privilegi di accesso. I limiti del working set ti impediscono di utilizzare tutta la RAM fisica. Anche a livello di interfaccia utente, Windows limita le app a non rubare l'attenzione. Quindi, perché non limitare dove le app possono scarabocchiare sullo schermo? –

+0

@Adrian - perché pone dei limiti artificiali su ciò che è possibile fare con il sistema operativo. Ad esempio, la creazione di un widget come Jing che galleggia nella parte superiore dello schermo su tutte le finestre sarebbe impossibile. –

10

perché Windows consente di scrivere sul disco rigido così facilmente?

potresti fare cose piuttosto malvagie come sovrascrivere ogni file sul disco rigido.

4

perché dovrebbe essere che facile.

È facile, perché mettere regole e controlli sul posto significherebbe ridurre le cose che si possono fare con la lingua e il framework di Windows. Se ciò accadesse, ci sarebbero grida dall'altra parte del recinto che gridano su come non puoi fare questo e quello.

Sono queste abilità che rendono il linguaggio potente, ma con quel potere arriva il pericolo. Solo perché puoi fare qualcosa, non significa che dovresti. È possibile formattare il disco rigido ... non significa che si dovrebbe fare questo quando si avvia l'applicazione orologio.

Se non siete felici con questo livello di 'responsabilità' poi scegliere una lingua o un quadro diverso da scrivere in.

3

Tutto è una finestra e ogni finestra ha una maniglia. Quindi, se hai , puoi disegnare qualsiasi cosa su di esso. Qual è il problema con esso.

Offcourse, l'applicazione che sta facendo cose male (come hai detto) è stato permesso di eseguire sulla macchina da soli, quindi, può fare cose più eviler di così come la formattazione del disco rigido, ecc

7

La sicurezza del desktop viene fornita all'utente che esegue il desktop, non è possibile disegnare su di esso se non si è un utente privilegiato.

Si noti che solitamente non viene creato CreateDC() sul desktop, ma solitamente GetDC() per una finestra particolare durante il gestore di messaggi WM_PAINT.

Un programma può anche eliminare il file system o distruggere il registro (se opportunamente autorizzato), il desktop è una risorsa consentita dall'utente come qualsiasi altra. Se eseguono un'applicazione con le loro credenziali di sicurezza, possono fare ciò che desiderano.

Tuttavia nella pratica si creerebbe una finestra e si dipingesse al suo interno.

2

Se il metodo che si sta utilizzando (ottenendo lo schermo DC) è stato disabilitato, non impedirebbe alle persone di eseguire quanto segue.

È possibile creare una finestra, è possibile dipingere nella finestra, è possibile impostare la dimensione della finestra per coprire l'intero schermo, quindi è possibile dipingere su tutto lo schermo.

E si può afferrare una bitmap dell'intero schermo, in modo da poter dipingere il contenuto dello schermo sottostante nella finestra e quindi apportare modifiche ad esso.

Quindi sarebbe molto facile simulare lo stesso effetto utilizzando una combinazione di elementi che, da soli, sono perfettamente validi ed estremamente utili.

+0

"È possibile catturare una bitmap dell'intero schermo" ... è anche un'operazione che dovrebbe essere negata alle app non attendibili. –

1

Perché potrebbe esserci un momento in cui è necessario fare queste cose. Sono sicuro che al momento non riesci a pensare a niente, ma la scrittura sullo schermo può essere utile.

Su OS X ci sono molte applicazioni che scrivono direttamente sullo schermo. Informazioni utili come il tempo della CPU o persino un calendario. Questo è figo!

Ma non tutto ciò che si può fare deve essere fatto.

-3

Uno dei motivi principali per cui Windows è così afflitto dal malware è la mancanza di sicurezza in merito a ciò che descrivi. Altri hanno citato esempi come il riempimento del disco rigido, la cancellazione di file casuali o il consumo del tempo della CPU ... tutte queste cose sono problemi di sicurezza, e tutti loro sono impediti dagli altri due principali sistemi operativi (Linux e OSX). Questo non significa che non puoi fare cose simili su quei sistemi operativi, ma significa che un utente normale non può farlo. Dovrebbero essere loro concesse le giuste autorizzazioni e di solito anche costretti a usare un'API molto restrittiva per limitare ciò che possono fare. Quindi la risposta alla tua domanda è "perché non è stato progettato pensando alla sicurezza". Ciò consente ai programmatori una maggiore flessibilità, e questi poteri possono essere utilizzati per il bene, ma IMHO spesso alimenta la pigrizia (le persone usano la forza bruta invece di passare il tempo a capire il modo "giusto" di fare qualcosa) e apre la porta per problemi di sicurezza (malware).

+3

Windows in esecuzione all'interno di un account utente limitato è davvero abbastanza sicuro in questi giorni. Probabilmente almeno buono come Linux con i suoi bug di sicurezza DBUS e il server X che esegue la root set-UID. –

+0

@Zan: un moderno Windows, come Server 2k8, con tutti gli aggiornamenti applicati e un uso corretto di UAC, _might_ si avvicina alla sicurezza offerta da un sistema Linux correttamente configurato. Ma quasi mai è stato fatto nella pratica. – rmeador

+3

Il motivo principale della cosiddetta violazione del malware è che le persone siedono su account amministrativi, il gioco è fatto. Inoltre, la piattaforma più popolare, i programmatori più schifosi che hanno come bersaglio il loro "software" su di esso, da qui l'apparente pigrizia tra di loro. Puoi rimuovere quasi intero '/' (o almeno '/ etc') in linux con un account di root. Anche questo è un problema di sicurezza per te? – macbirdie

Problemi correlati