在Windows上,如何仅限制某些应用程序(非用户)访问文件夹、子文件夹和文件

在Windows上,如何仅限制某些应用程序(非用户)访问文件夹、子文件夹和文件,windows,filesystems,access-control,win32-process,Windows,Filesystems,Access Control,Win32 Process,我们有一个应用程序,它不是针对每个用户的,可以同时用于我的多个用户,并且数据也由所有用户共享。因此,我们使用数据文件夹的路径是ProgramData\OurAppName\data(post Vista),并为所有用户提供完全控制,以便他们运行的应用程序可以更改数据文件夹下的文件 现在的问题是,任何其他应用程序(恶意软件/病毒)也可以修改文件,即可以对我们的应用程序的数据文件进行攻击。我们的应用程序是Win32桌面应用程序 我们是否可以通过任何方式将对数据文件夹的访问限制为仅对应用程序的访问?W

我们有一个应用程序,它不是针对每个用户的,可以同时用于我的多个用户,并且数据也由所有用户共享。因此,我们使用数据文件夹的路径是ProgramData\OurAppName\data(post Vista),并为所有用户提供完全控制,以便他们运行的应用程序可以更改数据文件夹下的文件

现在的问题是,任何其他应用程序(恶意软件/病毒)也可以修改文件,即可以对我们的应用程序的数据文件进行攻击。我们的应用程序是Win32桌面应用程序


我们是否可以通过任何方式将对数据文件夹的访问限制为仅对应用程序的访问?

Windows安全模型是针对每个用户的,而不是针对每个应用程序的。因此,没有内置的方法来限制对基于哪个应用程序发出请求的文件的访问

正确的解决方案是,服务器程序(在实际服务器上运行,或作为本地计算机上的系统服务)以独占方式访问文件(因为服务器程序将作为不同的用户运行),客户端应用程序(最终用户运行的应用程序)通过服务器发出所有请求。然后,服务器可以在执行请求之前检查请求,确保它们没有破坏性


可能的临时解决方案包括一个系统服务(通过句柄复制)或一个文件系统过滤器驱动程序,该服务将文件的访问权交给您的应用程序。这些方法可以很容易地绕过,但可能足以对付不专门针对您的应用程序的常见病毒。

恶意软件当然会使用其中一个用户帐户运行。因此,试图以这种方式阻止它是毫无意义的。您必须担心的真正攻击是一个用户破坏另一个用户的数据。没有任何备份。通常在发生这种情况后,管理员会将存储位置更改为文件共享,从而快速解决此问题。确保他能。我不明白解决办法。你能详细说明一下吗?运行我们的应用程序以访问同一数据目录的真正用户没有任何问题,因为应用程序处理多用户场景。我们是否可以通过任何方式将对数据文件夹的访问限制为只访问我们的应用程序?因为我们想限制其他应用程序的访问。是的,文件系统筛选器驱动程序允许您仅对某些应用程序(进程)限制文件访问,并拒绝其他应用程序的访问。这并不是一个绝对的解决方案,因为恶意软件可以在内核模式下工作,或者以其他方式绕过此类检查,但是使用这种方法可以显著降低访问数据文件的更改。