RtlDeleteAce

NTSTATUS __stdcall RtlDeleteAce(PACL Acl, ULONG AceIndex){
  PACL v4; 
  __int64 v5; 
  __int64 AclSize; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned __int8 *v10; 
  unsigned __int8 v11; 
  __int64 v12; 
  PACE Ace; 
  Ace = 0i64;
  if( !RtlValidAcl(Acl) || AceIndex >= Acl->AceCount || !RtlFirstFreeAce(Acl, (VOID **)&Ace) )
    return -1073741811;
  v4 = Acl + 1;
  if( AceIndex )
  {
    v5 = AceIndex;
    do
    {
      v4 = (PACL)((char *)v4 + v4->AclSize);
      --v5;
    }
    while( v5 );
  }
  AclSize = v4->AclSize;
  v7 = v4->AclSize;
  v8 = (_DWORD)Ace - (_DWORD)v4;
  if( (unsigned int)AclSize < (int)Ace - (int)v4 )
  {
    v10 = (unsigned __int8 *)v4 + AclSize;
    do
    {
      v11 = *v10;
      v12 = v7 - (unsigned int)AclSize;
      ++v7;
      ++v10;
      *(&v4->AclRevision + v12) = v11;
    }
    while( v7 < v8 );
  }
  if( v8 - (unsigned int)AclSize < v8 )
    memset((INT64)v4 + v8 - (unsigned int)AclSize, 0i64);
  --Acl->AceCount;
  return 0;
}

Referenced by:

SepRemoveAceFromTokenDefaultDacl