CmpSortedValueEnumStackEntryStart

__int64 __fastcall CmpSortedValueEnumStackEntryStart(__int64 a1, __int64 a2, __int64 a3, _LOOKASIDE_LIST_EX *a4){
  UINT64 v6; 
  unsigned int v7; 
  _PRIVILEGE_SET *v8; 
  _QWORD *v9; 
  __int64 v10; 
  _QWORD *v11; 
  signed __int64 v12; 
  UINT64 v13; 
  _QWORD *v14; 
  unsigned int *v15; 
  __int64 v16; 
  UINT64 v17; 
  INT64 *v19; 
  UINT64 v20; 
  UINT64 v21; 
  __int64 v23; 
  _PRIVILEGE_SET *TransientPoolWithTag; 

  v23 = 0xFFFFFFFFi64;
  *(_QWORD *)a1 = a2;
  v6 = *(unsigned int *)(a3 + 36);
  WORD2(v23) = 0;
  if( (_DWORD)v6 )
  {
    TransientPoolWithTag = (_PRIVILEGE_SET *)CmpAllocateTransientPoolWithTag(1ui64, 8 * v6);
    v8 = TransientPoolWithTag;
    if( TransientPoolWithTag )
    {
      v9 = CmpAllocateTransientPoolWithTag(1ui64, 8 * v6);
      if( v9 )
      {
        v10 = (*(__int64(__fastcall **)(__int64, _QWORD, __int64 *))(a2 + 8))(a2, *(unsigned int *)(a3 + 40), &v23);
        v11 = v9;
        v12 = (char *)v8 - (char *)v9;
        v13 = v6;
        v14 = v9;
        v15 = (unsigned int *)v10;
        do
        {
          *v11 = 0i64;
          *(_DWORD *)v11 = -1;
          v16 = (*(__int64(__fastcall **)(__int64, _QWORD, _QWORD *))(a2 + 8))(a2, *v15, v14++);
          *(_QWORD *)((char *)v11 + v12) = v16;
          ++v15;
          ++v11;
          --v13;
        }
        while( v13 );
        v17 = (UINT64)TransientPoolWithTag;
        (*(void(__fastcall **)(__int64, __int64 *))(a2 + 16))(a2, &v23);
        qsort(v17, v6, 8ui64, (INT64)CmpSortedValueEnumStackValueCompareFunction, v19, v20, v21);
        *(_QWORD *)(a1 + 8) = v17;
        v8 = 0i64;
        v7 = 0;
        *(_QWORD *)(a1 + 16) = v9;
        *(_DWORD *)(a1 + 24) = v6;
      }
      else
      {
        v7 = -1073741670;
      }
      if( v8 )
        CmSiFreeMemory(v8);
    }
    else
    {
      return(unsigned int)-1073741670;
    }
  }
  else
  {
    return 0;
  }
  return v7;
}

Referenced by:

CmpSortedValueEnumStackStartFromKeyNodeStack