我一直在考虑集中我的计算机游戏保存,以便更容易备份和恢复,以及通过Dropbox将它们放到云端,但是这样可能会让它变得非常困难。我注意到Windows 7和Vista现在支持符号链接,所以我一直在玩这个,但我很想知道如下:
应用程序(vb.net或C ++)欺骗文件或文件夹是否可能(代码示例或方向正确)?
E.g。应用程序A(像暗黑破坏神III或文明V这样的游戏)试图从文件A(游戏保存)读取或右转,应用程序B(保存库)检测到此读/写请求并通过自己管理请求,在文件上执行请求B(实际游戏保存在另一个位置)。应用程序A绝不会改变并正常处理文件。
注意:我意识到有很多简单的方法可以预先形成相同的任务,例如监视应用程序A的使用或定期检查文件A并复制它,如果它自上次检查后已被更改等但所有这些方法都有退缩,并且对可行的工作不太感兴趣。
答案 0 :(得分:7)
完全可以通过文件系统过滤器驱动程序完成此操作。有关这些的信息,请查看此处:
http://msdn.microsoft.com/en-us/windows/hardware/gg462968
如果需要,过滤器驱动程序可以挂钩到CreateFile操作并将创建重定向到其他位置,但与普通应用程序相比,它们更难编写。它们以内核模式运行,必须遵守驱动程序的限制。
答案 1 :(得分:0)
你可以“伪造”特殊文件夹,比如控制面板,但我认为你不能创建任何可访问/可写的东西(以简单的方式)。我可能错了。我也有同样的想法(作为一些公司的兼容性步骤),但找不到支持简单方法的任何东西。看起来在Unix系统上可能更容易完成(但这显然没有选择)。此外,我不希望.net。
有任何好的或简单的解决方案我现在只能想到的方法,就是劫持相应的API调用(例如FileOpen
)来重新路由/操纵它们(类似于root工具包那样),但我不会说这是好的想法,考虑到可能被punkbuster或防病毒解决方案等事件检测为可能的恶意软件或作弊。
答案 2 :(得分:0)
是或否取决于(使用您的条款)应用程序A正在使用的抽象级别。
如果应用程序A正在执行CreateFile
开始访问并传递固定文件系统路径,那么应用程序B将需要模拟文件系统并在内核中执行此操作。
另一方面,如果应用程序A是使用RESTful URL的用户HTTP,则HTTP服务器可以应答来自文件的所有请求或动态创建内容。
因此,只有通过了解申请A的详细信息才能具体回答这个问题。