在 NTFS 中,一个文件不仅可以有 “主数据流”,还可以有多个 “备用数据流”(Alternate Data Streams,简称 ADS),这个 “备用数据流” 通常也叫 “交换数据流”
平时常见的文件内容都是属于主数据流,比如下面命令可以创建的普通文件
echo hello > test.txt
备用数据流的文件名需要带了一个冒号指示,可以理解为备用数据流也是一个文件,依附主文件存在,主文件可以存在多个备用数据流
创建一个备用数据流的方式如下
echo secret > test.txt:hidden.txt
这个备用数据流在磁盘上不可见(显示隐藏文件也是看不见的),当主文件删除的时候,备用数据流也会被一起删除

通过 dir 命令的 r 参数进行列举备用数据流

还可以通过 more 命令查看备用数据流的内容

在代码中进行读写备用数据流的时候,和普通文件没有区别,唯一的区别 OpenFile 的时候,指定的是备用数据流文件名,如 test.txt:hidden.txt
如果在创建备用数据流的时候,没有指定前面的文件名,如 :hidden.txt,那么创建的备用数据流将寄生于当前目录上
这会被一些恶意软件使用,在根目录下创建寄生文件,无法通过手动删除的方式清除备用数据流,只能通过程序/命令或者工具来进行清理