J'ai un service Windows (sous WinXP SP2), exécuté sous le compte LocalSystem, qui lance les processus à l'aide de CreateProcessWithLogonW. Pour nettoyer les processus enfants, j'essaie d'utiliser un objet de travail et TerminateJobObject. MSDN indique que le handle de travail doit avoir droit d'accès JOB_OBJECT_ASSIGN_PROCESS, ce qu'il a depuis qu'il est créé via CreateJobObject. Le descripteur de processus doit avoir les droits PROCESS_SET_QUOTA et PROCESS_TERMINATE. Je pense qu'il les a depuis que TerminateProcess et SetProcessWorkingSetSize retournent tous deux sans erreur.CreateProcessWithLogonW et AssignProcessToJobObject
Cependant, AssignProcessToJobObject échoue avec errno 5 (Accès refusé). Tout fonctionne bien si je remplace CreateProcessWithLogonW par un simple CreateProcess.
Ai-je raté quelque chose ou est ce que j'essaye de faire impossible?
Modifier: Il semble que svchost.exe, qui crée réellement le processus lorsque CreateProcessWithLogonW est utilisé, affecte déjà le processus à un travail anonyme. L'indicateur CREATE_CREAKAWAY_FROM_JOB est ignoré par cette fonction. La vraie question est donc: existe-t-il un moyen d'empêcher svnhost d'assigner le processus à un travail?
En fait, il existe un ensemble fixe d'ouvertures de session qui sont nécessaires, donc je peux utiliser cette approche avec un processus par ouverture de session en faisant le CreateProcess. Merci d'avoir répondu. – fraca7
J'ai rencontré exactement le même problème. Ma façon de le résoudre était - comme vous l'avez proposé - de créer un troisième processus. Merci. –