QueryServiceObjectSecurity-Funktion (winsvc.h)

Die QueryServiceObjectSecurity-Funktion ruft eine Kopie des Sicherheitsdeskriptors ab, der einem Dienstobjekt zugeordnet ist. Sie können auch die GetNamedSecurityInfo-Funktion verwenden, um eine Sicherheitsbeschreibung abzurufen.

Syntax

BOOL QueryServiceObjectSecurity(
  [in]            SC_HANDLE            hService,
  [in]            SECURITY_INFORMATION dwSecurityInformation,
  [out, optional] PSECURITY_DESCRIPTOR lpSecurityDescriptor,
  [in]            DWORD                cbBufSize,
  [out]           LPDWORD              pcbBytesNeeded
);

Parameter

[in] hService

Ein Handle für den Dienststeuerungs-Manager oder den Dienst. Handles an den Dienststeuerungs-Manager werden von der OpenSCManager-Funktion zurückgegeben, und Handles an einen Dienst werden entweder von der OpenService - oder CreateService-Funktion zurückgegeben. Das Handle muss über das zugriffsrecht READ_CONTROL verfügen.

[in] dwSecurityInformation

Eine Reihe von Bitflags, die den Typ der abzurufenden Sicherheitsinformationen angeben. Dieser Parameter kann eine Kombination der SECURITY_INFORMATION Bitflags sein, mit der Ausnahme, dass diese Funktion den LABEL_SECURITY_INFORMATION-Wert nicht unterstützt.

[out, optional] lpSecurityDescriptor

Ein Zeiger auf einen Puffer, der eine Kopie der Sicherheitsbeschreibung des angegebenen Dienstobjekts empfängt. Der aufrufende Prozess muss über den entsprechenden Zugriff verfügen, um die angegebenen Aspekte der Sicherheitsbeschreibung des Objekts anzuzeigen. Die SECURITY_DESCRIPTOR-Struktur wird im selbstrelativen Format zurückgegeben.

[in] cbBufSize

Die Größe des Puffers, auf den der parameter lpSecurityDescriptor in Bytes verweist. Die größte zulässige Größe beträgt 8 KB.

[out] pcbBytesNeeded

Ein Zeiger auf eine Variable, die die Anzahl von Bytes empfängt, die zum Zurückgeben der angeforderten Sicherheitsbeschreibungsinformationen benötigt werden, wenn die Funktion fehlschlägt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. 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 READ_CONTROL Zugriff geöffnet, oder der aufrufende Prozess ist nicht der Besitzer des Objekts.
ERROR_INVALID_HANDLE
Der angegebene Handle ist ungültig.
ERROR_INSUFFICIENT_BUFFER
Die Sicherheitsdeskriptorinformationen sind zu groß für den puffer lpSecurityDescriptor . Die Anzahl der Bytes, die zum Abrufen aller Informationen erforderlich sind, wird im parameter pcbBytesNeeded zurückgegeben. Es wird nichts in den puffer lpSecurityDescriptor geschrieben.
ERROR_INVALID_PARAMETER
Die angegebenen Sicherheitsinformationen sind ungültig.

Hinweise

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. Um die Sicherheitsbeschreibung zu ändern, rufen Sie die Funktion SetServiceObjectSecurity auf. Eine Beschreibung der Standardsicherheitsbeschreibung für ein Dienstobjekt finden Sie unter Dienstsicherheit und Zugriffsrechte.

Um den Besitzer, die Gruppe oder die DACL aus der Sicherheitsbeschreibung des Dienstobjekts zu lesen, muss dem aufrufenden Prozess READ_CONTROL Zugriff gewährt worden sein, als das Handle geöffnet wurde. Um READ_CONTROL Zugriff zu erhalten, muss der Aufrufer der Besitzer des Objekts sein, oder die DACL des Objekts muss dem Zugriff gewähren.

Um die SACL aus der Sicherheitsbeschreibung zu lesen, muss dem aufrufenden Prozess ACCESS_SYSTEM_SECURITY Zugriff gewährt worden sein, als das Handle geöffnet wurde. Der richtige Weg, um diesen Zugriff zu erhalten, besteht darin, die SE_SECURITY_NAME-Berechtigung im aktuellen Token des Aufrufers zu aktivieren, das Handle für ACCESS_SYSTEM_SECURITY Zugriff zu öffnen und dann die Berechtigung zu deaktivieren.

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

GetNamedSecurityInfo

Low-Level-Access Control

Access Control funktionen auf niedriger Ebene

Openservice

SECURITY_DESCRIPTOR

SetServiceObjectSecurity