FltDecodeParameters 函式 (fltkernel.h)
FltDecodeParameters 會傳回記憶體描述元清單的指標, (MDL) 位址、緩衝區指標、緩衝區長度,以及 I/O 作業所需的存取參數。 這可節省迷你篩選驅動程式,讓 switch 語句尋找這些參數在協助程式例程中的位置,以存取 MDL 位址、緩衝區指標、緩衝區長度,以及多個作業類型的所需存取。
語法
NTSTATUS FLTAPI FltDecodeParameters(
[in] PFLT_CALLBACK_DATA CallbackData,
[out] PMDL **MdlAddressPointer,
[out] PVOID **Buffer,
[out] PULONG *Length,
[out, optional] LOCK_OPERATION *DesiredAccess
);
參數
[in] CallbackData
I/O 作業的回呼數據 (FLT_CALLBACK_DATA) 結構的指標。
[out] MdlAddressPointer
呼叫端提供的變數指標,該變數接收回呼數據 (參數 (或 OutputMdlAddress) 成員的指標,FLT_PARAMETERS) 結構 (請注意,這個成員本身是指針) 。 此參數是選擇性的,可以是 NULL。 如果 I/O 作業沒有 MDL 字段,此參數會收到 NULL。
[out] Buffer
呼叫端提供的變數指標,該變數會根據回呼數據參數結構中的主要函式程式代碼) ,接收適當緩衝區成員的指標 (, (請注意,這個成員本身是指針) 。
[out] Length
呼叫端提供的變數指標,該變數會接收回呼數據參數結構中緩衝區長度成員的指標。 如果作業沒有長度欄位,此參數會收到 NULL。
[out, optional] DesiredAccess
呼叫端提供的變數指標,接收適用於此 I/O 作業類型的存取類型、其中一個 IoReadAccess、 IoWriteAccess 或 IoModifyAccess。 IoReadAccess 表示迷你篩選驅動程式可以檢查緩衝區的內容,但無法就地變更內容。 IoWriteAccess 和 IoModifyAccess 相等,表示迷你篩選驅動程式具有緩衝區的讀取和寫入存取權。
傳回值
FltDecodeParameters 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,如下所示:
傳回碼 | Description |
---|---|
STATUS_INVALID_PARAMETER | 回呼數據 (FLT_CALLBACK_DATA) 結構代表沒有任何緩衝區參數的 I/O 作業。 這是錯誤碼。 |
備註
FltDecodeParameters 會傳回 I/O 作業參數的指標,而不是參數值,以便呼叫端可以視需要修改參數的值。
FltDecodeParameters 可用於快速 I/O 作業,以及 IRP 型作業。 文件系統篩選 (FSFilter) 回呼作業並不有意義,因為這些作業沒有緩衝區參數。
根據使用的緩衝方法,IOCTL 和 FSCTL 作業可以有一或兩個緩衝區。 如果作業有兩個緩衝區 (和兩個長度欄位 ) ,FltDecodeParameters 會視需要傳回 OutputBuffer、OutputBufferLength 和/或 OutputMdlAddress 字段。
並非所有四個參數都會針對每個 I/O 作業傳回。 例如,針對IRP_MJ_READ要求, FltDecodeParameters 會設定輸出參數,如下所示。
參數 | 值 |
---|---|
MdlAddressPointer | & (CallbackData-Iopb-Parameters.Read.MdlAddress>>) |
Buffer | & (CallbackData-Iopb-Parameters.Read.ReadBuffer>>) |
長度 | & (CallbackData-Iopb-Parameters.Read.Length>>) |
DesiredAccess | IoWriteAccess |
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | fltkernel.h (包含 Fltkernel.h) |
程式庫 | FltMgr.lib |
IRQL | 任何層級 |