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:
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
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_PARAMETERSuntuk IRP_MJ_ACQUIRE_FOR_MOD_WRITE
- FLT_PARAMETERS untuk IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS untuk IRP_MJ_CREATE
- FLT_PARAMETERS untuk IRP_MJ_CREATE_MAILSLOT
- FLT_PARAMETERSuntuk IRP_MJ_CREATE_NAMED_PIPE
- FLT_PARAMETERS untuk IRP_MJ_DEVICE_CONTROL
- FLT_PARAMETERSuntuk IRP_MJ_DIRECTORY_CONTROL
- FLT_PARAMETERS untuk IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE
- FLT_PARAMETERS untuk IRP_MJ_FILE_SYSTEM_CONTROL
- FLT_PARAMETERS untuk IRP_MJ_INTERNAL_DEVICE_CONTROL
- FLT_PARAMETERS untuk IRP_MJ_LOCK_CONTROL
- FLT_PARAMETERS untuk IRP_MJ_MDL_READ
- FLT_PARAMETERS untuk IRP_MJ_MDL_READ_COMPLETE
- FLT_PARAMETERS untuk IRP_MJ_MDL_WRITE_COMPLETE
- FLT_PARAMETERS untuk IRP_MJ_NETWORK_QUERY_OPEN
- FLT_PARAMETERS untuk IRP_MJ_PNP
- FLT_PARAMETERS untuk IRP_MJ_PREPARE_MDL_WRITE
- FLT_PARAMETERS untuk IRP_MJ_QUERY_EA
- FLT_PARAMETERS untuk IRP_MJ_QUERY_INFORMATION
- FLT_PARAMETERS untuk IRP_MJ_QUERY_OPEN
- FLT_PARAMETERS untuk IRP_MJ_QUERY_QUOTA
- FLT_PARAMETERS untuk IRP_MJ_QUERY_SECURITY
- FLT_PARAMETERS untuk IRP_MJ_QUERY_VOLUME_INFORMATION
- FLT_PARAMETERS untuk IRP_MJ_READ
- FLT_PARAMETERS untuk IRP_MJ_RELEASE_FOR_MOD_WRITE
- FLT_PARAMETERS untuk IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS untuk IRP_MJ_SET_EA
- FLT_PARAMETERS untuk IRP_MJ_SET_INFORMATION
- FLT_PARAMETERS untuk IRP_MJ_SET_QUOTA
- FLT_PARAMETERS untuk IRP_MJ_SET_SECURITY
- FLT_PARAMETERS untuk IRP_MJ_SET_VOLUME_INFORMATION
- FLT_PARAMETERS untuk IRP_MJ_SYSTEM_CONTROL
- FLT_PARAMETERS untuk IRP_MJ_VOLUME_MOUNT
- FLT_PARAMETERS untuk IRP_MJ_WRITE
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk