私は、次のようなソフトウェアを書いています。カーネルモードドライバとユーザーモードのWindowsサービスです。カーネルドライバは、さまざまなイベントと情報をサービスに通知し、サービスが処理します。
私の質問はこれです: このコミュニケーションを設定する最良の方法は何ですか?ミニフィルタとFilterGetMessage()を使ってカーネルからメッセージを得ることは可能ですが、新しいデータをカーネルにポーリングする必要があります。私はカーネルが処理する新しいデータがあるときにサービスに通知するシステムを必要とします。
補足として、サービス自体はプロデューサのコンシューマパターンがあるので、カーネルからデータを取得し、処理するワーカースレッドの別のセットのキューに入れるだけのスレッドがあります。このデザインの考えも歓迎します。
回答:
回答№1は2ReadFileまたはDeviceIoControlをサービス側?ドライバ側の簡単なIRPは、何か報告するときに完了します。サービスはスレッドをスピンアップするか、I / O完了コールバックを使用する必要があります。また、サービスの終了時にブロッキングコールをキャンセルするにはCancelIoを押します。