Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-25 04:07:28
original
982 Les gens l'ont consulté

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>
Copier après la connexion
  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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!