Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Membuat file atau direktori baru, atau membuka file, perangkat, direktori, atau volume yang ada.
Fungsi ini adalah mode pengguna yang setara dengan fungsi
Sintaksis
__kernel_entry NTSTATUS NtCreateFile(
[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] PVOID EaBuffer,
[in] ULONG EaLength
);
Parameter
[out] FileHandle
Penunjuk ke variabel yang menerima handel file jika panggilan berhasil.
[in] DesiredAccess
Nilai ACCESS_MASK yang mengekspresikan jenis akses yang diperlukan pemanggil ke file atau direktori. Set bendera
Pemanggil NtCreateFile dapat menentukan satu atau kombinasi dari berikut ini, mungkin menggunakan bitwise-OR dengan bendera kompatibel tambahan dari daftar bendera DesiredAccess sebelumnya, untuk objek file apa pun yang tidak mewakili file direktori.
Nilai FILE_GENERIC_EXECUTE tidak relevan untuk perangkat dan driver menengah.
Untuk membuka atau membuat file direktori, seperti yang juga ditunjukkan dengan parameter CreateOptions
Nilai | Arti |
---|---|
|
File dalam direktori dapat dicantumkan. |
|
Direktori dapat dilalui: yaitu, dapat menjadi bagian dari nama jalur file. |
[in] ObjectAttributes
Pointer ke struktur yang sudah diinisialisasi dengan InitializeObjectAttributes. Anggota struktur ini untuk objek file menyertakan yang berikut ini.
Nilai | Arti |
---|---|
|
Menentukan jumlah byte ObjectAttributes data yang disediakan. Nilai ini harus setidaknya sizeof(OBJECT_ATTRIBUTES). |
|
Secara opsional menentukan handel ke direktori yang diperoleh oleh panggilan sebelumnya ke NtCreateFile. Jika nilai ini NULL, anggota ObjectName harus menjadi spesifikasi file yang sepenuhnya memenuhi syarat yang menyertakan jalur lengkap ke file target. Jika nilai ini bukannull, anggota ObjectName menentukan nama file relatif terhadap direktori ini. |
|
Menunjuk ke string Unicode buffer yang menamai file yang akan dibuat atau dibuka. Nilai ini harus spesifikasi file yang sepenuhnya memenuhi syarat atau nama objek perangkat, kecuali itu adalah nama file yang relatif terhadap direktori yang ditentukan oleh RootDirectory. Misalnya, \Device\Floppy1\myfile.dat atau \?? \B:\myfile.dat bisa menjadi spesifikasi file yang sepenuhnya memenuhi syarat, asalkan driver floppy dan sistem file yang terlalu besar sudah dimuat. Untuk informasi selengkapnya, lihat Nama File, Jalur, dan Namespace. |
|
Adalah sekumpulan bendera yang mengontrol atribut objek file. Nilai ini bisa nol atau OBJ_CASE_INSENSITIVE, yang menunjukkan bahwa kode pencarian nama harus mengabaikan kasus ObjectName anggota daripada melakukan pencarian yang sama persis. Nilai OBJ_INHERIT tidak relevan dengan perangkat dan driver perantara. |
|
Secara opsional menentukan deskriptor keamanan yang akan diterapkan ke file. ACL yang ditentukan oleh deskriptor keamanan tersebut diterapkan ke file hanya saat dibuat. Jika nilai NULL saat file dibuat, ACL yang ditempatkan pada file bergantung pada sistem file; sebagian besar sistem file menyebarkan beberapa bagian dari ACL seperti itu dari file direktori induk yang dikombinasikan dengan ACL default pemanggil. Perangkat dan driver perantara dapat mengatur anggota ini ke NULL. |
|
Menentukan hak akses yang harus diberikan server ke konteks keamanan klien. Nilai ini bukanNULL hanya ketika koneksi ke server yang dilindungi dibuat, memungkinkan pemanggil untuk mengontrol bagian mana dari konteks keamanan pemanggil yang tersedia untuk server dan apakah server diizinkan untuk meniru pemanggil. |
[out] IoStatusBlock
Pointer ke variabel yang menerima status penyelesaian akhir dan informasi tentang operasi yang diminta. Saat kembali dari
- FILE_CREATED
- FILE_OPENED
- FILE_OVERWRITTEN
- FILE_SUPERSEDED
- FILE_EXISTS
- FILE_DOES_NOT_EXIST
[in, optional] AllocationSize
Ukuran alokasi awal dalam byte untuk file. Nilai bukan nol tidak berpengaruh kecuali file sedang dibuat, ditimpa, atau diganti.
[in] FileAttributes
Atribut file. Atribut yang ditentukan secara eksplisit hanya diterapkan ketika file dibuat, digantikan, atau, dalam beberapa kasus, ditimpa. Secara default, nilai ini adalah
[in] ShareAccess
Jenis akses berbagi yang ingin digunakan pemanggil dalam file, sebagai nol, atau sebagai salah satu atau kombinasi dari nilai berikut.
Untuk informasi selengkapnya, lihat Windows SDK.
[in] CreateDisposition
Menentukan apa yang harus dilakukan, tergantung pada apakah file sudah ada, sebagai salah satu nilai berikut.
[in] CreateOptions
Opsi yang akan diterapkan saat membuat atau membuka file, sebagai kombinasi bendera berikut yang kompatibel.
Nilai | Arti |
---|---|
|
File yang sedang dibuat atau dibuka adalah file direktori. Dengan bendera ini, parameter CreateDisposition |
|
File yang sedang dibuka tidak boleh berupa file direktori atau panggilan ini gagal. Objek file yang sedang dibuka dapat mewakili file data, perangkat logis, virtual, atau fisik, atau volume. |
|
Aplikasi yang menulis data ke file harus benar-benar mentransfer data ke dalam file sebelum operasi tulis yang diminta dianggap selesai. Bendera ini secara otomatis diatur jika bendera CreateOptionsFILE_NO_INTERMEDIATE _BUFFERING diatur. |
|
Semua akses ke file berurutan. |
|
Akses ke file bisa acak, jadi tidak ada operasi read-ahead berurutan yang harus dilakukan pada file oleh FSD atau sistem. |
|
File tidak dapat di-cache atau di-buffer dalam buffer internal driver. Bendera ini tidak kompatibel dengan bendera |
|
Semua operasi pada file dilakukan secara sinkron. Setiap penantian atas nama pemanggil tunduk pada penghentian dini dari pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan konteks posisi file. Jika bendera ini diatur, bendera DesiredAccessSYNCHRONIZE juga harus diatur. |
|
Semua operasi pada file dilakukan secara sinkron. Menunggu dalam sistem untuk menyinkronkan antrean I/O dan penyelesaian tidak tunduk pada pemberitahuan. Bendera ini juga menyebabkan sistem I/O mempertahankan konteks posisi file. Jika bendera ini diatur, bendera DesiredAccessSYNCHRONIZE juga harus diatur. |
|
Buat koneksi pohon untuk file ini untuk membukanya melalui jaringan. Bendera ini tidak digunakan oleh perangkat dan driver perantara. |
|
Jika atribut yang diperluas pada file yang ada dibuka menunjukkan bahwa pemanggil harus memahami EA untuk menginterpretasikan file dengan benar, gagalkan permintaan ini karena pemanggil tidak memahami cara menangani EA. Bendera ini tidak relevan untuk perangkat dan driver perantara. |
|
Buka file dengan titik pemisahan ulang dan lewati pemrosesan titik pemisahan ulang normal untuk file. Untuk informasi selengkapnya, lihat bagian Keterangan. |
|
Hapus file ketika handel terakhir diteruskan ke NtClose. Jika bendera ini diatur, bendera DELETE harus diatur dalam parameter DesiredAccess. |
|
Nama file yang ditentukan oleh parameter objectAttributes |
|
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 |
|
Bendera ini memungkinkan aplikasi untuk meminta filter kunci oportunistik 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. |
|
File sedang dibuka dan kunci oportunistik pada file sedang 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 akan merusak oplock yang ada. Untuk informasi selengkapnya, lihat bagian Keterangan.
Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: Bendera ini tidak didukung. Bendera ini didukung pada sistem file berikut: NTFS, FAT, dan exFAT. |
|
Selesaikan operasi ini segera dengan kode keberhasilan alternatif STATUS_OPLOCK_BREAK_IN_PROGRESS jika file target di-oplock, daripada memblokir utas pemanggil. Jika file yang di-oplock, pemanggil lain sudah memiliki akses ke file. Bendera ini tidak digunakan oleh perangkat dan driver perantara. |
[in] EaBuffer
Pointer ke buffer EA yang digunakan untuk meneruskan atribut yang diperluas.
[in] EaLength
Panjang buffer EA.
Mengembalikan nilai
NtCreateFile mengembalikan STATUS_SUCCESS atau status kesalahan yang sesuai. Jika mengembalikan status kesalahan, pemanggil dapat menemukan informasi selengkapnya tentang penyebab kegagalan dengan memeriksa IoStatusBlock. Untuk menyederhanakan pemeriksaan ini, aplikasi dapat menggunakan makro NT_SUCCESS, NT_ERROR, dan NT_WARNING.
Komentar
Handel, yang diberikan oleh NtCreateFile, dapat digunakan oleh panggilan berikutnya untuk memanipulasi data dalam file atau status atau atribut objek file.
Ada dua cara alternatif untuk menentukan nama file yang akan dibuat atau dibuka dengan NtCreateFile:
- Sebagai nama jalur yang sepenuhnya memenuhi syarat, disediakan di ObjectName anggota input ObjectAttributes
- Sebagai nama jalur yang relatif terhadap file direktori yang diwakili oleh handel di RootDirectory anggota input ObjectAttributes
Bendera DesiredAccess tertentu dan kombinasi bendera memiliki efek berikut:
- Agar penelepon menyinkronkan penyelesaian I/O dengan menungguFileHandle
yang dikembalikan, bendera SYNCHRONIZE harus diatur. - Meneruskan nol ke DesiredFlags tidak valid.
- Jika hanya bendera FILE_APPEND_DATA dan SYNCHRONIZE yang diatur, pemanggil hanya dapat menulis ke akhir file, dan informasi offset apa pun tentang penulisan ke file diabaikan. Namun, file secara otomatis diperluas seperlunya untuk jenis operasi tulis ini.
- Mengatur bendera FILE_WRITE_DATA untuk file juga memungkinkan penulisan di luar akhir file terjadi. File secara otomatis diperluas untuk jenis penulisan ini juga.
- Jika hanya bendera
FILE_EXECUTE danSYNCHRONIZE yang diatur, pemanggil tidak dapat langsung membaca atau menulis data apa pun dalam file menggunakanFileHandleyang dikembalikan, yaitu, semua operasi pada file terjadi melalui pager sistem sebagai respons terhadap instruksi dan akses data.
Parameter ShareAccess
Agar file bersama berhasil dibuka, parameter
Nilai
Perhatikan bahwa jenis disposisi ini konsisten dengan gaya POSIX untuk menimpa file. Nilai CreateDispositionFILE_OVERWRITE_IF dan FILE_SUPERSEDE serupa. Jika
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 tersebut membuka file dengan bendera
FILE_SHARE_WRITE yang diatur dalam parameter inputShareAccess. - Atribut file yang ditentukan secara logis ORed dengan yang sudah ada di file. Ini menyiratkan bahwa, jika file telah dibuka oleh utas lain, pemanggil berikutnya dari
NtCreateFile tidak dapat menonaktifkan FileAttributes yang ada bendera tetapi dapat mengaktifkan bendera tambahan untuk file yang sama. Perhatikan bahwa gaya penimpaan file ini konsisten dengan sistem operasi MS-DOS, Windows 3.1, dan OS/2.
Nilai CreateOptionsFILE_DIRECTORY_FILE menentukan bahwa file yang akan dibuat atau dibuka adalah file 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, panggilan ke NtCreateFile gagal.
Bendera
- Setiap ByteOffset
opsional yang diteruskan ke fungsi NtReadFile atauNtWriteFile harus merupakan integral dari ukuran sektor. - Panjang
yang diteruskan ke NtReadFile atauNtWriteFile , 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 disesuaikan sesuai dengan persyaratan penyelarasan perangkat yang mendasar. Informasi ini dapat diperoleh dengan memanggil
NtCreateFile untuk mendapatkan handel untuk objek file yang mewakili perangkat fisik, lalu memanggil NtQueryInformationFile dengan handel tersebut. Untuk daftar sistem FILE_nilai_ALIGNMENT XXX, lihat dokumentasi Windows SDK. - Panggilan ke
NtSetInformationFile dengan parameter FileInformationClass diatur keFilePositionInformation harus menentukan offset yang merupakan integral dari ukuran sektor.
Jika parameter
Bendera FILE_OPEN_REQUIRING_OPLOCK parameter CreateOptions menghilangkan waktu antara saat Anda membuka file dan meminta oplock yang berpotensi memungkinkan pihak ketiga untuk membuka file, yang akan menyebabkan pelanggaran berbagi. Aplikasi dapat menggunakan bendera
Di Windows 7, jika handel lain ada pada file ketika aplikasi menggunakan bendera ini, operasi buat akan gagal dengan STATUS_OPLOCK_NOT_GRANTED. Pembatasan ini tidak lagi ada 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 pada file 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 gagal. Aplikasi tidak boleh melakukan operasi sistem file lain pada file sebelum menggunakan kembali oplock (selain menutup handel file), jika tidak, kebuntuan dapat terjadi.
Bendera FILE_RESERVE_OPFILTER parameter CreateOptions memungkinkan aplikasi meminta oplock Tingkat 1, Batch, atau Filter untuk mencegah aplikasi lain mendapatkan pelanggaran berbagi. Namun, dalam hal praktis, FILE_RESERVE_OPFILTER hanya berguna untuk oplock filter. Untuk menggunakannya, Anda harus menyelesaikan langkah-langkah berikut:
- Terbitkan permintaan buat dengan CreateOptions
FILE_RESERVE_OPFILTER ,DesiredAccess FILE_READ_ATTRIBUTES , danShareAccess . Kemungkinan kegagalan adalah sebagai berikut: - 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 daripada berbagi FILE_READ_ATTRIBUTES atau kurang dari
(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE)
, permintaan gagal dengan STATUS_OPLOCK_NOT_GRANTED.
- Jika permintaan pembuatan berhasil, minta oplock.
- Buka handel lain ke file untuk melakukan I/O.
(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.
Untuk informasi selengkapnya tentang oplock, lihat Kunci Oportunistik.
Perhatikan bahwa file header WDK NtDef.h diperlukan untuk banyak definisi konstanta serta InitializeObjectAttributes makro. Anda juga dapat menggunakan fungsi LoadLibrary
Persyaratan
Syarat | Nilai |
---|---|
Platform Target |
Windows |
Header |
winternl.h |
Pustaka |
ntdll.lib |
DLL |
ntdll.dll |