Maison >développement back-end >C++ >Comment les applications peuvent-elles contrôler les services Windows sans privilèges d'administrateur ?

Comment les applications peuvent-elles contrôler les services Windows sans privilèges d'administrateur ?

DDD
DDDoriginal
2024-10-25 09:27:28684parcourir

How Can Applications Control Windows Services Without Administrator Privileges?

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, &amp;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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn