1

无论权限如何,我都需要查找硬盘驱动器(在 C: 分区中)上的所有文件。(Windows XP Pro,使用 C#)

在之前的一个问题中,有人告诉我:

无法查看“C:\System Volume Inforamtion”文件夹,因为它仅分配给 SYSTEM 用户。为了看到它的内部,您需要拥有它。但是,出于安全原因,不建议这样做。——亚历克斯·门德斯

我已经使用 Windows 多年,这是我第一次听说 SYSTEM 用户(这解释了我过去遇到的许多挫败感)。我曾假设“管理员”类似于 UNIX 中的“root”用户,它可以访问所有内容。

在 Windows 中,是否存在拥有一切的最终用户?

如果是这样,那个用户是谁?

如果是这样,我如何以该用户身份运行我的 C# 程序以便我可以查看所有文件?

如果没有,还有其他方法吗?(其他程序会这样做。)

4

4 回答 4

0

我相信FILE_FLAG_BACKUP_SEMANTICS大多数情况下可以做你需要的。

于 2011-07-28T01:15:20.527 回答
0

我很确定访问这些文件夹*的唯一方法是作为 Ring-0 运行,这是 CPU 自己的内核级用户分区;这也是一些恶意软件/Rootkit 可以将它们的挂钩进入您的系统的方式。

我非常有信心这不是您可以在 .Net 中实现的,而且我不确定您是否可以在不编写系统级驱动程序(.sys 文件)的情况下真正实现它。

无论如何,文件系统适用于操作系统,如果您使用的是 NTFS 格式的驱动器并且内容已加密,则拥有超级全读驱动程序不会为您解密文件。

编辑:这些文件夹是系统文件夹,如果您可以 PInvoke BackupRead/Write 功能,您可能会访问其他数据。

于 2011-07-28T01:13:13.327 回答
0

您可以以交互方式(作为 SYSTEM)运行应用程序(或命令提示符)。例如,请参阅此问题的已接受答案。一旦应用程序运行交互式上下文,它就可以直接打开系统卷信息。

[编辑添加澄清:]

在 Windows 中,是否存在拥有一切的最终用户?

不,有一个权限,SeTakeOwnershipPrivilege,默认情况下授予管理员(隐式系统),允许获取对象的所有权。对象所有者可以随时更改 ACL 以授予自己访问权限。

还有另一个特权 SeBackupPrivilege,授予管理员和备份操作员(以及系统)。它旨在允许读取文件以进行备份,并绕过正常的读取操作。这有效地允许对任何文件的读取访问,绕过正常的访问控制限制。

如果是这样,那个用户是谁?

没有这样的用户。默认情况下,Windows 通过该目录上的 ACL 仅授予对 C:\System Volume Information 的 SYSTEM 访问权限。

如果是这样,我如何以该用户身份运行我的 C# 程序以便我可以查看所有文件?

您可以专门以 SYSTEM 身份运行该程序来查看系统卷信息(如上所述),尽管这不会让您查看所有文件。我认为拥有备份操作员权限并使用备份标志执行读取操作是查看所有文件的唯一机制,而不管权限如何。

于 2011-07-28T01:29:59.053 回答
0

不,没有根用户可以访问所有内容。以 SYSTEM 或管理员或任何其他用户身份运行不会解决您的问题。您已经处理了一个非常复杂的问题,而在 C# 中完成它将是一个额外的挑战。我建议重新考虑 C# 的使用。

从这里开始并阅读 FILE_FLAG_BACKUP_SEMANTICS 标志的描述以及有关如何更改令牌权限的链接。基本上,您将不得不临时更改您没有读取权限的每个文件/目录的访问权限。

于 2011-07-28T01:32:53.333 回答