PFLT_POST_OPERATION_CALLBACK fungsi panggilan balik (fltkernel.h)

Driver minifilter dapat mendaftarkan satu atau beberapa rutinitas jenis PFLT_POST_OPERATION_CALLBACK untuk melakukan pemrosesan penyelesaian untuk operasi I/O.

Sintaks

PFLT_POST_OPERATION_CALLBACK PfltPostOperationCallback;

FLT_POSTOP_CALLBACK_STATUS PfltPostOperationCallback(
  [in, out]      PFLT_CALLBACK_DATA Data,
  [in]           PCFLT_RELATED_OBJECTS FltObjects,
  [in, optional] PVOID CompletionContext,
  [in]           FLT_POST_OPERATION_FLAGS Flags
)
{...}

Parameter

[in, out] Data

Penunjuk ke struktur FLT_CALLBACK_DATA data panggilan balik untuk operasi I/O.

[in] FltObjects

Penunjuk ke manajer filter mempertahankan struktur FLT_RELATED_OBJECTS yang berisi pointer buram untuk objek yang terkait dengan permintaan I/O saat ini.

[in, optional] CompletionContext

Penunjuk konteks yang dikembalikan oleh panggilan balik pra-operasi driver minifilter PFLT_PRE_OPERATION_CALLBACK rutin. Penunjuk CompletionContext menyediakan cara untuk mengomunikasikan informasi dari rutinitas panggilan balik pra-operasi ke rutinitas panggilan balik pasca-operasi.

[in] Flags

Bitmask bendera yang menentukan bagaimana panggilan balik pasca-operasi akan dilakukan.

Bendera Makna
FLTFL_POST_OPERATION_DRAINING Manajer filter mengatur bendera ini untuk menunjukkan bahwa instans driver minifilter sedang dilepas dan bahwa rutinitas panggilan balik pasca-operasi ini dipanggil untuk membersihkan konteks penyelesaian driver minifilter. Panggilan balik pasca-operasi harus mengembalikan FLT_POSTOP_FINISHED_PROCESSING. Jika bendera ini diatur, parameter Data menunjuk ke salinan struktur data panggilan balik asli untuk operasi, bukan struktur data panggilan balik asli. Selain itu, ketika bendera ini diatur, rutinitas panggilan balik pasca-operasi dipanggil di IRQL <= APC_LEVEL.

Nilai kembali

Rutinitas panggilan balik ini mengembalikan salah satu nilai status berikut:

Menampilkan kode Deskripsi
FLT_POSTOP_FINISHED_PROCESSING
Driver minifilter telah selesai diproses untuk operasi I/O dan mengembalikan kontrol operasi ke manajer filter.

Setelah panggilan balik pasca-operasi mengembalikan nilai status ini, manajer filter melanjutkan pemrosesan penyelesaian operasi I/O.

FLT_POSTOP_MORE_PROCESSING_REQUIRED
Driver minifilter telah menghentikan pemrosesan penyelesaian untuk operasi I/O, tetapi tidak mengembalikan kontrol operasi ke manajer filter.

Panggilan balik pasca-operasi driver minifilter dapat mengembalikan nilai status ini hanya jika panggilan balik pasca-operasi driver minifilter telah memposting operasi I/O ke antrean kerja. Driver minifilter akhirnya harus melanjutkan pemrosesan penyelesaian operasi I/O.

Setelah panggilan balik pasca-operasi mengembalikan FLT_POSTOP_MORE_PROCESSING_REQUIRED, manajer filter tidak melakukan pemrosesan penyelesaian lebih lanjut dari operasi I/O, kecuali kedua kondisi berikut ini benar:

  • Panggilan balik pasca-operasi telah memposting operasi I/O ke antrean kerja.
  • Setelah rutinitas kerja melakukan pemrosesan penyelesaian untuk operasi, ia memanggil FltCompletePendedPostOperation untuk mengembalikan kontrol operasi ke manajer filter.
