SddlAddProcessTrustLabelAce
NTSTATUS __stdcall SddlAddProcessTrustLabelAce(ACL *Acl, UINT64 AceFlags, UINT64 AccessMask, PVOID Sid){
int v5;
NTSTATUS result;
int v8;
unsigned __int8 AclRevision;
__int16 v10;
PACE v11;
WORD v12;
ULONG v13;
PACE Ace;
int v15;
unsigned __int16 v16;
int v17;
Ace = 0i64;
v15 = 0;
v5 = AccessMask;
v16 = 4864;
if( !Acl || !RtlValidAcl(Acl) )
return -1073741705;
if( !RtlValidSid(Sid) )
return -1073741704;
v8 = *(_DWORD *)((char *)Sid + 2) - v15;
if( !v8 )
v8 = *((unsigned __int16 *)Sid + 3) - v16;
if( v8 )
return -1073741811;
if( Acl->AclRevision > 4u )
return -1073741735;
AclRevision = 2;
if( Acl->AclRevision > 2u )
AclRevision = Acl->AclRevision;
if( (v5 & 0xFFFFFFE0) != 0 || (v17 & 0xFF000000) != 0 )
return -1073741811;
if( !RtlFirstFreeAce(Acl, (VOID **)&Ace) )
return -1073741705;
v10 = RtlLengthSid(Sid);
v11 = Ace;
v12 = v10 + 8;
if( !Ace || (char *)Ace + v12 > (char *)Acl + Acl->AclSize )
return -1073741671;
Ace->Header.AceFlags = v5;
v11->Header.AceType = 20;
v11->Header.AceSize = v12;
v11->AccessMask = v17;
v13 = RtlLengthSid(Sid);
RtlCopySid(v13, &v11[1], Sid);
++Acl->AceCount;
result = 0;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
LocalGetAclForString