Bagikan melalui


Fungsi ZwCreateFile (wdm.h)

Rutinitas ZwCreateFile membuat file baru atau membuka file yang ada.

Sintaks

NTSYSAPI NTSTATUS ZwCreateFile(
  [out]          PHANDLE            FileHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [out]          PIO_STATUS_BLOCK   IoStatusBlock,
  [in, optional] PLARGE_INTEGER     AllocationSize,
  [in]           ULONG              FileAttributes,
  [in]           ULONG              ShareAccess,
  [in]           ULONG              CreateDisposition,
  [in]           ULONG              CreateOptions,
  [in, optional] PVOID              EaBuffer,
  [in]           ULONG              EaLength
);

Parameter

[out] FileHandle

Penunjuk ke variabel HANDLE yang menerima handel ke file.

[in] DesiredAccess

Menentukan nilai ACCESS_MASK yang menentukan akses yang diminta ke objek. Selain hak akses yang ditentukan untuk semua jenis objek, pemanggil dapat menentukan salah satu hak akses berikut, yang khusus untuk file.

bendera ACCESS_MASK Memungkinkan penelepon untuk melakukan ini
FILE_READ_DATA Membaca data dari file.
FILE_READ_ATTRIBUTES Baca atribut file. (Untuk informasi selengkapnya, lihat deskripsi parameter FileAttributes .)
FILE_READ_EA Baca atribut yang diperluas (EA) file. Bendera ini tidak relevan untuk driver perangkat dan perantara.
FILE_WRITE_DATA Tulis data ke file.
FILE_WRITE_ATTRIBUTES Tulis atribut file. (Untuk informasi selengkapnya, lihat deskripsi parameter FileAttributes .)
FILE_WRITE_EA Ubah atribut yang diperluas (EA) file. Bendera ini tidak relevan untuk driver perangkat dan perantara.
FILE_APPEND_DATA Tambahkan data ke file.
FILE_EXECUTE Gunakan I/O halaman sistem untuk membaca data dari file ke dalam memori. Bendera ini tidak relevan untuk driver perangkat dan perantara.

Jangan tentukan FILE_READ_DATA, FILE_WRITE_DATA, FILE_APPEND_DATA, atau FILE_EXECUTE saat Anda membuat atau membuka direktori.

Pemanggil hanya dapat menentukan hak akses generik, GENERIC_XXX, untuk file, bukan direktori. Hak akses generik sesuai dengan hak akses tertentu seperti yang diperlihatkan dalam tabel berikut.

Akses generik ke kanan Kumpulan hak akses tertentu
GENERIC_READ STANDARD_RIGHTS_READ, FILE_READ_DATA, FILE_READ_ATTRIBUTES, FILE_READ_EA, dan SINKRONKAN.
GENERIC_WRITE STANDARD_RIGHTS_WRITE, FILE_WRITE_DATA, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, dan SINKRONKAN.
GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE, FILE_EXECUTE, FILE_READ_ATTRIBUTES, dan SINKRONKAN. Nilai ini tidak relevan untuk perangkat dan driver perantara.
GENERIC_ALL FILE_ALL_ACCESS.

Misalnya, jika Anda menentukan GENERIC_READ untuk objek file, rutin memetakan nilai ini ke bitmask FILE_GENERIC_READ hak akses tertentu. Dalam tabel sebelumnya, hak akses khusus yang tercantum untuk GENERIC_READ sesuai dengan bendera akses yang terkandung dalam bitmask FILE_GENERIC_READ.

Jika file sebenarnya adalah direktori, pemanggil juga dapat menentukan hak akses generik berikut.

Bendera DesiredAccess Memungkinkan penelepon untuk melakukan ini
FILE_LIST_DIRECTORY Cantumkan file dalam direktori.
FILE_TRAVERSE Melintasi direktori, dengan kata lain, menyertakan direktori di jalur file.

Untuk informasi selengkapnya tentang hak akses, lihat ACCESS_MASK.

[in] ObjectAttributes

