2017-08-01 14 views
-2

コンソールサブシステムはどのように機能しますか?私は、ウィンドウのような高レベルのものは、自動的にプログラムのコンソールウィンドウを作成し、WriteConsoleとReadConsoleで書いたり読んだりできるコンソールウィンドウにハンドルを与えますが、どうすればウィンドウ自体は動作しますか?ウィンドウはGDIを使って文字をコンソールに描画しますか?またはいくつかの隠された内部機能?カーテンの後ろで何が起こるのですか?Windowsコンソールサブシステムはどのように機能しますか?

+0

あなたが求めている質問は、マイクロソフトからのみ回答できます。閉鎖されたシステムなので、人々は何が起こっているかだけ推測することができます。 –

+0

@EmettSpeerはい、しかし、ここでは「マイクロソフトが答えてくれるだけのものは何か」というように、「何がハンドルですか?ここで答えられた、なぜdownvote? –

+0

質問は大きく、そのプロジェクトで作業していない人は答えられません。私もあなたの質問をd​​ownvoteしませんでしたが、その可能性が高いので、あなたの質問に大きな。 –

答えて

1

この質問は、あまりにも詳細な方法で実際に答えるにはあまりにも曖昧ですが、私はそれを撃つでしょう。

32ビットのWindowsでのコンソールの少なくとも3つの異なる実装があります。Windowsでの

  • MS-DOSボックスがNT4/2000/XP上の95/98/ME
  • CSRSS所有コンソールウィンドウ/ 2003/Vistaの
  • 7以降

  • ConHost所有のコンソールウィンドウNTベースのコンソールクライアントアプリケーションとCONSO間の通信にIPCを使用ルオーナープロセス。 ReadFileWriteFileの関数は特別なハックを持ち、コンソールハンドルを与えられたときにコンソールの所有者と通信します( "通常の"ハンドルのようにカーネルを呼び出すのではなく)。

    コンソールウィンドウは通常のHWNDで、ほとんどの部分が通常のGDIを使用します。

    旧式のコンソールは、おそらくBIOS/VGAのものを直接使用するネイティブのハードウェアフルスクリーンモードもサポートしています。ウィンドウモードでは私はそれが文書化されていないGdiConsoleTextOut関数を使用していると信じています。 CSRSSはコアプロセスなので、より高度なDLLのロードを避けるために文書化されていないNT関数を呼び出すかもしれませんが、実際の描画コードについては特別なことは何もありません。

    新しいバージョンのWindowsでは、DWMが原因でフルスクリーンモードが削除され、特権のないプロセス(ConHost.exe)がCSRSSに対してshatter attacksを防ぐためのコンソールウィンドウを所有しています。 ConHost.exeはPolyTextOutWをインポートするので、それをテキストの描画に使用していると仮定します。

    NTコンソールでは、文書化されていないビットマップグラフィックスモードもサポートされています。また、プレーンGDIも使用すると想定しています。

    これはもちろん文書化されていない実装の詳細であり、いつでも変更することができます。あなたが公式の文書に最も近いのはおそらくthis blog postで、使用されているIPC方法が文書化されていないLPCの特徴であることが明らかになっています。

  • 関連する問題