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を呼び出すことによってポートに接続できます。 接続されている場合、ユーザー モード アプリケーションは、FilterSendMessageFilterGetMessageFilterReplyMessageなどのユーザー モード メッセージング機能を呼び出すことによってメッセージを送受信できます。

呼び出し元は、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

FilterGetMessage

FilterReplyMessage

FilterSendMessage

FltBuildDefaultSecurityDescriptor の

FltCloseClientPort を する

FltCloseCommunicationPort を する

FltFreeSecurityDescriptor を する

FltSendMessage を する

InitializeObjectAttributes の

OBJECT_ATTRIBUTES

PFLT_FILTER_UNLOAD_CALLBACK

ProbeForRead の

ProbeForWrite の

SECURITY_DESCRIPTOR