Stream NTFS备用数据流

Stream NTFS备用数据流,stream,filesystems,ntfs,alternate-data-stream,Stream,Filesystems,Ntfs,Alternate Data Stream,今天,我看到了NTFS系统支持的奇怪的魔法:每个文件可以有多个数据流。基本上,可以有一个大小为0b的文件a.txt,但在该文件的单独数据流中可以隐藏任意数量的字节。这是严格的NTFS相关的魔法,我不认为有任何高尚的理由有这些流。您可以在Sysinternals中的streams实用程序的帮助下查找NTFS流。这将告诉您,基本上,这些讨厌的thumbs.db文件中的每一个都附带了一个额外的数据流 好的,现在我已经在Windows NT4系统上看到了这一神奇的工作,流被添加到文件中,复制,删除(借助

今天,我看到了NTFS系统支持的奇怪的魔法:每个文件可以有多个数据流。基本上,可以有一个大小为0b的文件
a.txt
,但在该文件的单独数据流中可以隐藏任意数量的字节。这是严格的NTFS相关的魔法,我不认为有任何高尚的理由有这些流。您可以在Sysinternals中的
streams
实用程序的帮助下查找NTFS流。这将告诉您,基本上,这些讨厌的
thumbs.db
文件中的每一个都附带了一个额外的数据流

好的,现在我已经在Windows NT4系统上看到了这一神奇的工作,流被添加到文件中,复制,删除(借助上述实用程序),但我现在在我的Win XP系统上尝试这一点,但是尽管我可以检测到现有的流,但我不能显示它们的内容,不能创建新的流,或者当我使用
filename:streamname
语法时,任何东西都可以

我得到这个错误:

文件名、目录名或 卷标语法不正确

例如: streams实用程序的输出:

c:\DOWNLOADS>streams.exe -s .

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

c:\DOWNLOADS\1013.pdf:
   :Zone.Identifier:$DATA       46

c:\DOWNLOADS>type 1013.pdf:Zone.Identifier
The filename, directory name, or volume label syntax is incorrect.
为什么我不能显示备用数据流的内容

查看有关“”的Microsoft文档,我可以看出这适用于我的操作系统,尽管他们确实提到这些流在将来将不受支持。任何人都可以了解这一点?

从我的脑海中浮现出来:是在Windows NT 4.0中引入的,并且在所有后代中都存在过(不包括win-95后代:98,Me)。在XP、Vista和Win7中,它们仍然存在。只要Windows版本支持NTFS,它们就会支持文件流。他们将在很长一段时间内支持NTFS

问题中显示的页面上描述了您的错误。
type
命令不理解流。使用:

more < 1013.pdf:Zone.Identifier
more<1013.pdf:Zone.Identifier

处理流 Microsoft只有少数几个可用于流的命令,事实上,只有
可用于流,因此只能使用可用于这些重定向运算符的命令。我写了一篇关于如何仍然只使用这些命令操作流的文章

流只适用于与它们一起工作的程序,仅仅是因为它们需要专门处理(比较连接点,也是NTFS的一个特性,但是驱动程序隐藏了细节和程序不需要做任何特殊的事情:他们只考虑连接点是一个真实文件)。p> 当您尝试使用

start filename:streamname
打开文件流时,如果程序显示“非法文件名”或“未找到文件”,并且您确信流名称正确,则该程序可能不支持流。我注意到记事本、写字板和Word /Excel在流中工作正常,尽管Word和Excel认为文件是危险的。这是你可以试试的



注:你似乎认为备用数据流奇数。它们很奇怪,因为它们太隐蔽了,但许多主要的文件系统(HFS、NSS)都有它,这个概念可以追溯到80年代初。事实上,最初这些流是为了与其他文件系统的互操作性而添加到NTFS中的。

替代流的一个可能目的是:元数据。您可以为文档添加大量描述,而不会影响原始文件的内容。

顺便说一句,您可以使用记事本打开AltDataStream:

notepad.exe 1013.pdf:Zone.Identifier
此外,您还可以指定AltDataStream的类型(不仅使用记事本,它是“完整流名称”):

这完全是NTFS相关的魔法


并非如此-Mac OS早就有了这些功能,它们在那个世界被称为forks,您可以使用ResEdit来获取它们。其中最重要的是将媒体资产与可执行文件捆绑在一起

该错误字面上意味着未将其识别为备用数据流,并且您正在进行的引用包含路径名中不允许的特定字符(该
;不允许的其他字符包括
\\
/
等)

尝试:


start this\u is_a.txt:ads.exe

Win32 API可以很好地处理备用流的命名


另一方面,CMD在可能有*/?当出现“:”时,展开和呕吐。这就是为什么复制和键入失败,但简单的重定向工作。

它说在未来的文件系统(即NTFS之后的文件系统)中可能不支持备用流,但它说无论将来的操作系统如何,都将支持NTFS。我同意这一点。因此,只要我的fs是NTFS,我就应该能够处理这些流。我需要一个特殊版本的
copy
程序来支持从备用流复制数据和将数据复制到备用流中吗?我不确定你的问题是什么-也许你应该编辑问题标题,这样我们就不必在问题正文中筛选你真正要问的问题…有趣的是,我看到它与type命令一起工作。不过,用于演示这一点的shell是NT4 shell,而不是通常的cmd.execopy 1013.pdf:Zone.Identifier x.xxx也应该起作用。但我的机器上没有。我只是不明白发生了什么。@PeterPerháč:不,
copy
不起作用。是的,
类型
确实有效,但仅此而已:
键入somefile>otherfile:streamname
。相反(使用类型读取流)不起作用。欲了解更多信息,请参阅:的确如此。Microsoft使用备用流在其NT Server Services for Macintosh软件包中存储Mac Fork。注意:Windows 7已悄悄删除了从ADS执行的功能,我仍在寻找一种实际执行的方法。您可以从备用数据流执行,但不能直接执行。将数据流复制到一个文件中并执行它将起作用。我还不知道另一种方法。Word、Excel和其他MS程序也是如此,但您必须从comman开始
1013.pdf:Zone.Identifier:$DATA