2017-07-19 9 views
-2

私はカーネルモードとユーザーモードからの通信について認識していますが、イベント/反転呼び出しも認識していますが、文字列値をユーザーモードプロセスに送信する必要がありますカーネルモードのデバイスドライバを起動し、KMで応答を待つ(TRUEまたはFALSE BOOLEANなど)。カーネルモードからユーザーモードへの通信

"c:\ file.txt"という文字列を使用してください。今度は、この文字列をユーザーモードに送信するためにKMデバイスドライバが必要であり、そのUMプログラムがドライバの処理にTRUEまたはFALSE応答を返送するようにします。

私は多くのウェブサイトのトピック/記事、ドキュメントのサンプルを読んできましたが、探しているものが見つかりませんでした。

私は多分私は

データが降りてくると応答が戻されるまで、KMに、私は何とか一時停止のためだけ連続して待ってユーザーモードのプログラムでのセットアップスレッドを...わからなかったことを考えていた

助けていただければ幸いです。

+0

ようこそスタックオーバーフロー。現在のフォームの投稿が不明瞭で、Stack Overflowには適していません。 [ヘルプセンター](http://stackoverflow.com/help)にアクセスし、[よく質問する方法]セクション(http://stackoverflow.com/help/how-to-ask)を読んでください。 –

+0

標準的な方法はIOCTLです。ユーザーモード呼び出しは、DeviceIoControl関数です。これを別のスレッドで呼び出すか、非同期I/Oを使用することができます。カーネルモードドライバが到着したときにそのような要求を処理する方法の1つは、手動ディスパッチ方法を使用するように構成された別のキューにキューを再キューすることです。そのようにして、メッセージをユーザーモードに送信する必要があるときは、保留中の要求をWdfIoQueueRetrieveNextRequestを使用してキューから取り出し、通常の方法で完了させるだけです。 –

+0

...ドライバからのメッセージにはおそらく何らかのID番号が含まれているはずです。そのため、ユーザモードプログラムがIOCTLを送信して「真」または「偽」と言うときにID番号を含めることができるので、 IOCTLが応答しているメッセージ。 –

答えて

0

おそらく3つのIOCTLが必要です。

  1. IOCTL_READ_FROM_KERNEL。最初に接続後に送信され、最初のカーネルメッセージを待ちます。
  2. IOCTL_RESPOND_AND_READ_FROM_KERNEL。応答を送り、次のメッセージを待つ。
  3. IOCTL_RESPOND。応答を送信します。

ユーザーモードコードはIOCTLを呼び出します。 IOCTL_RESPONDはすぐに戻り、スレッドはおそらく終了します。

他の2つのIOCTLはカーネルが何かを送るまで待つでしょう。これには、メッセージを識別するために使用できるIDの形式が含まれます。 カーネルにメッセージがある場合、待機中のUMスレッドが送信されるかどうかを調べることができます。

UMが接続すると、配信キューがプルオフされるか、またはウェイターキューに追加されます。

0

多くのオプションがあります。 >今、ユーザーモードから設定ファイルを読み込むが

最初に述べた技術が正式である -が

  • 共有イベント
  • 名前付きパイプ
  • 保留中のIOCTL
  • コードインジェクション

    1. ポートファイルシステムミニフィルタデバイスドライバでサポートされており、#3と#5は比較的簡単です。 #2、#4は、しかし、あなたには、いくつかの文書化されていない魔法でカーネルモードから名前付きパイプを実装することができます10.

      のうちの9回、適切な/より複雑かつ信頼性が低い、一方、 NtCreateNamedPipeFileのアドレスをKeServiceDescriptorTableから抽出することができます。 NtCreateNamedPipeFileはIoCreateFileに依存します - IoCreateFileは自由にアクセスできるエクスポートされたカーネルモードルーチンです。それ以外のものは、カーネルモードの名前付きパイプサーバーに実装するのは簡単です。クライアントの実装後であれば、ZwCreateFile、ZwWriteFile、ZwReadFileなどの単純なネイティブAPIルーチンを使用するだけで済むので、等

      私はポートを調べて通信することをお勧めします。マイクロソフトではGitHubで独自のサンプルをいくつか持っています。

  • 関連する問題