SeAppendPrivileges

NTSTATUS __stdcall SeAppendPrivileges(PACCESS_STATE AccessState, PRIVILEGE_SET *Privileges){
  PVOID *v2; 
  unsigned int PrivilegeCount; 
  PRIVILEGE_SET *v6; 
  int v7; 
  size_t v9; 
  int v10; 
  int v11; 
  PRIVILEGE_SET *PoolWithTag; 
  _DWORD *v13; 
  PRIVILEGE_SET *v14; 

  v2 = (PVOID *)*((_QWORD *)AccessState + 9);
  PrivilegeCount = Privileges->PrivilegeCount;
  v6 = (PRIVILEGE_SET *)*v2;
  v7 = *(_DWORD *)*v2;
  if( v7 + Privileges->PrivilegeCount <= 3 )
  {
    SepConcatenatePrivileges(v6, Privileges, Privileges);
    return 0;
  }
  v9 = 8;
  if( PrivilegeCount )
    v10 = 12 * PrivilegeCount + 8;
  else
    v10 = 8;
  if( v6 )
  {
    if( v7 )
      v11 = 12 * v7 + 8;
    else
      v11 = 8;
  }
  else
  {
    v11 = 0;
  }
  PoolWithTag = (PRIVILEGE_SET *)ExAllocatePoolWithTag(1ui64, (unsigned int)(v11 + v10), 1917871443i64);
  if( PoolWithTag )
  {
    v13 = *v2;
    if( *v2 )
    {
      if( *v13 )
        v9 = 12 * *v13 + 8;
    }
    else
    {
      v9 = 0;
    }
    memmove(PoolWithTag, v13, v9);
    SepConcatenatePrivileges(PoolWithTag, v14, Privileges);
    if( *((_BYTE *)AccessState + 11) )
      ExFreePoolWithTag(*v2, 0);
    *v2 = PoolWithTag;
    *((_BYTE *)AccessState + 11) = 1;
    return 0;
  }
  return -1073741670;
}

Referenced by:

CMFCheckAccess
CmpCheckKeyBodyAccess
CmpCheckOpenAccessOnKeyBody
IopCheckBackupRestorePrivilege
IopCreateSecurityCheck
IopParseDevice
ObCheckCreateObjectAccess
ObCheckObjectAccess
ObpAdjustCreatorAccessState
ObpCheckTraverseAccess
ObpCreateHandle