挂钩windows API函数拦截dll加载(仅限Windows)

时间:2010-02-07 12:14:39

标签: visual-c++ hook

我想拦截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。

2 个答案:

答案 0 :(得分:4)

首先,你在做什么需要一个全局钩子?

如果您希望通知在任何进程中加载​​了DLL,您可以查看PsSetImageLoadNotifyRoutine,这是一个内核模式例程。 尽管它是内核模式,但它并不难以使用,编写基本驱动程序非常有趣。

另一种方法是在每个进程中强制加载库。有多种方法,其中一种更合法的方法是Windows Message hooks

答案 1 :(得分:0)

在LoadLibrary函数上安装系统范围的挂钩。 (我不知道如何在问题下面使用那个小评论的东西)