QueryServiceObjectSecurity, fonction (winsvc.h)

La fonction QueryServiceObjectSecurity récupère une copie du descripteur de sécurité associé à un objet de service. Vous pouvez également utiliser la fonction GetNamedSecurityInfo pour récupérer un descripteur de sécurité.

Syntaxe

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

Paramètres

[in] hService

Handle pour le gestionnaire de contrôle de service ou le service. Les handles au gestionnaire de contrôle de service sont retournés par la fonction OpenSCManager , et les handles à un service sont retournés par la fonction OpenService ou CreateService . Le handle doit avoir le droit d’accès READ_CONTROL.

[in] dwSecurityInformation

Ensemble d’indicateurs de bits qui indiquent le type d’informations de sécurité à récupérer. Ce paramètre peut être une combinaison des indicateurs de bits SECURITY_INFORMATION , à l’exception du fait que cette fonction ne prend pas en charge la valeur LABEL_SECURITY_INFORMATION .

[out, optional] lpSecurityDescriptor

Pointeur vers une mémoire tampon qui reçoit une copie du descripteur de sécurité de l’objet de service spécifié. Le processus appelant doit disposer de l’accès approprié pour afficher les aspects spécifiés du descripteur de sécurité de l’objet. La structure SECURITY_DESCRIPTOR est retournée au format auto-relatif .

[in] cbBufSize

Taille de la mémoire tampon vers laquelle pointe le paramètre lpSecurityDescriptor , en octets. La plus grande taille autorisée est de 8 kilo-octets.

[out] pcbBytesNeeded

Pointeur vers une variable qui reçoit le nombre d’octets nécessaires pour retourner les informations de descripteur de sécurité demandées, en cas d’échec de la fonction.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Les codes d’erreur suivants peuvent être définis par le gestionnaire de contrôle de service. D’autres codes d’erreur peuvent être définis par les fonctions de Registre appelées par le gestionnaire de contrôle de service.

Code de retour Description
ERROR_ACCESS_DENIED
Le handle spécifié n’a pas été ouvert avec READ_CONTROL accès, ou le processus appelant n’est pas le propriétaire de l’objet.
ERROR_INVALID_HANDLE
Le handle spécifié n’est pas valide.
ERROR_INSUFFICIENT_BUFFER
Les informations de descripteur de sécurité sont trop volumineuses pour la mémoire tampon lpSecurityDescriptor . Le nombre d’octets requis pour obtenir toutes les informations est retourné dans le paramètre pcbBytesNeeded . Rien n’est écrit dans la mémoire tampon lpSecurityDescriptor .
ERROR_INVALID_PARAMETER
Les informations de sécurité spécifiées ne sont pas valides.

Remarques

Lorsqu’un service est créé, le gestionnaire de contrôle de service affecte un descripteur de sécurité par défaut à l’objet de service. Pour récupérer une copie du descripteur de sécurité d’un objet de service, appelez la fonction QueryServiceObjectSecurity . Pour modifier le descripteur de sécurité, appelez la fonction SetServiceObjectSecurity . Pour obtenir une description du descripteur de sécurité par défaut pour un objet de service, consultez Sécurité du service et droits d’accès.

Pour lire le propriétaire, le groupe ou la liste dacl à partir du descripteur de sécurité de l’objet de service, le processus appelant doit avoir reçu un accès READ_CONTROL lors de l’ouverture du handle. Pour obtenir READ_CONTROL accès, l’appelant doit être le propriétaire de l’objet ou le DACL de l’objet doit accorder l’accès.

Pour lire la liste SACL à partir du descripteur de sécurité, le processus appelant doit avoir reçu un accès ACCESS_SYSTEM_SECURITY lors de l’ouverture du handle. La bonne façon d’obtenir cet accès consiste à activer le privilège SE_SECURITY_NAME dans le jeton actuel de l’appelant, à ouvrir le handle pour l’accès ACCESS_SYSTEM_SECURITY, puis à désactiver le privilège.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winsvc.h (inclure Windows.h)
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

CreateService

GetNamedSecurityInfo

Access Control de bas niveau

Fonctions Access Control de bas niveau

OpenService

SECURITY_DESCRIPTOR

SetServiceObjectSecurity