共用方式為


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

呼叫端提供的變數指標,該變數會接收回呼數據參數 (FLT_PARAMETERS) 結構的 MdlAddress (或 OutputMdlAddress) 成員的指標(請注意,這個成員本身是指針)。 這個參數是選擇性的,而且可以 NULL。 如果 I/O 作業沒有 MDL 欄位,則此參數會收到 NULL

[out] Buffer

呼叫端提供的變數指標,該變數會接收回呼數據參數結構中適當緩衝區成員的指標(視主要函式程序代碼而定)。請注意,這個成員本身是指針。

[out] Length

呼叫端提供的變數指標,這個變數會接收回呼數據參數結構中緩衝區長度成員的指標。 如果工作沒有長度欄位,此參數會收到 NULL

[out, optional] DesiredAccess

呼叫端提供的變數指標,該變數會接收適用於此類型 I/O 作業的存取類型、IoReadAccessIoWriteAccessIoModifyAccessIoReadAccess 表示小型篩選驅動程式可以檢查緩衝區的內容,但無法變更內容。 IoWriteAccessIoModifyAccess,這相當於迷你篩選驅動程式具有緩衝區的讀取和寫入存取權。

傳回值

FltDecodeParameters 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,如下所示:

傳回碼 描述
STATUS_INVALID_PARAMETER 回呼資料 (FLT_CALLBACK_DATA) 結構代表沒有任何緩衝區參數的 I/O 作業。 這是錯誤碼。

言論

FltDecodeParameters 傳回 I/O 作業參數的指標,而不是參數值,讓呼叫端可以視需要修改參數的值。

FltDecodeParameters 可用於快速 I/O 作業,以及以 IRP 為基礎的作業。 對於文件系統篩選條件 (FSFilter) 回呼作業來說,這並不有意義,因為這些作業沒有緩衝區參數。

IOCTL 和 FSCTL 作業可以有一或兩個緩衝區,視所使用的緩衝方法而定。 如果作業有兩個緩衝區(和兩個長度字段),FltDecodeParameters 會傳回 OutputBufferOutputBufferLength和/或 OutputMdlAddress 字段。

並非所有四個參數都會針對每個 I/O 作業傳回。 例如,針對IRP_MJ_READ要求,FltDecodeParameters 設定輸出參數,如下所示。

參數 價值
MdlAddressPointer &(CallbackData->Iopb->Parameters.Read.MdlAddress)
緩衝區 &(CallbackData->Iopb->Parameters.Read.ReadBuffer)
長度 &(CallbackData->Iopb->Parameters.Read.Length)
DesiredAccess IoWriteAccess

要求

要求 價值
目標平臺 普遍
標頭 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