struktur FILE_RENAME_INFORMATION (ntifs.h)

Struktur FILE_RENAME_INFORMATION digunakan untuk mengganti nama file.

Sintaks

typedef struct _FILE_RENAME_INFORMATION {
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS1)
    union {
        BOOLEAN ReplaceIfExists;  // FileRenameInformation
        ULONG Flags;              // FileRenameInformationEx
    } DUMMYUNIONNAME;
#else
    BOOLEAN ReplaceIfExists;
#endif
    HANDLE RootDirectory;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;

Anggota

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

Atur ke TRUE untuk menentukan bahwa jika file dengan nama yang diberikan sudah ada, file tersebut harus diganti dengan file yang diberikan. Atur ke FALSE jika operasi ganti nama harus gagal jika file dengan nama yang diberikan sudah ada.

DUMMYUNIONNAME.Flags

Bendera untuk operasi ganti nama. Bidang ini hanya berlaku saat digunakan dengan kelas informasi FileRenameInformationEx .

Berikut adalah nilai yang mungkin:

Nilai Makna
FILE_RENAME_REPLACE_IF_EXISTS (0x00000001) Jika file dengan nama yang diberikan sudah ada, file harus diganti dengan file yang diberikan. Setara dengan bidang ReplaceIfExists yang digunakan dengan kelas informasi FileRenameInformation.
FILE_RENAME_POSIX_SEMANTICS (0x00000002) Jika FILE_RENAME_REPLACE_IF_EXISTS juga ditentukan, izinkan untuk mengganti file meskipun ada handel yang ada. Handel yang ada ke file yang diganti terus valid untuk operasi seperti baca dan tulis. Setiap pembukaan nama target berikutnya akan membuka file yang diganti namanya, bukan file yang diganti.
FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE (0x00000004) Saat mengganti nama file ke direktori baru, tekan aturan pewarisan apa pun yang terkait dengan atribut FILE_ATTRIBUTE_PINNED dan FILE_ATTRIBUTE_UNPINNED file.
FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) Saat mengganti nama file ke direktori baru, tekan aturan pewarisan apa pun yang terkait dengan properti ID cadangan penyimpanan file.
FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE (0x00000010) Jika FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE tidak juga ditentukan, saat mengganti nama file ke direktori baru, secara otomatis mengubah ukuran area cadangan penyimpanan yang terpengaruh sesuai kebutuhan untuk mencegah pengguna terlihat ruang kosong pada volume meningkat. Memerlukan pengelolaan akses volume.
FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE (0x00000020) Jika FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE tidak juga ditentukan, saat mengganti nama file ke direktori baru, secara otomatis mengubah ukuran area cadangan penyimpanan yang terpengaruh sesuai kebutuhan untuk mencegah pengguna melihat ruang kosong pada volume menurun. Memerlukan pengelolaan akses volume.
FILE_RENAME_PRESERVE_AVAILABLE_SPACE (0x00000030) Setara dengan menentukan FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE dan FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE.
FILE_RENAME_IGNORE_READONLY_ATTRIBUTE (0x00000040) Jika FILE_RENAME_REPLACE_IF_EXISTS juga ditentukan, izinkan untuk mengganti file meskipun bersifat baca-saja. Memerlukan akses WRITE_ATTRIBUTES ke file yang diganti.
FILE_RENAME_FORCE_RESIZE_TARGET_SR (0x00000080) Jika FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE tidak juga ditentukan, saat mengganti nama file ke direktori baru yang merupakan bagian dari area cadangan penyimpanan yang berbeda, selalu kembangkan area cadangan penyimpanan direktori target dengan ukuran penuh file yang diganti namanya. Memerlukan pengelolaan akses volume.
FILE_RENAME_FORCE_RESIZE_SOURCE_SR (0x00000100) Jika FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE tidak juga ditentukan, saat mengganti nama file ke direktori baru yang merupakan bagian dari area cadangan penyimpanan yang berbeda, selalu susutkan area cadangan penyimpanan direktori sumber dengan ukuran penuh file yang diganti namanya. Memerlukan pengelolaan akses volume.
FILE_RENAME_FORCE_RESIZE_SR (0x00000180) Setara dengan menentukan FILE_RENAME_FORCE_RESIZE_TARGET_SR dan FILE_RENAME_FORCE_RESIZE_SOURCE_SR.

ReplaceIfExists

Atur ke TRUE untuk menentukan bahwa jika file dengan nama yang diberikan sudah ada, file tersebut harus diganti dengan file yang diberikan. Atur ke FALSE jika operasi ganti nama harus gagal jika file dengan nama yang diberikan sudah ada.

RootDirectory

Handel yang digunakan IopOpenLinkOrRenameTarget untuk membuka direktori target.

Jika file tidak dipindahkan ke direktori lain, atau jika anggota FileName berisi nama jalur lengkap, anggota ini adalah NULL. Jika tidak, ini adalah handel untuk direktori akar tempat file akan berada setelah diganti namanya.

Untuk melakukan dua operasi terbuka yang tidak akan menyebabkan konflik berbagi, Anda dapat membuka RootDirectory dengan meminta melintasi | baca-atribut. IopOpenLinkOrRenameTarget kemudian dapat melakukan pembukaan relatif dengan meminta FILE_WRITE_DATA | MENSINKRONISASI. Kedua pembukaan ini tidak akan menyebabkan konflik berbagi.

FileNameLength

Panjang, dalam byte, dari nama baru untuk file.

FileName[1]

Karakter pertama dari string karakter lebar yang berisi nama baru untuk file. Ini diikuti dalam memori oleh sisa string. Jika anggota RootDirectory adalah NULL, dan file sedang dipindahkan ke direktori lain, anggota ini menentukan nama jalur lengkap yang akan ditetapkan ke file. Jika tidak, itu hanya menentukan nama file atau nama jalur relatif.

Keterangan

Struktur FILE_RENAME_INFORMATION digunakan untuk mengganti nama file. Operasi ini dapat dilakukan dengan salah satu cara berikut:

  • Panggil FltSetInformationFile atau ZwSetInformationFile, meneruskan FileRenameInformation sebagai nilai FileInformationClass dan meneruskan buffer yang dialokasikan pemanggil yang diformat sebagai struktur FILE_RENAME_INFORMATION untuk nilai FileInformation. Parameter FileHandle menentukan file yang akan diganti namanya.

  • Buat IRP dengan kode fungsi utama IRP_MJ_SET_INFORMATION.

Minifilter sistem file harus menggunakan FltSetInformationFile, bukan ZwSetInformationFile, untuk mengganti nama file.

Mengganti nama file memerlukan akses DELETE ke file sehingga entri direktori dapat dihapus dari direktori induk saat ini, serta akses yang sesuai untuk membuat entri baru dalam file direktori induk baru.

String nama file di anggota FileName harus ditentukan dalam salah satu formulir berikut.

  • Nama file sederhana. (Anggota RootDirectory adalah NULL.) Dalam hal ini, file hanya diganti namanya dalam direktori yang sama. Artinya, operasi ganti nama mengubah nama file tetapi bukan lokasinya.

  • Nama file yang sepenuhnya memenuhi syarat. (Anggota RootDirectory adalah NULL.) Dalam hal ini, operasi ganti nama mengubah nama dan lokasi file.

  • Nama file relatif. Dalam hal ini, anggota RootDirectory berisi handel ke direktori target untuk operasi ganti nama. Nama file itu sendiri harus berupa nama file sederhana.

Aturan umum untuk mengganti nama operasi:

  • File atau direktori hanya dapat diganti namanya dalam volume. Dengan kata lain, operasi ganti nama tidak dapat menyebabkan file atau direktori dipindahkan ke volume yang berbeda.

  • Direktori akar volume tidak dapat diganti namanya.

  • Jika ReplaceIfExists diatur ke FALSE, dan target ada, operasi ganti nama akan gagal.

  • Bahkan jika ReplaceIfExists diatur ke TRUE, operasi ganti nama masih akan gagal jika file dengan nama yang sama sudah ada dan merupakan direktori, file baca-saja, atau file yang sedang dieksekusi.

  • File dan direktori volume tidak dapat diganti namanya jika volume adalah volume baca-saja, seperti volume CDFS atau volume NTFS baca-saja.

Aturan khusus untuk mengganti nama file terbuka:

  • File tidak dapat diganti namanya jika memiliki handel terbuka, kecuali hanya terbuka karena kunci oportunistik batch (oplock) dan oplock batch dapat segera rusak.

  • File tidak dapat diganti namanya jika file dengan nama yang sama ada dan memiliki handel terbuka (kecuali dalam kasus batch-oplock yang dijelaskan sebelumnya).

  • Direktori tidak dapat diganti namanya jika atau subdirektorinya berisi file yang memiliki handel terbuka (kecuali dalam kasus batch-oplock yang dijelaskan sebelumnya).

Aturan khusus untuk mengganti nama aliran data NTFS:

  • Aliran direktori default tidak dapat diganti namanya.

  • Nama baru untuk aliran harus dimulai dengan titik dua (:).

  • Aliran data hanya dapat diganti namanya dalam file yang sama. Dengan kata lain, operasi ganti nama tidak dapat menyebabkan aliran data dipindahkan ke file lain.

  • Aliran data pada direktori tidak dapat diganti namanya menjadi aliran data default.

  • Jika ReplaceIfExists diatur ke TRUE, operasi ganti nama hanya akan berhasil jika aliran dengan nama yang sama tidak ada atau merupakan aliran data dengan panjang nol.

  • "Mengganti nama" aliran data default diizinkan, tetapi ini bukan penggantian nama yang benar, karena meninggalkan aliran data default dengan panjang nol.

Ukuran buffer FileInformation yang diteruskan ke ZwSetInformationFile atau FltSetInformationFile harus >= sizeof(FILE_RENAME_INFORMATION) ditambah ukuran dalam byte string FileName .

Persyaratan

Persyaratan Nilai
Header ntifs.h (termasuk Ntifs.h, Fltkernel.h)

Lihat juga

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwSetInformationFile