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 作業的存取類型、IoReadAccess、IoWriteAccess或 IoModifyAccess。 IoReadAccess 表示小型篩選驅動程式可以檢查緩衝區的內容,但無法變更內容。 IoWriteAccess 和 IoModifyAccess,這相當於迷你篩選驅動程式具有緩衝區的讀取和寫入存取權。
傳回值
FltDecodeParameters 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,如下所示:
傳回碼 | 描述 |
---|---|
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) |
緩衝區 | &(CallbackData->Iopb->Parameters.Read.ReadBuffer) |
長度 | &(CallbackData->Iopb->Parameters.Read.Length) |
DesiredAccess | IoWriteAccess |
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | fltkernel.h (包括 Fltkernel.h) |
連結庫 | FltMgr.lib |
IRQL | 任何層級 |