RtlAddProcessTrustLabelAce
NTSTATUS __stdcall RtlAddProcessTrustLabelAce(
_ACL *Acl,
UINT64 AceRevision,
UINT64 AceFlags,
VOID *Sid,
UINT8 AceType,
UINT64 AccessMask){
int v7;
unsigned int v8;
char v10;
unsigned int AclRevision;
int v12;
char *v13;
unsigned __int16 v14;
unsigned __int8 v15;
NTSTATUS result;
VOID *FirstFree;
FirstFree = 0i64;
v7 = AceFlags;
v8 = AceRevision;
if( !Acl )
return -1073741705;
RtlValidAcl(Acl, (VOID *)AceRevision, (VOID *)AceFlags);
if( !v10 )
return -1073741705;
if( AceType != 20 )
return -1073741811;
if( !RtlValidSid(Sid) )
return -1073741704;
if( !RtlIsValidProcessTrustLabelSid(Sid) )
return -1073741811;
AclRevision = Acl->AclRevision;
if( (unsigned __int8)AclRevision > 4u || v8 > 4 )
return -1073741735;
if( (v7 & 0xFFFFFFE0) != 0 )
return -1073741811;
v12 = AccessMask;
if( (AccessMask & 0xFF000000) != 0 )
return -1073741811;
if( !RtlFirstFreeAce(Acl, &FirstFree) )
return -1073741705;
v13 = (char *)FirstFree;
v14 = 4 * (*((unsigned __int8 *)Sid + 1) + 4);
if( !FirstFree || (char *)FirstFree + v14 > (char *)Acl + Acl->AclSize )
return -1073741671;
*((_WORD *)FirstFree + 1) = v14;
v13[1] = v7;
*v13 = 20;
*((_DWORD *)v13 + 1) = v12;
RtlCopySid(4 * (unsigned int)*((unsigned __int8 *)Sid + 1) + 8, v13 + 8, Sid);
++Acl->AceCount;
v15 = AclRevision;
if( AclRevision <= v8 )
v15 = v8;
result = 0;
Acl->AclRevision = v15;
return result;
}Referenced by:
RtlpNewSecurityObject
SeMakeSystemToken