Partager via


Fonction SeAssignSecurity (wdm.h)

La routine SeAssignSecurity génère un descripteur de sécurité auto-relatif pour un nouvel objet, compte tenu du descripteur de sécurité de son répertoire parent et de toute sécurité demandée à l’origine pour l’objet.

Syntaxe

NTSTATUS SeAssignSecurity(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Paramètres

[in, optional] ParentDescriptor

Pointeur vers une mémoire tampon contenant les SECURITY_DESCRIPTOR pour le répertoire parent, le cas échéant, contenant le nouvel objet en cours de création. ParentDescriptor peut avoir la valeur NULL ou avoir une liste de contrôle d’accès système NULL (SACL) ou une liste de contrôle d’accès discrétionnaire NULL (DACL).

[in, optional] ExplicitDescriptor

Pointeur vers une mémoire tampon contenant le SECURITY_DESCRIPTOR spécifié par l’utilisateur appliqué au nouvel objet. ExplicitDescriptor peut avoir la valeur NULL ou avoir une LISTE SACL NULL ou UNE LISTE DACL NULL .

[out] NewDescriptor

Reçoit un pointeur vers le SECURITY_DESCRIPTOR retourné. SeAssignSecurity alloue la mémoire tampon à partir du pool de mémoire paginée.

[in] IsDirectoryObject

Spécifie si le nouvel objet est un objet de répertoire. TRUE indique que l’objet contient d’autres objets.

[in] SubjectContext

Pointeur vers une mémoire tampon contenant le contexte de sécurité du sujet qui crée l’objet. Il permet de récupérer des informations de sécurité par défaut pour le nouvel objet, telles que le propriétaire par défaut, le groupe principal et le contrôle d’accès discrétionnaire.

[in] GenericMapping

Pointeur vers la structure GENERIC_MAPPING qui décrit le mappage de chaque droit générique aux droits non génériques implicites.

[in] PoolType

Ce paramètre est inutilisé. La mémoire tampon pour contenir le nouveau descripteur de sécurité est toujours allouée à partir d’un pool paginé.

Valeur retournée

SeAssignSecurity peut retourner l’un des éléments suivants :

Code de retour Description
STATUS_SUCCESS
L’affectation a réussi.
STATUS_INVALID_OWNER
Le SID fourni pour le propriétaire du descripteur de sécurité cible n’est pas celui que l’appelant est autorisé à attribuer en tant que propriétaire d’un objet.
STATUS_PRIVILEGE_NOT_HELD
L’appelant ne dispose pas du privilège (SeSecurityPrivilege) nécessaire pour attribuer explicitement la liste de contrôle d’accès système spécifiée.

Remarques

Le descripteur de sécurité final retourné à l’appelant peut contenir une combinaison d’informations, dont certaines fournies explicitement à partir du parent du nouvel objet.

SeAssignSecurity suppose que la vérification des privilèges n’a pas été effectuée. Cette routine effectue la vérification des privilèges.

L’attribution de listes de contrôle d’accès système et discrétionnaires est régie par la logique illustrée dans le tableau suivant :

ACL explicite (non par défaut) spécifiée Liste de contrôle d’accès par défaut explicite spécifiée Aucune liste de contrôle d’accès spécifiée
Liste de contrôle d’accès héritée du parent Affecter une liste de contrôle d’accès spécifiée Affecter une liste de contrôle d’accès héritée Affecter une liste de contrôle d’accès héritée
Aucune liste de contrôle d’accès héritée du parent Affecter une liste de contrôle d’accès spécifiée Attribuer une liste de contrôle d’accès par défaut Affecter aucune liste de contrôle d’accès
 

Une liste de contrôle d’accès spécifiée explicitement, qu’il s’agisse d’une liste de contrôle d’accès par défaut ou non, peut être vide ou null. L’appelant doit être un client en mode noyau ou avoir les privilèges appropriés pour attribuer explicitement une liste de contrôle d’accès système par défaut ou non par défaut.

L’affectation du propriétaire et du groupe du nouvel objet est régie par la logique suivante :

  • Si le descripteur de sécurité passé inclut un propriétaire, il est affecté en tant que propriétaire du nouvel objet. Sinon, le jeton de l’appelant est considéré pour déterminer le propriétaire. Dans le jeton, le propriétaire par défaut, le cas échéant, est affecté. Sinon, l’ID utilisateur de l’appelant est attribué.
  • Si le descripteur de sécurité passé inclut un groupe, il est affecté en tant que groupe du nouvel objet. Sinon, le jeton de l’appelant est considéré pour déterminer le groupe. Dans le jeton, le groupe par défaut, le cas échéant, est affecté. Sinon, l’ID de groupe principal de l’appelant est affecté.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows 2000 et versions ultérieures de Windows.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),PowerIrpDDis(wdm)

Voir aussi

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity