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參數設定為相同的值。 不過,由於結構填補 idiosyncrasies, sizeof(REPLY_STRUCT)
可能會大於 sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
。 如果是這種情況, FltSendMessage 會傳回STATUS_BUFFER_OVERFLOW。
因此,建議您呼叫 FilterReplyMessage 和 FltSendMessage (利用上述範例) ,方法是將 dwReplyBufferSize 和 ReplyLength 設定為 sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
,而不是 sizeof(REPLY_STRUCT)
。 這可確保忽略 REPLY_STRUCT 結構結尾的任何額外填補。
需求
最低支援的用戶端 | 適用于 SP4、Windows XP SP2、Windows Server 2003 SP1 和更新版本的作業系統的 Microsoft Windows 2000 Update 匯總 1。 無法在 Windows 2000 SP4 和舊版作業系統中使用。 |
目標平台 | Universal |
標頭 | fltuser.h (包含 FltUser.h) |
程式庫 | FltLib.lib |
Dll | FltLib.dll |