Penunjuk ke struktur OBJECT_ATTRIBUTES yang menentukan nama objek dan atribut lainnya. Gunakan InitializeObjectAttributes untuk menginisialisasi struktur ini. Jika penelepon tidak berjalan dalam konteks utas sistem, pemanggil harus mengatur atribut OBJ_KERNEL_HANDLE saat memanggil InitializeObjectAttributes.

[out] IoStatusBlock

Penunjuk ke struktur IO_STATUS_BLOCK yang menerima status penyelesaian akhir dan informasi lain tentang operasi yang diminta. Secara khusus, anggota Informasi menerima salah satu nilai berikut:

  • FILE_CREATED

  • FILE_OPENED

  • FILE_OVERWRITTEN

  • FILE_SUPERSEDED

  • FILE_EXISTS

  • FILE_DOES_NOT_EXIST

[in, optional] AllocationSize

Penunjuk ke LARGE_INTEGER yang berisi ukuran alokasi awal, dalam byte, untuk file yang dibuat atau ditimpa. Jika AllocationSizeadalah NULL, tidak ada ukuran alokasi yang ditentukan. Jika tidak ada file yang dibuat atau ditimpa, AllocationSize diabaikan.

[in] FileAttributes

Menentukan satu atau beberapa bendera FILE_ATTRIBUTE_XXX , yang mewakili atribut file yang akan diatur jika Anda membuat atau menimpa file. Pemanggil biasanya menentukan FILE_ATTRIBUTE_NORMAL, yang mengatur atribut default. Untuk daftar bendera FILE_ATTRIBUTE_XXX yang valid, lihat rutinitas CreateFile . Jika tidak ada file yang dibuat atau ditimpa, FileAttributes diabaikan.

[in] ShareAccess

Jenis akses berbagi, yang ditentukan sebagai nol atau kombinasi bendera berikut.

Bendera ShareAccess Memungkinkan utas lain untuk melakukan ini
FILE_SHARE_READ Membaca file
FILE_SHARE_WRITE Menulis file
FILE_SHARE_DELETE Menghapus file

Driver perangkat dan perantara biasanya mengatur ShareAccess ke nol, yang memberi pemanggil akses eksklusif ke file terbuka.

[in] CreateDisposition

Menentukan tindakan yang akan dilakukan jika file tidak atau tidak ada. CreateDisposition bisa menjadi salah satu nilai dalam tabel berikut.

Nilai CreateDisposition Tindakan jika ada file Tindakan jika file tidak ada
FILE_SUPERSEDE Ganti file. Buat file.
FILE_CREATE Mengembalikan kesalahan. Buat file.
FILE_OPEN Buka file. Mengembalikan kesalahan.
FILE_OPEN_IF Buka file. Buat file.
FILE_OVERWRITE Buka file, dan timpa. Mengembalikan kesalahan.
FILE_OVERWRITE_IF Buka file, dan timpa. Buat file.

[in] CreateOptions

Menentukan opsi yang akan diterapkan ketika driver membuat atau membuka file. Gunakan satu atau beberapa bendera dalam tabel berikut.

Bendera CreateOptions Makna
FILE_DIRECTORY_FILE File adalah direktori. Bendera CreateOptions yang kompatibel adalah FILE_SYNCHRONOUS_IO_ALERT, FILE_SYNCHRONOUS_IO_NONALERT, FILE_WRITE_THROUGH, FILE_OPEN_FOR_BACKUP_INTENT, dan FILE_OPEN_BY_FILE_ID. Parameter CreateDisposition harus diatur ke FILE_CREATE, FILE_OPEN, atau FILE_OPEN_IF.
FILE_NON_DIRECTORY_FILE File bukan direktori. Objek file yang akan dibuka dapat mewakili file data; perangkat logis, virtual, atau fisik; atau volume.
FILE_WRITE_THROUGH Layanan sistem, driver sistem file, dan driver yang menulis data ke file harus benar-benar mentransfer data ke file sebelum operasi tulis yang diminta dianggap selesai.
FILE_SEQUENTIAL_ONLY Semua akses ke file akan berurutan.
FILE_RANDOM_ACCESS Akses ke file bisa acak, jadi tidak ada operasi read-ahead berurutan yang harus dilakukan oleh driver sistem file atau oleh sistem.
FILE_NO_INTERMEDIATE_BUFFERING File tidak dapat di-cache atau di-buffer dalam buffer internal driver. Bendera ini tidak kompatibel dengan bendera FILE_APPEND_DATA parameter DesiredAccess .
FILE_SYNCHRONOUS_IO_ALERT Semua operasi pada file dilakukan secara sinkron. Setiap tunggu atas nama pemanggil tunduk pada penghentian dini dari pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan penunjuk posisi file. Jika bendera ini diatur, bendera SYNCHRONIZE harus diatur dalam parameter DesiredAccess .
FILE_SYNCHRONOUS_IO_NONALERT Semua operasi pada file dilakukan secara sinkron. Menunggu dalam sistem yang menyinkronkan antrean dan penyelesaian I/O tidak tunduk pada pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan konteks posisi file. Jika bendera ini diatur, bendera SYNCHRONIZE harus diatur dalam parameter DesiredAccess .
FILE_CREATE_TREE_CONNECTION Create koneksi pohon untuk file ini untuk membukanya melalui jaringan. Bendera ini tidak digunakan oleh perangkat dan driver perantara.
FILE_COMPLETE_IF_OPLOCKED Selesaikan operasi ini segera dengan kode keberhasilan alternatif STATUS_OPLOCK_BREAK_IN_PROGRESS jika file target dikunci oportunistik (oplock), daripada memblokir utas penelepon. Jika file di-oplock, penelepon lain sudah memiliki akses ke file. Bendera ini tidak digunakan oleh perangkat dan driver perantara. Untuk informasi tentang oplock, lihat Kunci Oportunistik.
FILE_NO_EA_KNOWLEDGE Jika atribut yang diperluas (EA) untuk file yang ada dibuka menunjukkan bahwa pemanggil harus memahami EA untuk menafsirkan file dengan benar, ZwCreateFile harus mengembalikan kesalahan. Bendera ini tidak relevan untuk perangkat dan driver perantara.
FILE_OPEN_REPARSE_POINT Buka file dengan titik pemisahan ulang dan lewati pemrosesan titik pemilah ulang normal untuk file. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini. Untuk informasi tentang titik pemilah ulang, lihat Memilah Ulang Titik.
FILE_DELETE_ON_CLOSE Sistem menghapus file ketika handel terakhir ke file diteruskan ke ZwClose. Jika bendera ini diatur, bendera DELETE harus diatur dalam parameter DesiredAccess .
FILE_OPEN_BY_FILE_ID Nama file yang ditentukan oleh parameter ObjectAttributes mencakup nomor referensi file biner 8-byte atau 16-byte atau ID objek untuk file, tergantung pada sistem file seperti yang ditunjukkan di bawah ini. Secara opsional, nama perangkat yang diikuti oleh karakter garis miring terbelakang dapat melanjutkan nilai biner ini. Misalnya, nama perangkat akan memiliki format berikut:

?? \C:\FileID
\device\HardDiskVolume1\ObjectID

di mana FileID adalah 8 byte dan ObjectID adalah 16 byte.

Pada NTFS, ini bisa berupa nomor referensi atau ID objek 8-byte atau 16 byte. Nomor referensi 16 byte sama dengan angka 8 byte yang diisi dengan nol.

Pada ReFS, ini bisa berupa nomor referensi 8-byte atau 16-byte. Angka 16 byte tidak terkait dengan angka 8 byte. ID objek tidak didukung.

Sistem file FAT, ExFAT, UDFS, dan CDFS tidak mendukung bendera ini.

Jumlah ini ditetapkan oleh dan khusus untuk sistem file tertentu.

Karena bidang nama file sebagian akan berisi blob biner, salah untuk mengasumsikan bahwa ini adalah string Unicode yang valid, dan yang lebih penting mungkin bukan string null yang dihentikan.
FILE_OPEN_FOR_BACKUP_INTENT File sedang dibuka untuk niat pencadangan. Oleh karena itu, sistem harus memeriksa hak akses tertentu dan memberi pemanggil akses yang sesuai ke file —sebelum memeriksa parameter DesiredAccess terhadap deskriptor keamanan file. Bendera ini tidak digunakan oleh perangkat dan driver perantara.
FILE_RESERVE_OPFILTER Bendera ini memungkinkan aplikasi untuk meminta kunci oportunistik Filter (oplock) untuk mencegah aplikasi lain mendapatkan pelanggaran berbagi. Jika sudah ada handel terbuka, permintaan buat akan gagal dengan STATUS_OPLOCK_NOT_GRANTED. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini. Untuk informasi tentang oplock, lihat Kunci Oportunistik.
FILE_OPEN_REQUIRING_OPLOCK File sedang dibuka dan kunci oportunistik (oplock) pada file diminta sebagai operasi atom tunggal. Sistem file memeriksa oplock sebelum melakukan operasi pembuatan, dan akan gagal membuat dengan kode pengembalian STATUS_CANNOT_BREAK_OPLOCK jika hasilnya adalah merusak oplock yang ada.

Bendera FILE_OPEN_REQUIRING_OPLOCK tersedia di Windows 7, Windows Server 2008 R2 dan sistem operasi Windows yang lebih baru.
FILE_SESSION_AWARE Klien yang membuka file atau perangkat mengetahui sesi dan akses per sesi divalidasi jika perlu.

Bendera FILE_SESSION_AWARE tersedia dimulai denganWindows 8.

[in, optional] EaBuffer

Untuk driver perangkat dan perantara, parameter ini harus berupa penunjuk NULL .

[in] EaLength

Untuk driver perangkat dan perantara, parameter ini harus nol.

Nilai kembali

ZwCreateFile mengembalikan STATUS_SUCCESS pada keberhasilan atau kode kesalahan NTSTATUS yang sesuai pada kegagalan. Dalam kasus terakhir, pemanggil dapat menentukan penyebab kegagalan dengan memeriksa parameter IoStatusBlock .

ZwCreateFile mungkin mengembalikan STATUS_FILE_LOCK_CONFLICT sebagai nilai yang dikembalikan atau di anggota Status struktur IO_STATUS_BLOCK yang ditunjukkan oleh parameter IoStatusBlock . Ini hanya akan terjadi jika file log NTFS penuh, dan kesalahan terjadi saat ZwCreateFile mencoba menangani situasi ini.

Keterangan

ZwCreateFile menyediakan handel yang dapat digunakan pemanggil untuk memanipulasi data file, atau status dan atribut objek file. Untuk informasi selengkapnya, lihat Menggunakan File di Driver.

Setelah handel yang ditunjukkan oleh FileHandle tidak lagi digunakan, driver harus memanggil ZwClose untuk menutupnya.

Jika pemanggil tidak berjalan dalam konteks utas sistem, pemanggil harus memastikan bahwa setiap handel yang dibuatnya adalah handel privat. Jika tidak, handel dapat diakses oleh proses dalam konteks driver yang berjalan. Untuk informasi selengkapnya, lihat Penanganan Objek.

Ada dua cara alternatif untuk menentukan nama file yang akan dibuat atau dibuka dengan ZwCreateFile:

  1. Sebagai nama jalur yang sepenuhnya memenuhi syarat, disediakan di anggota ObjectName dari objectAttributes input.

  2. Sebagai nama jalur relatif terhadap file direktori yang diwakili oleh handel di anggota RootDirectory dari input ObjectAttributes.

