Contrôle du service Windows à partir d'applications sans privilèges d'administrateur
Les services Windows offrent un moyen pratique d'exécuter des tâches de longue durée en arrière-plan sans intervention de l'utilisateur . Cependant, par défaut, le démarrage ou l'arrêt de ces services nécessite des droits d'administrateur. Cela pose une limitation pour les applications qui doivent gérer des services pour le compte des utilisateurs.
Solution
La solution à ce problème réside dans la modification des autorisations de l'objet de service. Cela permet aux applications d'interagir avec le service sans nécessiter de privilèges élevés. Voici une approche suggérée en utilisant C :
<code class="c++">wchar_t sddl[] = L"D:" L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)" // default permissions for local system L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)" // default permissions for administrators L"(A;;CCLCSWLOCRRC;;;AU)" // default permissions for authenticated users L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)" // default permissions for power users L"(A;;RP;;;IU)" // added permission: start service for interactive users ; PSECURITY_DESCRIPTOR sd; if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &sd, NULL)) { // Handle error } if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd)) { // Handle error }</code>
Explication
Ce code ouvre le descripteur de sécurité du service spécifié et modifie sa DACL (liste de contrôle d'accès discrétionnaire). Il ajoute un nouvel ACE (entrée de contrôle d'accès) qui accorde le droit "Démarrer le service" aux utilisateurs interactifs (utilisateurs non administrateurs).
Pour arrêter également le service, ajoutez le droit "Arrêter le service" (WP ) à la liste :
<code class="c++">L"(A;;RPWP;;;IU)" // added permissions: start service, stop service for interactive users</code>
En modifiant les autorisations de l'objet de service, vous pouvez donner aux applications la possibilité de gérer les services Windows de manière transparente sans avoir besoin d'une élévation d'administrateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!