解决方案:重写旧软件上的路径以防止 %programfiles% 内的写入权限

解决方案:重写旧软件上的路径以防止 %programfiles% 内的写入权限

我正在寻找一种解决方案来重写旧软件在其自己的文件夹(%programfiles%)中使用的特定路径。

旧软件将其数据保存在自己的文件夹中,需要编辑权限(降低安全性)或向最终用户提供管理权限(最终用户将破坏系统)。

是否有一种解决方案可以挂接并重写软件可能想要读取/写入的特定路径,从“%programfiles%\ $ SoftwareName \ $ SaveFolder”到“%userprofile%\ Documents \ $ SoftwareName \ $ SaveFolder”,而不需要最终用户的管理权限?

请注意,%userprofile% 应始终链接到当前用户的个人资料,而不是某个特定的用户文件夹。

答案1

是的,你问的是可能的。你可以写一个文件系统过滤驱动程序为此。文件系统过滤驱动程序能够做的一件事是拦截对文件系统的每次读取和写入,检查操作是否包含某些路径名,并将操作重定向到不同的路径名。这就是 Windows Vista 及更高版本用于执行“UAC 文件虚拟化”的文件和文件夹重定向的方法 - 即尝试写入受保护的系统文件夹的应用程序会自动重定向到 AppData 等。如果您发出命令fltmc来查看系统上当前安装的过滤驱动程序,您可能会看到luafv列表。(UAC 最初称为 LUA)FV 代表文件虚拟化。

但这并不是一项简单的任务,除非你对内核编程和驱动程序编写很熟悉。

事实上,现在我想起来了……UAC 文件虚拟化应该已经为您处理了这个问题。这正是它的设计目的 - 让试图写入 Program Files 或 HKLM 的应用程序改为写入 User AppData 或 HKCU。我认为需要对您的应用程序和系统进行更深入的检查,以确定它为何避免使用 UAC 虚拟化。

另一个你可能会发现更简单的解决方案是创建一个应用程序兼容性垫片。我认为这种方法比文件系统过滤驱动程序更可取。

AppCompat shim 能够自定义文件和文件夹重定向。我认为这是更好的选择,因为它更简单,并且只针对不守规矩的应用程序,而不必通过安装驱动程序进行系统范围的修改。

相关内容