CmpSubtreeEnumeratorStart

INT64 __fastcall CmpSubtreeEnumeratorStart(INT64 a1, INT16 a2){
  VOID *TransientPoolWithTag; 
  __int64 v4; 
  __int64 v5; 
  _WORD *v6; 
  __int16 v7; 
  __int64 v8; 
  INT64 result; 

  *(_WORD *)(a1 + 2) = a2;
  TransientPoolWithTag = CmpAllocateTransientPoolWithTag(1ui64, 0x33000ui64);
  *(_QWORD *)(a1 + 96) = TransientPoolWithTag;
  if( !TransientPoolWithTag )
    return 3221225626i64;
  v4 = 0i64;
  v5 = 512i64;
  do
  {
    v6 = (_WORD *)(v4 + *(_QWORD *)(a1 + 96));
    memset(v6, 0i64, 0x198u);
    v6[13] = -1;
    CmpKeyEnumStackInitialize(v6 + 28);
    v4 += 408i64;
    --v5;
  }
  while( v5 );
  v7 = 0;
  while( 1 )
  {
    v8 = *(_QWORD *)(a1 + 96) + 408i64 * v7;
    result = CmpStartKcbStack(v8 + 24, *(_WORD *)(a1 + 2));
    if( (int)result < 0 )
      break;
    result = CmpKeyEnumStackStart(v8 + 56, *(_WORD *)(a1 + 2));
    if( (int)result < 0 )
      break;
    if( ++v7 >= 512 )
      return CmpStartKeyNodeStack(a1 + 16, *(_WORD *)(a1 + 2));
  }
  return result;
}

Referenced by:

CmpSubtreeEnumeratorStartForKcbStack
CmpSubtreeEnumeratorStartForKeyNodeStack