DllMain: Alles ausführen, auch indirekte LoadLibrary/...-Calls
-
Hi!
Ich mappe eine DLL in einen "fremden" Prozess und möchte dann in der DllMain bei DLL_PROCESS_ATTACH Dinge tun, die man dort eigentlich nicht tun sollte (Wegen dem sog. "Loader Lock").
Gibt es da irgendeine Möglichkeit?
Ich las mal was von einer __declspec(naked) Funktion. Ist da was dran?Danke!
MfG
-
Ich will was machen was nicht geht, aber ich will es trotzdem machen. Meine liebste Fragen-Kategorie.
Du kannst was ähnliches machen: du kannst in DllMain einen Thread starten. Wenn du in DllMain dann NICHT darauf wartest dass dieser Thread angefangen hat zu laufen, geht das ohne Probleme. In dem Thread kannst du dann machen was du willst.
-
DLL_bestprac.doc (C) 2006 Microsoft Corporation schrieb:
You should never perform the following tasks from within DllMain:
...
• Call CreateThread. Creating a thread can work if you do not synchronize with other threads, but it is risky.
...
-
... if you do not synchronize with other threads, ...
Damit ist ja grade "Erzeugen und SchnellWegVonHier!" gemeint.
-
hustbaer schrieb:
Du kannst was ähnliches machen: du kannst in DllMain einen Thread starten. Wenn du in DllMain dann NICHT darauf wartest dass dieser Thread angefangen hat zu laufen, geht das ohne Probleme. In dem Thread kannst du dann machen was du willst.
Es muss einem klar sein, dass der Thread erst anläuft wenn man DllMain verlassen hat.
-
OK, "machen was du willst" ist vielleicht ... nicht so ganz richtig.
Du kannst aber auf jeden Fall nen Thread starten, der dann LoadLibrary aufruft.
Wenn du's nicht glaubst lass es halt bleiben
-
CreateThread sollte man sowieso nicht aufrufen, macht nur Unfug bei Programmen die den TLS nutzen bzw gibt bei x64 gerne mal Abstürze.
Wenn schon, dann bitte _beginthreadex()Edit: Eh, TE, wenn du sie manuell mappst, wozu dann die DLL-Main aufrufen? oder meinst du mit mappen dass du LoadLibrary aufrufst ?
-
CreateThreadEx?

Meinst Du _beginthreadex ?
-
"CreateThreadEx" wie in "die Funktion die's nicht gibt"?
Meinst du vielleicht "_beginthreadex"? Die Funktion die man in DllMain schon garnicht aufrufen sollte, weil sie in der CRT DLL implementiert ist?OK, wenn man gegen die statische Runtime linkt müsste es gehen...
-
Martin Richter schrieb:
CreateThreadEx?

Meinst Du _beginthreadex ?
Meinte ich, war gerade mit den Gedanken woanders.