RtlTraceDatabaseEnumerate

CHAR __fastcall RtlTraceDatabaseEnumerate(INT64 a1, INT64 a2, _QWORD *a3){
  CHAR v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned int i; 
  RtlpTraceDatabaseAcquireLock(a1);
  v6 = 0;
  if( *(_QWORD *)a2 )
  {
    if( *(_QWORD *)a2 == a1 )
    {
      i = *(_DWORD *)(a2 + 8);
      LODWORD(v7) = i;
      if( i < *(_DWORD *)(a1 + 112) )
      {
        v8 = *(_QWORD *)(a2 + 16);
        goto LABEL_9;
      }
    }
  }
  else
  {
    *(_QWORD *)a2 = a1;
    LODWORD(v7) = 0;
    *(_DWORD *)(a2 + 8) = 0;
    v8 = **(_QWORD **)(a1 + 120);
    for( i = 0; ; ++i )
    {
      *(_QWORD *)(a2 + 16) = v8;
LABEL_9:
      if( v8 )
        break;
      v7 = i + 1;
      *(_DWORD *)(a2 + 8) = v7;
      if( (unsigned int)v7 >= *(_DWORD *)(a1 + 112) )
        goto LABEL_11;
      v8 = *(_QWORD *)(*(_QWORD *)(a1 + 120) + 8 * v7);
    }
    if( (unsigned int)v7 < *(_DWORD *)(a1 + 112) )
      goto LABEL_13;
LABEL_11:
    if( !v8 )
    {
      *a3 = 0i64;
      goto LABEL_14;
    }
LABEL_13:
    *a3 = v8;
    v6 = 1;
    *(_QWORD *)(a2 + 16) = *(_QWORD *)(*(_QWORD *)(a2 + 16) + 40i64);
  }
LABEL_14:
  RtlpTraceDatabaseReleaseLock(a1);
  return v6;
}

Referenced by:

No references.