SepExpandSingletonArrays

NTSTATUS __stdcall SepExpandSingletonArrays(){
  VOID **PoolWithTag; 
  VOID **v1; 
  unsigned __int64 v2; 
  VOID **v3; 
  VOID **v4; 
  PEX_SPIN_LOCK v5; 
  INT64 *v6; 
  void *v7; 

  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x600ui64, 1950639443i64);
  v1 = PoolWithTag;
  if( PoolWithTag )
  {
    memset(PoolWithTag, 0i64, 0x600u);
    v2 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)SepSingletonGlobal);
    v3 = ExAllocatePoolWithTag(0x200ui64, 8i64 * (unsigned int)(*((_DWORD *)SepSingletonGlobal + 1) + 1), 1950639443i64);
    v4 = v3;
    if( v3 )
    {
      v5 = SepSingletonGlobal;
      memmove(v3, *((const VOID **)SepSingletonGlobal + 1), 8 * *((_DWORD *)SepSingletonGlobal + 1));
      v4[*((unsigned int *)v5 + 1)] = v1;
      v6 = (INT64 *)SepSingletonGlobal;
      v7 = (void *)*((_QWORD *)SepSingletonGlobal + 1);
      ++*((_DWORD *)SepSingletonGlobal + 1);
      v6[1] = (INT64)v4;
      ExReleaseSpinLockExclusiveFromDpcLevel(v6);
      __writecr8(v2);
      ExFreePoolWithTag(v7, 0x74446553u);
      return 0;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)SepSingletonGlobal);
    __writecr8(v2);
    ExFreePoolWithTag(v1, 0x74446553u);
  }
  return -1073741801;
}

Referenced by:

SepAddLuidToIndexEntry