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:

  1. Panggilan balik praoperasi memanggil FltAllocateDeferredIoWorkItem untuk mengalokasikan item kerja.

  2. Panggilan balik praoperasi memanggil FltQueueDeferredIoWorkItem untuk memposting operasi ke antrean kerja.

  3. Panggilan balik praoperasi mengembalikan FLT_PREOP_PENDING.

  4. Setelah memproses operasi I/O, rutinitas kerja memanggil FltCompletePendedPreOperation untuk mengembalikan operasi I/O ke Manajer Filter.

  5. 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:

  1. Panggilan balik pasca-operasi memanggil FltAllocateDeferredIoWorkItem untuk mengalokasikan item kerja.

  2. Panggilan balik pasca-operasi memanggil FltQueueDeferredIoWorkItem untuk memposting operasi ke antrean kerja.

  3. Panggilan balik pasca-operasi mengembalikan FLT_POSTOP_MORE_PROCESSING_REQUIRED.

  4. Setelah memproses operasi I/O, rutinitas kerja memanggil FltCompletePendedPostOperation untuk mengembalikan operasi I/O ke Manajer Filter.

  5. 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

Lihat juga

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateDeferredIoWorkItem

FltCompletePendedPostOperation

FltCompletePendedPreOperation

FltFreeDeferredIoWorkItem

IoGetTopLevelIrp

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK