FltCreateCommunicationPort 関数 (fltkernel.h)
FltCreateCommunicationPort は、ミニフィルターがユーザー モードのアプリケーションとサービスからの接続要求を受信できる通信サーバー ポートを作成します。
構文
NTSTATUS FLTAPI FltCreateCommunicationPort(
PFLT_FILTER Filter,
PFLT_PORT *ServerPort,
POBJECT_ATTRIBUTES ObjectAttributes,
PVOID ServerPortCookie,
PFLT_CONNECT_NOTIFY ConnectNotifyCallback,
PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback,
PFLT_MESSAGE_NOTIFY MessageNotifyCallback,
LONG MaxConnections
);
パラメーター
Filter
[in]呼び出し元の不透明なフィルター ポインター。
ServerPort
[out]通信サーバー ポートの不透明なポート ハンドルを受け取る呼び出し元によって割り当てられた変数へのポインター。 ミニフィルターは、このハンドルを使用して、ユーザー モード アプリケーションからの着信接続要求をリッスンします。
ObjectAttributes
[in]通信サーバー ポートの属性を指定する OBJECT_ATTRIBUTES 構造体へのポインター。 この構造体は、InitializeObjectAttributes以前の呼び出しによって初期化されている必要があります。 このパラメーターは必須であり、NULL にすることはできません。 通信ポート オブジェクトのこの構造体のメンバーは、次のとおりです。
メンバー | 価値 |
---|---|
の長さ |
InitializeObjectAttributes このメンバーを sizeof(OBJECT_ATTRIBUTES) に設定します。 |
ObjectName | ポート オブジェクトの一意の名前 (L"\MyFilterPort"など) を含む UNICODE_STRING 構造体へのポインター。 |
SecurityDescriptor | ポート オブジェクトに適用するセキュリティ記述子 (SECURITY_DESCRIPTOR) へのポインター。 必要に応じて、FltBuildDefaultSecurityDescriptor呼び出すことによって、既定のセキュリティ記述子を作成できます。 |
属性 | ポート ハンドルに必要な属性を指定するフラグのビットマスク。 これらのフラグには、OBJ_KERNEL_HANDLEを含める必要があります。 呼び出し元は必要に応じて、OBJ_CASE_INSENSITIVE フラグを設定することもできます。これは、完全一致検索を実行するのではなく、名前参照コード ObjectName の大文字と小文字を無視する必要があることを示します。 |
ServerPortCookie
[入力、省略可能]ミニフィルターによって定義されたコンテキスト情報へのポインター。 この情報を使用して、同じミニフィルターによって作成された複数の通信サーバー ポートを区別できます。 FltMgr は、このコンテキスト ポインターをパラメーターとして ConnectNotifyCallback ルーチンに渡します。 このパラメーターは省略可能であり、NULL にすることができます。
ConnectNotifyCallback
[in]ConnectNotifyCallbackコールバック ルーチン呼び出し元が指定したポインター。 FltMgr は、ユーザー モード アプリケーションが FilterConnectCommunicationPortを呼び出して接続要求をミニフィルターに送信たびに、このルーチンを呼び出します。 このパラメーターは必須であり、NULL にすることはできません。
DisconnectNotifyCallback
[in]呼び出し元が指定した DisconnectNotifyCallback コールバック ルーチンへのポインター。 FltMgr 、クライアント ポートのユーザー モード ハンドル数が 0 に達したとき、またはミニフィルターがアンロードされるときに、このルーチンを呼び出します。 このパラメーターは必須であり、NULL にすることはできません。
MessageNotifyCallback
[入力、省略可能]MessageNotifyCallbackコールバック ルーチン呼び出し元から提供されるポインター。 FltMgr 、ユーザー モード アプリケーションが FilterSendMessageを呼び出して、クライアント ポートを介してミニフィルターにメッセージを送信するたびに、このルーチンを呼び出します。 このパラメーターは省略可能であり、NULL にすることができます。 NULL の場合、ポートにデータを送信するためにユーザー モードから行われた要求はエラーを受け取ります。
MaxConnections
[in]このサーバー ポートで許可される同時クライアント接続の最大数。 このパラメーターは必須であり、0 より大きい必要があります。
戻り値
FltCreateCommunicationPort は、STATUS_SUCCESSまたは次のいずれかの適切な NTSTATUS 値を返します。
リターン コード | 形容 |
---|---|
STATUS_FLT_DELETING_OBJECT | 指定した フィルター が取り壊されています。 これはエラー コードです。 |
STATUS_INSUFFICIENT_RESOURCES | FltCreateCommunicationPort プール割り当てエラーが発生。 これはエラー コードです。 |
STATUS_OBJECT_NAME_COLLISION | 同じ名前のミニフィルター通信ポートが既に存在します。 ポート名は一意である必要があります。 これはエラー コードです。 |
備考
ミニフィルター FltCreateCommunicationPort を呼び出して、通信サーバー ポート オブジェクトを作成します。
サーバー ポートが作成されたら、ユーザー モード アプリケーションは、FilterConnectCommunicationPortを呼び出すことによってポートに接続できます。 接続されている場合、ユーザー モード アプリケーションは、FilterSendMessage、FilterGetMessage、FilterReplyMessageなどのユーザー モード メッセージング機能を呼び出すことによってメッセージを送受信できます。
呼び出し元は、FltCreateCommunicationPort の ObjectAttributes パラメーターに OBJ_KERNEL_HANDLE Attributes フラグ設定する必要があります。 このフラグを設定すると、FltCreateCommunicationPort の呼び出し元のコンテキストが実行されている可能性があるユーザー モード プロセスでミニフィルター通信サーバー ポート ハンドルが使用されなくなります。 このフラグが設定されていない場合、FltCreateCommunicationPort はSTATUS_INVALID_PARAMETERを返します。
FltCreateCommunicationPort を作成 サーバー ポートは、最終的に FltCloseCommunicationPort呼び出すことによって閉じる必要があります。 サーバー ポートを閉じると、サーバー ポートへの新しい接続は許可されず、FilterConnectCommunicationPort へのすべての呼び出しは失敗します。 ただし、既存の接続は、ユーザー モード アプリケーションまたはミニフィルターによって閉じられるまで、またはミニフィルターがアンロードされるまで開いたままです。
詳細については、「ユーザー モードとミニフィルターの間の通信を参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL |
関連項目
FilterConnectCommunicationPort
FltBuildDefaultSecurityDescriptorの
FltCloseClientPortをする
FltCloseCommunicationPortをする
FltFreeSecurityDescriptorをする
FltSendMessageをする
InitializeObjectAttributes の
ProbeForReadの
ProbeForWriteの