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 |
---|---|
|
L'assegnazione ha avuto esito positivo. |
|
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. |
|
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) |