C0H类型属性,即$REPARSE_POINT,也就是重解析点属性。该属性没有最小字节数限制,但有最大字节数限制,其最大字节数为16 384字节。
文件或目录可以包含一个重解析点(用户定义数据的集合)。存储数据的程序和文件系统过滤器可以理解这种数据格式,所安装的这些程序和过滤器用于解释数据并处理文件。程序设置重解析点时,它会存储该数据和唯一标识所存储数据的重解析标记。当文件系统打开带有重解析点的文件时,它试图找到与由重解析标记标识的数据格式相联系的文件系统过滤器。如果找到了这样的文件系统过滤器,过滤器将在重分析数据的指导下处理文件。否则,打开文件的操作将会失败。
例如,可利用重分析点建立NTFS连接和远程存储。远程存储使用管理员定义的规则集将不常使用的文件移动到可长期存储文件的存储器中,如光盘,它使用重分析点将文件信息存储在文件系统中。文件信息存储在一个包含重分析点的存根文件中,重分析点的数据指向实际文件当前位置处的设备。文件系统过滤器可以使用这些信息检索文件。
在Windwos 2003、Windows XP系统中可以用“fsutil reparsepoint [query] PathName”命令检索由指定的句柄识别的文件或目录的重分析点数据,也可以用“fsutil reparsepoint [delete] PathName”命令删除指定的文件或目录的重分析点。
重解析点中有一个称为“重解析数据”的数据块能够与文件或者目录相关联。重解析数据是用户定义的关于文件或者目录的数据。例如,文件的状态或者地址,创建这些数据的应用程序、文件系统过滤器驱动程序、I/O管理器,都可以从重解析点读重解析数据。当NTFS在文件或者目录查找其间,遇到一个重解析点,它返回一个重解析状态代码,通知连接到卷上的文件系统过滤器驱动程序和I/O管理器,检查重解析数据。每个重解析点类型有一个唯一的重解析标签。重解析标签允许负责转换重解析点的重解析数据的组件确认重解析点,而不用检查重解析数据。重解析标签的拥有者,是文件系统过滤器驱动程序或者I/O管理器,在确认重解析数据时,可以选择以下的选项:
①重解析标签拥有者可以处理在文件I/O操作中指定的跨越重解析点的路径名,并且用修改过的路径名重新发送I/O操作。例如,连接就是利用这个方法重指向目录寻找。
②重解析标签拥有者可以从文件删除重解析点,以某些方法修改文件,然后重新发送文件I/O操作。Windows 2003、Windows XP的分层存储管理(HSM)系统就是用这种方式使用重解析点。HSM将文件归档,将文件的内容转移到磁带,只剩下重解析点在它们的位置。当进程访问一个已经归档的文件,HSM过滤器驱动程序(*\System32\ Drivers\Rsfilter.sys)从文件删除重解析点,从归档的介质读文件的数据,重新发送访问请求。因此,对于访问归档文件的进程来说,获取离线数据是透明的。
重解析点属性结构见表4-73。
表4-73 C0H属性描述表
字节偏移 | 字段长度(字节) | 描述 |
~ | ~ | 标准属性头(已分析过) |
0x00 | 4 | 重解析类型(和标志) |
0x04 | 2 | 重解析数据长度 |
0x06 | 2 | 填充到能被8整除,无意义 |
0x08 | V | 重解析数据,其结构取决于重解析类型 |
其中重解析标志描述见表4-74(其中所列的都是预定义的类型)。
表4-74 重解析标志描述表
标志 | 描述 | 标志 | 描述 |
0x20000000 | 别名 | 0x68000007 | SIS |
0x40000000 | 高潜伏 | 0x68000008 | DFS |
0x80000000 | 微软 | 0x88000003 | 装载点 |
0x68000005 | NSS | 0xA8000004 | HSM |
0x68000006 | NSS recover | 0xE8000000 | 符号连接 |