ExpCheckThreadHistory

CHAR __fastcall ExpCheckThreadHistory(UINT64 *a1){
  char v1; 
  _ETHREAD *CurrentThread; 
  char v4; 
  char v5; 
  char i; 
  UINT64 v7; 
  int v8; 
  int v9; 
  char v11; 
  __int64 v12; 
  __int64 v13; 
  char j; 
  int v15; 
  char v16; 
  char v17; 
  __int128 v18[2]; 
  v1 = a1[39] & 7;
  memset(v18, 0, sizeof(v18));
  if( v1 == 4 )
    return 0;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = 0;
  v5 = 0;
  for( i = 0; i < 4; ++i )
  {
    v7 = a1[i + 9];
    if( v7 )
    {
      if( (_ETHREAD *)v7 != CurrentThread && *(_BYTE *)(v7 + 388) == 5 )
      {
        v11 = *(_BYTE *)(v7 + 112) & 7;
        if( (v11 == 1 || v11 == 4) && *(_BYTE *)(v7 + 587) == 1 )
        {
          v12 = *(_QWORD *)(v7 + 352);
          if( v12 != *(_QWORD *)(a1[2] + 8) )
          {
            if( v11 == 4 || v12 == v7 + 736 )
              return 1;
            v13 = v5++;
            *((_QWORD *)v18 + v13) = v12;
          }
        }
      }
    }
  }
  v8 = v5;
  v9 = v5 - 3;
  if( v9 < 0 )
    return 0;
  for( j = 1; ; ++j )
  {
    v15 = j;
    v16 = 1;
    v17 = j;
    if( v8 - j >= 2 )
      break;
LABEL_20:
    ++v4;
    if( v15 > v9 )
      return 0;
  }
  while( *((_QWORD *)v18 + v4) != *((_QWORD *)v18 + v17) || ++v16 < 3 )
  {
    if( 3 - v16 > v8 - ++v17 )
      goto LABEL_20;
  }
  return 1;
}

Referenced by:

ExpWorkerFactoryCheckCreate