Fungsi FltCancelFileOpen (fltkernel.h)

Driver minifilter dapat menggunakan rutinitas FltCancelFileOpen untuk menutup file yang baru dibuka atau dibuat.

Sintaks

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

Parameter

[in] Instance

Penunjuk instans buram untuk pemanggil. Parameter ini diperlukan dan tidak boleh NULL.

[in] FileObject

Penunjuk objek file untuk file. Parameter ini diperlukan dan tidak boleh NULL.

Nilai kembali

Tidak ada

Keterangan

Jika driver minifilter menentukan bahwa operasi buka file atau buat file (IRP_MJ_CREATE) harus gagal setelah sistem file menyelesaikan operasi dengan nilai NTSTATUS yang sukses seperti STATUS_SUCCESS, driver minifilter dapat memanggil FltCancelFileOpen dari rutinitas panggilan balik pasca-buat untuk menutup file.

Catatan Meskipun STATUS_REPARSE adalah nilai NTSTATUS yang sukses, tidak perlu memanggil FltCancelFileOpen untuk operasi pembuatan yang diselesaikan dengan STATUS_REPARSE, karena nilai status ini menunjukkan bahwa file tidak berhasil dibuka.
 
Panggilan yang berhasil ke FltCancelFileOpen memiliki efek berikut: Untuk driver minifilter dan filter warisan yang berada di atas pemanggil dalam tumpukan instans driver minifilter, permintaan buat tampaknya gagal. Bagi mereka yang berada di bawah penelepon, file tampaknya telah dibuka (atau dibuat) lalu ditutup.

Perhatikan bahwa FltCancelFileOpen tidak membatalkan modifikasi apa pun pada file. Misalnya, FltCancelFileOpen tidak menghapus file yang baru dibuat atau memulihkan file yang ditimpa atau digantikan ke keadaan sebelumnya.

FltCancelFileOpen harus dipanggil sebelum handel dibuat untuk file. Pemanggil dapat memeriksa anggota Bendera dari struktur FILE_OBJECT yang dirujuk oleh parameter FileObject . Jika bendera FO_HANDLE_CREATED diatur, ini berarti bahwa satu atau beberapa handel telah dibuat untuk file, sehingga tidak aman untuk memanggil FltCancelFileOpen.

FltCancelFileOpen mengatur bendera FO_FILE_OPEN_CANCELLED di anggota Bendera objek file yang ditunjuk fileObject . Bendera ini menunjukkan bahwa operasi pembuatan telah dibatalkan, dan permintaan tutup (IRP_MJ_CLOSE) akan dikeluarkan untuk objek file ini.

Setelah operasi pembuatan dibatalkan, operasi tidak dapat diterbitkan kembali. Untuk informasi selengkapnya, lihat FltReissueSynchronousIo.

FltCancelFileOpen hanya dapat dipanggil dari rutinitas panggilan balik pasca-buat driver minifilter. Memanggil FltCancelFileOpen dari rutinitas panggilan balik pascaoperasi (PFLT_POST_OPERATION_CALLBACK) untuk jenis operasi I/O lainnya, atau memanggilnya dari rutinitas panggilan balik praoperasi (PFLT_PRE_OPERATION_CALLBACK), adalah kesalahan pemrograman.

Penelepon FltCancelFileOpen harus berjalan di IRQL PASSIVE_LEVEL. Namun, aman bagi driver minifilter untuk memanggil rutinitas ini dari rutinitas panggilan balik pasca-buat, karena rutinitas panggilan balik pasca-buat dijamin akan dipanggil di IRQL PASSIVE_LEVEL, dalam konteks utas yang berasal dari permintaan IRP_MJ_CREATE.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (lihat bagian Keterangan)

Lihat juga

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS untuk IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileBuka

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK