enumerasi CF_OPEN_FILE_FLAGS (cfapi.h)
Bendera untuk meminta berbagai izin saat membuka file.
Sintaks
typedef enum CF_OPEN_FILE_FLAGS {
CF_OPEN_FILE_FLAG_NONE = 0x00000000,
CF_OPEN_FILE_FLAG_EXCLUSIVE = 0x00000001,
CF_OPEN_FILE_FLAG_WRITE_ACCESS = 0x00000002,
CF_OPEN_FILE_FLAG_DELETE_ACCESS = 0x00000004,
CF_OPEN_FILE_FLAG_FOREGROUND = 0x00000008
} ;
Konstanta
CF_OPEN_FILE_FLAG_NONE Nilai: 0x00000000 Tidak ada bendera file terbuka. |
CF_OPEN_FILE_FLAG_EXCLUSIVE Nilai: 0x00000001 Ketika ditentukan, CfOpenFileWithOplock mengembalikan handel tidak ada berbagi dan meminta RH (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock pada file. Panggilan CreateFile normal yang terbuka untuk salah satu FILE_EXECUTE | FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE (atau salah satu/kedua GENERIC_READ | GENERIC_WRITE) akan merusak oplock karena konflik berbagi, seperti yang dijelaskan di bagian Keterangan . Pemilik oplock akan menyelesaikan dan mengakui. |
CF_OPEN_FILE_FLAG_WRITE_ACCESS Nilai: 0x00000002 Ketika ditentukan, CfOpenFileWithOplock mencoba membuka file atau direktori dengan akses FILE_READ_DATA/FILE_LIST_DIRECTORY dan FILE_WRITE_DATA/FILE_ADD_FILE; jika tidak, ia mencoba membuka file atau direktori dengan FILE_READ_DATA/FILE_LIST_DIRECTORY. |
CF_OPEN_FILE_FLAG_DELETE_ACCESS Nilai: 0x00000004 Ketika ditentukan, CfOpenFileWithOplock mencoba membuka file atau direktori dengan akses DELETE; jika tidak, file akan terbuka secara normal. |
CF_OPEN_FILE_FLAG_FOREGROUND Nilai: 0x00000008 Ketika bendera ini digunakan, CfOpenFileWithOplock tidak meminta oplock. Ini harus digunakan ketika penelepon bertindak sebagai aplikasi latar depan. yaitu, mereka tidak peduli apakah handel file yang dibuat oleh API ini menyebabkan pelanggaran berbagi untuk penelepon lain, dan mereka tidak peduli tentang melanggar oplock apa pun yang mungkin sudah ada di file. Jadi, mereka membuka handel tanpa meminta oplock. Catatan: Perilaku latar belakang default meminta oplock saat membuka handel file sehingga panggilan mereka gagal jika sudah ada oplock, dan mereka dapat diberitahu untuk menutup handel mereka jika mereka perlu keluar dari jalan untuk menghindari menyebabkan pelanggaran berbagi nanti. Kecuali pemanggil menentukan CF_OPEN_FILE_FLAG_EXCLUSIVE ke CfOpenFileWithOplock, oplock yang mereka dapatkan hanya akan OPLOCK_LEVEL_CACHE_READ, bukan (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE), jadi tidak akan ada perlindungan pelanggaran berbagi yang mungkin diinginkan aplikasi latar belakang. |
Keterangan
Aplikasi latar belakang biasanya ingin beroperasi secara transparan pada file. Secara khusus, mereka ingin menghindari menyebabkan pelanggaran berbagi kepada pembuka (latar depan) lainnya. Untuk melakukannya, mereka mengambil (OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE) oplock, seperti akan diberikan dengan menggunakan CF_OPEN_FILE_FLAG_EXCLUSIVE dengan CfOpenFileWithOplock. Kemudian, jika beberapa pembuka lain datang bersama yang meminta mode berbagi/akses bertentangan dengan mode aplikasi latar belakang, oplock aplikasi latar belakang akan rusak. Ini meminta aplikasi latar belakang untuk menutup handel filenya (untuk handel Cf, yang menyebabkannya menjadi tidak valid - handel yang mendasar sebenarnya telah ditutup). Setelah aplikasi latar belakang menutup handelnya, permintaan lain untuk membuka berlanjut tanpa mengalami pelanggaran berbagi. Ini semua bekerja karena bagian OPLOCK_LEVEL_CACHE_HANDLE dari oplock. Tanpa CF_OPEN_FILE_FLAG_EXCLUSIVE, oplock hanya memiliki perlindungan OPLOCK_LEVEL_CACHE_READ, sehingga perlindungan pelanggaran berbagi tidak disediakan.
Ketika CF_OPEN_FILE_FLAG_EXCLUSIVE tidak ditentukan, yang terbuka adalah berbagi semua dan mendapatkan oplock OPLOCK_LEVEL_CACHE_READ.
Panggilan CreateFile normal tidak akan merusak oplock. Jika CreateFile normal menentukan mode berbagi yang bertentangan dengan akses handel Cf (misalnya, jika CreateFile normal tidak menentukan FILE_SHARE_READ), CreateFile normal akan gagal dengan ERROR_SHARING_VIOLATION. Oplock tidak pecah sampai pemanggil lain mengeluarkan I/O yang bertentangan, seperti tulis. Ketika itu terjadi , oplock break adalah saran saja.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 10, versi 1709 [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2016 [hanya aplikasi desktop] |
Header | cfapi.h |