OpenProcess / SetProcessAffinityMask sur le processus a commencé par mon service
-
21-09-2019 - |
Question
Dans mon manager.exe, je suis en train de changer l'utilisation du processeur de mon worker.exe, qui a commencé par mon service.exe. Service.exe est en cours d'exécution sous le compte système, tout en manager.exe est en cours d'exécution sous l'utilisateur connecté sur le compte de l'utilisateur.
Quand j'appelle à OpenProcess manager.exe avec le PID worker.exe, je reçois NULL pour procHandle:
HANDLE procHandle = OpenProcess (PROCESS_SET_INFORMATION, 0, pid);
Utilisation GetLastError () Je vois que je suis une erreur Accès refusé.
Les façons de contourner cela? Puis-je modifier en quelque sorte worker.exe d'accorder d'autres processus de contrôle complet sur lui-même?
La solution
Vous ne devriez pas avoir à appeler OpenProcess
.
Le service devrait déjà avoir une poignée pleine autorisation au travailleur quand il s'appelle CreateProcessAsUser
ou CreateProcessWithLogonW
. Utilisez DuplicateHandle
pour faire une version de cette poignée peut être utilisé par le processus de gestion, et ensuite l'envoi de service qui gère au gestionnaire. Le service a déjà une poignée au gestionnaire, à droite? Il aura besoin que pour DuplicateHandle
.
Ou que le gestionnaire de demander au service de changer le processus de travail.