我想拦截dll的加载,所以我可以使用它们。我的第一个想法是挂钩GetProcAddress。令人惊讶的是,通过挂钩它,我只能拦截拥有我的库的进程中的调用。 (我打开了另一个调用GetProcAddress的可执行文件,这些调用没有被拦截)(我想因为它是针对我的lib动态编译的)
输出示例:
C:\的Windows \ SysWow64资料\ KERNEL32.DLL Module32NextW
C:\的Windows \ SysWow64资料\ KERNEL32.DLL CreateToolHelp32Snapshot函数
C:\ Windows \ System32下\ DINPUT.dll DirectInputCreateW
C:\的Windows \ Syswow64资料\ NTDLL.DLL 由DirectDrawCreate
无论如何,我想知道的是我应该开始能够拦截dll加载,以便我可以使用它们的功能。
基本上,我希望能够为任何加载的dll调用GetModuleInformation。
答案 0 :(得分:4)
首先,你在做什么需要一个全局钩子?
如果您希望通知在任何进程中加载了DLL,您可以查看PsSetImageLoadNotifyRoutine,这是一个内核模式例程。 尽管它是内核模式,但它并不难以使用,编写基本驱动程序非常有趣。
另一种方法是在每个进程中强制加载库。有多种方法,其中一种更合法的方法是Windows Message hooks。
答案 1 :(得分:0)
在LoadLibrary函数上安装系统范围的挂钩。 (我不知道如何在问题下面使用那个小评论的东西)