共用方式為


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 作業類型的存取類型、其中一個 IoReadAccessIoWriteAccessIoModifyAccessIoReadAccess 表示迷你篩選驅動程式可以檢查緩衝區的內容,但無法就地變更內容。 IoWriteAccessIoModifyAccess 相等,表示迷你篩選驅動程式具有緩衝區的讀取和寫入存取權。

傳回值

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 任何層級

另請參閱

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer