最近在写一个代码的时候想在DLL的DllMain函数中创建一个线程,但是一运行就崩溃了。过程是这样的:编写了一个注入dll的工具,使用这个工具把这个dll注入到资源管理器进程explorer.exe,这个工具注入其他的dll到这个资源管理器线程都是成功的,但是就是注入创建线程的dll就失败了。有些网友说微软不建议在dll的DllMain函数中创建线程。
但是最后我发现了一个不好解释的问题,首先看看原来有问题的代码,这个代码很简单,就是在DllMain函数中创建一个线程,这个线程的作用就是弹出一个对话框即可。
贴上简单的测试代码:
DWORD WINAPI ThreadFun( LPVOID )
{
MessageBox(NULL , "HELLO WORLD" , "HELLO WORLD" , NULL ) ;
return 1 ;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
HANDLE hThread = CreateThread( NULL , NULL , ThreadFun , NULL , NULL , NULL ) ;
if( INVALID_HANDLE