应用程序可以伪装成文件或文件夹吗
Can an application pretend to be a file or folder?
我一直在考虑集中我的电脑游戏保存,以使备份和恢复更容易,并通过dropbox将它们放在云上,但在很多地方,这会让它变得非常困难。我注意到Windows7和Vista现在支持符号链接,所以我一直在玩这个,但我想知道以下内容:
应用程序(vb.net或C++)是否可能伪造文件或文件夹(代码示例或指向正确方向的点)?
例如,应用程序A(类似于《暗黑破坏神III》或《文明V》的游戏)试图从文件A(游戏保存)读取或从文件A读取权限,应用程序B(保存库)检测到该读取/写入请求,并通过自身将该请求传送到文件B(另一位置的实际游戏保存)上。应用程序A不会被更改,并且正常处理该文件。
注意:我意识到有很多简单的方法可以预先完成相同的任务,比如监控应用程序A的使用情况,或者定期检查文件A,如果自上次检查以来文件A发生了更改,则进行复制等,但所有这些方法都有回缩,而且对使其工作的兴趣不如可能的话。
通过文件系统过滤器驱动程序完全可以做到这一点。有关这些信息,请查看此处:
http://msdn.microsoft.com/en-us/windows/hardware/gg462968
过滤器驱动程序可以挂接到CreateFile操作中,并根据需要将创建重定向到其他位置,但与普通应用程序相比,它们更难编写。它们在内核模式下运行,必须遵守驱动程序的限制。
您可以像控制面板那样"伪造"特殊文件夹,但我不认为您可以(以简单的方式)创建任何可访问/可写的内容。不过我可能错了。我也有过同样的想法(作为一些公司产品的兼容性步骤),但找不到任何支持简单方法的东西。在Unix系统上做这件事似乎更容易(但这显然是没有选择的)。此外,我不希望有任何好的或简单的解决方案
我现在唯一能想到的方法是劫持相应的API调用(例如FileOpen
),以重新路由/操纵它们(类似于root工具包的做法),但我不会说这是个好主意,因为它可能会被punkbuster或防病毒解决方案检测为恶意软件或作弊。
是或否取决于(使用您的术语)应用程序A所使用的抽象级别。
如果应用程序A正在执行CreateFile
wto启动访问并传递固定的文件系统路径,那么应用程序B将需要模拟文件系统并在内核中这样做。
另一方面,如果应用程序A使用RESTful URL来使用HTTP,那么HTTP服务器可以通过动态创建内容来回答来自文件的所有请求。
因此,这个问题只能通过了解应用程序A的详细信息来具体回答。
- 如何将更多文件夹添加到c++include路径
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在文档文件夹中创建目录
- "assimp/config.h"找不到,但它在文件夹中
- C++入门 5 版:类消息和文件夹
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 如何按文件扩展名引用文件夹中的文件
- 在QTreeView中仅显示共享驱动器和文件夹
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 介子复制/安装头文件到输出目录并保持文件夹结构
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 在文件夹迭代上实现 RAII
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 无法使用 CMake 从其他文件夹添加源文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 对单元测试(googletest)和项目/文件夹/文件的混淆
- 设计文件夹/文件系统