Funzione SeAssignSecurityEx (wdm.h)

La routine SeAssignSecurityEx compila un descrittore di sicurezza auto-relativo per un nuovo oggetto in base ai parametri facoltativi seguenti: un descrittore di sicurezza della directory padre dell'oggetto, un descrittore di sicurezza esplicito per l'oggetto e il tipo di oggetto.

Sintassi

NTSTATUS SeAssignSecurityEx(
  [in, optional] PSECURITY_DESCRIPTOR      ParentDescriptor,
  [in, optional] PSECURITY_DESCRIPTOR      ExplicitDescriptor,
  [out]          PSECURITY_DESCRIPTOR      *NewDescriptor,
  [in, optional] GUID                      *ObjectType,
  [in]           BOOLEAN                   IsDirectoryObject,
  [in]           ULONG                     AutoInheritFlags,
  [in]           PSECURITY_SUBJECT_CONTEXT SubjectContext,
  [in]           PGENERIC_MAPPING          GenericMapping,
  [in]           POOL_TYPE                 PoolType
);

Parametri

[in, optional] ParentDescriptor

Puntatore al SECURITY_DESCRIPTOR dell'oggetto padre che contiene il nuovo oggetto creato. ParentDescriptor può essere NULL o avere un elenco di controllo di accesso di sistema NULL (SACL) o un elenco di controllo di accesso discrezionale NULL (DACL).

[in, optional] ExplicitDescriptor

Puntatore a un SECURITY_DESCRIPTOR esplicito applicato al nuovo oggetto. ExplicitDescriptor può essere NULL o avere un VALORE SACL NULL o UN DACL NULL .

[out] NewDescriptor

Riceve un puntatore al SECURITY_DESCRIPTOR restituito. SeAssignSecurityEx alloca il buffer dal pool di memoria di paging.

[in, optional] ObjectType

Puntatore a un GUID per il tipo di oggetto creato. Se l'oggetto non dispone di un GUID, ObjectType deve essere impostato su NULL.

[in] IsDirectoryObject

Specifica se il nuovo oggetto è un oggetto directory. Se IsDirectoryObject è impostato su TRUE, il nuovo oggetto è un oggetto directory; in caso contrario, il nuovo oggetto non è un oggetto directory.

[in] AutoInheritFlags

Specifica il tipo di ereditarietà automatica applicata alle voci di controllo di accesso (ACE) negli elenchi di controllo di accesso (ACL) specificati da ParentDescriptor. AutoInheritFlags controlla anche il controllo dei privilegi, il controllo del proprietario e l'impostazione di un proprietario e un gruppo predefiniti per NewDescriptor. AutoInheritFlags deve essere impostato su un OR logico di uno o più dei valori seguenti:

Valore Significato
SEF_DACL_AUTO_INHERIT Gli ACL nell'elenco DACL di ParentDescriptor vengono ereditati da NewDescriptor, oltre agli ACL espliciti specificati da ExplicitDescriptor.
SEF_SACL_AUTO_INHERIT Gli ACL nel SACL di ParentDescriptor vengono ereditati da NewDescriptor, oltre agli ACL espliciti specificati da ExplicitDescriptor.
SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT ExplicitDescriptor è il descrittore predefinito per il tipo di oggetto specificato da ObjectType. ExplicitDescriptor non viene usato se gli ACL vengono ereditati da ParentDescriptor.
SEF_AVOID_PRIVILEGE_CHECK Il controllo dei privilegi non viene eseguito. Questo flag è utile con l'ereditarietà automatica perché evita il controllo dei privilegi per ogni elemento figlio che deve essere aggiornato.
SEF_AVOID_OWNER_CHECK Il controllo del proprietario non viene eseguito.
SEF_DEFAULT_OWNER_FROM_PARENT Se un proprietario viene specificato da ExplicitDescriptor, questo flag non viene usato e il proprietario di NewDescriptor viene impostato sul proprietario specificato da ExplictDescriptor.

Se un proprietario non viene specificato da ExplicitDescriptor, questo flag viene usato nel modo seguente: se il flag è impostato, il proprietario di NewDescriptor viene impostato sul proprietario di ParentDescriptor. In caso contrario, il proprietario di NewDescriptor è impostato sul proprietario specificato da SubjectContext.

