Bagikan melalui


Fungsi IoCancelFileOpen (ntddk.h)

Rutinitas IoCancelFileOpen dapat digunakan oleh driver filter sistem file untuk menutup file yang telah dibuka oleh driver sistem file di tumpukan perangkat driver filter.

Sintaks

void IoCancelFileOpen(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PFILE_OBJECT   FileObject
);

Parameter

[in] DeviceObject

Penunjuk ke bagian atas tumpukan perangkat tepat di bawah objek perangkat pengandar filter.

[in] FileObject

Penunjuk ke objek file agar file ditutup.

Nilai kembali

Tidak ada

Keterangan

Jika driver filter sistem file menentukan bahwa permintaan buka file atau buat file harus gagal setelah driver tingkat bawah telah menyelesaikan permintaan dengan STATUS_SUCCESS, itu dapat menggunakan IoCancelFileOpen untuk menutup file yang dibuka oleh driver tingkat bawah.

Meskipun STATUS_REPARSE adalah nilai NTSTATUS yang sukses, tidak perlu memanggil IoCancelFileOpen untuk operasi pembuatan yang diselesaikan dengan STATUS_REPARSE, karena nilai status ini menunjukkan bahwa file tidak berhasil dibuka.

Panggilan yang berhasil ke IoCancelFileOpen memiliki efek berikut: Untuk minifilter dan filter warisan yang berada di atas pemanggil dalam tumpukan sistem file, permintaan buat tampaknya gagal. Bagi mereka yang berada di bawah penelepon, file tampaknya telah dibuka (atau dibuat) lalu ditutup.

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

Contoh umumnya adalah sebagai berikut:

  • Driver filter ada antara driver filter tingkat lebih tinggi dan driver sistem file tingkat bawah.

  • Driver filter meneruskan permintaan IRP_MJ_CREATE ke bawah tumpukan perangkat ke driver sistem file, dan driver sistem file menyelesaikan permintaan IRP_MJ_CREATE dengan status STATUS_SUCCESS.

  • Sebelum driver filter menyelesaikan permintaan buat, ia menentukan bahwa file harus ditutup.

  • Driver filter menggunakan IoCancelFileOpen untuk menutup file yang dibuka oleh driver sistem file.

Setelah memanggil IoCancelFileOpen, driver filter harus menyelesaikan permintaan pembuatan dengan kode kesalahan yang sesuai seperti STATUS_UNSUCCESSFUL atau STATUS_ACCESS_DENIED. Selain itu, ini harus mengatur bidang Irp-IoStatus.Information> ke nol.

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

IoCancelFileOpen mengatur bendera FO_FILE_OPEN_CANCELLED di anggota Bendera objek file yang ditunjuk fileObject . Bendera ini menunjukkan bahwa permintaan IRP_MJ_CREATE telah dibatalkan, dan permintaan IRP_MJ_CLOSE akan dikeluarkan untuk objek file ini. Setelah operasi pembuatan dibatalkan, operasi tidak dapat diterbitkan kembali - yaitu, STATUS_REPARSE tidak dapat dikembalikan oleh driver filter warisan jika telah memanggil rutinitas IoCreateFileOpen .

Minifilter harus menggunakan FltCancelFileBuka alih-alih IoCancelFileOpen.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Rutinitas ini tersedia di Microsoft Windows 2000 dan yang lebih baru.
Target Platform Universal
Header ntddk.h (termasuk Ntddk.h, Ntifs.h, Fltkernel.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Lihat juga

FltCancelFileBuka

FltReissueSynchronousIo

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateFile

ZwOpenFile