CreateThread geht in DllMain nicht?
-
Hatte schon mal jemand das Problem, das CreateThread scheinbar nicht in DllMain geht? Hier mein Code der DllMain:
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { DWORD threadID; HANDLE threadHandle; if(ul_reason_for_call==DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(GetModuleHandle("FairPlay")); threadHandle=CreateThread(NULL,200,&CheatProc,NULL,0,&threadID); } if(ul_reason_for_call==DLL_PROCESS_DETACH) TerminateThread(threadHandle,0); return TRUE; }
Prototyp der CheatProc ist: DWORD WINAPI CheatProc(LPVOID param1);
Die Threadprozedur läuft allerdings nicht durch. Stattdessen gibt es einen Fehler wenn die DLL geladen wird. Hat jemand eine Idee woran das liegen könnte?
-
Hmh. Ich habe gerade mal ins MSDN geschaut. Da steht folgendes:
During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process.
Ich habe das auch gerade mal probiert -> funktioniert wunderbar (W2K SP3). Ich kann da keine Probleme reproduzieren. Trotzdem möchte ich zu Deinem Code noch was loswerden:
DisableThreadLibraryCalls(GetModuleHandle("FairPlay"));
Warum gibst Du hier nicht den ersten Parameter von DllMain an, warum der extra Aufruf von GetModuleHandle?
if(ul_reason_for_call==DLL_PROCESS_DETACH) TerminateThread(threadHandle,0);
Der stumpfe Aufruf von TerminateThread ist IMO ein glatte 6. Bedenke, daß keinerlei vom Thread belegten Ressourcen freigegeben werden. Bedenke auch, daß noch nichtmal der Stack des Threads abgeräumt wird. Wenn die Dll vor Process-Ende entladen wird, bastelst Du Dir ganz böse Löcher.
[ Dieser Beitrag wurde am 11.01.2003 um 00:21 Uhr von -King- editiert. ]
-
bastelst Du Dir ganz böse Löcher.
[MÜLL]
Hat er auch verdient, wenn er cheatet. :p
[/MÜLL]