不应使用DllMain中kernel32.dll中的函数以外的函数:
来自 MS 文档:
因为当调用入口点函数时,Kernel32.dll 保证被加载到进程地址空间中,所以在 Kernel32.dll 中调用函数不会导致 DLL 在其初始化代码执行之前被使用。因此,入口点函数可以调用 Kernel32.dll 中不加载其他 DLL 的函数。例如,DllMain 可以创建临界区和互斥锁等同步对象,并使用 TLS。不幸的是,Kernel32.dll 中没有安全函数的完整列表。
...
调用需要除 Kernel32.dll 之外的 DLL 的函数可能会导致难以诊断的问题。例如,调用 User、Shell 和 COM 函数可能会导致访问冲突错误,因为某些函数会加载其他系统组件。相反,在终止期间调用诸如此类的函数可能会导致访问冲突错误,因为相应的组件可能已经被卸载或未初始化。
我的问题:
但是文档没有提到ntdll.dll。- 我可以为“ntdll”调用LoadLibrary并在DllMain中使用ntdll中的函数:
1) 在DLL_PROCESS_ATTACH期间(加载和使用 ntdll 的函数)?
2) 在DLL_PROCESS_DETACH期间(使用之前加载的 ntdll 的函数)?
另外,请拥有 1500+ 声誉的人愿意创建一个名为“dllmain”的新标签吗?