FilterReplyMessage 関数 (fltuser.h)
FilterReplyMessage 関数は、カーネル モードミニフィルターからのメッセージに応答します。
構文
HRESULT FilterReplyMessage(
[in] HANDLE hPort,
[in] PFILTER_REPLY_HEADER lpReplyBuffer,
[in] DWORD dwReplyBufferSize
);
パラメーター
[in] hPort
FilterConnectCommunicationPort の以前の呼び出しによって返される通信ポート ハンドル。 このパラメーターは必須であり、 NULL にすることはできません。
[in] lpReplyBuffer
ミニフィルターに送信される応答を含む呼び出し元によって割り当てられたバッファーへのポインター。 応答には FILTER_REPLY_HEADER 構造体が含まれている必要がありますが、それ以外の場合、その形式は呼び出し元定義です。 このパラメーターは必須であり、 NULL にすることはできません。
[in] dwReplyBufferSize
lpReplyBuffer パラメーターが指すバッファーのサイズ (バイト単位)。 「解説」を参照してください。
戻り値
FilterReplyMessage は 、成功した場合S_OKを返します。 それ以外の場合は、エラー値を返します。
解説
ユーザー モード アプリケーションは 、FilterReplyMessage 関数を呼び出して、カーネル モードミニフィルターから受信したメッセージに応答します。
ミニフィルターからメッセージを取得するには、 FilterGetMessage を呼び出します。
ミニフィルターにメッセージを送信するには、 FilterSendMessage を呼び出します。
ミニフィルターは 、FltSendMessage を呼び出してユーザー モード アプリケーションにメッセージを送信します。
(システム固有の) 構造体 の埋め込みの 要件により、 FltSendMessage と FilterReplyMessage に関連付けられているバッファーのサイズを設定するときに精度が必要です。 たとえば、データをミニフィルター に (FilterReplyMessage 経由で) 送信する必要があるとします。 ユーザー モード コンポーネントは、次の構造を宣言してこれを行う場合があります。
typedef struct _REPLY_STRUCT
{
FILTER_REPLY_HEADER Header;
MY_STRUCTURE Data; // The structure to be sent to the minifilter.
} REPLY_STRUCT, *PREPLY_STRUCT;
この構造を考えると、FilterReplyMessage の呼び出し元が dwReplyBufferSize パラメーターを にsizeof(REPLY_STRUCT)
設定し、FltSendMessage の ReplyLength パラメーターを同じ値に設定することは明らかです。 ただし、構造体のパディングの特異性により、 sizeof(REPLY_STRUCT)
が より sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
大きくなる可能性があります。 この場合、 FltSendMessage はSTATUS_BUFFER_OVERFLOWを返します。
そのため、 の代わりに dwReplyBufferSize と ReplyLength の両方を に設定して、FilterReplyMessage と FltSendMessage (上記のsizeof(REPLY_STRUCT)
例を利用) をsizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
呼び出することをお勧めします。 これにより、 REPLY_STRUCT 構造体の末尾にある余分なパディングは無視されます。
要件
サポートされている最小のクライアント | SP4、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のオペレーティング システムの Microsoft Windows 2000 更新プログラムロールアップ 1 で使用できます。 Windows 2000 SP4 以前のオペレーティング システムでは使用できません。 |
対象プラットフォーム | ユニバーサル |
Header | fltuser.h (FltUser.h を含む) |
Library | FltLib.lib |
[DLL] | FltLib.dll |