Funzione SeAssignSecurity (wdm.h)

La routine SeAssignSecurity crea un descrittore di sicurezza auto-relativo per un nuovo oggetto, dato il descrittore di sicurezza della directory padre e qualsiasi sicurezza richiesta originariamente per l'oggetto.

Sintassi

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
);

Parametri

[in, optional] ParentDescriptor

Puntatore a un buffer contenente il SECURITY_DESCRIPTOR per la directory padre, se presente, contenente 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 buffer contenente il SECURITY_DESCRIPTOR specificato dall'utente 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. SeAssignSecurity alloca il buffer dal pool di memoria di paging.

[in] IsDirectoryObject

Specifica se il nuovo oggetto è un oggetto directory. TRUE indica che l'oggetto contiene altri oggetti.

[in] SubjectContext

Puntatore a un buffer contenente il contesto di sicurezza dell'oggetto che crea l'oggetto. Viene usato per recuperare le informazioni di sicurezza predefinite per il nuovo oggetto, ad esempio il proprietario predefinito, il gruppo primario e il controllo di accesso discrezionale.

[in] GenericMapping

Puntatore alla struttura GENERIC_MAPPING che descrive il mapping da ogni diritto generico ai diritti non generici impliciti.

[in] PoolType

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

Valore restituito

SeAssignSecurity può restituire una delle opzioni seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
L'assegnazione ha avuto esito positivo.
STATUS_INVALID_OWNER
Il SID fornito per il proprietario del descrittore di sicurezza di destinazione non è uno 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'ACL di sistema specificato.

Commenti

Il descrittore di sicurezza finale restituito al chiamante può contenere una combinazione di informazioni, alcune fornite in modo esplicito dall'elemento padre del nuovo oggetto.

SeAssignSecurity presuppone che il controllo dei privilegi non sia stato eseguito. Questa routine esegue il controllo dei privilegi.

L'assegnazione di ACL di sistema e discrezionale è disciplinata dalla logica illustrata nella tabella seguente:

Elenco di controllo di accesso esplicito (non predefinito) specificato Elenco di controllo di accesso predefinito esplicito specificato Nessun ACL specificato
ACL ereditabile dall'elemento padre Assegnare l'elenco di controllo di accesso specificato Assegnare un elenco di controllo di accesso ereditato Assegnare un elenco di controllo di accesso ereditato
Nessun ACL ereditabile dall'elemento padre Assegnare l'elenco di controllo di accesso specificato Assegnare l'elenco di controllo di accesso predefinito Assegnare nessun elenco di controllo di accesso
 

Un elenco di controllo di accesso specificato in modo esplicito, indipendentemente dal fatto che un elenco di controllo di accesso predefinito o meno, possa essere vuoto o Null. Il chiamante deve essere un client in modalità kernel o avere privilegi appropriati per assegnare in modo esplicito un ACL di sistema predefinito o non predefinito.

L'assegnazione del proprietario e del gruppo del nuovo oggetto è disciplinata dalla logica seguente:

  • Se il descrittore di sicurezza passato include un proprietario, viene assegnato come proprietario del nuovo oggetto. In caso contrario, il token del chiamante viene considerato per determinare il proprietario. All'interno del token, il proprietario predefinito, se presente, viene assegnato. In caso contrario, viene assegnato l'ID utente del chiamante.
  • Se il descrittore di sicurezza passato include un gruppo, viene assegnato come gruppo del nuovo oggetto. In caso contrario, il token del chiamante viene considerato per determinare il gruppo. All'interno del token viene assegnato il gruppo predefinito, se presente, . In caso contrario, viene assegnato l'ID gruppo primario del chiamante.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows 2000 e versioni successive di Windows.
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), PowerIrpDDis(wdm)

Vedi anche

GENERIC_MAPPING

IoGetFileObjectGenericMapping

SECURITY_DESCRIPTOR

SeDeassignSecurity