SepExpandDynamic

NTSTATUS __stdcall SepExpandDynamic(_TOKEN *Token, UINT64 NewLength){
  int v3; 
  size_t v4; 
  _ACL *DefaultDacl; 
  VOID **PoolWithTag; 
  unsigned int *v7; 
  unsigned int *DynamicPart; 
  _ACL *v9; 

  v3 = NewLength;
  v4 = Token->DynamicAvailable + 8 + 4 * *((unsigned __int8 *)Token->PrimaryGroup + 1);
  DefaultDacl = Token->DefaultDacl;
  if( DefaultDacl )
    v4 += DefaultDacl->AclSize;
  if( (unsigned int)NewLength <= v4 )
    return 0;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)NewLength, 1683252563i64);
  v7 = (unsigned int *)PoolWithTag;
  if( PoolWithTag )
  {
    DynamicPart = Token->DynamicPart;
    memmove(PoolWithTag, DynamicPart, v4);
    v9 = Token->DefaultDacl;
    Token->DynamicAvailable += v3 - v4;
    Token->DynamicPart = v7;
    if( v9 )
      Token->DefaultDacl = (_ACL *)((char *)v7 + (char *)v9 - (char *)DynamicPart);
    Token->PrimaryGroup = (char *)Token->PrimaryGroup + (char *)v7 - (char *)DynamicPart;
    ExFreePoolWithTag(DynamicPart, 0);
    return 0;
  }
  return -1073741670;
}

Referenced by:

NtSetInformationToken
SepAppendAceToTokenDefaultDacl