在 Windows 上,所有磁盘 I/O 最终都通过 Win32 API 调用(如CreateFile
、SetFilePointer
等)发生。
现在,是否可以在运行时拦截这些磁盘 I/O Win32 调用并在您自己的代码中为所有动态链接的 Windows 应用程序挂接?也就是说,应用程序CreateFile
通过 Windows DLL 而不是静态的 C 库获得其功能。
我有一些限制是:
没有源代码:我没有想要拦截的进程的源代码。
线程安全:我的钩子代码可能会动态分配自己的内存。此外,由于该内存将与多个拦截的进程(及其线程)共享,我希望能够序列化对它的访问。
条件委托和覆盖:在我的钩子代码中,我希望能够决定是委托给原始的 Win32 API 功能,还是使用我自己的功能,或两者兼而有之。(很像 C++ 或 Java 中子类的覆盖方法中对超类方法的可选调用。)
常规用户空间代码:我希望能够在不编写任何设备驱动程序的情况下完成上述操作,这主要是因为编写设备驱动程序涉及的复杂性。
如果这是可能的,我会很感激一些指示。源代码不是必需的,但总是受欢迎的!