CmpSubtreeEnumeratorStart

INT64 __fastcall CmpSubtreeEnumeratorStart(INT64 a1, INT16 a2){
  _CHILD_LIST *v2; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  INT64 v7; 
  __int16 v8; 
  __int64 v9; 
  INT64 result; 
  *(_WORD *)(a1 + 2) = a2;
  CmpAllocateTransientPoolWithTag((_HHIVE *)1, 0x33000ui64, 0x31394D43ui64, v2);
  *(_QWORD *)(a1 + 96) = v4;
  if( !v4 )
    return 3221225626i64;
  v5 = 0i64;
  v6 = 512i64;
  do
  {
    v7 = v5 + *(_QWORD *)(a1 + 96);
    memset(v7, 0i64);
    *(_WORD *)(v7 + 26) = -1;
    CmpKeyEnumStackInitialize();
    v5 += 408i64;
    --v6;
  }
  while( v6 );
  v8 = 0;
  while( 1 )
  {
    v9 = *(_QWORD *)(a1 + 96) + 408i64 * v8;
    result = CmpStartKcbStack(v9 + 24, *(_WORD *)(a1 + 2));
    if( (int)result < 0 )
      break;
    result = CmpKeyEnumStackStart(v9 + 56, *(_WORD *)(a1 + 2));
    if( (int)result < 0 )
      break;
    if( ++v8 >= 512 )
      return CmpStartKeyNodeStack(a1 + 16, *(_WORD *)(a1 + 2));
  }
  return result;
}

Referenced by:

CmpSubtreeEnumeratorStartForKcbStack
CmpSubtreeEnumeratorStartForKeyNodeStack