Fungsi FltDecodeParameters (fltkernel.h)

FltDecodeParameters mengembalikan pointer ke alamat daftar deskriptor memori (MDL), penunjuk buffer, panjang buffer, dan parameter akses yang diinginkan untuk operasi I/O. Ini menghemat driver minifilter dari memiliki pernyataan switch untuk menemukan posisi parameter ini dalam rutinitas pembantu yang mengakses alamat MDL, penunjuk buffer, panjang buffer, dan akses yang diinginkan untuk beberapa jenis operasi.

Sintaks

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

Parameter

[in] CallbackData

Arahkan ke struktur data panggilan balik (FLT_CALLBACK_DATA) untuk operasi I/O.

[out] MdlAddressPointer

Penunjuk ke variabel yang disediakan penelepon yang menerima penunjuk ke anggota MdlAddress (atau OutputMdlAddress) dari struktur parameter data panggilan balik (FLT_PARAMETERS) (perhatikan bahwa anggota ini sendiri adalah penunjuk). Parameter ini bersifat opsional dan dapat berupa NULL. Jika operasi I/O tidak memiliki bidang MDL, parameter ini menerima NULL.

[out] Buffer

Penunjuk ke variabel yang disediakan penelepon yang menerima penunjuk ke anggota buffer yang sesuai (tergantung pada kode fungsi utama) dalam struktur parameter data panggilan balik (perhatikan bahwa anggota ini sendiri adalah penunjuk).

[out] Length

Penunjuk ke variabel yang disediakan penelepon yang menerima penunjuk ke anggota panjang buffer dalam struktur parameter data panggilan balik. Jika operasi tidak memiliki bidang panjang, parameter ini menerima NULL.

[out, optional] DesiredAccess

Penunjuk ke variabel yang disediakan penelepon yang menerima jenis akses yang sesuai untuk jenis operasi I/O ini, salah satu IoReadAccess, IoWriteAccess, atau IoModifyAccess. IoReadAccess berarti bahwa driver minifilter dapat memeriksa konten buffer tetapi tidak dapat mengubah konten di tempat. IoWriteAccess dan IoModifyAccess, yang setara, berarti bahwa driver minifilter telah membaca dan menulis akses ke buffer.

Nilai kembali

FltDecodeParameters mengembalikan STATUS_SUCCESS atau nilai NTSTATUS yang sesuai seperti berikut ini:

Menampilkan kode Deskripsi
STATUS_INVALID_PARAMETER Struktur data panggilan balik (FLT_CALLBACK_DATA) mewakili operasi I/O yang tidak memiliki parameter buffer. Ini adalah kode kesalahan.

Keterangan

FltDecodeParameters mengembalikan pointer ke parameter untuk operasi I/O, bukan nilai parameter, sehingga pemanggil dapat memodifikasi nilai parameter jika diinginkan.

FltDecodeParameters dapat digunakan untuk operasi I/O yang cepat serta operasi berbasis IRP. Ini tidak bermakna untuk operasi panggilan balik filter sistem file (FSFilter), karena operasi tersebut tidak memiliki parameter buffer.

Operasi IOCTL dan FSCTL dapat memiliki satu atau dua buffer, tergantung pada metode buffering yang digunakan. Dalam kasus di mana operasi memiliki dua buffer (dan dua bidang panjang), FltDecodeParameters mengembalikan bidang OutputBuffer, OutputBufferLength, dan/atau OutputMdlAddress yang sesuai.

Tidak semua dari empat parameter dikembalikan untuk setiap operasi I/O. Misalnya, untuk permintaan IRP_MJ_READ, FltDecodeParameters menetapkan parameter output sebagai berikut.

Parameter Nilai
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Panjang &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka FltMgr.lib
IRQL Tingkat apa pun

Lihat juga

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer