我已经阅读了一些关于
Alternate Data Streams
的文档,并且我正在考虑在我自己的项目中使用它们。然而,在我决定使用它们之前,我仍然有很多未知的知识和悬而未决的问题。这就是我列出这个问题清单的原因:
streams
?LoadLibrary
API 从流加载 DLL 吗?ShellExecute
)流?Alternate Data Streams
有什么优点/好处/缺点?Alternate Data Streams
?我期待您的答案/信息/摘要。最好的语言是 Delphi,但任何其他语言也可以,只要它使用
WinAPI
。
一一解答您的问题:
枚举:使用
NtQueryInformationFile
。从 Windows Vista 开始,您还可以使用 dir /r
在命令行上枚举流。
校验和:由于按名称访问文件时通常只打开未命名的数据流,因此在计算校验和时仅使用该流的内容。
复制到 NTFS:Windows 资源管理器和复制命令行实用程序复制所有流。
复制到其他FS:备用数据流丢失。
嵌套流:不可能。文件仅由流列表组成,它们不能嵌套。
属性:一些属性是基于文件的,一些属性(加密、压缩、稀疏)是基于流的。
LoadLibrary
似乎适用于备用数据流。
ShellExecute
在我的计算机上失败,并出现 ERROR_FILE_NOT_FOUND
(2)。
请注意,可以从命令行运行 ADS(这并不是一个好主意):
type calc.exe > dummy.txt:calc
wmic process call create "dummy.txt:calc"
ADS 对于存储与文件关联的一些非关键信息很有用。例如,从互联网下载的可执行文件将具有 ADS,这会导致资源管理器在执行文件之前显示警告。
不要将它们用于关键数据,因为备份过程中数据可能会丢失。