Maison  >  Article  >  développement back-end  >  Comment les utilisateurs non-administrateurs peuvent-ils démarrer et arrêter les services Windows en C ?

Comment les utilisateurs non-administrateurs peuvent-ils démarrer et arrêter les services Windows en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 04:07:281043parcourir

How Can Non-Administrator Users Start and Stop Windows Services in C  ?

Démarrage du service Windows à partir d'une application sans droits d'administrateur (C)

Question :

Comment Un utilisateur peut-il démarrer ou arrêter un service Windows à partir d'une application non-administrateur sans avoir besoin de droits d'administrateur ?

Réponse :

Pour accorder aux utilisateurs non-administrateurs la possibilité pour démarrer et arrêter un service Windows, modifiez les autorisations du service. Ce processus doit idéalement être effectué lors de l'installation du service.

Procédez comme suit :

  1. Obtenez le handle de service : Ouvrez un handle vers le service cible avec le Autorisation WRITE_DAC.
  2. Créez le descripteur de sécurité (SDDL) : Construisez une chaîne SDDL qui spécifie les autorisations souhaitées pour divers groupes d'utilisateurs, par exemple autoriser les utilisateurs interactifs à démarrer le service :
<code class="pre">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
  ;</code>
  1. Convertir et définir le SD : Convertissez la chaîne SDDL en descripteur de sécurité et définissez-la sur l'objet de service à l'aide de la fonction SetServiceObjectSecurity :
<code class="pre">PSECURITY_DESCRIPTOR sd;

if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &amp;sd, NULL))
{
   fail();
}

if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd))
{
   fail();
}</code>

Pour accorder aux utilisateurs non-administrateurs le droit d'arrêter également le service, incluez le droit WP dans la chaîne SDDL :

<code class="pre">L"(A;;RPWP;;;IU)"                           
  // added permissions: start service, stop service for interactive users</code>

Reportez-vous à l'entrée de blog de Wayne Martin pour des codes SDDL supplémentaires pour droits de service.

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