Fungsi FltDoCompletionProcessingWhenSafe (fltkernel.h)

Jika aman untuk melakukannya, fungsi FltDoCompletionProcessingWhenSafe menjalankan rutinitas panggilan balik pasca-operasi driver minifilter.

Sintaks

BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
  [in]           PFLT_CALLBACK_DATA           Data,
  [in]           PCFLT_RELATED_OBJECTS        FltObjects,
  [in, optional] PVOID                        CompletionContext,
  [in]           FLT_POST_OPERATION_FLAGS     Flags,
  [in]           PFLT_POST_OPERATION_CALLBACK SafePostCallback,
  [out]          PFLT_POSTOP_CALLBACK_STATUS  RetPostOperationStatus
);

Parameter

[in] Data

Arahkan ke struktur data panggilan balik (FLT_CALLBACK_DATA) untuk operasi I/O. Biasanya ini sama dengan penunjuk Data yang diteruskan ke rutinitas panggilan balik pascaoperasi (PFLT_POST_OPERATION_CALLBACK) yang disebut FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Arahkan ke struktur objek terkait (FLT_RELATED_OBJECTS) untuk operasi I/O. Biasanya ini sama dengan pointer FltObjects yang diteruskan ke rutinitas panggilan balik pascaoperasi yang disebut FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Arahkan ke informasi konteks yang disediakan penelepon yang akan diteruskan ke fungsi panggilan balik yang ditentukan dalam parameter SafePostCallback .

[in] Flags

Bitmask bendera yang menentukan bagaimana pemrosesan penyelesaian akan dilakukan. Biasanya ini sama dengan nilai Bendera yang diteruskan ke rutinitas panggilan balik pascaoperasi yang disebut FltDoCompletionProcessingWhenSafe. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

[in] SafePostCallback

Arahkan ke rutinitas panggilan balik yang disediakan penelepon PFLT_POST_OPERATION_CALLBACK yang dipanggil sistem operasi ketika aman untuk melakukannya.

[out] RetPostOperationStatus

Variabel yang dialokasikan penelepon yang menerima nilai status akhir untuk operasi I/O. Untuk informasi selengkapnya tentang bagaimana parameter ini diatur, lihat bagian Keterangan berikut.

Nilai kembali

FltDoCompletionProcessingWhenSafe mengembalikan TRUE jika pemrosesan penyelesaian untuk operasi I/O dapat segera dilakukan atau operasi I/O berhasil diposting ke utas pekerja; jika tidak, ia mengembalikan FALSE.

Keterangan

FltDoCompletionProcessingWhenSafe segera menjalankan SafePostCallback jika pemanggil berjalan di IRQL <= APC_LEVEL. Jika tidak, jika aman untuk memposting operasi ke utas pekerja, pemrosesan SafePostCallback ditangguhkan sampai dapat dipanggil dalam konteks utas di mana IRQL <= APC_LEVEL.

Jika IRQL < DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe segera memanggil rutinitas panggilan balik SafePostCallback .
  • Parameter RetPostOperationStatus menerima nilai FLT_POSTOP_CALLBACK_STATUS yang dikembalikan oleh SafePostCallback.
  • FltDoCompletionProcessingWhenSafe mengembalikan TRUE.

Jika IRQL >= DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe mencoba memposting operasi I/O ke utas pekerja, lalu memanggil rutinitas SafePostCallback dari utas pekerja.
  • Jika operasi I/O dapat diposting dengan aman:
    • Manajer filter mengatur RetPostOperationStatus ke FLT_POSTOP_MORE_PROCESSING_REQUIRED.
    • FltDoCompletionProcessingWhenSafe mengembalikan TRUE.
  • Jika operasi I/O tidak dapat diposting dengan aman:
    • Manajer filter mengatur RetPostOperationStatus ke FLT_POSTOP_FINISHED_PROCESSING.
    • FltDoCompletionProcessingWhenSafe mengembalikan FALSE.

FltDoCompletionProcessingWhenSafe hanya dapat dipanggil untuk operasi berbasis IRP. Untuk menentukan apakah operasi tersebut adalah operasi berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .

FltDoCompletionProcessingWhenSafe tidak dapat digunakan untuk memposting penyelesaian operasi I/O halaman ke utas pekerja.

FltDoCompletionProcessingWhenSafe hanya dapat dipanggil dari rutinitas panggilan balik pascaoperasi driver minifilter (PFLT_POST_OPERATION_CALLBACK). Perhatikan bahwa FltDoCompletionProcessingWhenSafe tidak boleh dipanggil jika parameter Bendera callback pascaoperasi memiliki set bit FLTFL_POST_OPERATION_DRAINING.

Jika minifilter memanggil FltDoCompletionProcessingWhenSafe dan SafePostCallback dipanggil dalam utas pekerja karena tidak aman untuk memanggilnya dalam konteks utas saat ini, manajer filter akan melanjutkan pemrosesan penyelesaian selama minifilter tidak mengembalikan FLT_POSTOP_MORE_PROCESSING_REQUIRED dari SafePostCallback.

Jika minifilter mengembalikan FLT_POSTOP_MORE_PROCESSING_REQUIRED dari SafePostCallback, minifilter harus memanggil FltCompletePendedPostOperation untuk melanjutkan pemrosesan penyelesaian.

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 yang lebih baru. Tidak tersedia di Windows 2000 SP4 dan sistem operasi yang lebih lama.
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka Fltmgr.lib
IRQL Semua.

Lihat juga

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK