Bagikan melalui


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:

  1. Inisialisasi NextVcn ke Attribute->LowestVcn dan CurrentLcn ke 0.
  2. Inisialisasi penunjuk aliran byte ke (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset.
  3. Atur CurrentVcn ke NextVcn.
  4. Baca byte berikutnya dari aliran. Jika 0, maka istirahat; lain mengekstrak v dan l seperti yang dijelaskan sebelumnya.
  5. 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.
  6. 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.
  7. Perbarui informasi pemetaan yang di-cache dari CurrentVcn, NextVcn, dan CurrentLcn.
  8. Buka langkah 3.

Lihat juga

Tabel File Master