Bagikan melalui


struktur FLT_IO_PARAMETER_BLOCK (fltkernel.h)

Struktur FLT_IO_PARAMETER_BLOCK berisi parameter untuk operasi I/O yang diwakili oleh struktur data panggilan balik FLT_CALLBACK_DATA .

Sintaks

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Anggota

IrpFlags

Bitmask bendera yang menentukan berbagai aspek operasi I/O. Bendera ini hanya digunakan untuk operasi berbasis IRP. Tabel berikut ini memperlihatkan nilai bendera.

Nilai Makna
IRP_BUFFERED_IO Operasi ini adalah operasi I/O yang di-buffer.
IRP_CLOSE_OPERATION Operasi ini adalah operasi pembersihan atau penutupan.
IRP_DEALLOCATE_BUFFER Manajer I/O akan membebaskan buffer selama fase penyelesaian untuk IRP.
IRP_INPUT_OPERATION Operasi ini adalah operasi input.
IRP_NOCACHE Operasi ini adalah operasi I/O yang tidak di-cache.
IRP_PAGING_IO Operasi ini adalah operasi I/O halaman.
IRP_SYNCHRONOUS_API Operasi I/O sinkron.
IRP_SYNCHRONOUS_PAGING_IO Operasi ini adalah operasi I/O halaman sinkron.
IRP_MOUNT_COMPLETION Pemasangan volume selesai untuk operasi.
IRP_CREATE_OPERATION Operasi ini adalah operasi buat atau buka.
IRP_READ_OPERATION Operasi I/O adalah untuk membaca.
IRP_WRITE_OPERATION Operasi I/O adalah untuk menulis.
IRP_DEFER_IO_COMPLETION Penyelesaian I/O operasi ditangguhkan.
IRP_ASSOCIATED_IRP Operasi ini dikaitkan dengan IRP master.
IRP_OB_QUERY_NAME Operasi ini adalah kueri nama asinkron.
IRP_HOLD_DEVICE_QUEUE Dicadangkan.
IRP_UM_DRIVER_INITIATED_IO Operasi ini berasal dari driver mode pengguna.

MajorFunction

Kode fungsi utama untuk operasi I/O. Kode fungsi utama digunakan untuk operasi berbasis IRP, operasi I/O cepat, dan operasi panggilan balik sistem file (FSFilter). Untuk informasi selengkapnya tentang operasi tambahan, lihat FLT_PARAMETERS.

MinorFunction

Kode fungsi minor untuk operasi I/O. Anggota ini bersifat opsional dan dapat berupa NULL. Nilai anggota MajorFunction menentukan nilai yang mungkin. Untuk informasi selengkapnya tentang kode fungsi minor, lihat FLT_PARAMETERS.

OperationFlags

Bitmask bendera yang menentukan berbagai aspek operasi I/O. Bendera ini hanya digunakan untuk operasi berbasis IRP. Manajer Filter menyalin bendera ini dari anggota Bendera struktur IO_STACK_LOCATION yang terkait dengan IRP. Tabel berikut ini memperlihatkan nilai bendera yang paling umum digunakan.

Nilai Makna
SL_CASE_SENSITIVE Digunakan untuk IRP_MJ_CREATE. Jika bendera ini diatur, perbandingan nama file harus peka huruf besar/kecil.
SL_EXCLUSIVE_LOCK Digunakan untuk IRP_MJ_LOCK_CONTROL. Jika bendera ini diatur, kunci rentang byte eksklusif akan diminta. Jika tidak, kunci bersama diminta.
SL_FAIL_IMMEDIATELY Digunakan untuk IRP_MJ_LOCK_CONTROL. Jika bendera ini diatur, permintaan kunci harus gagal jika tidak dapat segera diberikan.
SL_FORCE_ACCESS_CHECK Digunakan untuk IRP_MJ_CREATE. Jika bendera ini diatur, pemeriksaan akses harus dilakukan meskipun nilai anggota RequestorMode IRP adalah KernelMode.
SL_FORCE_DIRECT_WRITE Digunakan untuk IRP_MJ_WRITE dan IOCTL_DISK_COPY_DATA. Jika bendera ini diatur, driver mode kernel dapat menulis ke area volume yang biasanya diblokir dari penulisan karena alasan keamanan. Bendera ini diperiksa baik di lapisan sistem file maupun lapisan tumpukan penyimpanan. Bendera SL_FORCE_DIRECT_WRITE tersedia di Windows Vista dan versi Windows yang lebih baru.
SL_INDEX_SPECIFIED Digunakan untuk IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA, dan IRP_MJ_SET_QUOTA. Jika bendera ini diatur, pemindaian untuk informasi direktori, kuota, atau atribut yang diperluas harus dimulai pada entri dalam daftar yang indeksnya ditentukan.
SL_OPEN_PAGING_FILE Digunakan untuk IRP_MJ_CREATE. Jika bendera ini diatur, file adalah file halaman.
SL_OPEN_TARGET_DIRECTORY Digunakan untuk IRP_MJ_CREATE. Jika bendera ini diatur, direktori induk file harus dibuka.
SL_OVERRIDE_VERIFY_VOLUME Digunakan untuk IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READ, dan IRP_MJ_WRITE. Jika bendera ini diatur, operasi I/O harus dilakukan meskipun bendera DO_VERIFY_VOLUME diatur pada objek perangkat volume.
SL_RESTART_SCAN Digunakan untuk IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA, dan IRP_MJ_SET_QUOTA. Jika bendera ini diatur, pemindaian untuk informasi direktori, kuota, atau atribut yang diperluas harus dimulai pada entri pertama di direktori atau daftar. Jika tidak, pemindaian harus dilanjutkan dari pemindaian sebelumnya.
SL_RETURN_SINGLE_ENTRY Digunakan untuk IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA, dan IRP_MJ_SET_QUOTA. Jika bendera ini diatur, pemindaian untuk informasi direktori, kuota, atau atribut yang diperluas hanya boleh mengembalikan entri pertama yang ditemukan.
SL_WATCH_TREE Digunakan untuk IRP_MJ_DIRECTORY_CONTROL. Jika bendera ini diatur, semua subdirektori direktori ini juga harus diawasi. Jika tidak, hanya direktori itu sendiri yang akan diawasi.
SL_WRITE_THROUGH Digunakan untuk IRP_MJ_WRITE. Jika bendera ini diatur, data file harus ditulis ke penyimpanan persisten, bukan hanya ditulis ke cache.

