RtlpHpVsContextMultiAlloc

NTSTATUS __stdcall RtlpHpVsContextMultiAlloc(INT64 *SpinLock, UINT64 a2, UINT64 a3, UINT64 a4, INT64 a5, INT64 a6){
  char *v6; 
  char *v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  size_t v11; 
  char *Internal; 
  NTSTATUS result; 
  INT64 v15[2]; 
  __int64 v16; 
  __int64 v17; 

  LODWORD(v17) = 0;
  v6 = 0i64;
  v7 = 0i64;
  v8 = 0;
  v16 = 0i64;
  v9 = a4;
  v10 = a3;
  v11 = a2;
  *(_OWORD *)v15 = 0i64;
  if( (_DWORD)a3 )
  {
    do
    {
      Internal = RtlpHpVsContextAllocateInternal((INT64)SpinLock, v11, v11, v9, (INT64)v15, (__int64)&v17);
      if( !Internal )
        break;
      *(_QWORD *)Internal = v6;
      v6 = Internal;
      if( !v7 )
        v7 = Internal;
      ++v8;
    }
    while( v8 < v10 );
    if( (_DWORD)v17 && (v9 & 1) == 0 )
      RtlpHpReleaseQueuedLockExclusive(*((unsigned int *)SpinLock + 2), (INT64)v15);
  }
  result = v8;
  *(_QWORD *)a5 = v6;
  *(_QWORD *)a6 = v7;
  return result;
}

Referenced by:

ExAllocateHeapPool