Bagikan melalui


struktur FLT_CALLBACK_DATA (fltkernel.h)

Struktur FLT_CALLBACK_DATA mewakili operasi I/O. Filter Manager dan minifilter menggunakan struktur ini untuk memulai dan memproses operasi I/O.

Sintaks

typedef struct _FLT_CALLBACK_DATA {
  FLT_CALLBACK_DATA_FLAGS     Flags;
  PETHREAD                    Thread;
  PFLT_IO_PARAMETER_BLOCK     Iopb;
  IO_STATUS_BLOCK             IoStatus;
  struct _FLT_TAG_DATA_BUFFER *TagData;
  union {
    struct {
      LIST_ENTRY QueueLinks;
      PVOID      QueueContext[2];
    };
    PVOID FilterContext[4];
  };
  KPROCESSOR_MODE             RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

Anggota

Flags

Bitmask bendera yang menjelaskan operasi I/O.

Minifilter dapat mengatur bendera berikut.

Bendera Makna
FLTFL_CALLBACK_DATA_DIRTY Minifilter mengatur bendera ini (dengan memanggil FltSetCallbackDataDirty) untuk menunjukkan bahwa ia telah memodifikasi konten struktur data panggilan balik. (Untuk informasi selengkapnya, lihat bagian Keterangan berikut.)

Catatan

Hanya Manajer Filter yang dapat mengatur bendera berikut.

Saat Manajer Filter menginisialisasi struktur data panggilan balik, Manajer Filter menetapkan salah satu bendera berikut untuk menentukan jenis operasi I/O yang diwakili struktur data panggilan balik.

Bendera Makna
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION Struktur data panggilan balik mewakili operasi I/O yang cepat.
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION Struktur data panggilan balik mewakili operasi panggilan balik minifilter sistem file.
FLTFL_CALLBACK_DATA_IRP_OPERATION Struktur data panggilan balik mewakili operasi berbasis paket permintaan I/O (IRP).

Catatan

Hanya Manajer Filter yang dapat mengatur bendera berikut.

Saat Manajer Filter menginisialisasi struktur data panggilan balik, Manajer Filter juga dapat mengatur bendera berikut.

Bendera Makna
FLTFL_CALLBACK_DATA_GENERATED_IO Struktur data panggilan balik mewakili operasi I/O yang dihasilkan oleh minifilter. Bendera ini hanya berlaku untuk operasi berbasis IRP.
FLTFL_CALLBACK_DATA_REISSUED_IO Struktur data panggilan balik mewakili operasi I/O yang sedang diterbitkan kembali oleh minifilter. (Untuk menghasilkan kembali operasi I/O, minifilter memanggil FltReissueSynchronousIo.) Bendera ini hanya berlaku untuk operasi berbasis IRP.
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER Buffer untuk operasi I/O dialokasikan dari kumpulan yang tidak disebarkan. Bendera ini dapat diatur untuk semua jenis operasi I/O. Minifilter tidak boleh mengatur bendera ini.

Catatan

Hanya Manajer Filter yang dapat mengatur bendera berikut.

Saat Manajer Filter melakukan pemrosesan penyelesaian untuk operasi I/O yang diwakili oleh struktur data panggilan balik, ia mengatur salah satu atau kedua bendera berikut.

Bendera Makna
FLTFL_CALLBACK_DATA_DRAINING_IO Manajer Filter mengatur bendera ini untuk menunjukkan bahwa saat ini sedang menguras simpul penyelesaian untuk operasi I/O. Bendera ini hanya berlaku selama penyelesaian I/O.
FLTFL_CALLBACK_DATA_POST_OPERATION Manajer Filter mengatur bendera ini untuk menunjukkan bahwa saat ini sedang memanggil rutinitas panggilan balik pasca-operasi terdaftar (PFLT_POST_OPERATION_CALLBACK) untuk operasi. Bendera ini hanya berlaku selama penyelesaian I/O.

Thread

Arahkan ke utas yang memulai operasi I/O. Bidang ini mungkin NULL.

Iopb

Penunjuk ke struktur FLT_IO_PARAMETER_BLOCK yang berisi parameter untuk operasi I/O.

IoStatus

Struktur IO_STATUS_BLOCK yang berisi status dan informasi untuk operasi I/O. Minifilter dapat memodifikasi konten struktur ini hanya dalam rutinitas panggilan balik pra-operasi (PFLT_PRE_OPERATION_CALLBACK) dari mana ia akan kembali FLT_PREOP_COMPLETE atau dalam rutinitas panggilan balik pasca-operasi (PFLT_POST_OPERATION_CALLBACK) dari mana ia akan kembali FLT_POSTOP_FINISHED_PROCESSING. Jika tidak, konten struktur ini biasanya diatur oleh Manajer Filter.

TagData

Arahkan ke struktur FLT_TAG_DATA_BUFFER yang berisi data titik pemilah ulang untuk operasi I/O. Penunjuk ini hanya valid di jalur pasca-buat. Dengan demikian hanya rutinitas panggilan balik pasca-operasi minifilter yang dapat mengubah nilai anggota ini. Rutinitas panggilan balik pasca-buat minifilter dapat mengubah anggota ini untuk menunjuk ke struktur FLT_TAG_DATA_BUFFER yang berbeda. Namun, jika mengubah anggota untuk menunjuk ke struktur yang berbeda, pertama-tama harus memanggil ExFreePool untuk membebaskan struktur yang ada untuk mencegah kebocoran memori kumpulan.

QueueLinks

Tautan antrean yang dapat digunakan minifilter saat antrean data panggilan balik Manajer Filter digunakan untuk menunggu operasi I/O.

QueueContext[2]

Array penunjuk informasi konteks yang dapat digunakan minifilter saat antrean Manajer Filter digunakan untuk menunggu operasi I/O.

FilterContext[4]

Array penunjuk informasi konteks yang dapat digunakan minifilter saat antrean selain antrean Manajer Filter digunakan untuk menunggu operasi I/O.

RequestorMode

Menunjukkan mode eksekusi proses yang memulai operasi I/O, baik KernelMode atau UserMode.

Keterangan

Minifilter mendaftarkan rutinitas panggilan balik pra-operasi (PFLT_PRE_OPERATION_CALLBACK) dan pasca-operasi (PFLT_POST_OPERATION_CALLBACK) untuk satu atau beberapa jenis operasi I/O. Ketika Manajer Filter memanggil salah satu rutinitas panggilan balik ini, Manajer Filter meneruskan struktur data panggilan balik (FLT_CALLBACK_DATA) sebagai parameter pertama. Struktur ini mewakili operasi I/O.

Rutinitas panggilan balik pra-operasi atau pasca-operasi minifilter dapat memodifikasi konten struktur data panggilan balik, kecuali untuk anggota Thread dan RequestorMode . Jika ya, maka harus memanggil FltSetCallbackDataDirty, kecuali jika juga telah memodifikasi konten anggota IoStatus . Jika tidak, nilai yang dimodifikasi diabaikan.

Minifilter dapat memulai operasi I/O dengan memanggil rutinitas dukungan seperti FltReadFile atau dengan memanggil FltAllocateCallbackData untuk mengalokasikan struktur data panggilan balik; menginisialisasi parameter I/O struktur, dan meneruskan struktur ke FltPerformSynchronousIo atau FltPerformAsynchronousIo.

Operasi I/O yang dimulai minifilter hanya dikirim ke instans minifilter yang terpasang di bawah instans panggilan, dan ke sistem file. Minifilter yang terpasang di atas instans yang ditentukan tidak menerima operasi I/O.

Minifilter hanya dapat memulai operasi I/O berbasis IRP. Mereka tidak dapat memulai operasi panggilan balik I/O atau filter sistem file (FSFilter) yang cepat.

Persyaratan

Persyaratan Nilai
Header fltkernel.h (termasuk Fltkernel.h)

Lihat juga

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK