struktur USN_RECORD_V3 (winioctl.h)
Berisi informasi untuk catatan nomor urutan pembaruan (USN) versi 3.0. Catatan versi 2.0 ditentukan oleh struktur USN_RECORD_V2 (juga disebut struktur USN_RECORD ).
Sintaks
typedef struct {
DWORD RecordLength;
WORD MajorVersion;
WORD MinorVersion;
FILE_ID_128 FileReferenceNumber;
FILE_ID_128 ParentFileReferenceNumber;
USN Usn;
LARGE_INTEGER TimeStamp;
DWORD Reason;
DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes;
WORD FileNameLength;
WORD FileNameOffset;
WCHAR FileName[1];
} USN_RECORD_V3, *PUSN_RECORD_V3;
Anggota
RecordLength
Panjang total rekaman, dalam byte.
Karena USN_RECORD_V3 adalah ukuran variabel, anggota RecordLength harus digunakan saat menghitung alamat rekaman berikutnya dalam buffer output, misalnya, buffer yang dikembalikan dari operasi untuk fungsi DeviceIoControl yang berfungsi dengan USN_RECORD_V3.
Ukuran dalam byte dari setiap catatan jurnal perubahan paling besar adalah ukuran struktur USN_RECORD_V3 , ditambah karakter MaximumComponentLength dikurangi 1 (untuk karakter yang dideklarasikan dalam struktur) kali ukuran karakter lebar. Nilai MaximumComponentLength dapat ditentukan dengan memanggil
Fungsi GetVolumeInformation . Di C, Anda dapat menentukan ukuran rekaman dengan menggunakan contoh kode berikut.
C++ |
---|
MaximumChangeJournalRecordSize = QuadAlign( (MaximumComponentLength - 1) * sizeof(WCHAR) + sizeof(USN_RECORD_V3) ); |
MajorVersion
Nomor versi utama perangkat lunak jurnal perubahan untuk rekaman ini.
Misalnya, jika perangkat lunak jurnal perubahan adalah versi 3.0, nomor versi utama adalah 3.
Nilai | Makna |
---|---|
|
Strukturnya adalah struktur USN_RECORD_V2 dan sisa struktur harus diurai menggunakan tata letak tersebut. |
|
Strukturnya adalah struktur USN_RECORD_V3 dan sisa struktur harus diurai menggunakan tata letak tersebut. |
|
Strukturnya adalah [struktur USN_RECORD_V4](ns-winioctl-usn_record_v4.md) dan sisa struktur harus diurai menggunakan tata letak tersebut. |
MinorVersion
Nomor versi minor dari perangkat lunak jurnal perubahan untuk rekaman ini. Misalnya, jika perangkat lunak jurnal perubahan adalah versi 3.0, nomor versi minor adalah nol.
FileReferenceNumber
Nomor ordinal 128-bit dari file atau direktori yang catatan ini catatannya berubah.
Ini adalah nilai yang ditetapkan secara sembarangan yang mengaitkan rekaman jurnal dengan file.
ParentFileReferenceNumber
Nomor ordinal 128-bit direktori tempat file atau direktori yang terkait dengan rekaman ini berada.
Ini adalah nilai yang ditetapkan secara semena-mena yang mengaitkan rekaman jurnal dengan direktori induk.
Usn
USN dari catatan ini.
TimeStamp
Stempel waktu UTC standar (FILETIME) dari rekaman ini, dalam format 64-bit.
Reason
Bendera yang mengidentifikasi alasan perubahan yang telah terakumulasi dalam rekaman jurnal file atau direktori ini sejak file atau direktori dibuka.
Saat file atau direktori ditutup, rekaman USN akhir dihasilkan dengan set bendera USN_REASON_CLOSE . Perubahan berikutnya (misalnya, setelah operasi atau penghapusan terbuka berikutnya) memulai rekaman baru dengan serangkaian bendera alasan baru.
Operasi ganti nama atau pemindahan menghasilkan dua rekaman USN, satu yang merekam direktori induk lama untuk item tersebut, dan yang merekam induk baru.
Tabel berikut mengidentifikasi kemungkinan bendera.
SourceInfo
Informasi tambahan tentang sumber perubahan, diatur oleh FSCTL_MARK_HANDLE operasi DeviceIoControl .
Saat utas menulis catatan USN baru, informasi sumber ditandai dalam catatan sebelumnya terus ada hanya jika utas juga mengatur bendera tersebut. Oleh karena itu, struktur informasi sumber memungkinkan aplikasi untuk memfilter catatan USN yang hanya ditetapkan oleh sumber yang diketahui, misalnya, filter antivirus.
Salah satu dari dua nilai berikut dapat diatur.
SecurityId
Pengidentifikasi keamanan unik yang ditetapkan ke file atau direktori yang terkait dengan rekaman ini.
FileAttributes
Atribut untuk file atau direktori yang terkait dengan rekaman ini, seperti yang dikembalikan oleh fungsi GetFileAttributes . Atribut aliran yang terkait dengan file atau direktori dikecualikan.
FileNameLength
Panjang nama file atau direktori yang terkait dengan rekaman ini, dalam byte. Anggota FileName berisi nama ini. Gunakan anggota ini untuk menentukan panjang nama file, daripada bergantung pada '\0' berikutnya untuk memisahkan nama file di FileName.
FileNameOffset
Offset anggota FileName dari awal struktur.
FileName[1]
Nama file atau direktori yang terkait dengan rekaman ini dalam format Unicode. Nama file atau direktori ini memiliki panjang variabel.
Saat bekerja dengan FileName, jangan andalkan nama file yang berisi pembatas '\0' berikutnya, tetapi sebaliknya tentukan panjang nama file dengan menggunakan FileNameLength.
Jangan melakukan aritmatika penunjuk waktu kompilasi menggunakan FileName. Sebagai gantinya, buat perhitungan yang diperlukan pada durasi dengan menggunakan nilai anggota FileNameOffset . Melakukannya membantu membuat kode Anda kompatibel dengan versi USN_RECORD_V3 di masa mendatang.
Keterangan
Dalam buffer output yang dikembalikan dari operasi DeviceIoControl yang berfungsi dengan USN_RECORD_V3, semua rekaman diselaraskan pada batas 64-bit dari awal buffer.
Saat pelacakan rentang diaktifkan, NTFS beralih ke hanya menghasilkan rekaman USN_RECORD_V3 sebagai output.
Untuk menyediakan jalur kompatibilitas ke atas dalam klien jurnal perubahan, Microsoft menyediakan nomor versi utama dan minor dari perangkat lunak jurnal perubahan dalam struktur USN_RECORD_V3 . Kode Anda harus memeriksa nilai-nilai ini, mendeteksi kompatibilitasnya sendiri dengan perangkat lunak jurnal perubahan, dan jika perlu dengan anggun menangani ketidakcocokan.
Perubahan nomor versi minor menunjukkan bahwa anggota struktur USN_RECORD_V3 yang ada masih valid, tetapi anggota baru mungkin telah ditambahkan antara anggota yang berpenulis dan yang terakhir, yang merupakan string panjang variabel.
Untuk menangani perubahan seperti itu dengan anggun, kode Anda tidak boleh melakukan aritmatika pointer waktu kompilasi yang bergantung pada lokasi anggota terakhir. Misalnya, ini membuat kode sizeof(USN_RECORD)
C tidak dapat diandalkan. Sebagai gantinya, mengandalkan penghitungan run-time dengan menggunakan anggota RecordLength .
Peningkatan nomor versi utama dari perangkat lunak jurnal perubahan menunjukkan bahwa struktur USN_RECORD_V3 mungkin telah mengalami perubahan besar, dan bahwa definisi saat ini mungkin tidak dapat diandalkan. Jika kode Anda mendeteksi perubahan nomor versi utama perangkat lunak jurnal perubahan, kode tersebut tidak boleh berfungsi dengan jurnal perubahan.
Untuk informasi selengkapnya, lihat Membuat, Memodifikasi, dan Menghapus Journal Perubahan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 8 [khusus aplikasi desktop] |
Server minimum yang didukung | Windows Server 2012 [hanya aplikasi desktop] |
Header | winioctl.h (termasuk Windows.h) |