NTFS文件系统标准信息属性
2021-07-01
203
0
NTFS标准信息属性的代号
NTFS标准信息属性的类型值为:0x10.
NTFS标准信息属性的常驻性
是常驻属性,每一个文件或者目录都必须存在。
NTFS标准信息属性的内容
- 时间日期
- 常规属性(只读,系统或存档;压缩,稀疏或加密等)
- 文件或目录拥有者
- 安全属性
- 文件的变更情况(启用了变更日志的情况下)
时间日期
时间日期拥有四个时间日期,分别为
- 创建时间:文件创建的时间
- 修改时间:文件的$DATA属性或者$INDEX属性被最后修改的时间
- MFT修改时间:文件的元数据最后修改时间
- 访问时间:文件内容最后被访问的时间
这四个时间的日期和时间戳使用64位整数值,是相对于1601年1月1日0时0分0秒,精度达到千万分之一秒的值,即100纳秒一个点滴。由于时间存在时区的问题,故文件时间记录的是格林威治时间,而在电脑系统中显示时会自动加上时区的被偿时间。
NTFS标准信息数据结构
字节偏移 | 字节数 | 含义 |
---|---|---|
00~07 | 8 | 创建时间 |
08~0F | 8 | 最后修改时间 |
10~17 | 8 | MFT改变时间 |
18~1F | 8 | 最后访问时间 |
20~23 | 4 | 文件标志0x0001-只读0x0002-隐藏0x0004系统0x0020-存档0x0040-设备0x0080-常规0x0100-临时0x0200-稀疏0x0400-重解析点0x0800-压缩0x1000-脱机0x2000-没有为了快速搜索而编入索引0x01000-加密 |
24~27 | 4 | 最高版本号 |
28~2B | 4 | 版本号 |
2C~2F | 4 | 分类ID |
30~33 | 4 | 属性ID |
34~37 | 4 | 安全ID,它是$Secure文件(安全文件)的索引,用于描述该文件的访问权设置 |
38~3F | 8 | 配额管理,文件使用了用户配额中的多个字节空间 |
40~47 | 8 | 更新序列号(启用了变更日志时使用)。它是一个文件,以列表的形式记录了发生改变的文件,以便快速地确定在某一时间段内那些文件发生了变化而需要一个个地对文件进行单独查看。 |
标准信息属性示例:
主文件表MFT里的标准信息
根据MFT的0x14~15得知第一个属性信息的偏移地址为:0x38,查看0x38处的内容,发现第一个属性信息内的标志为0x00000010,为NTFS标准信息类型。然后再要据 “常驻属性结构头“得知其总长度为0x60个字节。
- 0x28~0x3b:0x00000010,标准信息类型
- 0x3c~0x0f:0x00000060,属性的长度字节数,包括属性头
- 0x40:00,常驻属性
- 0x41:00,属性名长度为0
- 0x42~0x43:0x18,属性名位置偏移
- 0x44~0x45:0x00,表示非压缩、加密、稀蔬
- 0x46~0x47:0x0000,属性ID
- 0x48~0x4b:0x00000048,即72字节
- 0x4c~0x4d:0x0018属必内容相对于本属性头起始位置的偏移,也即属性头的长度
- 0x4e:0x00,索引标志
- 0x4f:0x00,保留
以上为属性头的内容,标准属性的内容如下:
文件标志为6=0x02+0x04,代表的是0x0002-隐藏,0x0004系统
时间的转换我们可以使用C语言函数进行转换:
SYSTEMTIME systime;
FILETIME filetime;
FILETIME localfiletime;
filetime.dwLowDateTime = strtoul(cf[i].m_szLowCreate, NULL, 10);
filetime.dwHighDateTime = strtoul(cf[i].m_szHighCreate, NULL, 10);
FileTimeToLocalFileTime(&filetime, &localfiletime);
FileTimeToSystemTime(&localfiletime, &systime);
_tprintf(TEXT("创建时间:%d-%d-%d %d:%d:%d\n"), systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);