Fungsi CreateFileA (fileapi.h)

Membuat atau membuka file atau perangkat I/O. Perangkat I/O yang paling umum digunakan adalah sebagai berikut: file, aliran file, direktori, disk fisik, volume, buffer konsol, drive pita, sumber daya komunikasi, mailslot, dan pipa. Fungsi mengembalikan handel yang dapat digunakan untuk mengakses file atau perangkat untuk berbagai jenis I/O tergantung pada file atau perangkat dan bendera dan atribut yang ditentukan.

Untuk melakukan operasi ini sebagai operasi yang ditransaksikan, yang menghasilkan handel yang dapat digunakan untuk I/O yang ditransaksikan, gunakan fungsi CreateFileTransacted .

Sintaks

HANDLE CreateFileA(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);

Parameter

[in] lpFileName

Nama file atau perangkat yang akan dibuat atau dibuka. Anda dapat menggunakan garis miring (/) atau garis miring terbelakang (\) dalam nama ini.

Secara default, nama terbatas pada MAX_PATH karakter. Untuk memperpanjang batas ini menjadi 32.767 karakter lebar, tambahkan "\\?\" ke jalur. Untuk informasi selengkapnya, lihat Menamai File, Jalur, dan Namespace.

Tip

Dimulai dengan Windows 10, Versi 1607, Anda dapat ikut serta untuk menghapus batasan MAX_PATH tanpa menambahkan awalan "\\?\". Lihat bagian "Batasan Panjang Jalur Maksimum" dari Penamaan File, Jalur, dan Namespace untuk detailnya.

Untuk informasi tentang nama perangkat khusus, lihat Menentukan Nama Perangkat MS-DOS.

Untuk membuat aliran file, tentukan nama file, titik dua, lalu nama aliran. Untuk informasi selengkapnya, lihat Aliran File.

[in] dwDesiredAccess

Akses yang diminta ke file atau perangkat, yang dapat diringkas sebagai baca, tulis, keduanya atau 0 untuk menunjukkan keduanya).

Nilai yang paling umum digunakan adalah GENERIC_READ, GENERIC_WRITE, atau keduanya (GENERIC_READ | GENERIC_WRITE). Untuk informasi selengkapnya, lihat Hak Akses Generik, Keamanan File dan Hak Akses, Konstanta Hak Akses File, dan ACCESS_MASK.

Jika parameter ini nol, aplikasi dapat meminta metadata tertentu seperti atribut file, direktori, atau perangkat tanpa mengakses file atau perangkat tersebut, bahkan jika akses GENERIC_READ akan ditolak.

Anda tidak dapat meminta mode akses yang berkonflik dengan mode berbagi yang ditentukan oleh parameter dwShareMode dalam permintaan terbuka yang sudah memiliki handel terbuka.

Untuk informasi selengkapnya, lihat bagian Keterangan dari topik ini dan Membuat dan Membuka File.

[in] dwShareMode

Mode berbagi file atau perangkat yang diminta, yang dapat dibaca, ditulis, keduanya, hapus, semua ini, atau tidak ada (lihat tabel berikut). Permintaan akses ke atribut atau atribut yang diperluas tidak terpengaruh oleh bendera ini.

Jika parameter ini nol dan CreateFile berhasil, file atau perangkat tidak dapat dibagikan dan tidak dapat dibuka lagi hingga handel ke file atau perangkat ditutup. Untuk informasi lebih lanjut, lihat bagian Keterangan.

Anda tidak dapat meminta mode berbagi yang berkonflik dengan mode akses yang ditentukan dalam permintaan yang ada yang memiliki handel terbuka. CreateFile akan gagal dan fungsi GetLastError akan mengembalikan ERROR_SHARING_VIOLATION.

Untuk mengaktifkan proses berbagi file atau perangkat saat proses lain membuka file atau perangkat, gunakan kombinasi yang kompatibel dari satu atau beberapa nilai berikut. Untuk informasi selengkapnya tentang kombinasi parameter ini yang valid dengan parameter dwDesiredAccess , lihat Membuat dan Membuka File.

Catatan Opsi berbagi untuk setiap handel terbuka tetap berlaku hingga handel tersebut ditutup, terlepas dari konteks proses.
 
Nilai Makna
0
0x00000000
Mencegah proses lain membuka file atau perangkat jika meminta akses hapus, baca, atau tulis.
FILE_SHARE_DELETE
0x00000004
Memungkinkan operasi terbuka berikutnya pada file atau perangkat untuk meminta akses penghapusan.

Jika tidak, proses lain tidak dapat membuka file atau perangkat jika meminta akses penghapusan.

Jika bendera ini tidak ditentukan, tetapi file atau perangkat telah dibuka untuk akses penghapusan, fungsi gagal.

Catatan Akses penghapusan memungkinkan operasi hapus dan ganti nama.
 
FILE_SHARE_READ
0x00000001
Memungkinkan operasi terbuka berikutnya pada file atau perangkat untuk meminta akses baca.

Jika tidak, proses lain tidak dapat membuka file atau perangkat jika meminta akses baca.

Jika bendera ini tidak ditentukan, tetapi file atau perangkat telah dibuka untuk akses baca, fungsi gagal.

FILE_SHARE_WRITE
0x00000002
Memungkinkan operasi terbuka berikutnya pada file atau perangkat untuk meminta akses tulis.

Jika tidak, proses lain tidak dapat membuka file atau perangkat jika meminta akses tulis.

Jika bendera ini tidak ditentukan, tetapi file atau perangkat telah dibuka untuk akses tulis atau memiliki pemetaan file dengan akses tulis, fungsi gagal.

[in, optional] lpSecurityAttributes

Penunjuk ke struktur SECURITY_ATTRIBUTES yang berisi dua anggota data terpisah tetapi terkait: deskriptor keamanan opsional, dan nilai Boolean yang menentukan apakah handel yang dikembalikan dapat diwariskan oleh proses turunan.

Parameter ini bisa NULL.

Jika parameter ini NULL, handel yang dikembalikan oleh CreateFile tidak dapat diwariskan oleh proses turunan apa pun yang dapat dibuat aplikasi dan file atau perangkat yang terkait dengan handel yang dikembalikan mendapatkan pendeskripsi keamanan default.

Anggota lpSecurityDescriptor dari struktur menentukan SECURITY_DESCRIPTOR untuk file atau perangkat. Jika anggota ini ADALAH NULL, file atau perangkat yang terkait dengan handel yang dikembalikan diberi pendeskripsi keamanan default.

CreateFile mengabaikan anggota lpSecurityDescriptor saat membuka file atau perangkat yang ada, tetapi terus menggunakan anggota bInheritHandle .

Anggota bInheritHandle dari struktur menentukan apakah handel yang dikembalikan dapat diwariskan.

Untuk informasi lebih lanjut, lihat bagian Keterangan.

[in] dwCreationDisposition

Tindakan yang harus diambil pada file atau perangkat yang ada atau tidak ada.

Untuk perangkat selain file, parameter ini biasanya diatur ke OPEN_EXISTING.

Untuk informasi lebih lanjut, lihat bagian Keterangan.

Parameter ini harus merupakan salah satu nilai berikut, yang tidak dapat digabungkan:

Nilai Makna
CREATE_ALWAYS
2
Membuat file baru, selalu.

Jika file yang ditentukan ada dan dapat ditulis, fungsi memotong file, fungsi berhasil, dan kode kesalahan terakhir diatur ke ERROR_ALREADY_EXISTS (183).

Jika file yang ditentukan tidak ada dan merupakan jalur yang valid, file baru dibuat, fungsi berhasil, dan kode kesalahan terakhir diatur ke nol.

Untuk informasi selengkapnya, lihat bagian Keterangan dari topik ini.

CREATE_NEW
1
Membuat file baru, hanya jika belum ada.

Jika file yang ditentukan ada, fungsi gagal dan kode kesalahan terakhir diatur ke ERROR_FILE_EXISTS (80).

Jika file yang ditentukan tidak ada dan merupakan jalur yang valid ke lokasi bisa-tulis, file baru akan dibuat.

OPEN_ALWAYS
4
Selalu membuka file.

Jika file yang ditentukan ada, fungsi berhasil dan kode kesalahan terakhir diatur ke ERROR_ALREADY_EXISTS (183).

Jika file yang ditentukan tidak ada dan merupakan jalur yang valid ke lokasi bisa-tulis, fungsi membuat file dan kode kesalahan terakhir diatur ke nol.

OPEN_EXISTING
3
Membuka file atau perangkat, hanya jika ada.

Jika file atau perangkat yang ditentukan tidak ada, fungsi gagal dan kode kesalahan terakhir diatur ke ERROR_FILE_NOT_FOUND (2).

Untuk informasi selengkapnya tentang perangkat, lihat bagian Keterangan.

TRUNCATE_EXISTING
5
Membuka file dan memotongnya sehingga ukurannya nol byte, hanya jika ada.

Jika file yang ditentukan tidak ada, fungsi gagal dan kode kesalahan terakhir diatur ke ERROR_FILE_NOT_FOUND (2).

Proses panggilan harus membuka file dengan GENERIC_WRITE bit yang ditetapkan sebagai bagian dari parameter dwDesiredAccess .

[in] dwFlagsAndAttributes

Atribut dan bendera file atau perangkat, FILE_ATTRIBUTE_NORMAL menjadi nilai default yang paling umum untuk file.

Parameter ini dapat mencakup kombinasi atribut file yang tersedia (FILE_ATTRIBUTE_*). Semua atribut file lainnya mengambil alih FILE_ATTRIBUTE_NORMAL.

Parameter ini juga dapat berisi kombinasi bendera (FILE_FLAG_*) untuk kontrol perilaku penembolokan file atau perangkat, mode akses, dan bendera tujuan khusus lainnya. Ini dikombinasikan dengan nilai FILE_ATTRIBUTE_* .

Parameter ini juga dapat berisi informasi Kualitas Keamanan Layanan (SQOS) dengan menentukan bendera SECURITY_SQOS_PRESENT . Informasi bendera terkait SQOS tambahan disajikan dalam tabel mengikuti atribut dan tabel bendera.

Catatan Ketika CreateFile membuka file yang ada, file umumnya menggabungkan bendera file dengan atribut file dari file yang ada, dan mengabaikan atribut file apa pun yang disediakan sebagai bagian dari dwFlagsAndAttributes. Kasus khusus dirinci dalam Membuat dan Membuka File.
 
Beberapa atribut dan bendera file berikut mungkin hanya berlaku untuk file dan belum tentu semua jenis perangkat lain yang dapat dibuka CreateFile . Untuk informasi tambahan, lihat bagian Keterangan dari topik ini dan Membuat dan Membuka File.

