访问隐藏的 ini 文件部分(文件名上的冒号)

Accessing hidden ini file sections (colon on file name)

我偶然发现了一段代码,它执行了一些我以前从未见过的事情,而且我在任何地方都找不到关于它的信息。

该程序创建一个常规 ini 文件并写入一些内容,没什么特别的。

文件创建后,代码进一步向文件写入数据,它转储整个 7MB 二进制文件 ini 文件中,如下所示:

FileWrite(inifile:binary:$DATA)

就是这样。二进制文件被转储到文件中,我找不到访问它的方法。如果我右键单击该文件并转到属性,它会显示“大小:808 字节”和“磁盘大小:7mb”,很明显二进制文件就在某处。

我尝试做类似的事情并在 CMD 上写了这个:

notepad anyname.ini:WTH

记事本被执行并询问我是否要保存文件“anyname.ini:WTH”。我点击“是”,在那里写了几个字符,然后 保存了文件

确实创建了名为“anyname.ini”的文件,但打开后发现它是空的!

问题:这是什么行为,我如何访问这些数据?

在 NTFS 文件系统上,一个文件可以包含 1 个或多个 Alternate Data Streams。 ADS 由以下命名格式标识:

<filename>:<stream name>:<stream type>

每个 ADS 在逻辑上彼此独立,但在同一个文件中组合在一起。 CreateFile() 可以 return 将 HANDLE 传递给每个 ADS 的完全限定名称。

在您的示例中,inifile:binary:$DATA 在文件 inifile 中创建了一个名为 binary 且类型为 $DATA 的 ADS。在 Windows Explorer 中,它仅向您显示文件 main ADS 的大小,以及计算其中所有 ADS 的整个文件的总大小。

同样,anyname.ini:WTH 在文件 anyname.ini.

中创建一个默认类型 $DATA 的名为 WTH 的 ADS

每个文件都有一个主ADS。例如,sample.txt 有一个名为 sample.txt::$DATA 的主 ADS - 一个没有名称的 $DATA 类型的 ADS。这是用户和应用程序通常使用的主要 ADS。

在 NTFS 系统中复制文件时,其关联的 ADS 会保留在该文件中。但是如果文件被复制到非NTFS系统,除了主ADS之外的所有ADS都会丢失。

有关详细信息,请参阅 Appendix A: NTFS Alternate Streams of MSDN's [MS-FSCC]: File System Control Codes 文档。