如何使用备用数据流,有什么好处?

3
我已经阅读了一些关于“备用数据流”的文档,并考虑在自己的项目中使用它们。然而,仍有许多未知的知识和问题需要在决定使用它们之前解决。这就是我列出这个问题清单的原因:
  1. 如何在没有Sysinternals工具“streams”的情况下枚举流?
  2. 流是否会影响“主机”文件的MD5值?
  3. 如果将“主机”文件复制/剪切到另一个(NTFS)路径,会发生什么?流也会被复制/剪切吗?
  4. 如果将“主机”文件复制/剪切到不是NTFS的另一个路径,会发生什么?
  5. 是否可能在现有流中有另一个流?
  6. 由于每个流都有一个实际的文件句柄,是否可能更改流的属性?
  7. 我可以使用“LoadLibrary”API从流中加载DLL吗?
  8. 是否可能执行(例如“ShellExecute”)流?
  9. 使用“备用数据流”的优点/好处/缺点是什么?
  10. 如果我使用“备用数据流”,我需要注意什么?
我期待着您的答案/信息/总结。首选语言是Delphi,但使用任何其他语言也可以,只要它使用“WinAPI”。

1
你的问题看起来像是“我想知道一切”。请解释一下你打算用ADS做什么。 - CodeCaster
我打算使用 ADS。然而,还有一些未记录或从未被问及的问题存在。 - Ben
2
哪些功能没有文档记录? - Xearinox
1个回答

9
许多问题在这里都有答案:http://flexhex.com/docs/articles/alternate-streams.phtml
  1. 枚举:使用NtQueryInformationFile,参见链接。从Windows Vista开始,您还可以使用命令行中的dir /r枚举流。

  2. 校验和:通常情况下,当您按名称访问文件时,只打开未命名数据流,因此在计算校验和时仅使用该流的内容。

  3. 复制到NTFS:Windows资源管理器和复制命令行实用程序会复制所有流。

  4. 复制到其他文件系统:备用数据流将丢失。

  5. 嵌套流:不,文件只是由流列表组成,它们不能嵌套。

  6. 属性:一些属性是基于文件的,一些(加密、压缩、稀疏)是基于流的。

  7. LoadLibrary似乎可以在备用数据流上工作。

  8. 在我的电脑上,对ADS使用ShellExecute失败并显示ERROR_FILE_NOT_FOUND(2)。

    请注意,理论上可以从命令行运行ADS:

    type calc.exe > dummy.txt:calc

    wmic process call create "dummy.txt:calc"

  9. 备用数据流可用于存储与文件相关的一些非关键信息。例如,从互联网下载的可执行文件将具有导致资源管理器在执行文件之前显示警告的ADS。

  10. 请参见链接。特别是,不要将它们用于关键数据。


2
如果您在命令行播放,dir /r 将列出流。 - Alex K.
3
NTFS并不是唯一支持命名数据流的文件系统。与该文章(推荐使用安全方式)相反,应该查询GetVolumeInformation()函数的FILE_NAMED_STREAMS标志。 - NonNumeric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接