Mengatur bendera tertentu dalam parameter DesiredAccess menghasilkan efek berikut:

  • Agar penelepon menyinkronkan penyelesaian I/O dengan menunggu FileHandle yang dikembalikan, bendera SYNCHRONIZE harus diatur. Jika tidak, penelepon yang merupakan perangkat atau driver perantara harus menyinkronkan penyelesaian I/O dengan menggunakan objek peristiwa.

  • Jika pemanggil hanya mengatur bendera FILE_APPEND_DATA dan SYNCHRONIZE, pemanggil hanya dapat menulis ke akhir file, dan informasi offset apa pun tentang operasi tulis ke file diabaikan. File akan secara otomatis diperluas seperlunya untuk jenis operasi ini.

  • Mengatur bendera FILE_WRITE_DATA untuk file juga memungkinkan pemanggil menulis di luar akhir file. Sekali lagi, file secara otomatis diperluas seperlunya.

  • Jika penelepon hanya mengatur bendera FILE_EXECUTE dan SYNCHRONIZE, pemanggil tidak dapat langsung membaca atau menulis data apa pun ke file menggunakan FileHandle yang dikembalikan. Artinya, semua operasi pada file terjadi melalui pager sistem sebagai respons terhadap instruksi dan operasi akses data. Perangkat dan driver perantara tidak boleh mengatur bendera FILE_EXECUTE.

Parameter ShareAccess menentukan apakah utas terpisah dapat mengakses file yang sama, mungkin secara bersamaan. Asalkan kedua penelepon memiliki hak akses yang sesuai, file dapat berhasil dibuka dan dibagikan. Jika pemanggil asli ZwCreateFile tidak menentukan FILE_SHARE_READ, FILE_SHARE_WRITE, atau FILE_SHARE_DELETE, tidak ada pemanggil lain yang dapat membuka file—yaitu, pemanggil asli diberikan akses eksklusif.

Agar berhasil membuka file bersama, bendera DesiredAccess harus kompatibel dengan bendera DesiredAccess dan ShareAccess dari semua operasi terbuka sebelumnya yang belum dirilis melalui . Artinya, DesiredAccess yang ditentukan ke ZwCreateFile untuk file tertentu tidak boleh bertentangan dengan akses yang tidak diizinkan oleh pembuka lain dari file.

Nilai CreateDisposition FILE_SUPERSEDE mengharuskan pemanggil memiliki akses DELETE ke objek file yang ada. Jika demikian, panggilan yang berhasil ke ZwCreateFile dengan FILE_SUPERSEDE pada file yang ada secara efektif menghapus file tersebut, lalu membuatnya kembali. Ini menyiratkan bahwa, jika file telah dibuka oleh utas lain, file akan dibuka dengan menentukan parameter ShareAccess dengan set bendera FILE_SHARE_DELETE. Perhatikan bahwa jenis disposisi ini konsisten dengan gaya POSIX menimpa file.

Nilai CreateDisposition FILE_OVERWRITE_IF dan FILE_SUPERSEDE serupa. Jika ZwCreateFile dipanggil dengan file yang ada dan salah satu nilai CreateDisposition ini, file akan diganti.

Menimpa file secara semantik setara dengan operasi penggantian, kecuali untuk hal berikut:

  • Pemanggil harus memiliki akses tulis ke file, bukan menghapus akses. Ini menyiratkan bahwa, jika file telah dibuka oleh utas lain, file akan dibuka dengan bendera FILE_SHARE_WRITE yang diatur dalam input ShareAccess.

  • Atribut file yang ditentukan secara logis ORed dengan yang sudah ada di file. Ini menyiratkan bahwa, jika file telah dibuka oleh utas lain, pemanggil ZwCreateFile berikutnya tidak dapat menonaktifkan bendera FileAttributes yang ada tetapi dapat mengaktifkan bendera tambahan untuk file yang sama.

Nilai FILE_DIRECTORY_FILE CreateOptions menentukan bahwa file yang akan dibuat atau dibuka adalah direktori. Ketika file direktori dibuat, sistem file membuat struktur yang sesuai pada disk untuk mewakili direktori kosong untuk struktur on-disk sistem file tertentu. Jika opsi ini ditentukan dan file yang diberikan untuk dibuka bukan file direktori, atau jika pemanggil menentukan nilai CreateOptions atau CreateDisposition yang tidak konsisten, panggilan ke ZwCreateFile akan gagal.