Reserved

Dicadangkan untuk penggunaan sistem. Jangan gunakan.

TargetFileObject

Penunjuk objek file untuk file atau direktori yang merupakan target untuk operasi I/O ini.

TargetInstance

Penunjuk instans buram untuk minifilter yang merupakan target untuk operasi I/O ini.

Parameters

Struktur FLT_PARAMETERS yang berisi parameter untuk operasi I/O yang ditentukan oleh anggota MajorFunction dan MinorFunction .

Keterangan

Struktur FLT_IO_PARAMETER_BLOCK berisi parameter untuk operasi I/O yang diwakili oleh struktur data panggilan balik (FLT_CALLBACK_DATA). Struktur data panggilan balik berisi penunjuk ke struktur FLT_IO_PARAMETER_BLOCK di anggota Iopb-nya .

Minifilter menerima penunjuk ke struktur data panggilan balik sebagai parameter input Data atau CallbackData ke jenis rutin panggilan balik berikut:

Rutinitas panggilan balik praoperasi dan pascaoperasi minifilter dapat memodifikasi konten struktur FLT_IO_PARAMETER_BLOCK untuk operasi I/O, kecuali untuk anggota MajorFunction dan Reserved . Jika ya, ia harus memanggil FltSetCallbackDataDirty, kecuali jika juga telah memodifikasi anggota IoStatus dari struktur data panggilan balik untuk operasi. Jika tidak, nilai yang dimodifikasi akan diabaikan.

Saat Manajer Filter mengeluarkan panggilan balik praoperasi atau pascaoperasi ke minifilter, FltObjects-FileObject> dan TargetFileObject (CallbackData-Iopb-TargetFileObject>>) awalnya sama. Jika minifilter memodifikasi TargetFileObject atau TargetInstance, panggilan berikutnya ke FltSetCallbackDataDirty dari panggilan balik praoperasi akan menyebabkan Filter Manager menggantikan FltObjects-FileObject> dan FltObjects-Instance> sebelum mengirim operasi ke filter yang lebih rendah.

Jika rutinitas panggilan balik praoperasi minifilter memodifikasi parameter untuk operasi I/O, semua minifilter di bawahnya dalam tumpukan instans minifilter akan menerima parameter yang dimodifikasi dalam rutinitas panggilan balik praoperasi dan pascaoperasi mereka.

Parameter yang dimodifikasi tidak diterima oleh rutinitas panggilan balik pascaoperasi minifilter sendiri, atau oleh minifilter apa pun di atas minifilter tersebut di tumpukan instans minifilter. Dalam semua kasus, rutinitas panggilan balik praoperasi dan pascaoperasi minifilter menerima nilai parameter input yang sama.

Jika minifilter mengubah nilai anggota TargetInstance , nilai baru harus menjadi penunjuk ke instans minifilter yang sama pada ketinggian yang sama pada volume yang berbeda. Selain itu, objek perangkat volume baru harus memiliki ukuran tumpukan yang lebih besar dari atau sama dengan objek perangkat volume asli.

Untuk mendapatkan ukuran tumpukan untuk objek perangkat volume, mengingat penunjuk instans buram untuk instans yang dilampirkan ke volume, lakukan hal berikut:

  • Panggil FltGetVolumeFromInstance untuk mendapatkan penunjuk volume.
  • Panggil FltGetDeviceObject untuk mendapatkan pointer ke objek perangkat volume. Penunjuk ini dikembalikan dalam parameter DeviceObject . Ukuran tumpukan objek perangkat dapat ditemukan di DeviceObject-StackSize>.
  • Ketika penunjuk volume tidak lagi diperlukan, panggil FltObjectDereference untuk mengurangi jumlah referensinya.
  • Ketika penunjuk objek perangkat volume tidak lagi diperlukan, panggil ObDereferenceObject untuk mengurangi jumlah referensinya.

Minifilter dapat mengubah nilai anggota TargetFileObject . Namun, nilai baru harus menjadi penunjuk ke objek file untuk file yang berada pada volume yang sama dengan instans yang ditentukan oleh anggota TargetInstance .

Minifilter tidak dapat mengubah nilai anggota MajorFunction dengan aman. Sebaliknya, ini harus memulai operasi I/O baru.

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 dalam struktur FLT_IO_PARAMETER_BLOCK , dan meneruskan struktur data panggilan balik ke FltPerformSynchronousIo atau FltPerformAsynchronousIo.

Catatan

Gunakan rutinitas dukungan sedapat mungkin saat memulai operasi I/O. Minifilter harus mengalokasikan data panggilan baliknya sendiri hanya jika tidak ada fungsi dukungan untuk operasi I/O tertentu.

Persyaratan

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

Lihat juga

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK