Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Benutzer ohne Administratorrechte Windows-Dienste in C starten und stoppen?

Wie können Benutzer ohne Administratorrechte Windows-Dienste in C starten und stoppen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 04:07:28983Durchsuche

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

Starten des Windows-Dienstes aus der Anwendung ohne Administratorrechte (C)

Frage:

Wie Kann ein Benutzer einen Windows-Dienst von einer Nicht-Administratoranwendung aus starten oder stoppen, ohne dass Administratorrechte erforderlich sind?

Antwort:

Um Benutzern ohne Administratorrechte die Möglichkeit zu gewähren Um einen Windows-Dienst zu starten und zu stoppen, ändern Sie die Dienstberechtigungen. Dieser Vorgang sollte idealerweise während der Dienstinstallation durchgeführt werden.

Verwenden Sie die folgenden Schritte:

  1. Besorgen Sie sich das Diensthandle:Öffnen Sie ein Handle für den Zieldienst mit WRITE_DAC-Berechtigung.
  2. Erstellen Sie den Sicherheitsdeskriptor (SDDL): Erstellen Sie eine SDDL-Zeichenfolge, die die gewünschten Berechtigungen für verschiedene Benutzergruppen angibt, z. B. das Erlauben interaktiver Benutzer, den Dienst zu starten:
<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. SD konvertieren und festlegen: Konvertieren Sie die SDDL-Zeichenfolge in eine Sicherheitsbeschreibung und legen Sie sie mithilfe der SetServiceObjectSecurity-Funktion für das Dienstobjekt fest:
<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>

Um auch Benutzern ohne Administratorrechte das Recht zu gewähren, den Dienst zu beenden, fügen Sie das WP-Recht in die SDDL-Zeichenfolge ein:

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

Weitere SDDL-Codes finden Sie im Blogeintrag von Wayne Martin Servicerechte.

Das obige ist der detaillierte Inhalt vonWie können Benutzer ohne Administratorrechte Windows-Dienste in C starten und stoppen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn