我一直在寻找一些挂钩代码,它有选择地将库加载到某些进程中,然后挂钩某些本机API函数(使用Detours)。事件链如下所示:
DllMain()
决定是否加载包含实际Detours挂钩的 B.dll (LoadLibraryEx
)。此处的第二个项目似乎打破了指定的here的DllMain规则,但我正在尝试解决驱动程序加载A.dll
的方式是否适用于限制。具体来说,内核驱动程序使用PsSetLoadImageNotifyRoutine
在每个进程启动时获取通知,然后将APC排队以在LoadLibraryEx
上调用A.dll
,这意味着它几乎是进程启动时加载的第一个DLL。这是否可以解决在LoadLibrary
内调用DllMain
的问题?
答案 0 :(得分:2)
LoadLibraryEx
是如何触发的并不重要。一旦触发,DLL加载过程是相同的,并且适用相同的规则。
答案 1 :(得分:1)
documentation非常明确地说不要在DllMain中调用LoadLibrary。即使你不太可能想出一种安全的方法来使它工作,它也可能无法在Windows的下一个版本(甚至是下一个服务包)中运行。