Bendera FILE_NO_INTERMEDIATE_BUFFERING CreateOptions mencegah sistem file melakukan buffer perantara atas nama pemanggil. Menentukan bendera ini menempatkan batasan berikut pada parameter pemanggil ke rutinitas File ZwXxx lainnya:

  • ByteOffset opsional apa pun yang diteruskan ke ZwReadFile atau ZwWriteFile harus berupa kelipatan ukuran sektor.

  • Panjang yang diteruskan ke ZwReadFile atau ZwWriteFile harus merupakan integral dari ukuran sektor. Perhatikan bahwa menentukan operasi baca ke buffer yang panjangnya persis dengan ukuran sektor dapat mengakibatkan lebih sedikit jumlah byte signifikan yang ditransfer ke buffer tersebut jika akhir file tercapai selama transfer.

  • Buffer harus diselaraskan sesuai dengan persyaratan keselarasan perangkat yang mendasar. Untuk mendapatkan informasi ini, panggil ZwCreateFile untuk mendapatkan handel untuk objek file yang mewakili perangkat fisik, dan teruskan handel tersebut ke ZwQueryInformationFile. Untuk daftar nilai FILE_XXX_ALIGNMENT sistem, lihat DEVICE_OBJECT.

  • Panggilan ke ZwSetInformationFile dengan parameter FileInformationClass yang diatur ke FilePositionInformation harus menentukan offset yang merupakan kelipatan ukuran sektor.

Bendera FILE_SYNCHRONOUS_IO_ALERT dan FILE_SYNCHRONOUS_IO_NONALERT CreateOptions , yang saling eksklusif seperti namanya, tentukan bahwa semua operasi I/O pada file akan sinkron—selama terjadi melalui objek file yang disebutkan oleh FileHandle yang dikembalikan. Semua I/O pada file tersebut diserialisasikan di semua utas menggunakan handel yang dikembalikan. Jika salah satu bendera CreateOptions ini diatur, bendera SYNCHRONIZE DesiredAccess juga harus diatur—untuk memaksa manajer I/O menggunakan objek file sebagai objek sinkronisasi. Dalam kasus ini, manajer I/O melacak offset posisi file saat ini, yang dapat Anda teruskan ke ZwReadFile dan ZwWriteFile. Panggil ZwQueryInformationFile atau ZwSetInformationFile untuk mendapatkan atau mengatur posisi ini.

Jika bendera CreateOptions FILE_OPEN_REPARSE_POINT tidak ditentukan dan ZwCreateFile mencoba membuka file dengan titik pemilah ulang, pemrosesan titik pemilah ulang normal terjadi untuk file. Jika, di sisi lain, bendera FILE_OPEN_REPARSE_POINT ditentukan, pemrosesan reparse normal tidak terjadi dan ZwCreateFile mencoba untuk langsung membuka file titik reparse. Dalam kedua kasus, jika operasi terbuka berhasil, ZwCreateFile mengembalikan STATUS_SUCCESS; jika tidak, rutinitas mengembalikan kode kesalahan NTSTATUS. ZwCreateFile tidak pernah mengembalikan STATUS_REPARSE.

Bendera CreateOptions FILE_OPEN_REQUIRING_OPLOCK menghilangkan waktu antara saat Anda membuka file dan meminta oplock yang berpotensi memungkinkan pihak ketiga untuk membuka file dan mendapatkan pelanggaran berbagi. Aplikasi dapat menggunakan bendera FILE_OPEN_REQUIRING_OPLOCK pada ZwCreateFile lalu meminta oplock apa pun. Ini memastikan bahwa pemilik oplock akan diberi tahu tentang permintaan terbuka berikutnya yang menyebabkan pelanggaran berbagi.

Di Windows 7, jika handel lain ada pada file ketika aplikasi menggunakan bendera FILE_OPEN_REQUIRING_OPLOCK, operasi pembuatan akan gagal dengan STATUS_OPLOCK_NOT_GRANTED. Pembatasan ini sudah tidak ada lagi dimulai dengan Windows 8.

