AccessCheckByType, fonction (securitybaseapi.h)

La fonction AccessCheckByType détermine si un descripteur de sécurité accorde un ensemble spécifié de droits d’accès au client identifié par un jeton d’accès. La fonction peut case activée l’accès du client à une hiérarchie d’objets, comme un objet, ses jeux de propriétés et ses propriétés. La fonction accorde ou refuse l’accès à la hiérarchie dans son ensemble. En règle générale, les applications serveur utilisent cette fonction pour case activée l’accès à un objet privé.

Syntaxe

BOOL AccessCheckByType(
  [in]                PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in, optional]      PSID                 PrincipalSelfSid,
  [in]                HANDLE               ClientToken,
  [in]                DWORD                DesiredAccess,
  [in, out, optional] POBJECT_TYPE_LIST    ObjectTypeList,
  [in]                DWORD                ObjectTypeListLength,
  [in]                PGENERIC_MAPPING     GenericMapping,
  [out, optional]     PPRIVILEGE_SET       PrivilegeSet,
  [in, out]           LPDWORD              PrivilegeSetLength,
  [out]               LPDWORD              GrantedAccess,
  [out]               LPBOOL               AccessStatus
);

Paramètres

[in] pSecurityDescriptor

Pointeur vers une structure SECURITY_DESCRIPTOR sur laquelle l’accès est vérifié.

[in, optional] PrincipalSelfSid

Pointeur vers un identificateur de sécurité (SID). Si le descripteur de sécurité est associé à un objet qui représente un principal (par exemple, un objet utilisateur), le paramètre PrincipalSelfSid doit être le SID de l’objet. Lors de l’évaluation de l’accès, ce SID remplace logiquement le SID dans toute entrée de contrôle d’accès contenant le SID bien connu PRINCIPAL_SELF (S-1-5-10). Pour plus d’informations sur les SID connus, consultez Sids connus.

Définissez ce paramètre sur NULL si l’objet protégé ne représente pas de principal.

[in] ClientToken

Handle d’un jeton d’emprunt d’identité qui représente le client qui tente d’obtenir l’accès. Le handle doit avoir TOKEN_QUERY accès au jeton ; sinon, la fonction échoue avec ERROR_ACCESS_DENIED.

[in] DesiredAccess

Masque d’accès qui spécifie les droits d’accès à case activée. Ce masque doit avoir été mappé par la fonction MapGenericMask pour ne contenir aucun droit d’accès générique.

Si ce paramètre est MAXIMUM_ALLOWED, la fonction définit le masque d’accès GrantedAccess pour indiquer les droits d’accès maximum accordés par le descripteur de sécurité au client.

[in, out, optional] ObjectTypeList

Pointeur vers un tableau de structures OBJECT_TYPE_LIST qui identifient la hiérarchie des types d’objets auxquels case activée accès. Chaque élément du tableau spécifie un GUID qui identifie le type d’objet et une valeur indiquant le niveau du type d’objet dans la hiérarchie des types d’objets. Le tableau ne doit pas avoir deux éléments avec le même GUID.

Le tableau doit avoir au moins un élément. Le premier élément du tableau doit être au niveau zéro et identifier l’objet lui-même. Le tableau ne peut avoir qu’un seul élément de niveau zéro. Le deuxième élément est un sous-objet, tel qu’un jeu de propriétés, au niveau 1. Après chaque entrée de niveau 1 se trouvent des entrées subordonnées pour les sous-objets de niveau 2 à 4. Ainsi, les niveaux des éléments du tableau peuvent être {0, 1, 2, 2, 1, 2, 3}. Si la liste des types d’objets est dans le désordre, AccessCheckByType échoue et GetLastError retourne ERROR_INVALID_PARAMETER.

Si ObjectTypeList a la valeur NULL, AccessCheckByType est identique à la fonction AccessCheck .

[in] ObjectTypeListLength