Nilai status ini hanya dapat dikembalikan untuk 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 .
FLT_POSTOP_DISALLOW_FSFILTER_IO
Driver minifilter melarang operasi QueryOpen cepat dan memaksa operasi ke jalur lambat. Melakukannya menyebabkan manajer I/O melayani permintaan dengan melakukan buka/kueri/tutup file. Driver minifilter hanya boleh mengembalikan status ini untuk QueryOpen.

Keterangan

Rutinitas panggilan balik pasca-operasi driver minifilter melakukan pemrosesan penyelesaian untuk satu atau beberapa jenis operasi I/O.

Rutinitas panggilan balik pasca-operasi mirip dengan rutinitas penyelesaian yang digunakan oleh driver filter sistem file warisan.

Rutinitas panggilan balik pasca-operasi dipanggil dalam konteks utas arbitrer, di IRQL <= DISPATCH_LEVEL. Karena rutinitas panggilan balik ini dapat dipanggil di IRQL DISPATCH_LEVEL, rutinitas tersebut tunduk pada batasan berikut:

  • Ini tidak dapat dengan aman memanggil rutinitas mode kernel yang harus berjalan pada IRQL yang lebih rendah.
  • Struktur data apa pun yang digunakan dalam rutinitas ini harus dialokasikan dari kumpulan yang tidak dipagasi.
  • Ini tidak dapat dijadikan halaman.
  • Ini tidak dapat memperoleh sumber daya, mutex, atau mutex cepat. Namun, ia dapat memperoleh kunci spin.
  • Ini tidak bisa mendapatkan, mengatur, atau menghapus konteks, tetapi dapat merilis konteks.

Setiap pemrosesan penyelesaian I/O yang perlu dilakukan di IRQL < DISPATCH_LEVEL tidak dapat dilakukan langsung dalam rutinitas panggilan balik pascaoperasi. Sebaliknya, itu harus diposting ke antrean kerja dengan memanggil rutinitas seperti FltDoCompletionProcessingWhenSafe atau FltQueueDeferredIoWorkItem.

Ketahuilah bahwa FltDoCompletionProcessingWhenSafe tidak boleh dipanggil jika parameter Bendera dari panggilan balik pasca-operasi memiliki set bit FLTFL_POST_OPERATION_DRAINING. Berikut ini adalah pengecualian untuk aturan ini:

  • Jika rutinitas panggilan balik pra-operasi driver minifilter mengembalikan FLT_PREOP_SYNCHRONIZE untuk operasi I/O berbasis IRP, rutinitas panggilan balik pasca-operasi yang sesuai dijamin akan dipanggil di IRQL <= APC_LEVEL, dalam konteks utas yang sama dengan panggilan balik pra-operasi.
  • Rutinitas panggilan balik pasca-buat dijamin akan dipanggil di IRQL PASSIVE_LEVEL, dalam konteks utas yang berasal dari operasi IRP_MJ_CREATE.

Driver minifilter mendaftarkan rutinitas panggilan balik pasca-operasi untuk jenis operasi I/O tertentu dengan menyimpan titik masuk rutinitas panggilan balik dalam array OperationRegistration dari struktur FLT_REGISTRATION . Driver minifilter meneruskan struktur ini sebagai parameter ke FltRegisterFilter dalam rutinitas DriverEntry-nya .

Driver minifilter dapat mendaftarkan rutinitas panggilan balik pasca-operasi untuk jenis operasi I/O tertentu tanpa mendaftarkan panggilan balik pra-operasi (PFLT_PRE_OPERATION_CALLBACK) rutin, dan sebaliknya.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Microsoft Windows 2000 Update Rollup 1 untuk SP4, Windows XP SP2, Windows Server 2003 SP1, dan sistem operasi Windows yang lebih baru.
Target Platform Desktop
Header fltkernel.h (termasuk FltKernel.h)
IRQL Lihat bagian Keterangan

Lihat juga

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FltCancelFileBuka

FltCompletePendedPostOperation

FltDoCompletionProcessingWhenSafe

FltQueueDeferredIoWorkItem

FltRegisterFilter

FltSetCallbackDataDirty

PFLT_PRE_OPERATION_CALLBACK