如何使用备用数据流以及有哪些好处?

问题描述 投票:0回答:1

我已经阅读了一些关于

Alternate Data Streams
的文档,并且我正在考虑在我自己的项目中使用它们。然而,在我决定使用它们之前,我仍然有很多未知的知识和悬而未决的问题。这就是我列出这个问题清单的原因:

  1. 如何在没有 Sysinternals 工具的情况下枚举 Streams
    streams
  2. 流会影响“主机”文件的 MD5 值吗?
  3. 如果我将“主机”文件复制/剪切到另一个 (NTFS) 路径会发生什么?流也复制/剪切自身吗?
  4. 如果我将“主机”文件复制/剪切到非 NTFS 的另一个路径会发生什么?
  5. 现有流中是否可以有另一个流?
  6. 既然每个流都有一个实际的文件句柄,是否可以更改流的属性?
  7. 我可以使用
    LoadLibrary
    API 从流加载 DLL 吗?
  8. 是否可以执行(例如
    ShellExecute
    )流?
  9. 使用
    Alternate Data Streams
    有什么优点/好处/缺点?
  10. 使用时需要注意什么
    Alternate Data Streams

我期待您的答案/信息/摘要。最好的语言是 Delphi,但任何其他语言也可以,只要它使用

WinAPI

winapi alternate-data-stream
1个回答
9
投票

一一解答您的问题:

  1. 枚举:使用

    NtQueryInformationFile
    。从 Windows Vista 开始,您还可以使用
    dir /r
    在命令行上枚举流。

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

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

  4. 复制到其他FS:备用数据流丢失。

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

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

  7. LoadLibrary
    似乎适用于备用数据流。

  8. ADS 上的
  9. ShellExecute
    在我的计算机上失败,并出现
    ERROR_FILE_NOT_FOUND
    (2)。

    请注意,可以从命令行运行 ADS(这并不是一个好主意):

    type calc.exe > dummy.txt:calc
    wmic process call create "dummy.txt:calc"
    
  10. ADS 对于存储与文件关联的一些非关键信息很有用。例如,从互联网下载的可执行文件将具有 ADS,这会导致资源管理器在执行文件之前显示警告。

  11. 不要将它们用于关键数据,因为备份过程中数据可能会丢失。

© www.soinside.com 2019 - 2024. All rights reserved.