(为啥)FSCTL_SET_OBJECT_ID 危险吗?

Posted

技术标签:

【中文标题】(为啥)FSCTL_SET_OBJECT_ID 危险吗?【英文标题】:(why) is FSCTL_SET_OBJECT_ID dangerous?(为什么)FSCTL_SET_OBJECT_ID 危险吗? 【发布时间】:2015-03-08 09:10:45 【问题描述】:

NTFS 文件可以有对象 ID。这些 id 可以使用FSCTL_SET_OBJECT_ID 设置。但是,msdn article 说:

修改对象标识符可能会导致文件部分的数据丢失,甚至包括整个数据量。

但它没有详细说明。这怎么会导致数据丢失?它是在谈论文件系统中潜在的对象 ID 冲突吗?NTFS 是否以某种方式依赖它们?

侧节点:在找到那段之前我做了一些实验,并设置了一些新创建的文件的对象ID,希望我的文件系统仍然完好无损。

【问题讨论】:

确实令人费解,特别是因为它继续说您无论如何不能修改对象标识符。 (在一个还没有对象标识符的对象上设置一个对象标识符不是修改,至少不是这个词的正常意义。) 它们由分布式链接跟踪服务使用。当文件从一台机器移动到另一台机器时,这有助于跟踪文件,这在大型企业网络中很重要。或者在您移动桌面快捷方式引用的可执行文件时在桌面上。当您的代码使重要的公司文档无法找到时,可怕的语言肯定是为了给 Microsoft 支持提供一种让您挂断电话的方法 :) DLTS 并不是唯一可能将这些 ID 用作身份和主键的服务。我想在数据库应用程序中修改实体的主键会产生影响,这取决于谁在使用这些主键值做什么。 NTFS 也是如此。大文件与具有较新时间戳的零字节文件之间故意生成的文件 ID 冲突将是明显的“数据丢失”情况。 【参考方案1】:

我真的不认为这会直接导致数据丢失。

我能想象到的唯一方法是,例如备份程序假定 (1) 每个文件都有一个对象 ID,以及 (2) 程序始终跟踪所有 ID。在这种情况下,它可能会假定不在其数据库中的 ID 必须引用一个不应该存在的文件,并且它可能会删除该文件。

是的,我知道这听起来很荒谬,但这是我能想到的唯一可能发生这种情况的方法。我认为您不会仅通过更改 ID 来丢失数据。

【讨论】:

正如评论者所指出的,它们被某些 Windows 服务和技术所使用,只是可能不是您的盒子上活跃的那些。 @WarrenP:您确定那些“对象 ID”与这些相同吗?我觉得他们完全没有关系。 @WarrenP 我同意 Mehrdad 的观点,从目前的 cmets 来看,唯一肯定使用文件对象 ID 的服务是 分布式链接跟踪服务【参考方案2】:

它们由分布式链接跟踪服务使用,该服务使客户端应用程序能够跟踪已移动的链接源。链接跟踪服务仅通过使用这些对象标识符 (ID) 来维护其与对象的链接。

回到你的问题,

它是在谈论文件系统中潜在的对象 id 冲突吗 ?

我不这么认为。 Windows 确实为我们提供了使用 FSCTL_SET_OBJECT_ID 设置对象 ID 的选项,但这不会带来 ID 冲突的风险。 尝试在已有对象标识符的对象上设置对象标识符将失败。

.. NTFS 是否以某种方式依赖它们?

是的。 对象标识符用于跟踪文件和目录。所有对象 ID 的索引都存储在卷上。重命名、备份和恢复操作会保留对象 ID。但是,复制操作不会保留对象 ID,因为这会违反它们的唯一性。

这怎么会导致数据丢失?

如果您更改(或更确切地说是设置)用户创建文件的对象 ID(如您所做的那样),您不会遇到严重的问题。但是,如果用户(有意/无意地)设置共享对象文件/库使用的对象 ID,则更改不会按原样反映。

由于 Windows 不希望每个人(除了开发人员)都使用重要的库文件,它会发出一个通用警告:

修改对象标识符可能会导致数据丢失 文件的一部分,最多包括整个数据量。

底线:如果你知道你在做什么,就改变它。

还有一个关于分布式链接跟踪和对象标识符的 msn article。

希望对你有帮助!

编辑

感谢@Mehrdad 的指出。我不是指DLL 本身的对象标识符,而是它们在内部使用的标识符。

OLEACC(a dll),提供 Active Accessibility 运行时并管理来自 Active Accessibility 客户端[source] 的请求。它使用 OBJID_QUERYCLASSNAMEIDX 对象标识符 [source]

【讨论】:

我不相信你的回答。 这就是文章所说的,我没有添加任何我自己的东西。请看msn文章:msdn.microsoft.com/en-us/library/windows/desktop/…谢谢 问题是我没有看到有关 DLL 文件的文章...而且我从未听说过有人使用对象 ID 来引用 DLL 文件。 (尤其是 hal.dll??您是否意识到这是一个多么糟糕的示例??在所有这些链接内容开始进入图片之前很久就加载了 HAL……) 请注明您怀疑的部分。另外,请查看本文中的“备注”部分:msdn.microsoft.com/en-us/library/windows/desktop/…Cheers 我认为你完全没有理解我的意思。仅仅通过删除“DLL”一词,您的答案并不会突然变得正确。 DLL 只是 "shared object file/library" 的另一个名称,您在回答中明确提到了它的原因。您所做的只是删除了“DLL”一词,这毫无意义。我的意思是,您的回答似乎完全在其基础上是错误的。如果您继续从中删除以使其正确,那么它将变为空并且不会回答问题。

以上是关于(为啥)FSCTL_SET_OBJECT_ID 危险吗?的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat服务器版本号泄露-低危漏洞修复

土地出让金骤降是“危”还是“机”?

解决Apache Tomcat Default Files的Nessus中危漏洞

TensorFlow,危!抛弃者正是谷歌自己

[机缘参悟-83]:如何自我前提应对可能的经-济-危-机?

解决方案TSINGSEE青犀视频助力危化企业安全生产,实现AI全流程监管