Comment interdire la terminaison du processus par un utilisateur régulier?

Je ne peux pas l’implémenter en tant que service Windows car mon processus doit interagir avec le bureau et il est interdit dans Windows 7.

Quelle est la manière la plus simple d’y parvenir? À partir d’un autre utilisateur (privilégié)? Comment faire cela?

Mes utilisateurs ne sont pas des hackers, juste des opérateurs, donc certaines méthodes “idiotes” comme se cacher du gestionnaire de tâches aideraient aussi.

EDIT: quelques éclaircissements selon les réponses fournies

mon processus n’a aucune interface graphique, donc j’essaie d’éviter de tuer le processus du gestionnaire de tâches

mon processus est un client d’un système de supervision qui doit surveiller le bureau de l’utilisateur, de sorte qu’il doit interagir avec le bureau

EDIT 2:

puis-je utiliser un service Windows qui démarrera un processus distinct dans la session utilisateur sous un compte système (puisque mon service est exécuté sous un compte système)? l’utilisateur peut-il tuer ce processus enfant?

Vous pouvez désactiver le gestionnaire de tâches à l’ aide d’une stratégie de groupe et masquer le bouton de fermeture de la fenêtre de votre application et la réaction sur [Alt + F4].

après une longue période de recherche, j’ai trouvé une réponse acceptable ici: Empêcher le processus utilisateur d’être tué avec “End Process” à partir de Process Explorer

fonctionne correctement si vous êtes connecté en tant qu’utilisateur régulier, vous ne pouvez pas tuer le processus à partir de Process Explorer. Admin peut encore le tuer car il dispose de privilèges suffisants. c’est exactement ce dont j’avais besoin

Fermer la fenêtre (racine) ne signifie pas arrêter le processus – lorsque la boucle de pompage de message existe, vous pouvez simplement la redémarrer avec une nouvelle fenêtre (si vous utilisez un framework, il y a probablement un wrapper).

Mais si un utilisateur possède un object Windows (comme un processus), il peut toujours le supprimer (terminer). Cependant, en tant qu’utilisateur différent, les informations d’identification de cet utilisateur devront être stockées de manière à être accessibles au lanceur en tant qu’utilisateur actuel.

Pour aider plus spécifiquement, je pense que nous devons comprendre pourquoi:

parce que mon processus doit interagir avec le bureau

est une exigence

Depuis ce blog MSDN :


Voici comment vous le faites:

Obtenez le jeton utilisateur en appelant

 WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ; 

Utilisez ce jeton dans CreateProcessAsUser.


Il vous suffit d’appeler WTSQueryUserToken depuis votre service et de lancer le processus – cela fonctionne également sous Windows 7!