sub_140A37A14

_QWORD *__fastcall sub_140A37A14(__int64 a1){
  unsigned __int64 v2; 
  __int64 v3; 
  int v4; 
  unsigned __int64 v5; 
  unsigned __int128 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  int v11; 
  _QWORD *v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  unsigned __int128 v15; 
  unsigned __int64 v16; 
  unsigned __int128 v17; 
  unsigned __int64 v18; 
  unsigned int v19; 
  _QWORD *v20; 
  unsigned __int64 v21; 
  unsigned __int64 v22; 
  unsigned __int128 v23; 
  unsigned __int64 v24; 
  unsigned __int128 v25; 
  unsigned __int64 v26; 
  int v28; 
  _QWORD *v29; 
  __int64 v30; 
  unsigned __int64 v31; 
  unsigned __int128 v32; 
  int v33; 
  unsigned __int64 v34; 
  __int64 v35; 
  int v36; 
  unsigned __int64 v37; 
  unsigned __int64 v38; 
  int v39[8]; 
  __int64 v40; 
  __int64 v41; 
  __int64 v42; 
  __int64 v43; 
  __int64 v44; 
  __int64 v45; 
  __int64 v46; 
  v2 = __rdtsc();
  v3 = __ROR8__(v2, 3);
  v40 = ((v3 ^ v2) * (unsigned __int128)0x7010008004002001ui64) >> 64;
  v4 = ((unsigned __int16)v40 ^ (unsigned __int16)(8193 * (v3 ^ v2))) & 0x7FF;
  v5 = __rdtsc();
  v6 = (__ROR8__(v5, 3) ^ v5) * (unsigned __int128)0x7010008004002001ui64;
  v41 = *((_QWORD *)&v6 + 1);
  v7 = (*((_QWORD *)&v6 + 1) ^ (unsigned __int64)v6) % (unsigned int)(v4 + 1);
  v8 = (*(__int64(__fastcall **)(__int64, _QWORD, _QWORD))(a1 + 248))(
         512i64,
         (unsigned int)(v4 + 48),
         *(unsigned int *)(a1 + 2064));
  v9 = v8;
  if( v8 )
  {
    v11 = v7;
    v12 = (_QWORD *)v8;
    if( (unsigned int)v7 >= 8 )
    {
      v13 = (unsigned __int64)(unsigned int)v7 >> 3;
      do
      {
        v14 = __rdtsc();
        v15 = (__ROR8__(v14, 3) ^ v14) * (unsigned __int128)0x7010008004002001ui64;
        v42 = *((_QWORD *)&v15 + 1);
        *v12++ = v15 ^ *((_QWORD *)&v15 + 1);
        v11 -= 8;
        --v13;
      }
      while( v13 );
    }
    if( v11 )
    {
      v16 = __rdtsc();
      v17 = (__ROR8__(v16, 3) ^ v16) * (unsigned __int128)0x7010008004002001ui64;
      v43 = *((_QWORD *)&v17 + 1);
      v18 = v17 ^ *((_QWORD *)&v17 + 1);
      do
      {
        *(_BYTE *)v12 = v18;
        v12 = (_QWORD *)((char *)v12 + 1);
        v18 >>= 8;
        --v11;
      }
      while( v11 );
    }
    v19 = v4 - v7;
    v10 = v9 + (unsigned int)v7;
    v20 = (_QWORD *)(v10 + 48);
    if( v19 >= 8 )
    {
      v21 = (unsigned __int64)v19 >> 3;
      do
      {
        v22 = __rdtsc();
        v23 = (__ROR8__(v22, 3) ^ v22) * (unsigned __int128)0x7010008004002001ui64;
        v44 = *((_QWORD *)&v23 + 1);
        *v20++ = v23 ^ *((_QWORD *)&v23 + 1);
        v19 -= 8;
        --v21;
      }
      while( v21 );
    }
    if( v19 )
    {
      v24 = __rdtsc();
      v25 = (__ROR8__(v24, 3) ^ v24) * (unsigned __int128)0x7010008004002001ui64;
      v45 = *((_QWORD *)&v25 + 1);
      v26 = v25 ^ *((_QWORD *)&v25 + 1);
      do
      {
        *(_BYTE *)v20 = v26;
        v20 = (_QWORD *)((char *)v20 + 1);
        v26 >>= 8;
        --v19;
      }
      while( v19 );
    }
  }
  else
  {
    ++*(_DWORD *)(a1 + 2584);
    v10 = 0i64;
  }
  if( !v10 )
    return 0i64;
  v28 = 48;
  v29 = (_QWORD *)v10;
  v30 = 6i64;
  do
  {
    *v29++ = 0i64;
    v28 -= 8;
    --v30;
  }
  while( v30 );
  for( ; v28; --v28 )
  {
    *(_BYTE *)v29 = 0;
    v29 = (_QWORD *)((char *)v29 + 1);
  }
  KeInitializeEvent((_KEVENT *)(v10 + 24), NotificationEvent, 0);
  *(_QWORD *)v10 = v10 + 24;
  v31 = __rdtsc();
  v32 = (__ROR8__(v31, 3) ^ v31) * (unsigned __int128)0x7010008004002001ui64;
  v46 = *((_QWORD *)&v32 + 1);
  if( !(((unsigned __int64)v32 ^ *((_QWORD *)&v32 + 1)) % 0xA) )
  {
    *(_DWORD *)(a1 + 2448) |= 0x2000000u;
    *(_QWORD *)(v10 + 8) = 1i64;
  }
  _InterlockedOr(v39, 0);
  __rdtsc();
  v33 = (unsigned __int8)(*(_BYTE *)(a1 + 2336) - 1);
  v34 = __rdtsc();
  v35 = __ROR8__(v34, 3);
  v36 = v33
      + ((((v35 ^ v34) * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ (0x7010008004002001i64 * (v35 ^ v34)))
      % (unsigned int)(63 - v33);
  do
  {
    v37 = __rdtsc();
    v38 = __ROR8__(v37, 3) ^ v37;
  }
  while( v33
        + (((v38 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ (0x7010008004002001i64 * v38))
        % (unsigned int)(63 - v33) == v36 );
  _disable();
  if( !(_BYTE)KdDebuggerNotPresent )
  {
    while( 1 )
      ;
  }
  _enable();
  return(_QWORD *)v10;
}

Referenced by:

No references.