Fungsi ReOpenFile (winbase.h)

Membuka kembali objek sistem file yang ditentukan dengan hak akses, mode berbagi, dan bendera yang berbeda.

Sintaks

HANDLE ReOpenFile(
  [in] HANDLE hOriginalFile,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwShareMode,
  [in] DWORD  dwFlagsAndAttributes
);

Parameter

[in] hOriginalFile

Handel ke objek yang akan dibuka kembali. Objek harus dibuat oleh fungsi CreateFile .

[in] dwDesiredAccess

Akses yang diperlukan ke objek . Untuk daftar nilai, lihat Keamanan File dan Hak Akses. Anda tidak dapat meminta mode akses yang berkonflik dengan mode berbagi yang ditentukan dalam permintaan terbuka sebelumnya yang handelnya masih terbuka.

Jika parameter ini nol (0), aplikasi dapat mengkueri atribut perangkat tanpa mengakses perangkat. Ini berguna jika aplikasi ingin menentukan ukuran disk drive floppy dan format yang didukungnya tanpa memerlukan floppy di drive.

[in] dwShareMode

Mode berbagi objek. Anda tidak dapat meminta mode berbagi yang berkonflik dengan mode akses yang ditentukan dalam permintaan terbuka sebelumnya yang handelnya masih terbuka.

Jika parameter ini nol (0) dan CreateFile berhasil, objek tidak dapat dibagikan dan tidak dapat dibuka lagi sampai handel ditutup.

Untuk mengaktifkan proses lain untuk berbagi objek saat proses Anda membukanya, gunakan kombinasi satu atau beberapa nilai berikut untuk menentukan jenis akses yang dapat mereka minta saat membuka objek. Opsi berbagi ini tetap berlaku hingga Anda menutup handel ke objek.

Nilai Makna
FILE_SHARE_DELETE
0x00000004
Memungkinkan operasi terbuka berikutnya pada objek untuk meminta akses penghapusan. Jika tidak, proses lain tidak dapat membuka objek jika meminta akses penghapusan.

Jika objek telah dibuka dengan akses hapus, mode berbagi harus menyertakan bendera ini.

FILE_SHARE_READ
0x00000001
Memungkinkan operasi terbuka berikutnya pada objek untuk meminta akses baca. Jika tidak, proses lain tidak dapat membuka objek jika meminta akses baca.

Jika objek telah dibuka dengan akses baca, mode berbagi harus menyertakan bendera ini.

FILE_SHARE_WRITE
0x00000002
Memungkinkan operasi terbuka berikutnya pada objek untuk meminta akses tulis. Jika tidak, proses lain tidak dapat membuka objek jika meminta akses tulis.

Jika objek telah dibuka dengan akses tulis, mode berbagi harus menyertakan bendera ini.

[in] dwFlagsAndAttributes

Bendera file. Parameter ini bisa menjadi satu atau beberapa nilai berikut.

Nilai Makna
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
Menunjukkan bahwa file sedang dibuka atau dibuat untuk operasi pencadangan atau pemulihan. Sistem memastikan bahwa proses panggilan mengambil alih pemeriksaan keamanan file, asalkan memiliki hak SE_BACKUP_NAME dan SE_RESTORE_NAME . Untuk informasi selengkapnya, lihat Mengubah Hak Istimewa dalam Token.

Anda juga dapat mengatur bendera ini untuk mendapatkan handel ke direktori. Jika ditunjukkan, handel direktori dapat diteruskan ke beberapa fungsi sebagai pengganti handel file.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
Menunjukkan bahwa sistem operasi adalah menghapus file segera setelah semua handelnya ditutup, bukan hanya handel yang ditentukan tetapi juga handel terbuka atau duplikat lainnya.

Permintaan terbuka berikutnya untuk file gagal, kecuali FILE_SHARE_DELETE digunakan.

FILE_FLAG_NO_BUFFERING
0x20000000
Menginstruksikan sistem untuk membuka file tanpa buffering atau penembolokan menengah. Ketika dikombinasikan dengan FILE_FLAG_OVERLAPPED, bendera memberikan performa asinkron maksimum, karena I/O tidak bergantung pada operasi sinkron manajer memori. Namun, beberapa operasi I/O membutuhkan waktu lebih lama, karena data tidak disimpan di cache.

Aplikasi harus memenuhi persyaratan khusus saat bekerja dengan file yang dibuka dengan FILE_FLAG_NO_BUFFERING:

  • Akses file harus dimulai pada offset byte dalam file yang merupakan kelipatan bilangan bulat dari ukuran sektor volume.
  • Akses file harus untuk jumlah byte yang merupakan kelipatan bilangan bulat dari ukuran sektor volume. Misalnya, jika ukuran sektor adalah 512 byte, aplikasi dapat meminta baca dan tulis 512, 1024, 1536, atau 2048 byte, tetapi tidak 335, 981, atau 7171 byte.
  • Alamat buffer untuk operasi baca dan tulis harus diselaraskan sektor (diselaraskan pada alamat dalam memori yang merupakan kelipatan bilangan bulat dari ukuran sektor volume). Tergantung pada disk, persyaratan ini mungkin tidak diberlakukan.
Salah satu cara untuk menyelaraskan buffer pada kelipatan bilangan bulat dari ukuran sektor volume adalah dengan menggunakan VirtualAlloc untuk mengalokasikan buffer. Ini mengalokasikan memori yang selaras pada alamat yang merupakan kelipatan bilangan bulat dari ukuran halaman memori sistem operasi. Karena ukuran halaman memori dan sektor volume adalah kekuatan 2, memori ini juga diselaraskan pada alamat yang merupakan kelipatan bilangan bulat dari ukuran sektor volume. Halaman memori berukuran 4-8 KB; sektor adalah 512 byte (hard disk) atau 2048 byte (CD), dan oleh karena itu, sektor volume tidak pernah bisa lebih besar dari halaman memori.

