struktur USN_RECORD_V2 (winioctl.h)
Berisi informasi untuk catatan nomor urutan pembaruan (USN) versi 2.0. Aplikasi tidak boleh mencoba bekerja dengan versi jurnal perubahan yang lebih awal dari 2.0. Sebelum Windows 8 dan Windows Server 2012, struktur ini diberi nama USN_RECORD. Gunakan nama tersebut untuk mengkompilasi dengan SDK dan kompilator yang lebih lama.
Sintaks
typedef struct {
DWORD RecordLength;
WORD MajorVersion;
WORD MinorVersion;
DWORDLONG FileReferenceNumber;
DWORDLONG ParentFileReferenceNumber;
USN Usn;
LARGE_INTEGER TimeStamp;
DWORD Reason;
DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes;
WORD FileNameLength;
WORD FileNameOffset;
WCHAR FileName[1];
} USN_RECORD_V2, *PUSN_RECORD_V2;
Anggota
RecordLength
Panjang total rekaman, dalam byte.
Karena USN_RECORD_V2 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_V2.
Ukuran dalam byte dari setiap catatan jurnal perubahan paling besar adalah ukuran struktur USN_RECORD_V2 , 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 = ( MaximumComponentLength * sizeof(WCHAR) + sizeof(USN_RECORD) + sizeof(WCHAR) ); |
MajorVersion
Nomor versi utama perangkat lunak jurnal perubahan untuk rekaman ini.
Misalnya, jika perangkat lunak jurnal perubahan adalah versi 2.0, nomor versi utama adalah 2.
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 2.0, nomor versi minor adalah nol.
FileReferenceNumber
Nomor ordinal file atau direktori yang catatan catatannya berubah.
Ini adalah nilai yang ditetapkan secara sembarangan yang mengaitkan rekaman jurnal dengan file.
ParentFileReferenceNumber
Nomor ordinal 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_V2 mendatang.
Keterangan
Dalam buffer output yang dikembalikan dari operasi DeviceIoControl yang bekerja dengan USN_RECORD_V2, semua rekaman diselaraskan pada batas 64-bit dari awal buffer.
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_V2 . 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_V2 yang ada masih valid, tetapi anggota baru mungkin telah ditambahkan antara anggota terpenulisasi 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_V2 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 XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Header | winioctl.h (termasuk Windows.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk