Windows:如何拦截Win32磁盘I / O API

时间:2013-10-09 11:28:36

标签: winapi hook createfile intercept

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

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

我拥有的一些约束是:

  1. 没有源代码:我不会有我想拦截的流程的源代码。

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

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

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

  5. 如果可以的话,我会感激一些指点。源代码不是必需的,但总是受欢迎!

2 个答案:

答案 0 :(得分:2)

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

以下是使用钩子时可能遇到的一些问题:

答案 1 :(得分:0)

我建议你从微软Detours开始。它的免费版本也存在,它的稳定性也相当强大。对于注射,您必须找到哪种注射方法适用于目标应用。不知道你是否需要自己编写代码,而是一个简单的工具,例如" Extreme Injector"很适合测试你的方法。至少在我看来,你绝对不需要为这么简单的任务开发任何内核驱动程序。为了得到我和其他人的全力帮助,我希望先看看你的方法,或者列出对手头问题的更多限制,或者你到目前为止开始的地方,但是有问题。这缩小了很多聊天记录,也可以节省您的时间。

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

我希望这个非片段的答案可以帮助你解决问题,如果你遇到困难再回来问问题。祝你好运!