拒绝应用程序访问 Windows 7+ 中的硬盘驱动器或卷

use*_*123 13 windows windows-7 windows-8

我想拒绝我计算机上的某些应用程序访问某些驱动器或逻辑卷,但目前找不到解决方案。

背景:我的 PC 有一个 SSD 作为系统驱动器和一个 15TB Raid-6 带五个硬盘驱动器。控制器配置为在约 10-15 分钟后降低驱动器的转速。这很好,因为有时我在几个小时甚至更长时间内都不需要访问 Raid 上的任何内容。某些应用程序(例如 Adob​​e Reader)在启动时由于某种我无法理解的原因访问所有逻辑卷。我的假设是分配了驱动器号的所有卷都会受到影响。删除字母并重新分配它们根本不是一个选项;)

如何限制 Adob​​e Reader 或其他应用程序访问我的 Raid 主机的这些卷?

Alb*_*bin 7

在 Windows 中,没有本机支持的方法来阻止某些进程访问某些驱动器,这与操作系统处理驱动器访问的方式“背道而驰”。

访问权限由启动应用程序的登录用户的权限决定。因此,如果软件开发人员决定他的软件应该搜索所有可访问的驱动器,并且没有为您提供关闭它的选项......好吧,这是不考虑您的特定用例的糟糕编程。但是有一些解决方法。

唯一“确定”的解决方案是 2,因为硬件虚拟化层(来自虚拟机)可以阻止任何应用程序尝试完全访问“真实硬件”。虽然我没有遇到解决方案1不起作用的情况,但理论上我认为它可以被绕过。

选项“1” - 在“低级别”禁用驱动器 - 不需要额外的软件

选项 1a

可以通过完全禁用驱动器来禁用较低层的卷,但这将禁用驱动器上的所有卷。手动,您可以通过启动diskmgmt.msc,然后右键单击驱动器并将其标记为“离线”来完成。

在此处输入图片说明

如果需要,您也应该能够使用命令行脚本执行此操作。它将以与选项 3a/b 类似的方式应用。例如,您可以通过此处所述的 cmd或此处所述的PowerShell 执行此操作

选项 1b

您可以完全停用驱动器的驱动程序。要手动执行:开始diskmgmt.msc,然后右键单击,选择“选项”。然后转到“驱动程序”-选项卡并选择“停用”。该驱动器将“消失”在磁盘管理器中,并且无法再通过操作系统访问。除非软件不执行机器代码命令与硬件直接通信,否则应用程序应该无法访问驱动器。至少就我对操作系统的来龙去脉的了解而言。

在此处输入图片说明

如果需要,您也应该能够使用命令行脚本执行此操作。例如,它将以与选项 3a/b 类似的方式应用Devcon.exe。您可以在此处找到详细说明。

选项 2 - 使用虚拟环境(主要使用 3rd 方软件)

如果在虚拟环境中运行应用程序是一种选择,那么有很多解决方案:

  • 根据您的 Windows 版本(需要 Win7 及更高版本)和许可证(需要“专业版”,“家庭版”不行),您可以只使用 Hyper-V 设置虚拟环境,无需任何第三方软件。

  • 您可以使用第三方软件来设置虚拟系统,如 VMplayer、Virtual Box 等。有许多免费软件和付费软件可供选择。通过使用此解决方案,您将需要 Windows 的第二个许可证(或者您将其保留为未授权,但随后您将在屏幕右下角看到一个覆盖图,告诉您注册 Windows)。这肯定会阻止软件访问驱动器。

  • 您可以使用“沙箱”应用程序。但这将取决于沙箱应用程序提供的虚拟化级别。在某些情况下,它可以解决问题;在其他情况下,它没有。例如,Sandboxie(harrymc 在他的回答中描述的那个)并不能解决他(原始)回答中描述的配置 harrymc 的问题。尽管软件可能会阻止访问,但驱动器仍会启动。另一种方法是使用不同的沙箱应用程序,如 Cameyo 等。

顺便说一句,这是一篇关于不同虚拟化软件之间主要区别的好文章,尤其是“完整”虚拟机(如 Virtual Box)或“半虚拟”应用程序(如 Sandboxie)之间的区别。

