SddlAddScopedPolicyIDAce
NTSTATUS __stdcall SddlAddScopedPolicyIDAce(PACL Acl, UINT64 AceFlags, UINT64 AccessMask, VOID *Sid, PSID Sida){
int v5;
int v6;
VOID *v8;
VOID *v9;
NTSTATUS result;
int v11;
unsigned __int8 AclRevision;
char v13;
__int16 v14;
char *v15;
unsigned __int16 v16;
unsigned int v17;
VOID *FirstFree;
int v19;
unsigned __int16 v20;
FirstFree = 0i64;
v5 = (int)Sid;
v19 = 0;
v6 = AccessMask;
v20 = 4352;
if( !Acl )
return -1073741705;
if( !RtlValidSid(Sida) )
return -1073741704;
v11 = *(_DWORD *)((char *)Sida + 2) - v19;
if( !v11 )
v11 = *((unsigned __int16 *)Sida + 3) - v20;
if( v11 )
return -1073741811;
if( Acl->AclRevision > 4u )
return -1073741735;
AclRevision = 2;
if( Acl->AclRevision > 2u )
AclRevision = Acl->AclRevision;
if( (v6 & 0xFFFFFFE0) != 0 || v5 )
return -1073741811;
RtlValidAcl(Acl, v8, v9);
if( !v13 || !RtlFirstFreeAce(Acl, &FirstFree) )
return -1073741705;
v14 = RtlLengthSid((INT64)Sida);
v15 = (char *)FirstFree;
v16 = v14 + 8;
if( !FirstFree || (char *)FirstFree + v16 > (char *)Acl + Acl->AclSize )
return -1073741671;
*((_DWORD *)FirstFree + 1) = 0;
v15[1] = v6;
*v15 = 19;
*((_WORD *)v15 + 1) = v16;
v17 = RtlLengthSid((INT64)Sida);
RtlCopySid(v17, v15 + 8, Sida);
++Acl->AceCount;
result = 0;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
LocalGetAclForString