NTFS备用数据流

时间:2009-11-27 16:47:13

标签: stream filesystems ntfs alternate-data-stream

今天我看到这个奇怪的神奇NTFS系统支持:每个文件可以有多个数据流。基本上可以有一个0b大小的文件a.txt,但是在该文件的单独数据流中可以隐藏任意数量的字节。这是严格的NTFS相关魔法,我没有看到有这些流的任何高尚的原因。您可以在Sysinternals的streams实用程序的帮助下查找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.

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

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

6 个答案:

答案 0 :(得分:21)

从头顶开始:NTFS datastreams在Windows NT 4.0中引入并且已经存在于所有后代中(不包括win-95后代:98,Me)。在XP,Vista和Win 7中,它们仍然存在。只要Windows版本支持NTFS,它们就会支持文件流。他们将在很长一段时间内支持NTFS。

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

more < 1013.pdf:Zone.Identifier

使用流

Microsoft只有少数几个可以使用流的命令,实际上只有<>可以使用流,因此只能使用可以使用这些重定向运算符的命令。我写了couple of blog posts on alternate datastreams关于如何只用这些命令操作流的方法。

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

当您尝试使用start filename:streamname打开文件流并且程序显示“非法文件名”或“找不到文件”时,您肯定流名称是正确的,那么很可能是程序不支持流。我注意到记事本,写字板和Word / Excel可以正常使用流,尽管Word和Excel认为这些文件很危险。您可以尝试some experiments


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

答案 1 :(得分:8)

顺便说一下,你可以用记事本打开AltDataStream:

notepad.exe 1013.pdf:Zone.Identifier

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

1013.pdf:Zone.Identifier:$DATA

答案 2 :(得分:7)

  

这是严格的NTFS相关魔法

不是这样 - Mac OS自那时起就有了这些,它们在那个世界被称为 forks ,你会使用ResEdit来实现它们。它们的classic use是将媒体资产与可执行文件捆绑在一起。

答案 3 :(得分:6)

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

答案 4 :(得分:3)

Win32 API处理备用流的命名就好了。

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

答案 5 :(得分:2)

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

尝试:

start this_is_a.txt:ads.exe