Jika operasi pembuatan ini akan merusak oplock yang sudah ada pada file, maka mengatur bendera FILE_OPEN_REQUIRING_OPLOCK akan menyebabkan operasi pembuatan gagal dengan STATUS_CANNOT_BREAK_OPLOCK. Oplock yang ada tidak akan rusak oleh operasi pembuatan ini.

Aplikasi yang menggunakan bendera FILE_OPEN_REQUIRING_OPLOCK harus meminta oplock setelah panggilan ini berhasil, atau semua upaya berikutnya untuk membuka file akan diblokir tanpa manfaat pemrosesan oplock normal. Demikian pula, jika panggilan ini berhasil tetapi permintaan oplock berikutnya gagal, aplikasi yang menggunakan bendera ini harus menutup handelnya setelah mendeteksi bahwa permintaan oplock telah gagal.

Bendera FILE_OPEN_REQUIRING_OPLOCK tersedia di Windows 7, Windows Server 2008 R2 dan sistem operasi Windows yang lebih baru. Sistem file Microsoft yang mengimplementasikan bendera ini di Windows 7 adalah NTFS, FAT, dan exFAT.

Bendera CreateOptions FILE_RESERVE_OPFILTER memungkinkan aplikasi untuk meminta oplock Tingkat 1, Batch, atau Filter untuk mencegah aplikasi lain mendapatkan pelanggaran berbagi. Namun, FILE_RESERVE_OPFILTER hanya praktis berguna untuk Filter oplock. Untuk menggunakannya, Anda harus menyelesaikan langkah-langkah berikut:

  1. Terbitkan permintaan buat dengan CreateOptions FILE_RESERVE_OPFILTER, DesiredAccess dari FILE_READ_ATTRIBUTES, dan ShareAccess yang tepat FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

    • Jika sudah ada handel terbuka, permintaan pembuatan gagal dengan STATUS_OPLOCK_NOT_GRANTED, dan oplock berikutnya yang diminta juga gagal.

    • Jika Anda membuka dengan lebih banyak akses atau lebih sedikit berbagi juga akan menyebabkan kegagalan STATUS_OPLOCK_NOT_GRANTED.

  2. Jika permintaan pembuatan berhasil, minta oplock.

  3. Buka handel lain ke file untuk melakukan I/O.

Langkah ketiga membuat ini praktis hanya untuk Filter oplock. Handel yang dibuka di langkah 3 dapat memiliki DesiredAccess yang berisi maksimum FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | FILE_READ_DATA | FILE_READ_EA | FILE_EXECUTE | SINKRONKAN | READ_CONTROL dan masih belum merusak oplock Filter. Namun, DesiredAccess apa pun yang lebih besar dari FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE akan merusak oplock Level 1 atau Batch dan membuat bendera FILE_RESERVE_OPFILTER tidak berguna untuk jenis oplock tersebut.

NTFS adalah satu-satunya sistem file Microsoft yang menerapkan FILE_RESERVE_OPFILTER.

Pemanggil ZwCreateFile harus berjalan di IRQL = PASSIVE_LEVEL dan dengan APC kernel khusus diaktifkan.

Jika panggilan ke fungsi ini terjadi dalam mode pengguna, Anda harus menggunakan nama "NtCreateFile" alih-alih "ZwCreateFile".

Untuk panggilan dari driver mode kernel, versi NtXxx dan ZwXxx dari rutinitas Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menafsirkan parameter input. Untuk informasi selengkapnya tentang hubungan antara versi NtXxx dan ZwXxx dari rutinitas, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (lihat bagian Keterangan)
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Lihat juga

ACCESS_MASK

DEVICE_OBJECT

IO_STATUS_BLOCK

InitializeObjectAttributes

Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli

ZwClose

ZwOpenFile

ZwQueryInformationFile

ZwReadFile

ZwSetInformationFile

ZwWriteFile

 Kunci Oportunistik

Reparse Points