Aplikasi dapat menentukan ukuran sektor volume dengan memanggil fungsi GetDiskFreeSpace .

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Menunjukkan bahwa data file diminta, tetapi harus terus berada di penyimpanan jarak jauh. Ini tidak boleh diangkut kembali ke penyimpanan lokal. Bendera ini ditujukan untuk digunakan oleh sistem penyimpanan jarak jauh.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Ketika bendera ini digunakan, pemrosesan titik pemilah ulang normal tidak terjadi, dan ReOpenFile mencoba membuka titik pemilah ulang. Ketika file dibuka, handel file dikembalikan, apakah filter yang mengontrol titik pemilah ulang beroperasi atau tidak. Bendera ini tidak dapat digunakan dengan bendera CREATE_ALWAYS . Jika file bukan titik pemilah ulang, maka bendera ini diabaikan.
FILE_FLAG_OVERLAPPED
0x40000000
Menginstruksikan sistem untuk menginisialisasi objek, sehingga operasi yang membutuhkan waktu yang signifikan untuk memproses pengembalian ERROR_IO_PENDING. Setelah operasi selesai, peristiwa yang ditentukan diatur ke status yang disinyalkan.

Saat Anda menentukan FILE_FLAG_OVERLAPPED, fungsi baca dan tulis file harus menentukan struktur yang TUMPANG TINDIH . Artinya, ketika FILE_FLAG_OVERLAPPED ditentukan, aplikasi harus melakukan pembacaan dan penulisan yang tumpang tindih.

Ketika FILE_FLAG_OVERLAPPED ditentukan, sistem tidak mempertahankan penunjuk file. Posisi file harus diteruskan sebagai bagian dari parameter lpOverlapped (menunjuk ke struktur YANG TUMPANG TINDIH ) ke fungsi baca dan tulis file.

Bendera ini juga memungkinkan lebih dari satu operasi dilakukan secara bersamaan dengan handel (operasi baca dan tulis simultan, misalnya).

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Menunjukkan bahwa file akan diakses sesuai dengan aturan POSIX. Ini termasuk mengizinkan beberapa file dengan nama, hanya berbeda jika, untuk sistem file yang mendukung penamaan tersebut. Berhati-hatilah saat menggunakan opsi ini karena file yang dibuat dengan bendera ini mungkin tidak dapat diakses oleh aplikasi yang ditulis untuk MS-DOS atau Windows 16-bit.
FILE_FLAG_RANDOM_ACCESS
0x10000000
Menunjukkan bahwa file diakses secara acak. Sistem dapat menggunakan ini sebagai petunjuk untuk mengoptimalkan penembolokan file.
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Menunjukkan bahwa file akan diakses secara berurutan dari awal hingga akhir. Sistem dapat menggunakan ini sebagai petunjuk untuk mengoptimalkan penembolokan file. Jika aplikasi memindahkan penunjuk file untuk akses acak, penembolokan optimal mungkin tidak terjadi; namun, operasi yang benar masih dijamin.

Menentukan bendera ini dapat meningkatkan performa untuk aplikasi yang membaca file besar menggunakan akses berurutan. Perolehan performa bisa lebih terlihat untuk aplikasi yang membaca file besar sebagian besar secara berurutan, tetapi kadang-kadang melewati rentang kecil byte.

FILE_FLAG_WRITE_THROUGH
0x80000000
Menginstruksikan sistem untuk menulis melalui cache perantara apa pun dan langsung masuk ke disk. Sistem masih dapat menyimpan operasi tulis, tetapi tidak dapat dengan malas membersihkannya.
 

Jika handel mewakili sisi klien dari pipa bernama, parameter dwFlags juga dapat berisi informasi Kualitas Keamanan Layanan. Untuk informasi selengkapnya, lihat Tingkat Peniruan. Ketika aplikasi panggilan menentukan bendera SECURITY_SQOS_PRESENT , parameter dwFlags dapat berisi satu atau beberapa nilai berikut.

Nilai Makna
SECURITY_ANONYMOUS
Meniru klien di tingkat peniruan nama anonim.
SECURITY_CONTEXT_TRACKING
Mode pelacakan keamanan bersifat dinamis. Jika bendera ini tidak ditentukan, mode pelacakan keamanan bersifat statis.
SECURITY_DELEGATION
Meniru klien di tingkat peniruan delegasi.
SECURITY_EFFECTIVE_ONLY
Hanya aspek yang diaktifkan dari konteks keamanan klien yang tersedia untuk server. Jika Anda tidak menentukan bendera ini, semua aspek konteks keamanan klien tersedia.

Ini memungkinkan klien untuk membatasi grup dan hak istimewa yang dapat digunakan server saat meniru klien.

SECURITY_IDENTIFICATION
Meniru klien di tingkat peniruan identitas.
SECURITY_IMPERSONATION
Meniru klien di tingkat peniruan peniruan.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah handel terbuka ke file yang ditentukan.

Jika fungsi gagal, nilai yang dikembalikan INVALID_HANDLE_VALUE. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Parameter dwFlags tidak boleh berisi bendera atribut file apa pun (FILE_ATTRIBUTE_*). Ini hanya dapat ditentukan ketika file dibuat.

Di Windows 8 dan Windows Server 2012, fungsi ini didukung oleh teknologi berikut.

Teknologi Didukung
Protokol Server Message Block (SMB) 3.0 Ya
SMB 3.0 Transparent Failover (TFO) Ya
SMB 3.0 dengan Scale-out File Shares (SO) Ya
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Ya

Persyaratan

   
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header winbase.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

CreateFile

Fungsi Manajemen File