应用程序可以伪装成文件或文件夹吗?

时间:2012-02-19 10:20:06

标签: c++ windows vb.net file filesystems

我一直在考虑集中我的计算机游戏保存,以便更容易备份和恢复,以及通过Dropbox将它们放到云端,但是这样可能会让它变得非常困难。我注意到Windows 7和Vista现在支持符号链接,所以我一直在玩这个,但我很想知道如下:

应用程序(vb.net或C ++)欺骗文件或文件夹是否可能(代码示例或方向正确)?

E.g。应用程序A(像暗黑破坏神III或文明V这样的游戏)试图从文件A(游戏保存)读取或右转,应用程序B(保存库)检测到此读/写请求并通过自己管理请求,在文件上执行请求B(实际游戏保存在另一个位置)。应用程序A绝不会改变并正常处理文件。

注意:我意识到有很多简单的方法可以预先形成相同的任务,例如监视应用程序A的使用或定期检查文件A并复制它,如果它自上次检查后已被更改等但所有这些方法都有退缩,并且对可行的工作不太感兴趣。

3 个答案:

答案 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的详细信息才能具体回答这个问题。