RtlAddMandatoryAce
NTSTATUS __stdcall RtlAddMandatoryAce(
PACL Acl,
UINT64 AceFlags,
VOID *Sid,
UINT64 AccessMask,
PSID LabelSid,
PSID AccessMaska){
int v7;
VOID *v9;
VOID *v10;
int v11;
unsigned __int8 AclRevision;
char v13;
char *v14;
unsigned __int16 v15;
NTSTATUS result;
VOID *FirstFree;
int v18;
unsigned __int16 v19;
FirstFree = 0i64;
v18 = 0;
v7 = (int)Sid;
v19 = 4096;
if( !Acl )
return -1073741705;
if( !RtlValidSid((_BYTE *)AccessMask) )
return -1073741704;
v11 = *(_DWORD *)(AccessMask + 2) - v18;
if( !v11 )
v11 = *(unsigned __int16 *)(AccessMask + 6) - v19;
if( v11 )
return -1073741811;
AclRevision = Acl->AclRevision;
if( Acl->AclRevision > 4u )
return -1073741735;
if( AclRevision <= 2u )
AclRevision = 2;
if( (v7 & 0xFFFFFFE0) != 0 || ((unsigned int)AccessMaska & 0xFFFFFFF8) != 0 )
return -1073741811;
RtlValidAcl(Acl, v9, v10);
if( !v13 || !RtlFirstFreeAce(Acl, &FirstFree) )
return -1073741705;
v14 = (char *)FirstFree;
v15 = 4 * (*(unsigned __int8 *)(AccessMask + 1) + 4);
if( !FirstFree || (char *)FirstFree + v15 > (char *)Acl + Acl->AclSize )
return -1073741671;
*((_WORD *)FirstFree + 1) = v15;
v14[1] = v7;
*v14 = 17;
*((_DWORD *)v14 + 1) = (_DWORD)AccessMaska;
memmove(v14 + 8, (const VOID *)AccessMask, 4 * *(unsigned __int8 *)(AccessMask + 1) + 8);
++Acl->AceCount;
result = 0;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
CmpGenerateAppHiveSecurityDescriptor
ExpKeyedEventInitialization
IopCreateSecurityDescriptorPerType
ObpVerifyAccessToBoundaryEntry
RtlpNewSecurityObject
SepInitSystemDacls