Fungsi FltQueueDeferredIoWorkItem (fltkernel.h)
Rutinitas FltQueueDeferredIoWorkItem memposting operasi I/O berbasis IRP ke antrean kerja.
Sintaks
NTSTATUS FLTAPI FltQueueDeferredIoWorkItem(
[in] PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
[in] PFLT_CALLBACK_DATA Data,
[in] PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
[in] WORK_QUEUE_TYPE QueueType,
[in] PVOID Context
);
Parameter
[in] FltWorkItem
Penunjuk ke item kerja untuk ditambahkan ke antrean kerja. Item kerja harus dialokasikan dengan memanggil FltAllocateDeferredIoWorkItem.
[in] Data
Penunjuk ke struktur FLT_CALLBACK_DATA untuk operasi I/O. Operasi harus merupakan operasi I/O berbasis IRP. Untuk menentukan apakah struktur data panggilan balik tertentu mewakili operasi I/O berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .
[in] WorkerRoutine
Penunjuk ke rutinitas panggilan balik pekerja yang disediakan penelepon. Rutinitas ini dinyatakan sebagai berikut:
typedef VOID
(*PFLT_DEFERRED_IO_WORKITEM_ROUTINE) (
_In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
_In_ PFLT_CALLBACK_DATA CallbackData,
_In_opt_ PVOID Context
);
Dimana:
- FltWorkItem adalah penunjuk buram ke struktur item kerja yang ditangguhkan.
- CallbackData adalah penunjuk ke struktur data panggilan balik untuk operasi I/O.
- Konteks adalah penunjuk informasi konteks opsional yang diteruskan sebagai parameter KonteksFltQueueDeferredIoWorkItem.
[in] QueueType
Menentukan antrean tempat item kerja yang dituju FltWorkItem akan disisipkan. QueueType bisa menjadi salah satu nilai berikut.
Nilai | Makna |
---|---|
CriticalWorkQueue | Sisipkan item kerja ke dalam antrean tempat utas sistem dengan atribut prioritas real time memproses item kerja. |
DelayedWorkQueue | Sisipkan item kerja ke dalam antrean tempat utas sistem dengan atribut prioritas variabel memproses item kerja. |
Nilai QueueTypeHyperCriticalWorkQueue disediakan untuk penggunaan sistem.
[in] Context
Penunjuk ke informasi konteks yang ditentukan pemanggil untuk diteruskan sebagai parameter Konteks dari rutinitas panggilan balik yang ditentukan dalam parameter WorkerRoutine .
Menampilkan nilai
Rutinitas FltQueueDeferredIoWorkItem mengembalikan STATUS_SUCCESS atau nilai NTSTATUS yang sesuai seperti salah satu hal berikut ini:
Menampilkan kode | Deskripsi |
---|---|
STATUS_FLT_DELETING_OBJECT | Instans target untuk operasi I/O (Data-Iopb-TargetInstance>>) sedang diruntuhkan. Ini adalah kode kesalahan. |
STATUS_FLT_NOT_SAFE_TO_POST_OPERATION | Operasi I/O tidak dapat diposting dengan aman ke utas pekerja. Lihat Keterangan untuk kemungkinan alasan kode kesalahan ini dikembalikan. |
Keterangan
Rutinitas FltQueueDeferredIoWorkItem memposting operasi I/O ke antrean kerja sistem. Rutinitas panggilan balik WorkerRoutine yang ditentukan dipanggil dalam konteks utas sistem, di IRQL PASSIVE_LEVEL.
Operasi harus merupakan operasi I/O berbasis IRP. Untuk menentukan apakah struktur data panggilan balik tertentu mewakili operasi I/O berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .
FltQueueDeferredIoWorkItem mengembalikan STATUS_FLT_NOT_SAFE_TO_POST_OPERATION ketika operasi I/O tidak dapat diposting dengan aman ke utas pekerja. Kemungkinan alasannya meliputi hal-hal berikut:
FltQueueDeferredIoWorkItem tidak dapat memposting operasi I/O halaman ke utas pekerja.
FltQueueDeferredIoWorkItem tidak dapat memposting operasi I/O ke utas pekerja jika bidang TopLevelIrp dari utas saat ini bukan NULL, karena rekursi sistem file yang dihasilkan dapat menyebabkan kebuntuan atau luapan tumpukan. Untuk informasi selengkapnya, lihat IoGetTopLevelIrp.
Driver minifilter dapat menggunakan FltQueueDeferredIoWorkItem dalam rutinitas panggilan balik praoperasi (PFLT_PRE_OPERATION_CALLBACK) sebagai berikut:
Panggilan balik praoperasi memanggil FltAllocateDeferredIoWorkItem untuk mengalokasikan item kerja.
Panggilan balik praoperasi memanggil FltQueueDeferredIoWorkItem untuk memposting operasi ke antrean kerja.
Panggilan balik praoperasi mengembalikan FLT_PREOP_PENDING.
Setelah memproses operasi I/O, rutinitas kerja memanggil FltCompletePendedPreOperation untuk mengembalikan operasi I/O ke Manajer Filter.
Rutinitas kerja memanggil FltFreeDeferredIoWorkItem untuk membebaskan item kerja.
Driver minifilter dapat menggunakan FltQueueDeferredIoWorkItem dalam rutinitas panggilan balik pasca-operasi (PFLT_POST_OPERATION_CALLBACK) sebagai berikut:
Panggilan balik pasca-operasi memanggil FltAllocateDeferredIoWorkItem untuk mengalokasikan item kerja.
Panggilan balik pasca-operasi memanggil FltQueueDeferredIoWorkItem untuk memposting operasi ke antrean kerja.
Panggilan balik pasca-operasi mengembalikan FLT_POSTOP_MORE_PROCESSING_REQUIRED.
Setelah memproses operasi I/O, rutinitas kerja memanggil FltCompletePendedPostOperation untuk mengembalikan operasi I/O ke Manajer Filter.
Rutinitas kerja memanggil FltFreeDeferredIoWorkItem untuk membebaskan item kerja.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 |
Target Platform | Universal |
Header | fltkernel.h (termasuk Fltkernel.h) |
Pustaka | Fltmgr.lib |
DLL | Fltmgr.sys |
IRQL | <= DISPATCH_LEVEL |