6

カーネル モードで実行される WFP コールアウト ドライバーを作成しました。現在、このドライバーとユーザーモードで実行される GUI アプリケーションとの間で通信する方法を見つけようとしています。何か案は?

まさに私が欲しいのは次のようなものです:

  1. コールアウト ドライバーは、ポート 4444 で受信接続を検出します (これは私の質問の一部ではありません)。
  2. ドライバーは、ユーザー モード アプリにメッセージを送信します。
  3. アプリはユーザーに通知を表示し、接続を受け入れるかブロックするかを尋ねます。
  4. ユーザー モード アプリは、ユーザーの応答をコールアウト ドライバーに返します。

ありがとう!

4

3 に答える 3

4

私はLordDoskiasに同意します。デバイスオブジェクトを作成し、Win32レルムで使用できるようにする必要があります。次に、、、およびすでに説明したを使用CreateFileしてReadFileリクエストを送信できます。WriteFileDeviceIoControl

ドライバーからアプリケーションへの通知を受け取るために、いわゆる逆呼び出しモデルを使用できます。いくつかのIRPを(前述のメカニズムの1つを介して)送信し、非同期で(または別のスレッドで)実行します。次に、ドライバーは、ユーザーモードコンポーネントに何かについて通知し、完成したIRPを返す必要があるまで、それらをぶら下げたままにします。別の方法は、イベントを設定し、ドライバーが何らかのキューに保持しているものをUMに要求させることです...

要点は、ドライバーがユーザーモードアプリケーションにメッセージを送信できる直接的な方法はないということです。

于 2011-02-12T18:55:47.877 に答える
3

この API 呼び出しを確認してください -DeviceIoControl

基本的に、オブジェクト マネージャーにドライバーを登録すると、GUI アプリケーションがドライバーを開いてさまざまなコマンドとデータを送信できるようになり (それを行うためのバッファーがあります)、カスタム IOCTL コードを送信する必要があります ( WDK のマニュアルで確認してください)。

于 2011-02-10T21:30:44.867 に答える