Funzione QueryServiceObjectSecurity (winsvc.h)

La funzione QueryServiceObjectSecurity recupera una copia del descrittore di sicurezza associato a un oggetto servizio. È anche possibile usare la funzione GetNamedSecurityInfo per recuperare un descrittore di sicurezza.

Sintassi

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

Parametri

[in] hService

Handle al gestore del controllo del servizio o al servizio. Gli handle alla gestione controllo del servizio vengono restituiti dalla funzione OpenSCManager e gli handle a un servizio vengono restituiti dalla funzione OpenService o CreateService. L'handle deve avere il diritto di accesso READ_CONTROL.

[in] dwSecurityInformation

Set di flag di bit che indicano il tipo di informazioni di sicurezza da recuperare. Questo parametro può essere una combinazione dei flag di bit SECURITY_INFORMATION , con l'eccezione che questa funzione non supporta il valore LABEL_SECURITY_INFORMATION .

[out, optional] lpSecurityDescriptor

Puntatore a un buffer che riceve una copia del descrittore di sicurezza dell'oggetto servizio specificato. Il processo chiamante deve avere l'accesso appropriato per visualizzare gli aspetti specificati del descrittore di sicurezza dell'oggetto. La struttura SECURITY_DESCRIPTOR viene restituita in formato auto-relativo .

[in] cbBufSize

Dimensioni del buffer a cui punta il parametro lpSecurityDescriptor , in byte. La dimensione più grande consentita è di 8 kilobyte.

[out] pcbBytesNeeded

Puntatore a una variabile che riceve il numero di byte necessari per restituire le informazioni del descrittore di sicurezza richieste, se la funzione ha esito negativo.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

I codici di errore seguenti possono essere impostati dal gestore di controllo del servizio. Altri codici di errore possono essere impostati dalle funzioni del Registro di sistema chiamate dalla gestione controllo del servizio.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
L'handle specificato non è stato aperto con l'accesso READ_CONTROL oppure il processo chiamante non è il proprietario dell'oggetto.
ERROR_INVALID_HANDLE
L'handle specificato non è valido.
ERROR_INSUFFICIENT_BUFFER
Le informazioni sul descrittore di sicurezza sono troppo grandi per il buffer lpSecurityDescriptor . Il numero di byte necessari per ottenere tutte le informazioni viene restituito nel parametro pcbBytesNeeded. Niente viene scritto nel buffer lpSecurityDescriptor .
ERROR_INVALID_PARAMETER
Le informazioni di sicurezza specificate non sono valide.

Commenti

Quando viene creato un servizio, il responsabile del controllo del servizio assegna un descrittore di sicurezza predefinito all'oggetto servizio. Per recuperare una copia del descrittore di sicurezza per un oggetto servizio, chiamare la funzione QueryServiceObjectSecurity . Per modificare il descrittore di sicurezza, chiamare la funzione SetServiceObjectSecurity . Per una descrizione del descrittore di sicurezza predefinito per un oggetto servizio, vedere Diritti di sicurezza e accesso del servizio.

Per leggere il proprietario, il gruppo o il daCL dal descrittore di sicurezza dell'oggetto servizio, il processo chiamante deve essere stato concesso READ_CONTROL accesso al momento dell'apertura dell'handle. Per ottenere READ_CONTROL accesso, il chiamante deve essere il proprietario dell'oggetto o l'elenco dati dell'oggetto deve concedere l'accesso.

Per leggere SACL dal descrittore di sicurezza, il processo chiamante deve essere stato concesso ACCESS_SYSTEM_SECURITY accesso al momento dell'apertura dell'handle. Il modo corretto per ottenere questo accesso consiste nell'abilitare il privilegio SE_SECURITY_NAME nel token corrente del chiamante, aprire l'handle per l'accesso ACCESS_SYSTEM_SECURITY e quindi disabilitare il privilegio.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winsvc.h (include Windows.h)
Libreria Advapi32.lib
DLL Advapi32.dll

Vedi anche

CreateService

GetNamedSecurityInfo

Controllo di accesso di basso livello

Funzioni di Controllo di accesso di basso livello

Openservice

SECURITY_DESCRIPTOR

SetServiceObjectSecurity