Spécifie le nombre d’éléments dans le tableau ObjectTypeList .

[in] GenericMapping

Pointeur vers la structure GENERIC_MAPPING associée à l’objet pour lequel l’accès est vérifié. Le membre GenericAll de la structure GENERIC_MAPPING doit contenir tous les droits d’accès qui peuvent être accordés par le gestionnaire de ressources, y compris STANDARD_RIGHTS_ALL et tous les droits définis dans les membres GenericRead, GenericWrite et GenericExecute .

[out, optional] PrivilegeSet

Pointeur vers une structure PRIVILEGE_SET qui reçoit les privilèges utilisés pour effectuer la validation d’accès. Si aucun privilège n’a été utilisé, la fonction définit le membre PrivilegeCount sur zéro.

[in, out] PrivilegeSetLength

Spécifie la taille, en octets, de la mémoire tampon vers laquelle pointe le paramètre PrivilegeSet .

[out] GrantedAccess

Pointeur vers un masque d’accès qui reçoit les droits d’accès accordés. Si AccessStatus a la valeur FALSE, la fonction définit le masque d’accès sur zéro. Si la fonction échoue, elle ne définit pas le masque d’accès.

[out] AccessStatus

Pointeur vers une variable qui reçoit les résultats du case activée d’accès. Si le descripteur de sécurité autorise les droits d’accès demandés au client identifié par le jeton d’accès, AccessStatus est défini sur TRUE. Sinon, AccessStatus est défini sur FALSE et vous pouvez appeler GetLastError pour obtenir des informations d’erreur étendues.

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.

Remarques

Pour plus d’informations, consultez la vue d’ensemble du fonctionnement d’AccessCheck .

La fonction AccessCheckByType compare le descripteur de sécurité spécifié avec le jeton d’accès spécifié et indique, dans le paramètre AccessStatus , si l’accès est accordé ou refusé.

Le tableau ObjectTypeList ne représente pas nécessairement la totalité de l’objet défini. Il représente plutôt le sous-ensemble de l’objet auquel case activée accès. Pour instance, pour case activée l’accès à deux propriétés dans un jeu de propriétés, spécifiez une liste de types d’objets avec quatre éléments : l’objet lui-même au niveau zéro, la propriété définie au niveau 1 et les deux propriétés au niveau 2.

La fonction AccessCheckByType évalue les ACL qui s’appliquent à l’objet lui-même et les ACL spécifiques à l’objet pour les types d’objets répertoriés dans le tableau ObjectTypeList . La fonction ignore les ACL spécifiques à l’objet pour les types d’objets non répertoriés dans le tableau ObjectTypeList . Ainsi, les résultats retournés dans le paramètre AccessStatus indiquent l’accès autorisé au sous-ensemble de l’objet défini par le paramètre ObjectTypeList , et non à l’objet entier.

Pour plus d’informations sur la façon dont une hiérarchie d’ACL contrôle l’accès à un objet et à ses sous-objets, consultez ACL pour contrôler l’accès aux propriétés d’un objet.

Si la liste DACL du descripteur de sécurité est NULL, le paramètre AccessStatus retourne TRUE, indiquant que le client dispose de l’accès demandé.

Si le descripteur de sécurité ne contient pas de SID de propriétaire et de groupe, AccessCheckByType échoue avec ERROR_INVALID_SECURITY_DESCR.

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 securitybaseapi.h (inclure Windows.h)
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

AccessCheck

AccessCheckAndAuditAlarm

AccessCheckByTypeAndAuditAlarm

AccessCheckByTypeResultList

AccessCheckByTypeResultListAndAuditAlarm

Access Control client/serveur

Fonctions de Access Control client/serveur

GENERIC_MAPPING

Fonctionnement d’AccessCheck

MakeAbsoluteSD

MapGenericMask

OBJECT_TYPE_LIST

PRIVILEGE_SET

SECURITY_DESCRIPTOR