RtlDeleteAce

NTSTATUS __stdcall RtlDeleteAce(PACL Acl, UINT64 AceIndex){
  VOID *v2; 
  unsigned int v4; 
  char v5; 
  PACL v6; 
  __int64 v7; 
  __int64 AclSize; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned __int8 *v12; 
  unsigned __int8 v13; 
  __int64 v14; 
  VOID *FirstFree; 

  FirstFree = 0i64;
  v4 = AceIndex;
  RtlValidAcl(Acl, (VOID *)AceIndex, v2);
  if( !v5 || v4 >= Acl->AceCount || !RtlFirstFreeAce(Acl, &FirstFree) )
    return -1073741811;
  v6 = Acl + 1;
  if( v4 )
  {
    v7 = v4;
    do
    {
      v6 = (PACL)((char *)v6 + v6->AclSize);
      --v7;
    }
    while( v7 );
  }
  AclSize = v6->AclSize;
  v9 = v6->AclSize;
  v10 = (_DWORD)FirstFree - (_DWORD)v6;
  if( (unsigned int)AclSize < (int)FirstFree - (int)v6 )
  {
    v12 = (unsigned __int8 *)v6 + AclSize;
    do
    {
      v13 = *v12;
      v14 = v9 - (unsigned int)AclSize;
      ++v9;
      ++v12;
      *(&v6->AclRevision + v14) = v13;
    }
    while( v9 < v10 );
  }
  if( v10 - (unsigned int)AclSize < v10 )
    memset((char *)v6 + v10 - (unsigned int)AclSize, 0i64, AclSize);
  --Acl->AceCount;
  return 0;
}

Referenced by:

SepRemoveAceFromTokenDefaultDacl