20

今天看到了NTFS系统支持的这个奇葩神奇:每个文件可以有多个数据流。基本上,一个文件可以有一个a.txt0b 大小的文件,但可以在该文件的单独数据流中隐藏任意数量的字节。这完全是与 NTFS 相关的魔法,我认为没有任何高尚的理由让这些流存在。streams您可以在 Sysinternals的实用程序的帮助下查找 NTFS 流。这将向您表明,基本上每个讨厌的thumbs.db文件都带有一个额外的数据流。

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

我收到此错误:

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

示例:流实用程序的输出:

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.

为什么我不能显示备用数据流的内容?

查看有关“如何使用 NTFS 备用数据流”的 Microsoft 文档,我可以看到这适用于我的操作系统,尽管他们确实提到将来不会支持这些流。任何人都可以对此有所了解吗?

4

6 回答 6

23

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

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

more < 1013.pdf:Zone.Identifier

使用流

Microsoft 只有少数与流一起使用的命令,事实上,只有<,>与流一起使用,因此只能使用可以与这些重定向运算符一起使用的命令。我写了几篇关于备用数据流的博客文章,介绍如何仅使用这些命令来操作流。

Streams 仅适用于设计用于它们的程序,只是因为它们需要特殊处理(比较连接点,也是 NTFS 的一个特性,但驱动程序隐藏了细节,程序不需要做任何特殊的事情:它们只需将连接点视为真实文件)。

当您尝试使用打开文件流start filename:streamname并且程序说“非法文件名”或“找不到文件”之类的内容时,并且您确定流名称是正确的,那么程序很可能不支持流。我注意到记事本、写字板和 Word/Excel 可以与流一起正常工作,尽管 Word 和 Excel 认为这些文件很危险。这里有一些你可以尝试的实验。


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

于 2009-11-27T16:55:35.067 回答
9

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

notepad.exe 1013.pdf:Zone.Identifier

此外,您可以指定 AltDataStream 的类型(不仅是记事本,它是“完整的流名称”):

1013.pdf:Zone.Identifier:$DATA
于 2009-11-30T10:43:17.667 回答
7

这完全是与 NTFS 相关的魔法

不是这样 - Mac OS 从那时起就拥有这些,它们在那个世界中被称为分叉,您可以使用 ResEdit 来获取它们。它们的经典用途是将媒体资产与可执行文件捆绑在一起。

于 2010-09-28T15:31:24.327 回答
6

备用流的一种可能用途:元数据。可以为文档添加一个大的描述而不影响原始文件的内容。

于 2009-11-27T17:28:38.023 回答
3

该错误的字面意思是它未被识别为备用数据流,并且您所做的引用包含路径名中不允许的某个字符(:其他不允许的字符包括\\,/等)。

尝试:

start this_is_a.txt:ads.exe

于 2011-05-19T19:12:37.537 回答
3

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

另一方面,当可能有 */? 时,CMD 会对文件名进行一些时髦的解析。出现“:”时展开和 barfs。这就是复制和输入失败但简单重定向有效的原因。

于 2012-07-26T19:42:31.217 回答