/ /カーネルモードからWindowsサービスにイベントを送信する - c ++、windows、multithreading、kernel

カーネルモードからイベントをWindowsサービスに送信する - c ++、windows、multithreading、kernel

私は、次のようなソフトウェアを書いています。カーネルモードドライバとユーザーモードのWindowsサービスです。カーネルドライバは、さまざまなイベントと情報をサービスに通知し、サービスが処理します。

私の質問はこれです: このコミュニケーションを設定する最良の方法は何ですか?ミニフィルタとFilterGetMessage()を使ってカーネルからメッセージを得ることは可能ですが、新しいデータをカーネルにポーリングする必要があります。私はカーネルが処理する新しいデータがあるときにサービスに通知するシステムを必要とします。

補足として、サービス自体はプロデューサのコンシューマパターンがあるので、カーネルからデータを取得し、処理するワーカースレッドの別のセットのキューに入れるだけのスレッドがあります。このデザインの考えも歓迎します。

回答:

回答№1は2

ReadFileまたはDeviceIoControlをサービス側?ドライバ側の簡単なIRPは、何か報告するときに完了します。サービスはスレッドをスピンアップするか、I / O完了コールバックを使用する必要があります。また、サービスの終了時にブロッキングコールをキャンセルするにはCancelIoを押します。