struktur ATTRIBUTE_RECORD_HEADER
[Struktur ini hanya berlaku untuk volume NTFS versi 3; struktur ini dapat diubah dalam versi mendatang.]
Mewakili rekaman atribut.
Sintaks
typedef struct _ATTRIBUTE_RECORD_HEADER {
ATTRIBUTE_TYPE_CODE TypeCode;
ULONG RecordLength;
UCHAR FormCode;
UCHAR NameLength;
USHORT NameOffset;
USHORT Flags;
USHORT Instance;
union {
struct {
ULONG ValueLength;
USHORT ValueOffset;
UCHAR Reserved[2];
} Resident;
struct {
VCN LowestVcn;
VCN HighestVcn;
USHORT MappingPairsOffset;
UCHAR Reserved[6];
LONGLONG AllocatedLength;
LONGLONG FileSize;
LONGLONG ValidDataLength;
LONGLONG TotalAllocated;
} Nonresident;
} Form;
} ATTRIBUTE_RECORD_HEADER, *PATTRIBUTE_RECORD_HEADER;
Anggota
-
TypeCode
-
Kode jenis atribut.
Nilai Makna - $STANDARD_INFORMATION
- 0x10
Atribut file (seperti baca-saja dan arsip), stempel waktu (seperti pembuatan file dan terakhir dimodifikasi), dan jumlah tautan keras. - $ATTRIBUTE_LIST
- 0x20
Daftar atribut yang membentuk file dan referensi file dari rekaman file MFT tempat setiap atribut berada. - $FILE_NAME
- 0x30
Nama file, dalam karakter Unicode. - $OBJECT_ID
- 0x40
Pengidentifikasi objek 64-byte yang ditetapkan oleh layanan pelacakan tautan. - $VOLUME_NAME
- 0x60
Label volume. Ada dalam file $Volume. - $VOLUME_INFORMATION
- 0x70
Informasi volume. Ada dalam file $Volume. - $DATA
- 0x80
Isi file. - $INDEX_ROOT
- 0x90
Digunakan untuk mengimplementasikan alokasi nama file untuk direktori besar. - $INDEX_ALOKASI
- 0xA0
Digunakan untuk mengimplementasikan alokasi nama file untuk direktori besar. - $BITMAP
- 0xB0
Indeks bitmap untuk direktori besar. - $REPARSE_POINT
- 0xC0
Data titik pemilah ulang. -
RecordLength
-
Ukuran rekaman atribut, dalam byte. Nilai ini mencerminkan ukuran yang diperlukan untuk varian rekaman dan selalu dibulatkan ke batas quadword terdekat.
-
FormCode
-
Kode formulir atribut.
Nilai Makna - RESIDENT_FORM
- 0x00
Nilai terkandung dalam rekaman file dan segera mengikuti header rekaman atribut. - NONRESIDENT_FORM
- 0x01
Nilai terkandung dalam sektor lain pada disk. -
NameLength
-
Ukuran nama atribut opsional, dalam karakter, atau 0 jika tidak ada nama atribut. Panjang nama atribut maksimum adalah 255 karakter.
-
NameOffset
-
Offset nama atribut dari awal rekaman atribut, dalam byte. Jika anggota NameLength adalah 0, anggota ini tidak ditentukan.
-
Bendera
-
Bendera atribut.
-
ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)
-
ATTRIBUTE_FLAG_SPARSE (0x8000)
-
ATTRIBUTE_FLAG_ENCRYPTED (0x4000)
-
-
Instans
-
Instans unik untuk atribut ini dalam rekaman file.
-
Formulir
-
Jika anggota FormCode RESIDENT_FORM, serikat adalah struktur Penduduk . Jika FormCode NONRESIDENT_FORM, penyatuan adalah struktur Nonresident .
-
Penduduk
-
-
ValueLength
-
Ukuran nilai atribut, dalam byte.
-
ValueOffset
-
Offset ke nilai dari awal rekaman atribut, dalam byte.
-
Dipesan
-
Dicadangkan.
-
-
Tidak dikenal
-
-
LowestVcn
-
Nomor kluster virtual (VCN) terendah yang dicakup oleh rekaman atribut ini.
-
TertinggiVcn
-
VCN tertinggi yang dicakup oleh rekaman atribut ini.
-
MappingPairsOffset
-
Offset ke array pasangan pemetaan dari awal rekaman atribut, dalam byte. Untuk informasi selengkapnya, lihat Keterangan.
-
Dipesan
-
Dicadangkan.
-
AllocatedLength
-
Ukuran file yang dialokasikan, dalam byte. Nilai ini bahkan merupakan kelipatan dari ukuran kluster. Anggota ini tidak valid jika anggota LowestVcn bukan nol.
-
FileSize
-
Ukuran file (byte tertinggi yang dapat dibaca plus 1), dalam byte. Anggota ini tidak valid jika LowestVcn bukan nol.
-
ValidDataLength
-
Panjang data yang valid (byte yang diinisialisasi tertinggi ditambah 1), dalam byte. Nilai ini dibulatkan ke batas kluster terdekat. Anggota ini tidak valid jika LowestVcn bukan nol.
-
TotalAllocated
-
Total yang dialokasikan untuk file (jumlah kluster yang dialokasikan).
-
-
Keterangan
Perhatikan bahwa tidak ada file header terkait untuk struktur ini.
Definisi struktur ini hanya berlaku untuk versi utama 3 dan minor versi 0 atau 1, seperti yang dilaporkan oleh FSCTL_GET_NTFS_VOLUME_DATA.
Rekaman atribut selalu diselaraskan pada batas quadword.
Jika atribut tidak diketahui, header rekaman atribut berisi daftar informasi pengambilan yang menyediakan pemetaan antara VCN dan nomor kluster logis (LCN) untuk atribut . Jika informasi pengambilan tidak cocok di segmen file dasar, informasi tersebut dapat disimpan dalam segmen rekaman file eksternal dengan sendirinya. Jika masih tidak cocok dengan satu segmen rekaman file eksternal, ada ketentuan dalam daftar atribut untuk berisi beberapa entri untuk atribut yang memerlukan informasi pengambilan tambahan.
Array pasangan pemetaan disimpan dalam bentuk terkompresi dan mengasumsikan bahwa informasi didekompresi dan di-cache oleh sistem. Ini terdiri dari serangkaian pasangan NextVcn/CurrentLcn. Misalnya, jika file memiliki satu eksekusi 8 kluster mulai dari LCN 128 dan file dimulai pada LowestVcn 0, maka array pasangan pemetaan hanya memiliki satu entri, yaitu NextVcn=8 dan CurrentLcn=128. Array adalah aliran byte yang menyimpan perubahan ke variabel kerja saat diproses secara berurutan. Aliran byte akan ditafsirkan sebagai aliran tiga kali dihentikan nol, sebagai berikut:
count byte = v + (l * 16)
di mana v adalah jumlah byte VCN urutan rendah yang diubah dan l adalah jumlah byte LCN urutan rendah yang diubah.
Algoritma dekompresi adalah sebagai berikut:
- Inisialisasi NextVcn ke
Attribute->LowestVcn
dan CurrentLcn ke 0. - Inisialisasi penunjuk aliran byte ke
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset
. - Atur CurrentVcn ke NextVcn.
- Baca byte berikutnya dari aliran. Jika 0, maka istirahat; lain mengekstrak v dan l seperti yang dijelaskan sebelumnya.
- Interpretasikan byte v berikutnya sebagai kuantitas yang ditandatangani, dengan byte urutan rendah terlebih dahulu. Buka kemasan yang diperluas menjadi 64 bit dan tambahkan ke NextVcn.
- Interpretasikan byte l berikutnya sebagai kuantitas yang ditandatangani, dengan byte urutan rendah terlebih dahulu. Buka kemasan yang diperluas menjadi 64 bit dan tambahkan ke CurrentLcn. Jika ini menghasilkan CurrentLcn 0, maka VPN dari CurrentVcn ke NextVcn–1 tidak dialokasikan.
- Perbarui informasi pemetaan yang di-cache dari CurrentVcn, NextVcn, dan CurrentLcn.
- Buka langkah 3.
Lihat juga