【发布时间】:2013-10-09 11:28:36
【问题描述】:
在 Windows 上,所有磁盘 I/O 最终都通过 Win32 API 调用(如 CreateFile、SetFilePointer 等)发生。
现在,是否有可能拦截这些磁盘 I/O Win32 调用并在运行时为所有动态链接的 Windows 应用程序挂钩您自己的代码?也就是说,通过 Windows DLL 而不是静态 C 库获得 CreateFile 功能的应用程序。
我拥有的一些限制是:
没有源代码:我没有想要拦截的进程的源代码。
线程安全:我的钩子代码可能会动态分配自己的内存。此外,由于该内存将与多个拦截的进程(及其线程)共享,我希望能够序列化对它的访问。
条件委托和覆盖:在我的钩子代码中,我希望能够决定是委托给原始 Win32 API 功能,还是使用我自己的功能,或两者兼而有之. (很像 C++ 或 Java 中子类的覆盖方法中对超类方法的可选调用。)
常规用户空间代码:我希望能够在不编写任何设备驱动程序的情况下完成上述任务,主要是因为编写设备驱动程序涉及的复杂性。
如果这是可能的,我会很感激一些指示。源代码不是必需的,但总是受欢迎的!
【问题讨论】:
-
你看过Detours吗? research.microsoft.com/en-us/projects/detours
-
这是商业广告。我想要一个免费的,一旦我知道主要的 API 和概念演员是什么,我愿意自己写一个。
-
如果 Detours 不是你想要的,你可能想看看 mhook。
-
@easuter 这看起来很有希望。我需要几天的时间来评估它并回复,或者将您的回复标记为最终回复。非常感谢,同时。 +1(您可能希望将您的评论重新发布为下面的完整答案。)
-
@easuter 我将不得不无限期地推迟我对 mhook 的试用,但我相信它会完成这项工作。如果您将您的评论重新发布为答案,我会将其标记为最终结果。
标签: winapi hook createfile intercept