【问题标题】:Windows: How to intercept Win32 disk I/O APIWindows:如何拦截 Win32 磁盘 I/O API
【发布时间】:2013-10-09 11:28:36
【问题描述】:

在 Windows 上,所有磁盘 I/O 最终都通过 Win32 API 调用(如 CreateFileSetFilePointer 等)发生。

现在,是否有可能拦截这些磁盘 I/O Win32 调用并在运行时为所有动态链接的 Windows 应用程序挂钩您自己的代码?也就是说,通过 Windows DLL 而不是静态 C 库获得 CreateFile 功能的应用程序。

我拥有的一些限制是:

  1. 没有源代码:我没有想要拦截的进程的源代码。

  2. 线程安全:我的钩子代码可能会动态分配自己的内存。此外,由于该内存将与多个拦截的进程(及其线程)共享,我希望能够序列化对它的访问。

  3. 条件委托和覆盖:在我的钩子代码中,我希望能够决定是委托给原始 Win32 API 功能,还是使用我自己的功能,或两者兼而有之. (很像 C++ 或 Java 中子类的覆盖方法中对超类方法的可选调用。)

  4. 常规用户空间代码:我希望能够在不编写任何设备驱动程序的情况下完成上述任务,主要是因为编写设备驱动程序涉及的复杂性。

如果这是可能的,我会很感激一些指示。源代码不是必需的,但总是受欢迎的!

【问题讨论】:

  • 这是商业广告。我想要一个免费的,一旦我知道主要的 API 和概念演员是什么,我愿意自己写一个。
  • 如果 Detours 不是你想要的,你可能想看看 mhook。
  • @easuter 这看起来很有希望。我需要几天的时间来评估它并回复,或者将您的回复标记为最终回复。非常感谢,同时。 +1(您可能希望将您的评论重新发布为下面的完整答案。)
  • @easuter 我将不得不无限期地推迟我对 mhook 的试用,但我相信它会完成这项工作。如果您将您的评论重新发布为答案,我会将其标记为最终结果。

标签: winapi hook createfile intercept


【解决方案1】:

如果 Detours 不是您想要的,您可能需要查看 mhook

以下是您在使用钩子时可能会遇到的几个问题:

【讨论】:

    【解决方案2】:

    我建议您从 Microsoft Detours 开始。它的免费版也存在,而且它相当强大的稳定版。对于注入,您必须找到适用于目标应用程序的注入方法。不确定您是否需要自己编写这些代码,但是像“Extreme Injector”这样的简单工具可以很好地测试您的方法。至少在我看来,您绝对不需要为如此简单的任务开发任何内核级驱动程序。为了得到我和其他人的全力帮助,我想先看看你的方法,或者列出更多对手头问题的限制,或者你到目前为止从哪里开始,但遇到了问题。这缩小了很多闲聊范围,也可以节省您的时间。

    现在,如果您不熟悉 Detours from Microsoft (MSFT),请在下载后从以下链接下载它:http://research.microsoft.com/en-us/projects/detours/。您需要自己编译它。它非常简单,并带有一个已编译的 HTML 帮助文件和示例。到目前为止,您的个人资料属于 IAT(导入地址表)和 EAT(导出地址表)。

    我希望这个非 sn-p 答案对您解决问题的方法有所帮助,如果您遇到困难,请再次询问。祝你好运!

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 2014-05-20
      • 2011-11-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多