Fungsi FltReissueSynchronousIo (fltkernel.h)

FltReissueSynchronousIo memulai operasi I/O sinkron baru yang menggunakan parameter dari operasi I/O yang disinkronkan sebelumnya.

Sintaks

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parameter

[in] InitiatingInstance

Penunjuk instans buram ke instans driver minifilter yang menerbitkan kembali operasi I/O. Harus merupakan instans yang sama yang memulai operasi I/O sebelumnya. Parameter ini diperlukan dan tidak dapat diatur ke NULL.

[in] CallbackData

Penunjuk ke struktur data panggilan balik (FLT_CALLBACK_DATA) dari operasi I/O yang disinkronkan sebelumnya. Parameter ini diperlukan dan tidak dapat diatur ke NULL.

Nilai kembali

Tidak ada

Keterangan

Driver minifilter memanggil FltReissueSynchronousIo dari panggilan balik pascaoperasi (PFLT_POST_OPERATION_CALLBACK) rutin untuk menghasilkan kembali permintaan I/O yang disinkronkan. Ini biasanya memanggil FltReissueSynchronousIo dari rutinitas panggilan balik pascaoperasi untuk membangun kembali operasi yang gagal dengan parameter yang berbeda, atau untuk menangani pemantulan reparse. Namun, ini juga dapat memanggil FltReissueSynchronousIo untuk mengeluarkan kembali I/O yang dihasilkan driver minifilter melalui panggilan ke rutinitas FltAllocateCallbackData dan FltPerformSynchronousIo . Dalam situasi ini, tidak masalah apakah itu memanggil FltReissueSynchronousIo dalam rutinitas panggilan balik pascaoperasi atau di luar konteks rutinitas panggilan balik operasi. Untuk panggilan di luar konteks rutinitas panggilan balik pascaoperasi, pertimbangkan untuk menggunakan rutinitas FltReuseCallbackData dan FltPerformSynchronousIo sebagai gantinya.

Pemanggil dapat memodifikasi konten blok parameter I/O struktur data panggilan balik (FLT_CALLBACK_DATA) sebelum menerbitkan kembali permintaan I/O. Jika ya, itu harus memanggil FltSetCallbackDataDirty sebelum memanggil FltReissueSynchronousIo.

Misalnya, jika driver minifilter menggunakan titik pemilah ulang, dan rutinitas panggilan balik pasca-buat dipanggil untuk operasi pembuatan yang dikembalikan STATUS_REPARSE, driver minifilter dapat menghasilkan kembali operasi pembuatan untuk titik pemisahan ulangnya sendiri. Dalam hal ini, driver minifilter akan menyelesaikan langkah-langkah berikut:

  1. Atur bendera FILE_OPEN_REPARSE_POINT di blok parameter I/O struktur data panggilan balik.

  2. Panggil FltSetCallbackDataDirty.

  3. Panggil FltReissueSynchronousIo untuk membuat ulang permintaan pembuatan.

Manajer Filter mengirimkan permintaan I/O yang diterbitkan kembali hanya ke instans driver minifilter yang dilampirkan di bawah instans yang memulai (ditentukan dalam parameter InitiatingInstance ) dan ke sistem file. Instans driver minifilter yang terpasang di atas instans yang memulai tidak menerima permintaan I/O yang diterbitkan kembali.

Hanya operasi I/O yang disinkronkan yang dapat diterbitkan kembali. Untuk memberi driver kemampuan untuk menerbitkan ulang, dengan memanggil FltReissueSynchronousIo dalam rutinitas panggilan balik pascaoperasi, driver minifilter harus secara khusus mengembalikan FLT_PREOP_SYNCHRONIZE dalam rutinitas panggilan balik praoperasi.

Catatan

Driver minifilter tidak memanggil rutinitas FltIsOperationSynchronous untuk menentukan apakah rutinitas panggilan balik praoperasi untuk operasi ini dikembalikan FLT_PREOP_SYNCHRONIZE. Driver minifilter memanggil FltIsOperationSynchronous untuk menentukan apakah operasi itu sendiri sinkron dari perspektif manajer I/O.

Hanya operasi I/O berbasis IRP yang dapat diterbitkan kembali. Operasi I/O cepat dan operasi panggilan balik filter sistem file (FSFilter) tidak dapat diterbitkan kembali. Untuk menentukan apakah operasi I/O berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .

Operasi buat (IRP_MJ_CREATE) yang telah dibatalkan tidak dapat diterbitkan kembali. Sebelum memanggil FltReissueSynchronousIo untuk operasi pembuatan, pemanggil harus memeriksa anggota Bendera objek file untuk operasi pembuatan. Jika bendera FO_FILE_OPEN_CANCELLED diatur, ini berarti bahwa operasi pembuatan telah dibatalkan, dan operasi tutup (IRP_MJ_CLOSE) akan dikeluarkan untuk objek file ini. Jika FltReissueSynchronousIo dipanggil untuk operasi pembuatan yang telah dibatalkan, Filter Manager gagal menerbitkan ulang permintaan I/O dengan STATUS_CANCELLED.

Catatan

Ketika driver minifilter menerbitkan ulang pembuatan di panggilan balik pasca-buat, mereka tidak perlu melepaskan dan mengatur buffer yang terkait dengan titik pemilahan ulang mereka (bidang TagData di CallbackData) ke NULL. Sebagai gantinya, Manajer Filter merilis dan mengatur buffer ke NULL untuk mereka.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Update Rollup 1 untuk SP4; Windows XP SP2
Server minimum yang didukung Windows Server 2003 SP1
Target Platform Universal
Header fltkernel.h (termasuk FltKernel.h)
Pustaka FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL (IO non-halaman hanya dapat diterbitkan kembali pada PASSIVE_LEVEL)

Lihat juga

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS untuk IRP_MJ_CREATE

FltCancelFileBuka

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK