おそらく数週間以内に調査できるので、この質問をしますが、もっと知識が豊富で方向性を教えてくれる人がここにいることを願っています。
私の質問は、 (楽しみのために)リモーティングデスクトップソフトウェアを作成しようとする数年の挑戦から生じています。最初は、デスクトップ全体の単純なPNGを送信しました。それから私はついにミラードライバーキャプチャ(DemoForgeによるDFMirageミラードライバー)に入りました。これは超高速でした。しかし、それは間違いなく十分な速さではありません。画像を16x16のタイルに分割してキャッシュを実装しようとしています。これにより、繰り返しが多くなり、ハッシュを送信するだけで済みますが、一般的には、少し遅れてがっかりします。
APIフックを含む別の最近のプロジェクトもあります。私は現在、この他のプロジェクトでDirect3Dをフックしています。C#はマネージド言語であるため、C#からは、EasyHookのようなフッキングライブラリを使用することを意味します。これをリモートデスクトッププロジェクトに適用できるかどうか疑問に思いました。
質問:gdi32.dllをフックして、すべてのデスクトップ図面をアプリケーションにリダイレクトすることは可能ですか?可能であれば、どうすればよいですか?
しかし、待ってください。私の質問自体が間違っている可能性があるので、まだ答えにジャンプしないでください。
もちろん、私の最終的な目標は、あるコンピューターから別のコンピューターに画面を効率的に転送することです。現在、VNCおよびほとんどのリモートデスクトップ製品は、画面を画像として転送することで機能します。ピクセルデータとして。これは非常に柔軟性がありますが、可能な限り遅いことは間違いありません。
だから私の推測では、gdi32.dllはデスクトップに表示されるすべてのものを描画します。これは正しいです?DWM aeroはもっと「高度な」ものを使用しているように見えるので、私は間違っていると思います。では、デスクトップにすべてを描画するのは何ですか?窓はどのように描かれていますか?
私の考えは、すべての描画機能をインターセプトできれば、ピクセルレベルを超えて、実際のピクセルの代わりに描画コマンドを送信するWindowsリモートデスクトップのようになることができるということです。
私が完全に間違っている場合、リモートデスクトップはこれらの基本的な描画コマンドを送信する方法をどのように「知っている」のでしょうか。ドキュメントには、リモートデスクトップには、これらの基本的な描画コマンドとして画面に表示されているものを「理解」できる「基礎となるレンダリングエンジン」があると記載されていますが、どうすればそれを取得できますか?
このグラフィカルレベルでのWindowsの内部に関するより大きな視点と、目標を達成する方法(現実的でさえある場合)の方向性を示すことができる答えを探しています。