27#define KeQuerySystemTime(t) NtfsGetSystemTimeAsFileTime((LPFILETIME)(t));
29#define FREE(p) if (p) RtlFreeHeap(RtlGetProcessHeap(), 0, p);
31#define FIRST_ATTRIBUTE(fr) ((PATTR_RECORD)((ULONG_PTR)fr + fr->FirstAttributeOffset))
32#define NEXT_ATTRIBUTE(attr) ((PATTR_RECORD)((ULONG_PTR)(attr) + (attr)->Length))
34#define ARR_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
39#define MB_TO_B(x) (x * 1024)
41#define GET_BYTE(val, n) (((val) >> (8*(n))) & 0xFF)
43#define GET_BYTE_FROM_END(val, n) (((val) >> (8*(sizeof((val)) - 1 - (n)))) & 0xFF)
46 ( (((val) >> 8) & 0x00FF) | (((val) << 8) & 0xFF00) )
49 ( (((val) >> 24) & 0x000000FF) | (((val) >> 8) & 0x0000FF00) | \
50 (((val) << 8) & 0x00FF0000) | (((val) << 24) & 0xFF000000) )
53 ( (((val) >> 56) & 0x00000000000000FF) | (((val) >> 40) & 0x000000000000FF00) | \
54 (((val) >> 24) & 0x0000000000FF0000) | (((val) >> 8) & 0x00000000FF000000) | \
55 (((val) << 8) & 0x000000FF00000000) | (((val) << 24) & 0x0000FF0000000000) | \
56 (((val) << 40) & 0x00FF000000000000) | (((val) << 56) & 0xFF00000000000000) )
61#define DISK_HANDLE (NtfsFormatData.DiskHandle)
62#define DISK_GEO (NtfsFormatData.DiskGeometry)
63#define DISK_LEN (NtfsFormatData.LengthInformation)
64#define LABEL (NtfsFormatData.Label)
65#define LAYOUT (NtfsFormatData.Layout)
67#define BYTES_PER_SECTOR ((ULONG)DISK_GEO->BytesPerSector)
68#define SECTORS_PER_TRACK ((ULONG)DISK_GEO->SectorsPerTrack)
71#define SECTORS_PER_CLUSTER (LAYOUT.SectorsPerCluster)
72#define BYTES_PER_CLUSTER (LAYOUT.BytesPerCluster)
73#define CLUSTER_COUNT (LAYOUT.ClusterCount)
74#define TOTAL_SECTORS (LAYOUT.TotalSectors)
76#define IS_HARD_DRIVE (DISK_GEO->MediaType == FixedMedia)
81#define DISK_HEADS 0xFF
86#define OEM_ID BSWAP64(0x4E54465320202020)
87#define EBPB_HEADER BSWAP32(0x80008000)
88#define BOOT_SECTOR_END BSWAP16(0x55AA)
93#define MFT_RECORD_SIZE 1024
94#define INDEX_RECORD_SIZE 4096
97#define MFT_RESERVED_RECORDS 16
101#define MFT_MIRR_COUNT 4
106#define NTFS_MAJOR_VERSION 3
107#define NTFS_MINOR_VERSION 1
110#define NTFS_SECURITY_ID 0x100
112#define FILE_RECORD_MAGIC BSWAP32(0x46494C45)
113#define INDX_RECORD_MAGIC BSWAP32(0x494E4458)
117#define ATTR_RECORD_ALIGNMENT 8
121#define VALUE_OFFSET_ALIGNMENT 4
125#define DATA_RUN_ALIGNMENT 4
129#define FILE_RECORD_END 0x11477982
131#define FILE_NAME_POSIX 0
132#define FILE_NAME_WIN32 1
133#define FILE_NAME_DOS 2
134#define FILE_NAME_WIN32_AND_DOS 3
136#define FILE_TYPE_READ_ONLY 0x1
137#define FILE_TYPE_HIDDEN 0x2
138#define FILE_TYPE_SYSTEM 0x4
139#define FILE_TYPE_ARCHIVE 0x20
140#define FILE_TYPE_REPARSE 0x400
141#define FILE_TYPE_COMPRESSED 0x800
142#define FILE_TYPE_DIRECTORY 0x10000000
145#define RA_INDEXED 0x01
147#define RA_METAFILES_ATTRIBUTES (FILE_TYPE_SYSTEM | FILE_TYPE_HIDDEN)
148#define RA_HEADER_LENGTH (FIELD_OFFSET(ATTR_RECORD, Resident.Reserved) + sizeof(UCHAR))
151#define COLLATION_BINARY 0x00
152#define COLLATION_FILE_NAME 0x01
153#define COLLATION_NTOFS_ULONG 0x10
154#define COLLATION_NTOFS_SECURITY_HASH 0x12
159#define NONRES_HEADER_SIZE 0x40
160#define NONRES_HEADER_SIZE_SPARSE 0x48
163#define INDEX_ENTRY_NODE 0x01
164#define INDEX_ENTRY_END 0x02
166#define INDEX_NODE_LARGE 0x01
173#define RECORD_SEQUENCE(rec) ((USHORT)(((rec) >= 1 && (rec) <= 15) ? (rec) : 1))
177#define MFT_REFERENCE(rec) (((ULONGLONG)(rec)) | ((ULONGLONG)RECORD_SEQUENCE(rec) << 48))
180#define METAFILE_MFT 0
181#define METAFILE_MFTMIRR 1
182#define METAFILE_LOGFILE 2
183#define METAFILE_VOLUME 3
184#define METAFILE_ATTRDEF 4
185#define METAFILE_ROOT 5
186#define METAFILE_BITMAP 6
187#define METAFILE_BOOT 7
188#define METAFILE_BADCLUS 8
189#define METAFILE_SECURE 9
190#define METAFILE_UPCASE 10
191#define METAFILE_EXTEND 11
192#define METAFILE_FIRST_USER_FILE 16
194#define RUN_LIST_ENTRY_HEADER_SIZE 1
195#define RUN_LIST_ENTRY_SIZE 8
245#define NTFS_SDS_MIRROR 0x40000
262#define HIDDEN_SECTORS (NtfsFormatData.HiddenSectors)
264#define FORMAT_TIME (NtfsFormatData.FormatTime)
struct _VOLUME_INFORMATION_ATTRIBUTE * PVOLUME_INFORMATION_ATTRIBUTE
struct _RECORD_HEADER * PRECORD_HEADER
struct _FILENAME_ATTRIBUTE FILENAME_ATTRIBUTE
struct _INDEX_NODE_HEADER INDEX_NODE_HEADER
struct _STANDARD_INFORMATION STANDARD_INFORMATION
NTSTATUS WriteMetafiles(VOID)
struct _FILENAME_ATTRIBUTE * PFILENAME_ATTRIBUTE
struct _INDEX_ENTRY_HEADER * PINDEX_ENTRY_HEADER
struct _BIOS_PARAMETERS_BLOCK BIOS_PARAMETERS_BLOCK
struct _BOOT_SECTOR * PBOOT_SECTOR
struct _STANDARD_INFORMATION * PSTANDARD_INFORMATION
enum _ATTR_FLAGS ATTR_FLAGS
struct _NTFS_LAYOUT * PNTFS_LAYOUT
BYTE GetSectorsPerCluster(VOID)
struct _RECORD_HEADER RECORD_HEADER
@ AttributeStandardInformation
@ AttributeVolumeInformation
@ AttributeSecurityDescriptor
@ AttributeIndexAllocation
@ AttributeLoggedUtilityStream
VOID NtfsGetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
struct _BIOS_PARAMETERS_BLOCK * PBIOS_PARAMETERS_BLOCK
enum _MFT_RECORD_FLAGS * PMFT_RECORD_FLAGS
struct _ATTR_RECORD * PATTR_RECORD
struct _INDEX_ROOT_ATTRIBUTE * PINDEX_ROOT_ATTRIBUTE
struct _EXTENDED_BIOS_PARAMETERS_BLOCK * PEXTENDED_BIOS_PARAMETERS_BLOCK
struct _INDEX_ROOT_ATTRIBUTE INDEX_ROOT_ATTRIBUTE
struct _NTFS_FORMAT_DATA NTFS_FORMAT_DATA
struct _INDEX_ENTRY_HEADER INDEX_ENTRY_HEADER
enum _ATTRIBUTE_TYPE * PATTRIBUTE_TYPE
struct _FILE_RECORD_HEADER * PFILE_RECORD_HEADER
enum _ATTRIBUTE_TYPE ATTRIBUTE_TYPE
@ MFT_RECORD_IS_DIRECTORY
enum _MFT_RECORD_FLAGS MFT_RECORD_FLAGS
struct _ATTR_RECORD ATTR_RECORD
struct _EXTENDED_BIOS_PARAMETERS_BLOCK EXTENDED_BIOS_PARAMETERS_BLOCK
NTSTATUS ComputeLayout(IN ULONG ClusterSize)
enum _ATTR_FLAGS * PATTR_FLAGS
struct _INDEX_NODE_HEADER * PINDEX_NODE_HEADER
struct _FILE_RECORD_HEADER FILE_RECORD_HEADER
struct _VOLUME_INFORMATION_ATTRIBUTE VOLUME_INFORMATION_ATTRIBUTE
NTFS_FORMAT_DATA NtfsFormatData
struct _BOOT_SECTOR BOOT_SECTOR
struct _NTFS_LAYOUT NTFS_LAYOUT
NTSTATUS WriteBootSector(VOID)
struct _ATTR_RECORD::@5993::@5995 Resident
struct _ATTR_RECORD::@5993::@5996 NonResident
DWORD32 HiddenSectorsCount
BIOS_PARAMETERS_BLOCK BPB
EXTENDED_BIOS_PARAMETERS_BLOCK EBPB
ULONGLONG MftMirrLocation
CHAR ClustersPerMftRecord
CHAR ClustersPerIndexRecord
USHORT AlignmentOrReserved
ULONGLONG DirectoryFileReferenceNumber
union _FILENAME_ATTRIBUTE::@5997 Extended
struct _FILENAME_ATTRIBUTE::@5997::@5998 EaInfo
BYTE ClustersPerIndexRecord
CHAR ClustersPerIndexRecord
CHAR ClustersPerMftRecord
_Reserved_ PVOID Reserved