EtwpCovSampContextFastFindModule

NTSTATUS __stdcall EtwpCovSampContextFastFindModule(INT64 a1, INT64 a2, INT64 *a3){
  int v3; 
  INT64 v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v8; 

  v3 = *(_DWORD *)(a1 + 684) >> 5;
  v4 = 0i64;
  v5 = -1i64 << (*(_BYTE *)(a1 + 684) & 0x1F);
  v6 = v5 & *(_QWORD *)a2;
  if( !v3 )
    return 0;
  v8 = *(_QWORD *)(a1 + 688)
     + 8i64
     * ((37
       * (BYTE6(v6)
        + 37
        * (BYTE5(v6)
         + 37
         * (BYTE4(v6) + 37 * (BYTE3(v6) + 37 * (BYTE2(v6) + 37 * (BYTE1(v6) + 37 * ((unsigned __int8)v6 + 11623883)))))))
       + HIBYTE(v6)) & (unsigned int)(v3 - 1));
  while( 1 )
  {
    v8 = *(_QWORD *)v8;
    if( (v8 & 1) != 0 )
      break;
    if( v6 == (v5 & *(_QWORD *)(v8 + 8)) )
      goto LABEL_7;
  }
  v8 = 0i64;
LABEL_7:
  if( !v8 )
    return 0;
  if( *(_DWORD *)(v8 + 32) == *(_DWORD *)(a2 + 16)
    && *(_DWORD *)(v8 + 36) == *(_DWORD *)(a2 + 20)
    && *(_QWORD *)(v8 + 40) == *(_QWORD *)(a2 + 8)
    && *(_DWORD *)(v8 + 160) == *(_DWORD *)(a2 + 24) )
  {
    *(_DWORD *)(v8 + 136) = KUSER_SHARED_DATA.TickCount.LowPart;
    if( _InterlockedIncrement64((volatile signed __int64 *)(v8 + 64)) <= 1 )
      __fastfail(0xEu);
    v4 = v8;
  }
  *a3 = v4;
  return v8;
}

Referenced by:

EtwpCovSampContextGetModule