Comment terminer le thread de travail correctement dans une DLL injectée?

J’injecte une DLL dans un processus, la DLL a un thread de travail qui exécute une boucle de message.

Je voudrais quitter le thread correctement, c’est-à-dire poster un message de sortie (PostThreadMessage) et attendre (WaitForSingleObject).

Où puis-je attendre que ce fil se ferme? Je ne peux pas le faire sur DLL_PROCESS_DETACH car à ce moment-là tous les threads sont fermés ou terminés et je ne sais pas quand le processus est sur le sharepoint se fermer.

Ma seule pensée était: Y a-t-il un moyen d’intercepter la boucle de message du thread principal et de rechercher les msgs WM_CLOSE \ DESTROY?

J’adorerais entendre d’autres idées \ solutions.

Modifier:
J’ai essayé d’accrocher le thread principal en utilisant SetWindowsHookEx avec WH_CALLWNDPROC mais cela n’a pas bien fonctionné, j’ai réussi à connecter et à recevoir les messages du thread. Cependant, je n’ai pas reçu de message WM_QUIT, seuls WM_DESTROY et WM_NCDESTROY étaient associés à Windows.

Merci,
Omer

Si vous devez effectuer une action sur “À propos de la fermeture”, vous devez connecter le thread principal à l’aide de SetWindowsHookEx avec WH_CALLWNDPROC et rechercher WM_CLOSE et passer à l’action / signaler la fermeture du thread.

Le processus n’a aucune idée que le thread existe, il ne va pas se soucier s’il se déroule bien. En fait, il le terminera si le programme a été écrit en C, par exemple, sa bibliothèque d’exécution appelle TerminateProcess lorsque sa méthode main () se termine. Style Harikiri.

Si vous vous intéressez au thread de manière externe , par exemple dans un programme que vous avez écrit et qui surveille le thread, vous devez laisser un fil d’ariane lorsqu’il se ferme. Soit en communiquant cela à votre programme avec n’importe quel mécanisme d’interopérabilité de processus que vous utilisez, comme un canal nommé. Ou en définissant un événement nommé. Assurez-vous de traiter le scénario harikiri, vous voudrez également vérifier si le handle de processus est signalé pour indiquer qu’il s’est terminé.