ユーザー モードとミニフィルターの間の通信
FltMgr は、ユーザー モード (UM) アプリケーションとカーネル モード (KM) ミニフィルター間の通信ポートを介した通信をサポートします。 シナリオ例は、ウイルスやマルウェアのファイルをスキャンするために、対応する KM ミニフィルターと通信する必要があるウイルス対策アプリケーションです。
ミニフィルターは、通信ポート オブジェクトに適用するセキュリティ記述子を指定することで、ポートのセキュリティを制御します。 通信ポートを介した通信はバッファリングされないため、より高速で効率的です。
UM アプリまたはサービスは、双方向通信のためにミニフィルターからのメッセージに応答できます。 通信は次のように確立されます。
ミニフィルター ドライバーは FltCreateCommunicationPort を呼び出して通信サーバー ポートを作成します。 listener ポートの作成者としてミニフィルターは、作成されたポートで受信接続のリッスンをすぐに暗黙的に開始します。
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 |