2017-01-18 22 views
0

私はWindows 7カーネルドライバを作成中です。今日は、ディスプレイからデバッグ情報を出力させたいのですが。今私はDbgPrintまたはKdPrintの関数を使うことができますが、文字列やその他のものを直接モニタに出力したいと考えています。このようにして、デバッグビューを起動して出力を確認する必要はありません。これは教育訓練としても役立ちます。Windows - カーネルドライバを使用して直接ビデオディスプレイに書き込みますか?

私が理解しているように、私は表示のためにフレームバッファにアクセスし、それに自分の値を書き込む必要がありますか?しかし、私はこれを行う方法の手がかりがありません。基本的には、何かをモニターに直接書き込めるようにしたいので、ウィンドウが表示しているものと重なることになります。私はこれが奇妙に聞こえるかもしれないことを知っていますが、ただ楽しみのためだけです。

主要な目標は、カーネルのドライバからこれを行うことです。ユーザーランドプロセスの内部ではありません。私は640x480の解像度を使いたいだけです。それ以上のものはありません。私が正しく理解すれば、これ以上のものは私の現在のビデオカードのために私自身のディスプレイドライバを書く必要があります。

私のシステムのセットアップ:あなたのすべてのための3.00Ghz @ のWindows 7 SP1 x86の のIntel Pentium 4 のNVIDIA GeForce FX 5200

おかげで、事前に役立ちます!

答えて

2

ここで私はDbgPrintまたはKdPrint関数を使用することができますが、文字列などを直接モニタに出力したいと考えています。

ディスプレイドライバを使用する必要があります。誰があなたのコンピュータにWindowsを実行しているといっても、モニタはありますか?

現在の画像を格納するRAMにMSDOSスタイルの単一フレームバッファは存在しません。現代のGPUはそれ以上は機能しません。代わりに、オペレーティングシステムは、単純化すると、合成のために引き渡す単一バッファの画面全体を構成するように要求します。すべてのウィンドウは独自のフレームバッファであり、GPUはすべてを合成します画面全体の画像に

あなたがそうしたいと思っているだけで、あなたのカーネルドライバからいくつかのメモリ領域に書き込むことはできません。a)どこにあるのか分からず、b)他のコンポーネントと競合します。それは悪いことです。私は私のように感じる

EDITは、後天的にこれを追加する必要があります

ポイントは非常に簡単です:ドライバーではなく、ユーザー・インターフェースであるドライバを書きます。それは運転手の仕事ではありません。 UI機能をドライバに組み込むことは、多くの理由から悪い考えであり、単に行うべきではありません。

+0

カーネルモードでディスプレイドライバをどうやって使うのですか? – DD314

+0

可能であれば、ユーザーランドの通常のウィンドウAPIを使用します。それはあなたが通常これを扱う方法です:ユーザランドでデーモンを実行し、カーネルドライバに実際に付いているものからの読み込みをブロックし、表示させるとすぐに、読者に知らせてください。 –

+0

通常、私はWindows APIを使用します。実際には、これを行うためにDirect2D、つまりGDIを使用します。しかし、わかりやすいように、私はカーネルモードで表示操作を行います。この方法で、私はユーザーランドのアプリケーションとそれに関連付けられたコードのための別のプロジェクトを持つ必要はありません。視覚的に私に物事を報告することができるただ一つのドライバーになります。 – DD314

関連する問題