5

私は得られたDCで大いに遊んでいて、CreateDC(L"DISPLAY",NULL,NULL,NULL)なぜウィンドウが画面全体に簡単に描画できるのか疑問に思っていました.TIMERを1ミリ秒に設定するなど、かなり邪悪なことを行うことができると思います.タイマーが刻むたびに画面全体に黒い長方形を描画します。

4

8 に答える 8

34

かなり邪悪なことを行うことができるという事実は、ウィンドウがそれを許可してはならないという意味ではありません。あなたができる他のすべての悪いことを考えてみてください:

  • 無限ループで実行し、すべての CPU 時間を消費します。
  • ハードディスク全体がいっぱいになるまでランダムなビットをファイルに書き込みます。
  • あちこちのランダムなファイルを削除します。
  • コンピュータの速度が遅くなるまで、狂ったようにメモリを割り当てます。

これらのことができるからといって、ウィンドウがハードドライブへの書き込み、メモリの割り当て、ファイルの削除を防ぐ必要があるわけではありません。

Windows の目的は、プログラムを実行できる環境を提供することです。その環境が柔軟になればなるほど、開発者はより興味深い (そして残念なことに、よこしまな) プログラムを作成できるようになります。

あなたがそれを悪用するかもしれないので、彼らがあなたができることを恣意的に制限し始めたら... まあ、それはWindowsではなく、iPhoneになるでしょう:)

于 2009-07-16T12:24:08.380 に答える
10

Windows でハード ドライブへの書き込みが簡単にできるのはなぜですか?

ハードドライブ上のすべてのファイルを上書きするなど、かなり悪いことをすることができます。

于 2009-07-16T12:22:13.683 に答える
7

デスクトップのセキュリティは、デスクトップを実行しているユーザーに与えられます。特権ユーザーでない場合、デスクトップに描画することはできません。

通常、デスクトップでは CreateDC() は実行されませんが、通常は WM_PAINT メッセージ ハンドラー中に特定のウィンドウに対して GetDC() が実行されることに注意してください。

プログラムは、ファイル システムを削除したり、レジストリを破棄したり (適切に許可されている場合) することもできます。デスクトップは、他のリソースと同様に、ユーザーが許可するリソースです。セキュリティ認証情報を使用してアプリケーションを実行すると、好きなことを実行できます。

ただし、実際には、ウィンドウを作成してその中にペイントします。

于 2009-07-16T12:25:24.260 に答える
4

それはとても簡単なはずだからです。

ルールとコントロールを配置することは、言語と Windows フレームワークでできることを削減することを意味するため、簡単です。これが起こった場合、フェンスの向こう側から、これはできない、あれはできないと叫び声が上がるでしょう。

言語を強力にするのはこれらの能力ですが、その力には危険が伴います。何かができるからといって、そうしなければならないわけではありません。ハード ドライブをフォーマットできますが、時計アプリケーションを起動するときにこれを行う必要があるという意味ではありません。

このレベルの「責任」に満足できない場合は、別の言語またはフレームワークを選択して記述してください。

于 2009-07-16T12:24:19.487 に答える
3

すべてがウィンドウであり、すべてのウィンドウには HANDLE があります。したがって、 があれば、そのDesktopHandle上に何でも描くことができます。それの何が問題なのですか。

もちろん、(あなたが言ったように)悪いことをしているアプリケーションは、自分でマシン上で実行することが許可されているため、ハードドライブのフォーマットなど、これよりも悪いことを行うことができます.

于 2009-07-16T12:25:21.860 に答える
1

これらのことをしなければならない時があるかもしれないからです。現時点では何も思いつかないと思いますが、画面に書き込むことが役立つ場合があります。

OS X には、画面に直接書き込むアプリケーションが多数あります。CPU 時間やカレンダーなどの有用な情報。カッコいい!

しかし、できることをすべてしなければならないわけではありません。

于 2009-07-16T12:38:28.400 に答える