SetServiceObjectSecurity-Funktion (winsvc.h)

[SetServiceObjectSecurity ist für die Verwendung in den Betriebssystemen verfügbar, die im Abschnitt Anforderungen angegeben sind. Es kann in nachfolgenden Versionen geändert oder entfernt werden. Verwenden Sie stattdessen die SetNamedSecurityInfo-Funktion .]

Die SetServiceObjectSecurity-Funktion legt den Sicherheitsdeskriptor eines Dienstobjekts fest.

Syntax

BOOL SetServiceObjectSecurity(
  [in] SC_HANDLE            hService,
  [in] SECURITY_INFORMATION dwSecurityInformation,
  [in] PSECURITY_DESCRIPTOR lpSecurityDescriptor
);

Parameter

[in] hService

Ein Handle für den Dienst. Dieses Handle wird von der OpenService- oder CreateService-Funktion zurückgegeben. Der für dieses Handle erforderliche Zugriff hängt von den Sicherheitsinformationen ab, die im dwSecurityInformation-Parameter angegeben sind.

[in] dwSecurityInformation

Gibt die komponenten des festzulegenden Sicherheitsdeskriptors an. Für diesen Parameter ist eine Kombination der folgenden Werte gültig. Beachten Sie, dass Flags, die nicht von SetServiceObjectSecurity verarbeitet werden, unbeaufsichtigt ignoriert werden.

Wert Bedeutung
DACL_SECURITY_INFORMATION
Legt die diskretionäre Zugriffssteuerungsliste (DACL) des -Objekts fest. Das von hService angegebene Handle muss über WRITE_DAC Zugriff verfügen, oder der aufrufende Prozess muss der Besitzer des Objekts sein.
GROUP_SECURITY_INFORMATION
Legt die primäre Gruppensicherheits-ID (SID) des -Objekts fest. Das von hService angegebene Handle muss über WRITE_OWNER Zugriff verfügen, oder der aufrufende Prozess muss der Besitzer des Objekts sein.
OWNER_SECURITY_INFORMATION
Legt die SID des Besitzers des -Objekts fest. Das von hService angegebene Handle muss über WRITE_OWNER Zugriff verfügen, oder der aufrufende Prozess muss besitzer des Objekts sein oder das SE_TAKE_OWNERSHIP_NAME-Recht aktiviert haben.
SACL_SECURITY_INFORMATION
Legt die Systemzugriffssteuerungsliste (SACL) des -Objekts fest. Das von hService angegebene Handle muss ACCESS_SYSTEM_SECURITY Zugriff haben.

So erhalten Sie ACCESS_SYSTEM_SECURITY Zugriff

  1. Aktivieren Sie die SE_SECURITY_NAME-Berechtigung im aktuellen Zugriffstoken des Aufrufers.
  2. Öffnen Sie das Handle für ACCESS_SYSTEM_SECURITY Zugriff.
  3. Deaktivieren Sie die Berechtigung.

[in] lpSecurityDescriptor

Ein Zeiger auf eine SECURITY_DESCRIPTOR Struktur, die die neuen Sicherheitsinformationen enthält.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion nonzero zurück.

Wenn die Funktion fehlschlägt, gibt sie null zurück. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Die folgenden Fehlercodes können vom Dienststeuerungs-Manager festgelegt werden. Andere Fehlercodes können von den Registrierungsfunktionen festgelegt werden, die vom Dienststeuerungs-Manager aufgerufen werden.

Rückgabecode Beschreibung
ERROR_ACCESS_DENIED
Das angegebene Handle wurde nicht mit dem erforderlichen Zugriff geöffnet, oder der aufrufende Prozess ist nicht der Besitzer des Objekts.
ERROR_INVALID_HANDLE
Der angegebene Handle ist ungültig.
ERROR_INVALID_PARAMETER
Die angegebenen Sicherheitsinformationen oder Sicherheitsbeschreibungen sind ungültig.
ERROR_SERVICE_MARKED_FOR_DELETE
Der angegebene Dienst wurde zum Löschen markiert.

Hinweise

Die SetServiceObjectSecurity-Funktion legt die angegebenen Teile des Sicherheitsdeskriptors des Dienstobjekts basierend auf den im Puffer lpSecurityDescriptor angegebenen Informationen fest. Diese Funktion ersetzt eine oder alle sicherheitsrelevanten Informationen, die dem Dienstobjekt zugeordnet sind, entsprechend den flags, die im dwSecurityInformation-Parameter festgelegt sind und den Zugriffsrechten des aufrufenden Prozesses unterliegen.

Wenn ein Dienst erstellt wird, weist der Dienststeuerungs-Manager dem Dienstobjekt eine Standardsicherheitsbeschreibung zu. Um eine Kopie des Sicherheitsdeskriptors für ein Dienstobjekt abzurufen, rufen Sie die QueryServiceObjectSecurity-Funktion auf. Eine Beschreibung der Standardsicherheitsbeschreibung für ein Dienstobjekt finden Sie unter Dienstsicherheit und Zugriffsrechte.

Beachten Sie, dass das Gewähren bestimmter Zugriffe für nicht vertrauenswürdige Benutzer (z. B. SERVICE_CHANGE_CONFIG oder SERVICE_STOP) es ihnen ermöglichen kann, die Ausführung Ihres Diensts zu beeinträchtigen und ihnen möglicherweise die Ausführung von Anwendungen unter dem LocalSystem-Konto zu ermöglichen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winsvc.h (einschließen von Windows.h)
Bibliothek Advapi32.lib
DLL Advapi32.dll

Weitere Informationen

CreateService

Low-Level-Access Control

Access Control funktionen auf niedriger Ebene

Openservice

QueryServiceObjectSecurity

SECURITY_DESCRIPTOR