通过重写 Win32 File API 实现虚拟文件
有没有办法重写 Win32 文件 API,例如 CreateFile()?我希望我的应用程序能够看到仅适用于我的应用程序的虚拟文件,但是,该虚拟文件实际上并不存在。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有没有办法重写 Win32 文件 API,例如 CreateFile()?我希望我的应用程序能够看到仅适用于我的应用程序的虚拟文件,但是,该虚拟文件实际上并不存在。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
存在两种方法 - 使用内核模式驱动程序(已记录的一种)和不使用此类驱动程序(一种 hacky 方法)。
对于内核模式驱动程序,您有两种方法 - (1) 创建虚拟文件系统驱动程序(或采用现有的驱动程序)和 (2) 创建文件系统过滤驱动程序(或采用现有的驱动程序)。驱动程序开发 = 一年左右的工作才能正确、完整地完成。驱动程序开发在 MSDN 中有完整记录。
如果没有内核模式驱动程序,您需要使用 API 挂钩。 Detours、MadCodeHook 和 Boxedapp SDK 等库可以执行此操作(也允许您执行此操作)。
挂钩 API 主题相当大,无法在这里完整描述它,但是有一个很好的 关于此主题的 CodeProject 文章。
There exist two approaches - with a kernel-mode driver (documented one) and without such driver (a hacky way).
With a kernel-mode driver you have two ways - (1) create a virtual filesystem driver (or take existing one) and (2) create a filesystem filter driver (or take existing one). Driver development = a year or so of work to do right and completely. Driver development is fully documented in MSDN.
Without a kernel-mode driver you need to employ API hooking. Libraries such as Detours, MadCodeHook and Boxedapp SDK do this (and let you do this as well).
Hooking an API topic is quite large to describe it here fully, but there's a good CodeProject article on this topic.
全系统?坏主意。如果这只是您的应用程序,请不要使用标准 API 并自行实现。但是,如果数据必须在会话之间保留,则必须将数据存储在某个地方(文件、注册表等)。
System-wide? Bad idea. If it's just your app, don't use the standard APIs and implement it yourself. But if the data must persist between sessions, you'll have to store the data somewhere (file, registry, etc.).