Si vous souhaitez empêcher les utilisateurs de tuer le processus dans le gestionnaire des tâches, vous pouvez simplement utiliser un descripteur de sécurité sur le processus de refuser de résilier votre accès à tout le monde. Les administrateurs, techniquement, peuvent encore tuer le processus en prenant en charge le processus et la réinitialisation de la liste DACL, mais il n'y a pas d'interface pour effectuer une de ces choses dans le Gestionnaire des Tâches. L'Explorateur de processus peuvent avoir une interface bien.
Lors de votre démarrage du processus, l'utilisation SetKernelObjectSecurity avec DACL_SECURITY_INFORMATION
en utilisant le processus actuel de la poignée. Définir une liste DACL avec zéro Acl. Cela permettra de refuser l'accès à tout le monde, y compris ceux qui tentent de mettre fin à votre processus avec le gestionnaire de tâches.
Voici un exemple qui modifie également le processus du propriétaire:
SECURITY_DESCRIPTOR sd;
ACL dacl;
SID_IDENTIFIER_AUTHORITY ntauth = SECURITY_NT_AUTHORITY;
PSID owner;
assert(InitializeAcl(&dacl, sizeof dacl, ACL_REVISION));
assert(AllocateAndInitializeSid(&ntauth, 1, SECURITY_LOCAL_SYSTEM_RID, 0,0,0,0,0,0,0, &owner));
assert(InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION));
assert(SetSecurityDescriptorDacl(&sd, TRUE, &dacl, FALSE));
assert(SetSecurityDescriptorOwner(&sd, owner, FALSE));
assert(SetKernelObjectSecurity(GetCurrentProcess(), DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION, &sd));
assert(FreeSid(owner) == NULL);
Malheureusement, il ne semble pas être efficace. Je peux encore fermer les processus (bien que n'étant pas un utilisateur limité). Peut-être le Gestionnaire des Tâches est de la prise de possession ou en appelant certaines autres privilège de tuer le processus? Je crois me souvenir de ce travail dans les versions précédentes de Windows (j'ai été le tester 2003), mais je peux me tromper.