SEF_DEFAULT_GROUP_FROM_PARENT Se un gruppo viene specificato da ExplicitDescriptor, questo flag non viene usato e il gruppo di NewDescriptor viene impostato sul gruppo specificato da ExplictDescriptor.

Se un gruppo non viene specificato da ExplicitDescriptor, questo flag viene usato nel modo seguente: se il flag è impostato, il gruppo di NewDescriptor viene impostato sul gruppo di ParentDescriptor. In caso contrario, il gruppo di NewDescriptor viene impostato sul gruppo specificato da SubjectContext.

 

L'assegnazione di ACL di sistema e discrezionale è descritta nella tabella seguente:

Descrittore esplicito non predefinito(1) Descrittore esplicito predefinito(2) NULL Descrittore esplicito
L'ACL viene ereditato dal descrittore padre(3). Assegnare elenchi di controllo di accesso ereditati ed espliciti(5)(6). Assegnare un elenco di controllo di accesso ereditato. Assegnare un elenco di controllo di accesso ereditato.
L'ACL non viene ereditato dal descrittore padre(4). Assegnare un elenco di controllo di accesso non predefinito. Assegnare l'elenco di controllo di accesso predefinito. Assegnare nessun elenco di controllo di accesso.
 

Note sulle assegnazioni

  1. Il flag SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT non è specificato.
  2. Viene specificato il flag SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT.
  3. Viene specificato il flag di ereditarietà automatica per un elenco di controllo di accesso (SEF_DACL_AUTO_INHERIT o SEF_SACL_AUTO_INHERIT).
  4. Il flag di ereditarietà automatica per un elenco di controllo di accesso non è specificato.
  5. Gli ACL con il bit INHERITED_ACE impostato nel membro AceFlagsnon vengono copiati nel descrittore di sicurezza assegnato.
  6. Gli ACL ereditati dal descrittore padre vengono aggiunti dopo gli ACL specificati dal descrittore esplicito.

[in] SubjectContext

Puntatore a un contesto di sicurezza dell'oggetto che crea l'oggetto. SubjectContext viene usato per recuperare le informazioni di sicurezza predefinite per il nuovo oggetto, inclusi il proprietario predefinito, il gruppo primario e il controllo di accesso discrezionale.

[in] GenericMapping

Puntatore a una matrice di valori della maschera di accesso che specificano il mapping tra i diritti generici per i diritti specifici dell'oggetto.

[in] PoolType

Questo parametro è inutilizzato. Il buffer per contenere il nuovo descrittore di sicurezza viene sempre allocato dal pool di paging.

Valore restituito

SeAssignSecurityEx restituisce uno dei valori seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
L'assegnazione ha avuto esito positivo.
STATUS_INVALID_OWNER
Il SID fornito come proprietario del nuovo descrittore di sicurezza non è un SID che il chiamante è autorizzato a assegnare come proprietario di un oggetto.
STATUS_PRIVILEGE_NOT_HELD
Il chiamante non dispone del privilegio (SeSecurityPrivilege) necessario per assegnare in modo esplicito l'oggetto SACL specificato.

Commenti

SeAssignSecurityEx estende l'operazione di base di SeAssignSecurity nei modi seguenti:

  • ObjectType specifica facoltativamente un tipo di oggetto. L'ereditarietà specifica dell'oggetto è controllata dai membri seguenti di un ace specifico dell'oggetto: Flags, InheritedObjectType e Header.AceFlags.
  • AutoInheritFlags specifica il tipo di ereditarietà automatica degli ACL utilizzati. AutoInheritFlags controlla anche il controllo dei privilegi, il controllo del proprietario e l'impostazione di un proprietario e un gruppo predefiniti per NewDescriptor.
Per altre informazioni sulla sicurezza e sul controllo di accesso, vedere la documentazione di questi argomenti nel Microsoft Windows SDK.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport)

Vedi anche

GENERIC_MAPPING

SECURITY_DESCRIPTOR

SeAssignSecurity

SeDeassignSecurity