Untuk akses tingkat lanjut ke atribut file lainnya, lihat SetFileAttributes. Untuk daftar lengkap semua atribut file dengan nilai dan deskripsinya, lihat Konstanta Atribut File.

Atribut Makna
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
File harus diarsipkan. Aplikasi menggunakan atribut ini untuk menandai file untuk pencadangan atau penghapusan.
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
File atau direktori dienkripsi. Untuk file, ini berarti bahwa semua data dalam file dienkripsi. Untuk direktori, ini berarti bahwa enkripsi adalah default untuk file dan subdirektori yang baru dibuat. Untuk informasi selengkapnya, lihat Enkripsi File.

Bendera ini tidak berpengaruh jika FILE_ATTRIBUTE_SYSTEM juga ditentukan.

Bendera ini tidak didukung pada Windows edisi Home, Home Premium, Starter, atau ARM.

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
File disembunyikan. Jangan sertakan dalam daftar direktori biasa.
FILE_ATTRIBUTE_NORMAL
128 (0x80)
File tidak memiliki atribut lain yang ditetapkan. Atribut ini hanya valid jika digunakan sendiri.
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
Data file tidak segera tersedia. Atribut ini menunjukkan bahwa data file dipindahkan secara fisik ke penyimpanan offline. Atribut ini digunakan oleh Penyimpanan Jarak Jauh, perangkat lunak manajemen penyimpanan hierarkis. Aplikasi tidak boleh secara segan-segan mengubah atribut ini.
FILE_ATTRIBUTE_READONLY
1 (0x1)
File bersifat baca-saja. Aplikasi dapat membaca file, tetapi tidak dapat menulis atau menghapusnya.
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
File adalah bagian dari atau digunakan secara eksklusif oleh sistem operasi.
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
File sedang digunakan untuk penyimpanan sementara.

Untuk informasi selengkapnya, lihat bagian Perilaku Penembolokan topik ini.

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

Anda harus mengatur bendera ini untuk mendapatkan handel ke direktori. Handel direktori dapat diteruskan ke beberapa fungsi alih-alih handel file. Untuk informasi lebih lanjut, lihat bagian Keterangan.

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
File akan dihapus segera setelah semua pegangannya ditutup, yang mana mencakup pegangan yang ditentukan dan pegangan lain yang terbuka atau yang diduplikasi.

Jika ada handel terbuka yang ada ke file, panggilan gagal kecuali semuanya dibuka dengan mode berbagi FILE_SHARE_DELETE .

Permintaan terbuka berikutnya untuk file tersebut akan gagal, kecuali mode berbagi FILE_SHARE_DELETE ditentukan.

FILE_FLAG_NO_BUFFERING
0x20000000
File atau perangkat sedang dibuka tanpa penembolokan sistem untuk pembacaan dan penulisan data. Bendera ini tidak mempengaruhi penembolokan hard disk atau file yang dipetakan memori.

Ada persyaratan ketat untuk berhasil bekerja dengan file yang dibuka dengan CreateFile menggunakan bendera FILE_FLAG_NO_BUFFERING , untuk detailnya lihat Buffering File.

FILE_FLAG_OPEN_NO_RECALL
0x00100000
Data file diminta, tetapi harus terus berada di penyimpanan jarak jauh. Ini tidak boleh diangkut kembali ke penyimpanan lokal. Bendera ini untuk digunakan oleh sistem penyimpanan jarak jauh.
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
Pemrosesan titik pemilah ulang normal tidak akan terjadi; CreateFile akan 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.

Untuk informasi lebih lanjut, lihat bagian Keterangan.

FILE_FLAG_OVERLAPPED
0x40000000
File atau perangkat sedang dibuka atau dibuat untuk I/O asinkron.

Ketika operasi I/O berikutnya selesai pada handel ini, peristiwa yang ditentukan dalam struktur TUMPANG TINDIH akan diatur ke status sinyal.

Jika bendera ini ditentukan, file dapat digunakan untuk operasi baca dan tulis secara bersamaan.

Jika bendera ini tidak ditentukan, maka operasi I/O diserialisasikan, bahkan jika panggilan ke fungsi baca dan tulis menentukan struktur yang TUMPANG TINDIH .

Untuk informasi tentang pertimbangan saat menggunakan handel file yang dibuat dengan bendera ini, lihat bagian Handel I/O Sinkron dan Asinkron dari topik ini.

FILE_FLAG_POSIX_SEMANTICS
0x01000000
Akses akan terjadi 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
Akses dimaksudkan untuk acak. Sistem dapat menggunakan ini sebagai petunjuk untuk mengoptimalkan penembolokan file.

Bendera ini tidak berpengaruh jika sistem file tidak mendukung I/O cache dan FILE_FLAG_NO_BUFFERING.

Untuk informasi selengkapnya, lihat bagian Perilaku Penembolokan dari topik ini.

FILE_FLAG_SESSION_AWARE
0x00800000
File atau perangkat sedang dibuka dengan kesadaran sesi. Jika bendera ini tidak ditentukan, maka perangkat per sesi (seperti perangkat yang menggunakan Pengalihan USB RemoteFX) tidak dapat dibuka oleh proses yang berjalan di sesi 0. Bendera ini tidak berpengaruh bagi penelepon yang tidak berada di sesi 0. Bendera ini hanya didukung pada Windows edisi server.

Windows Server 2008 R2 dan Windows Server 2008: Bendera ini tidak didukung sebelum Windows Server 2012.

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
Akses dimaksudkan untuk berurutan dari awal hingga akhir. Sistem dapat menggunakan ini sebagai petunjuk untuk mengoptimalkan penembolokan file.

Bendera ini tidak boleh digunakan jika read-behind (yaitu, pemindaian terbalik) akan digunakan.

Bendera ini tidak berpengaruh jika sistem file tidak mendukung I/O cache dan FILE_FLAG_NO_BUFFERING.

Untuk informasi selengkapnya, lihat bagian Perilaku Penembolokan dari topik ini.

FILE_FLAG_WRITE_THROUGH
0x80000000
Operasi tulis tidak akan melalui cache perantara apa pun, mereka akan langsung masuk ke disk.

Untuk informasi tambahan, lihat bagian Perilaku Penembolokan dari topik ini.

 

Parameter dwFlagsAndAttributes juga dapat menentukan informasi SQOS. Untuk informasi selengkapnya, lihat Tingkat Peniruan. Ketika aplikasi panggilan menentukan bendera SECURITY_SQOS_PRESENT sebagai bagian dari dwFlagsAndAttributes, aplikasi juga dapat berisi satu atau beberapa nilai berikut.

Bendera keamanan 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 identifikasi.
SECURITY_IMPERSONATION
Meniru klien di tingkat peniruan. Ini adalah perilaku default jika tidak ada bendera lain yang ditentukan bersama dengan bendera SECURITY_SQOS_PRESENT .

[in, optional] hTemplateFile

Handel yang valid ke file templat dengan hak akses GENERIC_READ . File templat menyediakan atribut file dan atribut yang diperluas untuk file yang sedang dibuat.

Parameter ini bisa NULL.

Saat membuka file yang ada, CreateFile mengabaikan parameter ini.

Saat membuka file terenkripsi baru, file mewarisi daftar kontrol akses diskresi dari direktori induknya. Untuk informasi tambahan, lihat Enkripsi File.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah handel terbuka ke file, perangkat, pipa bernama, atau slot email yang ditentukan.

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

Keterangan

CreateFile awalnya dikembangkan khusus untuk interaksi file tetapi sejak itu telah diperluas dan ditingkatkan untuk menyertakan sebagian besar jenis perangkat dan mekanisme I/O lainnya yang tersedia untuk pengembang Windows. Bagian ini mencoba untuk mencakup berbagai masalah yang mungkin dialami pengembang saat menggunakan CreateFile dalam konteks yang berbeda dan dengan jenis I/O yang berbeda. Teks mencoba menggunakan file kata hanya ketika merujuk secara khusus ke data yang disimpan dalam file aktual pada sistem file. Namun, beberapa penggunaan file mungkin merujuk lebih umum ke objek I/O yang mendukung mekanisme seperti file. Penggunaan liberal file istilah ini sangat lazim dalam nama konstanta dan nama parameter karena alasan historis yang disebutkan sebelumnya.

Ketika aplikasi selesai menggunakan handel objek yang dikembalikan oleh CreateFile, gunakan fungsi CloseHandle untuk menutup handel. Ini tidak hanya membebaskan sumber daya sistem, tetapi dapat memiliki pengaruh yang lebih luas pada hal-hal seperti berbagi file atau perangkat dan menerapkan data ke disk. Spesifik dicatat dalam topik ini sebagaimana mewajibkan.

Windows Server 2003 dan Windows XP: Pelanggaran berbagi terjadi jika upaya dilakukan untuk membuka file atau direktori untuk penghapusan pada komputer jarak jauh ketika nilai parameter dwDesiredAccess adalah bendera akses DELETE (0x00010000) OR'ed dengan bendera akses lainnya, dan file atau direktori jarak jauh belum dibuka dengan FILE_SHARE_DELETE. Untuk menghindari pelanggaran berbagi dalam skenario ini, buka file atau direktori jarak jauh dengan akses DELETE saja, atau panggil DeleteFile tanpa terlebih dahulu membuka file atau direktori untuk penghapusan.

Beberapa sistem file, seperti sistem file NTFS, mendukung kompresi atau enkripsi untuk file dan direktori individual. Pada volume yang memiliki sistem file yang dipasang dengan dukungan ini, file baru mewarisi atribut kompresi dan enkripsi direktorinya.

Anda tidak dapat menggunakan CreateFile untuk mengontrol kompresi, dekompresi, atau dekripsi pada file atau direktori. Untuk informasi selengkapnya, lihat Membuat dan Membuka File, Kompresi dan Dekompresi File, dan Enkripsi File.

Windows Server 2003 dan Windows XP: Untuk tujuan kompatibilitas mundur, CreateFile tidak menerapkan aturan pewarisan saat Anda menentukan deskriptor keamanan di lpSecurityAttributes. Untuk mendukung pewarisan, fungsi yang nantinya mengkueri deskriptor keamanan file ini dapat secara heuristik menentukan dan melaporkan bahwa pewarisan berlaku. Untuk informasi selengkapnya, lihat Propagasi Otomatis ACE yang Dapat Diwariskan.

Seperti yang dinyatakan sebelumnya, jika parameter lpSecurityAttributes adalah NULL, handel yang dikembalikan oleh CreateFile tidak dapat diwarisi oleh proses anak apa pun yang dapat dibuat aplikasi Anda. Informasi berikut mengenai parameter ini juga berlaku:

  • Jika variabel anggota bInheritHandle bukan FALSE, yang merupakan nilai bukan nol, maka handel dapat diwarisi. Oleh karena itu sangat penting anggota struktur ini diinisialisasi dengan benar ke FALSE jika Anda tidak berniat menangani agar dapat diwariskan.
  • Daftar kontrol akses (ACL) di deskriptor keamanan default untuk file atau direktori diwarisi dari direktori induknya.
  • Sistem file target harus mendukung keamanan pada file dan direktori agar anggota lpSecurityDescriptor memiliki efek pada mereka, yang dapat ditentukan dengan menggunakan GetVolumeInformation.
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) Lihat keterangan
SMB 3.0 dengan Berbagi File Peluasan Skala (SO) Lihat keterangan
Sistem File Volume Bersama Kluster (CsvFS) Ya
Sistem File Tangguh (ReFS) Ya
 

Perhatikan bahwa CreateFile dengan disposisi supersede akan gagal jika dilakukan pada file di mana sudah ada aliran data alternatif yang terbuka.

Perilaku Tautan Simbolis

Jika panggilan ke fungsi ini membuat file, tidak ada perubahan perilaku. Selain itu, pertimbangkan informasi berikut mengenai FILE_FLAG_OPEN_REPARSE_POINT:
  • Jika FILE_FLAG_OPEN_REPARSE_POINT ditentukan:
    • Jika file yang ada dibuka dan merupakan tautan simbolis, handel yang dikembalikan adalah handel ke tautan simbolis.
    • Jika TRUNCATE_EXISTING atau FILE_FLAG_DELETE_ON_CLOSE ditentukan, file yang terpengaruh adalah tautan simbolis.
  • Jika FILE_FLAG_OPEN_REPARSE_POINT tidak ditentukan:
    • Jika file yang ada dibuka dan merupakan tautan simbolis, handel yang dikembalikan adalah handel ke target.
    • Jika CREATE_ALWAYS, TRUNCATE_EXISTING, atau FILE_FLAG_DELETE_ON_CLOSE ditentukan, file yang terpengaruh adalah target.

Perilaku Penembolokan

Beberapa nilai yang mungkin untuk parameter dwFlagsAndAttributes digunakan oleh CreateFile untuk mengontrol atau memengaruhi bagaimana data yang terkait dengan handel di-cache oleh sistem. Topologi tersebut adalah:
  • FILE_FLAG_NO_BUFFERING
  • FILE_FLAG_RANDOM_ACCESS
  • FILE_FLAG_SEQUENTIAL_SCAN
  • FILE_FLAG_WRITE_THROUGH
  • FILE_ATTRIBUTE_TEMPORARY
Jika tidak ada bendera ini yang ditentukan, sistem menggunakan skema penembolokan tujuan umum default. Jika tidak, penembolokan sistem berperilaku seperti yang ditentukan untuk setiap bendera.

Beberapa bendera ini tidak boleh digabungkan. Misalnya, menggabungkan FILE_FLAG_RANDOM_ACCESS dengan FILE_FLAG_SEQUENTIAL_SCAN adalah mengalahkan diri sendiri.

Menentukan bendera FILE_FLAG_SEQUENTIAL_SCAN 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. Jika aplikasi memindahkan penunjuk file untuk akses acak, performa penembolokan optimal kemungkinan besar tidak akan terjadi. Namun, operasi yang benar masih dijamin.

Bendera FILE_FLAG_WRITE_THROUGH dan FILE_FLAG_NO_BUFFERING independen dan dapat digabungkan.

Jika FILE_FLAG_WRITE_THROUGH digunakan tetapi FILE_FLAG_NO_BUFFERING tidak juga ditentukan, sehingga penembolokan sistem berlaku, maka data ditulis ke cache sistem tetapi disiram ke disk tanpa penundaan.

Jika FILE_FLAG_WRITE_THROUGH dan FILE_FLAG_NO_BUFFERING ditentukan, sehingga penembolokan sistem tidak berlaku, maka data segera dihapus ke disk tanpa melalui cache sistem Windows. Sistem operasi juga meminta write-through dari cache perangkat keras lokal hard disk ke media persisten.

Catatan Tidak semua perangkat keras hard disk mendukung kemampuan write-through ini.
 
Penggunaan bendera FILE_FLAG_NO_BUFFERING yang tepat memerlukan pertimbangan aplikasi khusus. Untuk informasi selengkapnya, lihat Buffering File.

Permintaan write-through melalui FILE_FLAG_WRITE_THROUGH juga menyebabkan NTFS menghapus perubahan metadata apa pun, seperti pembaruan stempel waktu atau operasi penggantian nama, yang dihasilkan dari pemrosesan permintaan. Untuk alasan ini, bendera FILE_FLAG_WRITE_THROUGH sering digunakan dengan bendera FILE_FLAG_NO_BUFFERING sebagai pengganti untuk memanggil fungsi FlushFileBuffers setelah setiap penulisan, yang dapat menyebabkan penalti performa yang tidak perlu. Menggunakan bendera ini bersama-sama menghindari penalti tersebut. Untuk informasi umum tentang penembolokan file dan metadata, lihat Penembolokan File.

Ketika FILE_FLAG_NO_BUFFERING 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 lebih banyak waktu, karena data tidak ditahan di cache. Selain itu, metadata file mungkin masih di-cache (misalnya, saat membuat file kosong). Untuk memastikan bahwa metadata dibersihkan ke disk, gunakan fungsi FlushFileBuffers .

Menentukan atribut FILE_ATTRIBUTE_TEMPORARY menyebabkan sistem file menghindari penulisan data kembali ke penyimpanan massal jika memori cache yang memadai tersedia, karena aplikasi menghapus file sementara setelah handel ditutup. Dalam hal ini, sistem sepenuhnya dapat menghindari penulisan data. Meskipun tidak secara langsung mengontrol penembolokan data dengan cara yang sama seperti bendera yang disebutkan sebelumnya, atribut FILE_ATTRIBUTE_TEMPORARY memang memberi tahu sistem untuk menahan sebanyak mungkin dalam cache sistem tanpa menulis dan oleh karena itu mungkin menjadi perhatian untuk aplikasi tertentu.

File

Jika Anda mengganti nama atau menghapus file lalu memulihkannya segera setelahnya, sistem mencari cache untuk informasi file yang akan dipulihkan. Informasi cache mencakup pasangan nama pendek/panjang dan waktu pembuatannya.

Jika Anda memanggil CreateFile pada file yang tertunda penghapusannya sebagai akibat dari panggilan sebelumnya ke DeleteFile, fungsi gagal. Sistem operasi menunda penghapusan file hingga semua handel ke file ditutup. GetLastError mengembalikan ERROR_ACCESS_DENIED.

Parameter dwDesiredAccess bisa nol, memungkinkan aplikasi untuk mengkueri atribut file tanpa mengakses file jika aplikasi berjalan dengan pengaturan keamanan yang memadai. Ini berguna untuk menguji keberadaan file tanpa membukanya untuk akses baca dan/atau tulis, atau untuk mendapatkan statistik lain tentang file atau direktori. Lihat Mendapatkan dan Mengatur Informasi File dan GetFileInformationByHandle.

Jika CREATE_ALWAYS dan FILE_ATTRIBUTE_NORMAL ditentukan, CreateFile gagal dan mengatur kesalahan terakhir ke ERROR_ACCESS_DENIED jika file ada dan memiliki atribut FILE_ATTRIBUTE_HIDDEN atau FILE_ATTRIBUTE_SYSTEM . Untuk menghindari kesalahan, tentukan atribut yang sama dengan file yang ada.

Ketika aplikasi membuat file di seluruh jaringan, lebih baik digunakan GENERIC_READ | GENERIC_WRITE untuk dwDesiredAccess daripada menggunakan GENERIC_WRITE saja. Kode yang dihasilkan lebih cepat, karena pengalih dapat menggunakan manajer cache dan mengirim lebih sedikit SMB dengan lebih banyak data. Kombinasi ini juga menghindari masalah di mana menulis ke file di seluruh jaringan kadang-kadang dapat mengembalikan ERROR_ACCESS_DENIED.

Untuk informasi selengkapnya, lihat Membuat dan Membuka File.

Handel I/O Sinkron dan Asinkron

CreateFile menyediakan untuk membuat handel file atau perangkat yang sinkron atau asinkron. Handel sinkron berperilaku sedemikian rupawan sehingga panggilan fungsi I/O menggunakan handel tersebut diblokir sampai selesai, sementara handel file asinkron memungkinkan sistem untuk segera kembali dari panggilan fungsi I/O, apakah mereka menyelesaikan operasi I/O atau tidak. Seperti yang dinyatakan sebelumnya, perilaku sinkron versus asinkron ini ditentukan dengan menentukan FILE_FLAG_OVERLAPPED dalam parameter dwFlagsAndAttributes . Ada beberapa kompleksitas dan potensi jebakan saat menggunakan I/O asinkron; untuk informasi selengkapnya, lihat I/O Sinkron dan Asinkron.

Aliran File

Pada sistem file NTFS, Anda dapat menggunakan CreateFile untuk membuat aliran terpisah dalam file. Untuk informasi selengkapnya, lihat Aliran File.

Direktori

Aplikasi tidak dapat membuat direktori dengan menggunakan CreateFile, oleh karena itu hanya nilai OPEN_EXISTING yang valid untuk dwCreationDisposition untuk kasus penggunaan ini. Untuk membuat direktori, aplikasi harus memanggil CreateDirectory atau CreateDirectoryEx.

Untuk membuka direktori menggunakan CreateFile, tentukan bendera FILE_FLAG_BACKUP_SEMANTICS sebagai bagian dari dwFlagsAndAttributes. Pemeriksaan keamanan yang sesuai masih berlaku ketika bendera ini digunakan tanpa hak istimewa SE_BACKUP_NAME dan SE_RESTORE_NAME .

Saat menggunakan CreateFile untuk membuka direktori selama defragmentasi volume sistem file FAT atau FAT32, jangan tentukan hak akses MAXIMUM_ALLOWED . Akses ke direktori ditolak jika ini dilakukan. Tentukan akses GENERIC_READ ke kanan sebagai gantinya.

Untuk informasi selengkapnya, lihat Tentang Manajemen Direktori.

Disk fisik dan Volume

Akses langsung ke disk atau ke volume dibatasi.

Windows Server 2003 dan Windows XP: Akses langsung ke disk atau ke volume tidak dibatasi dengan cara ini.

Anda dapat menggunakan fungsi CreateFile untuk membuka drive disk fisik atau volume, yang mengembalikan handel perangkat penyimpanan akses langsung (DASD) yang dapat digunakan dengan fungsi DeviceIoControl . Ini memungkinkan Anda untuk mengakses disk atau volume secara langsung, misalnya metadata disk seperti tabel partisi. Namun, jenis akses ini juga mengekspos drive disk atau volume terhadap potensi kehilangan data, karena penulisan yang salah ke disk menggunakan mekanisme ini dapat membuat kontennya tidak dapat diakses oleh sistem operasi. Untuk memastikan integritas data, pastikan untuk terbiasa dengan DeviceIoControl dan bagaimana API lain berprilaku berbeda dengan handel akses langsung dibandingkan dengan handel sistem file.

Persyaratan berikut harus dipenuhi agar panggilan tersebut berhasil:

  • Penelepon harus memiliki hak administratif. Untuk informasi selengkapnya, lihat Menjalankan dengan Hak Istimewa Khusus.
  • Parameter dwCreationDisposition harus memiliki bendera OPEN_EXISTING .
  • Saat membuka volume atau disket, parameter dwShareMode harus memiliki bendera FILE_SHARE_WRITE .
Catatan Parameter dwDesiredAccess bisa nol, memungkinkan aplikasi untuk mengkueri atribut perangkat tanpa mengakses perangkat. Ini berguna bagi aplikasi untuk menentukan ukuran disk drive floppy dan format yang didukungnya tanpa memerlukan disket di drive, misalnya. Ini juga dapat digunakan untuk membaca statistik tanpa memerlukan izin baca/tulis data tingkat lebih tinggi.
 
Saat membuka drive fisik x:, string lpFileName harus berupa formulir berikut: "\\.\PhysicalDriveX". Nomor hard disk dimulai dari nol. Tabel berikut menunjukkan beberapa contoh string drive fisik.
String Makna
"\\.\PhysicalDrive0" Membuka drive fisik pertama.
"\\.\PhysicalDrive2" Membuka drive fisik ketiga.
 

Untuk mendapatkan pengidentifikasi drive fisik untuk volume, buka handel ke volume dan panggil fungsi DeviceIoControl dengan IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. Kode kontrol ini mengembalikan nomor disk dan offset untuk masing-masing satu atau beberapa tingkat volume; volume dapat mencakup beberapa disk fisik.

Untuk contoh membuka drive fisik, lihat Memanggil DeviceIoControl.

Saat membuka volume atau drive media yang dapat dilepas (misalnya, disk drive floppy atau flash memory thumb drive), string lpFileName harus dalam bentuk berikut: "\.\X:". Jangan gunakan garis miring terbelakang (\), yang menunjukkan direktori akar drive. Tabel berikut ini memperlihatkan beberapa contoh string drive.

String Makna
"\\.\A:" Membuka disk disket drive A.
"\\.\C:" Membuka volume C: .
"\\.\C:\" Membuka sistem file volume C: .
 

Anda juga dapat membuka volume dengan merujuk pada nama volumenya. Untuk informasi selengkapnya, lihat Penamaan Volume.

Volume berisi satu atau beberapa sistem file yang dipasang. Handel volume dapat dibuka sebagai non-cache atas kebijaksanaan sistem file tertentu, bahkan ketika opsi non-cache tidak ditentukan dalam CreateFile. Anda harus berasumsi bahwa semua sistem file Microsoft membuka handel volume sebagai non-cache. Pembatasan I/O yang tidak di-cache untuk file juga berlaku untuk volume.

Sistem file mungkin atau mungkin tidak memerlukan perataan buffer meskipun data tidak di-cache. Namun, jika opsi yang tidak di-cache ditentukan saat membuka volume, penyelarasan buffer diberlakukan terlepas dari sistem file pada volume. Disarankan pada semua sistem file bahwa Anda membuka handel volume sebagai non-cache, dan mengikuti pembatasan I/O yang tidak di-cache.

Catatan Untuk membaca atau menulis ke beberapa sektor terakhir volume, Anda harus memanggil DeviceIoControl dan menentukan FSCTL_ALLOW_EXTENDED_DASD_IO. Ini menandakan driver sistem file untuk tidak melakukan pemeriksaan batas I/O pada panggilan baca atau tulis partisi. Sebaliknya, pemeriksaan batas dilakukan oleh driver perangkat.
 

Perangkat Pengubah

Kode kontrol IOCTL_CHANGER_* untuk DeviceIoControl menerima handel ke perangkat pengubah. Untuk membuka perangkat pengubah, gunakan nama file formulir berikut: "\\.\Changerx" di mana x adalah angka yang menunjukkan perangkat mana yang akan dibuka, dimulai dengan nol. Untuk membuka perangkat pengubah nol dalam aplikasi yang ditulis dalam C atau C++, gunakan nama file berikut: "\\.\Changer0".

Kandar Pita

Anda dapat membuka drive pita dengan menggunakan nama file dari formulir berikut: "\\.\TAPEx" di mana x adalah angka yang menunjukkan drive mana yang akan dibuka, dimulai dengan tape drive nol. Untuk membuka tape drive nol dalam aplikasi yang ditulis dalam C atau C++, gunakan nama file berikut: "\\.\TAPE0".

Untuk informasi selengkapnya, lihat Pencadangan.

Sumber Daya Komunikasi

Fungsi CreateFile dapat membuat handel ke sumber daya komunikasi, seperti port serial COM1. Untuk sumber daya komunikasi, parameter dwCreationDisposition harus OPEN_EXISTING, parameter dwShareMode harus nol (akses eksklusif), dan parameter hTemplateFile harus NULL. Akses baca, tulis, atau baca/tulis dapat ditentukan, dan handel dapat dibuka untuk I/O yang tumpang tindih.

Untuk menentukan nomor port COM yang lebih besar dari 9, gunakan sintaks berikut: "\\.\COM10". Sintaks ini berfungsi untuk semua nomor port dan perangkat keras yang memungkinkan nomor port COM ditentukan.

Untuk informasi selengkapnya tentang komunikasi, lihat Komunikasi.

Konsol

Fungsi CreateFile dapat membuat handel ke input konsol (CONIN$). Jika proses memiliki handel terbuka untuk itu sebagai akibat dari pewarisan atau duplikasi, proses ini juga dapat membuat handel ke buffer layar aktif (CONOUT$). Proses panggilan harus dilampirkan ke konsol yang diwariskan atau yang dialokasikan oleh fungsi AllocConsole . Untuk handel konsol, atur parameter CreateFile sebagai berikut.
Parameter Nilai
lpFileName Gunakan nilai CONIN$ untuk menentukan input konsol.

Gunakan nilai CONOUT$ untuk menentukan output konsol.

CONIN$ mendapatkan handel ke buffer input konsol, bahkan jika fungsi SetStdHandle mengalihkan handel input standar. Untuk mendapatkan handel input standar, gunakan fungsi GetStdHandle .

CONOUT$ mendapatkan handel ke buffer layar aktif, bahkan jika SetStdHandle mengalihkan handel output standar. Untuk mendapatkan handel output standar, gunakan GetStdHandle.

dwDesiredAccess GENERIC_READ | GENERIC_WRITE lebih disukai, tetapi salah satu dapat membatasi akses.
dwShareMode Saat membuka CONIN$, tentukan FILE_SHARE_READ. Saat membuka CONOUT$, tentukan FILE_SHARE_WRITE.

Jika proses panggilan mewarisi konsol, atau jika proses anak harus dapat mengakses konsol, parameter ini harus FILE_SHARE_READ | FILE_SHARE_WRITE.

lpSecurityAttributes Jika Anda ingin konsol diwariskan, anggota bInheritHandle dari struktur SECURITY_ATTRIBUTES harus TRUE.
dwCreationDisposition Anda harus menentukan OPEN_EXISTING saat menggunakan CreateFile untuk membuka konsol.
dwFlagsAndAttributes Diabaikan.
hTemplateFile Diabaikan.
 

Tabel berikut ini memperlihatkan berbagai pengaturan dwDesiredAccess dan lpFileName.

lpFileName dwDesiredAccess Hasil
"CON" GENERIC_READ Membuka konsol untuk input.
"CON" GENERIC_WRITE Membuka konsol untuk output.
"CON" GENERIC_READ | GENERIC_WRITE Menyebabkan CreateFile gagal; GetLastError mengembalikan ERROR_FILE_NOT_FOUND.
 

Mailslots

Jika CreateFile membuka akhir klien dari mailslot, fungsi mengembalikan INVALID_HANDLE_VALUE jika klien mailslot mencoba membuka mailslot lokal sebelum server mailslot membuatnya dengan fungsi CreateMailSlot .

Untuk informasi selengkapnya, lihat Mailslots.

Pipa

Jika CreateFile membuka akhir klien dari pipa bernama, fungsi menggunakan instans pipa bernama apa pun yang berada dalam status mendengarkan. Proses pembukaan dapat menduplikasi handel sebanyak yang diperlukan, tetapi setelah dibuka, instans pipa bernama tidak dapat dibuka oleh klien lain. Akses yang ditentukan ketika pipa dibuka harus kompatibel dengan akses yang ditentukan dalam parameter dwOpenMode dari fungsi CreateNamedPipe .

Jika fungsi CreateNamedPipe tidak berhasil dipanggil pada server sebelum operasi ini, pipa tidak akan ada dan CreateFile akan gagal dengan ERROR_FILE_NOT_FOUND.

Jika ada setidaknya satu instans pipa aktif tetapi tidak ada pipa pendengar yang tersedia di server, yang berarti semua instans pipa saat ini terhubung, CreateFile gagal dengan ERROR_PIPE_BUSY.

Untuk informasi selengkapnya, lihat Pipa.

Contoh

Contoh operasi file diperlihatkan dalam topik berikut:

I/O perangkat fisik ditunjukkan dalam topik berikut: Contoh menggunakan pipa bernama terletak di Named Pipe Client.

Bekerja dengan mailslot diperlihatkan dalam Menulis ke Mailslot.

Cuplikan kode cadangan pita dapat ditemukan di Membuat Aplikasi Cadangan.

Catatan

Header fileapi.h mendefinisikan CreateFile sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta praprosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

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

Lihat juga

Tentang Manajemen Direktori

Tentang Manajemen Volume

Cadangan

CloseHandle

Komunikasi

CreateDirectory

CreateDirectoryEx

CreateFileTransacted

CreateMailSlot

CreateNamedPipe

Membuat, Menghapus, dan Memelihara File

DeleteFile

Kontrol Input dan Output Perangkat (IOCTL)

DeviceIoControl

Kompresi dan Dekompresi File

Enkripsi File

Fungsi Manajemen File

Keamanan File dan Hak Akses

Aliran File

Fungsi

GetLastError

Port Penyelesaian I/O

Konsep I/O

Mailslots

Mendapatkan dan Mengatur Informasi File

Topik Gambaran Umum

Alur

ReadFile

ReadFileEx

Berjalan dengan Hak Istimewa Khusus

SetFileAttributes

WriteFile

WriteFileEx