问题标签 [alternate-data-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
16857 浏览

linux - 在任何 linux 文件系统上是否有类似备用数据流的东西?

在 Windows NTFS 上,我最近在一个爱好开发项目中使用了一个很好但大部分未使用的功能,称为“备用数据流”(ADS)。

在 Mac HFS+ 上,还有一个类似的不错但大多未使用的功能,称为“命名分叉”。

我正在考虑把这个项目移植到Linux上,但不知道linux上的Filesystem有没有这样的功能?

0 投票
5 回答
24912 浏览

c# - 如何使用 .NET 读取和修改 NTFS 备用数据流

如何使用 .NET 读取和修改“NTFS 备用数据流”?

似乎没有对它的本机 .NET 支持。我会使用哪些 Win32 API?另外,我将如何使用它们,因为我不认为这是记录在案的?

0 投票
6 回答
16206 浏览

stream - NTFS 备用数据流

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

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

我收到此错误:

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

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

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

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

0 投票
8 回答
3877 浏览

architecture - NTFS 备用数据流 - 好主意还是坏主意?

我想为文件存储一些与应用程序相关的元数据,而 NTFS 备用数据流 (AltDS) 将允许我将此元数据直接存储在文件中,而不是存储在单独的数据库中。

我只是觉得这不是一个好主意。我知道这仅适用于 NTFS,但至少如果用户将文件复制/移动到非 NTFS 驱动器,他们会收到来自 Windows 的警告(是的,是的,我知道没有人阅读警告)-

而且,在文件上存储额外的数据可能会变得非常浪费,因为即使我的应用程序被卸载,AltDS 也会保留。就像十年前,人们在卸载程序后使用“注册表清理器”从注册表中删除无用的条目以使他们的系统运行得更快(并且当清理器清理太多时稳定性会降低......)。

我只是想知道它们可以合理地用于什么?它们是否应该完全留给 Microsoft Apps 使用?或者是否有某种共同的政策,哪些类型的应用程序可以使用它们(恶意软件除外)?

编辑:只是为了澄清我的想法。我正处于为自己编写一个小型文档管理系统的早期阶段。因为我想自由移动文件,所以我想在文件上存储元数据,这样如果我移动/重命名/修改它们,我的应用程序仍然可以识别它们。它可以是整个元数据,也可以只是与单独数据库一起使用的 GUID。

总结给出的要点:

优点:

  • 元数据随文件移动,因此无需通过散列或文件名识别它
  • 适用于所有文件类型,甚至是无法在文件本身中存储任何数据的 .txt 文件

缺点:

  • 仅适用于 NTFS,在未来的 Windows 版本中可能不是默认文件系统
    • 尽管如果 MS 在将 WinFS 放在一起时不会自动转换它们,我会感到惊讶
  • 即使我的应用程序被卸载,AltDS 仍然存在
  • 隐私问题
  • 脆弱的
    • 大多数 USB 记忆棒都是 FAT32。许多私有文件服务器都是 Linux。从 Internet 下载文件应该只传输文件而不是流。简而言之:失去它们相当容易。
0 投票
2 回答
612 浏览

encryption - 加密指定的备用数据流 - NTFS、XP

根据 MSDN,每个备用数据流都可以以加密形式存储(NTFS 的加密状态)。我找到的唯一用于设置加密状态的 API 函数是 EncryptFile() ,它表示加密文件的所有数据流。那么有没有办法不加密XP下的所有数据流呢?

0 投票
1 回答
1294 浏览

windows-7 - 启动位于备用数据流中的应用程序

在 Windows 7 上,启动位于备用数据流中的程序(例如 start c:\temp\application.exe:hiddenProgram.exe)不再起作用!

使用进程监视器,我看到访问结果正常,但不知何故,操作系统阻止了对该文件的访问。在 Vista 和更早的版本上,这种方法曾经有效。

替代文字

有谁知道如何使用 windows 7 启动它?

0 投票
1 回答
342 浏览

mercurial - Mercurial 和 NTFS 备用数据流

Mercurial 如何处理备用数据流(在 NTFS 文件系统中)?如果它无法处理,是否有 DCVS 可以处理?

编辑:当我使用update更改版本时,ADS 会发生什么?是否丢失(删除)?也是版本化的吗?都被忽略了吗?

0 投票
4 回答
2685 浏览

c# - 在 Windows 7 中使用备用数据流(分叉)?

我正在处理的现有(基于 Web 的)项目使用客户端数据并使用客户端名称作为文件名保存报告。不幸的是,它从未过滤过这个客户名称,因此有人输入​​了包含冒号的客户名称(例如“workshop:alex”)用于测试目的。这导致文件名workshop:alex.pdf 在NTFS 系统上恰好是有效的。(因为它创建了一个名为“workshop”的文件,其中包含一个名为“alex.pdf”的备用数据流。由于应用程序还存储了文件名,因此再次读取它们没有问题,因为它只是引用了同一个 ADS。因此,没有人注意到这个问题...
然而,我最近开始从事这个项目,它必须迁移到带有 IIS 7 的 Windows 7 64 位。突然间,该站点不再使用这些 ADS 文件了!我很快就找到了原因,并意识到为什么它在过去从未失败过。(而且我还诅咒了以前从未检查过这个的开发人员!)但现在我想知道为什么它在 Windows 7 上失败了......那么,有人知道吗?


我有一个修复,顺便说一句!现在过滤了文件名,从而解决了问题。我只是好奇为什么。在较新的 Windows 版本上可能导致这些问题的原因是什么?


关于应用程序:它是本地 IIS 安装与 WIN32 客户端应用程序的混合体。基本上,报告解决方案被开发为 Web 应用程序,并创建了以前使用 Word 进行报告的桌面应用程序。一些经理认为,如果桌面应用程序使用 Web 应用程序的逻辑来生成报告,这可能是一个好主意。我承认:这不是一个非常聪明的主意......
结果是每个用户都将在他们的系统上运行 IIS,其中包含 Web 应用程序,同时他们在同一台机器上也有桌面应用程序。为了使它们进行通信,使用 C# 创建了一个单独的 Web 服务,而 Web 应用程序是用经典的 ASP 构建的,而桌面应用程序是用 Delphi 构建的。桌面应用程序将通过本地 Web 服务将数据发送到数据库,然后登录到本地 Web 应用程序,告诉它生成报告,然后下载...
在这个编码地狱中哪里出了问题还不是很清楚。但由于文件名基于桌面应用程序的数据,有时包含冒号,因此有时会创建 ADS 而不是常规文件名。在 Windows 7 之前的 Windows 版本上,这似乎工作正常。这些文件已写入,IIS 还将它们作为 PDF 文件提供给桌面应用程序。(从那里您可以使用普通文件名“另存为”。
此应用程序在 Windows 7(64 位)上只是中断,因为它可以将文件写入 ADS 流,当向数据添加冒号时,但它无法再次检索它们。虽然我们现在从生成的文件名中过滤掉冒号,但我只是想知道这个问题的可能原因。所以这是一个出于好奇的问题......

0 投票
3 回答
912 浏览

c++ - 如何修复我的“自删除” .exe 以免提前删除自身?

为了测试和个人概念证明,我有一个 .exe 文件,它只输出一个简单的字符串,然后调用系统暂停(字面意思system("pause")是 C++)。

我有一个简单的 Python 脚本,我正在 Windows XP VM 上测试,它在搞砸时执行这些操作:

显然,这些命令单独在命令行上都可以正常工作,为什么在通过 Python 调用时它们不能正常工作?

我收到此弹出错误消息:

blank.txt:ads.exe 遇到问题需要关闭。对此造成的不便,我们表示歉意。

如果您正在处理某事,您正在处理的信息可能会丢失。

该文件也确实被删除了。看来系统暂停只是被delete命令压碎了,当我期望.exe弹出时,等我推回车,然后脚本会继续删除文件。

0 投票
3 回答
12830 浏览

c# - 从.net 4 c#中取消阻止文件

是否有可能取消阻止从 ac# 程序中从 Internet 下载的文件。我在网上冲浪时了解到,该信息被写入包含当前区域信息的 (NTFS) 文件的替代流中(值 3 来自互联网并被解释为被阻止)。

是否存在清除或更改文件的区域信息(取消阻止)的托管可能性,或者是否存在复制没有区域信息的文件的托管复制功能?如果没有,我该如何使用 PInvoke 但不包括外部程序集(我不允许在当前项目中这样做)。