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 |
---|---|
|
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. |
|
Le handle spécifié n’est pas valide. |
|
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 . |
|
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 |