Ich habe einen Windows-Dienst (unter WinXP SP2), der unter dem LocalSystem-Konto läuft und Prozesse mit CreateProcessWithLogonW startet. Um Kindprozesse zu bereinigen, versuche ich, ein Job-Objekt und TerminateJobObject zu verwenden.
MSDN gibt an, dass das Job-Handle das Zugriffsrecht JOB_OBJECT_ASSIGN_PROCESS haben muss, was es hat, da es über CreateJobObject erstellt wurde. Das Prozess-Handle muss die Rechte PROCESS_SET_QUOTA und PROCESS_TERMINATE haben. Ich denke, er hat sie, da sowohl TerminateProcess als auch SetProcessWorkingSetSize ohne Fehler zurückkehren.
AssignProcessToJobObject schlägt jedoch mit errno 5 (Zugriff verweigert) fehl. Alles funktioniert gut, wenn ich CreateProcessWithLogonW durch ein einfaches CreateProcess ersetze.
Übersehe ich etwas oder ist das, was ich versuche, unmöglich?
Bearbeiten: Es scheint, dass svchost.exe, das den Prozess tatsächlich erstellt, wenn CreateProcessWithLogonW verwendet wird, den Prozess bereits einem anonymen Job zuordnet. Das Kennzeichen CREATE_CREAKAWAY_FROM_JOB wird von dieser Funktion ignoriert. Die eigentliche Frage ist also: Gibt es eine Möglichkeit zu verhindern, dass svnhost den Prozess einem Job zuweist?