FltMgr は、ユーザー モード (UM) アプリケーションとカーネル モード (KM) ミニフィルター間の通信ポートを介した通信をサポートしています。 シナリオ例は、ウイルスやマルウェアのファイルをスキャンするために、対応する KM ミニフィルターと通信する必要があるウイルス対策アプリケーションです。
ミニフィルターは、通信ポート オブジェクトに適用するセキュリティ記述子を指定することで、ポートのセキュリティを制御します。 通信ポートを介した通信はバッファリングされないため、より高速で効率的です。
UM アプリまたはサービスは、双方向通信のためにミニフィルターからのメッセージに応答できます。 通信は次のように確立されます。
ミニフィルター ドライバーは 、FltCreateCommunicationPort を呼び出して通信サーバー ポートを作成します。 リスナー ポートの作成者であるミニフィルターは、作成したポートで直ちに着信接続のリッスンを開始します。
UM アプリまたはサービスが FilterConnectCommunicationPort を呼び出してポートへの接続を試みると、 FltMgr はミニフィルターの ConnectNotifyCallback コールバック ルーチンを、新しく作成された接続へのハンドルと共に呼び出します。 コールバックが完了すると、 FltMgr は UM 呼び出し元に、UM 呼び出し元のエンドポイントを表す別のファイル ハンドルを接続に渡します。 UM 呼び出し元は、このハンドルを使用して、複数の I/O 完了ポートをリスナー ポートに関連付けることができます。 この機能は、大量の I/O 操作を同時に処理する必要があるアプリに役立ちます。
FltMgr は、UM 呼び出し元がポートのセキュリティ記述子で指定された十分なアクセス権を持っている場合にのみ、接続要求を受け入れます。 ポートへの各接続は、独自のメッセージ キューとプライベート エンドポイントを取得します。
エンドポイント (カーネルまたはユーザー) を閉じると、その接続が終了します。 UM 呼び出し元がエンドポイントへのハンドルを閉じると、 FltMgr はミニフィルター ドライバーの DisconnectNotifyCallback ルーチンを呼び出して、ミニフィルター ドライバーが接続へのハンドルを閉じることができるようにします。
通信サーバーポートを閉じると、新しい接続はできなくなりますが、既存の接続は終了しません。 FltMgr は、ミニフィルター ドライバーのアンロード時に既存の接続を終了します。
UM と KM の間の通信のための FltMgr ルーチン
FltMgr は、UM アプリケーションと通信するミニフィルターの次のサポート ルーチンを提供します。
UM アプリケーションとサービスは、次のシステム提供のサポート ルーチンを使用してミニフィルター ドライバーと通信できます。
UM と KM の間の通信のためのミニフィルター コールバック ルーチン
ミニフィルターは、UM と KM の間の通信をサポートするために、次のコールバック ルーチンを実装します。 FltCreateCommunicationPort を呼び出すときに、これらのルーチンへのポインターを渡します。
| コールバック ルーチン名 | コールバック ルーチンの種類 |
|---|---|
| ConnectNotifyCallback | PFLT_CONNECT_NOTIFY |
| DisconnectNotifyCallback | PFLT_DISCONNECT_NOTIFY |
| MessageNotifyCallback | PFLT_MESSAGE_NOTIFY |