选项 3 - 仅卸载卷(保持驱动器“完整”) - 不需要额外的软件,但它可能不适用于您的情况

选项 3a

您可以使用以下命令编写批处理文件,而不是通过其常规快捷方式启动应用程序mountvol,首先卸载未使用的卷,然后启动应用程序,然后在应用程序不再访问驱动器时重新安装卷。此处此处描述通过命令行的安装/卸载过程。您也可以diskpart按照此处此处的描述使用。

选项 3b

或者,您可以一般不挂载驱动器,然后通过批处理文件挂载它,该批处理文件挂载您在需要时手动启动的驱动器。使用完毕后,您可以使用第二个批处理文件手动卸载它。您可以通过监视文件系统访问请求并根据特定规则(例如某些应用程序无法访问)根据需要挂载/卸载驱动器来实现自动化。但我不确定自动化是否值得付出额外的努力。

选项 4 - 限制对驱动器号(卷)的访问。做起来很简单,但需要来自微软的两个小工具——但它可能不适用于你的情况

如果您想在没有 3rd 方软件的情况下完成此操作,但不介意使用 Microsoft 的两个小工具(如果您尚未使用它)。我更喜欢这个解决方案,因为它“从根本上”解决了问题(用户和应用程序权限之间的区别),而且它相当简单,不需要“大”第三方软件。

基本上,您添加一个无法访问驱动器的用户,然后以这些有限权限启动程序(您仍将作为普通用户登录,您不会使用受限帐户登录)。

  • 添加用户帐户。

  • 通过对文件系统使用 Windows 访问控制来限制新用户帐户对驱动器的访问。这是一个很好的方法,包括屏幕截图。

  • 然后,使用这些权限启动软件。例如,您可以使用 PsExec.exe 或 Process Explorer 来执行此操作,方法如下。如果您还没有这两者之一,则必须从 Microsoft 网站下载它们。


har*_*ymc 4

我提出了一个使用 Sandboxie的解决方案。我没有你的环境,所以我测试了Acrobat.exe在沙箱中运行,其访问D:被阻止。在 Acrobat 中打开菜单“文件”>“打开”时,我得到以下信息:

图像

请注意,Acrobat 甚至找不到 disk 的标签D:,因此被迫以蹩脚的方式显示它,以及当我单击“本地磁盘(D:)”时它是如何被阻止的。

我使用的步骤是:

  • 安装沙盘
  • 在 Sandboxie Control 中,右键单击默认沙箱并选择沙箱设置
  • 打开“资源访问”>“文件访问”分支,然后单击“阻止访问”
  • 单击“添加程序”并添加 Acrobat(我的是C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Acrobat.exe
  • 点击添加并添加磁盘D:
  • 单击“确定”
  • 在 Sandboxie Control 中,打开“程序开始”>“强制文件夹”分支
  • 单击添加文件夹
  • 添加 Acrobat 所在的文件夹(我的是C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat
  • 单击“确定”

从现在开始,从 Acrobat 文件夹启动的所有程序都将强制在沙盒中执行,特别Acrobat.exe是被阻止访问磁盘D:。如果 Acrobat 在沙箱内执行时遇到一些困难,您可能需要打开一些其他沙箱限制。

我不知道这是否也会阻止 Acrobat 用于引起磁盘唤醒的特定 Windows API 调用,但可能值得尝试。

Sandboxie 是我推荐的一款出色且多功能的产品,对于一个默认沙箱来说是免费的。对于多个沙箱来说,它是付费软件,但终身许可证价格非常合理(我付了钱)。例如,我在沙箱中安装了我测试的产品,然后可以一键清除它们,而不需要卸载程序。


另一种隔离解决方案是在Docker 容器内使用 Adob​​e Reader 。Docker 容器很小,并且像虚拟机一样工作,但不需要创建机器,因为现成的容器是从 Docker 库下载的。

您可以使用 Chocolatey 作为包管理器。

Chocolatey 在Adob​​e Acrobat Reader DC 2018.011.20063上提供了许多可用的 Adob​​e Reader 预构建包 。

使用Docker,一方面可以实现资源的绝对隔离,另一方面可以以完全原生的方式共享文件夹等资源。

  • @WackGet:有什么评论吗? (2认同)