KxFlushEntireTb

__int64 __fastcall KxFlushEntireTb(int a1){
  __int64 v1; 
  char v2; 
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  int v5; 
  __int64 result; 
  int v7[8]; 
  __int64 v8; 
  VOID(__stdcall *v9)(); 
  __int64 v10; 
  v1 = 3i64;
  v2 = 1;
  if( a1 == 1 )
  {
    v1 = 2147483651i64;
  }
  else if( !a1 && (_BYTE)KiKvaShadow )
  {
    v2 = 0;
  }
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xCui64);
  if( v2 )
  {
    if( KxSetTimeStampBusy((INT64 *)&KiTbFlushTimeStamp) )
    {
      v10 = 0i64;
      v9 = KiFlushCurrentTbWorker;
      v8 = v1;
      KiIpiSendRequestEx((CHAR)KeGetCurrentPrcb());
      _InterlockedIncrement((volatile signed __int32 *)&KiTbFlushTimeStamp);
    }
  }
  else
  {
    _InterlockedOr(v7, 0);
    CurrentPrcb = KeGetCurrentPrcb();
    KeCopyAffinityEx(
      (__int64)CurrentPrcb + 11704,
      (unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)CurrentPrcb + 1) + 184i64) + 368i64));
    KeRemoveProcessorAffinityEx((unsigned __int16 *)CurrentPrcb + 5852, *((_DWORD *)CurrentPrcb + 9));
    if( (unsigned int)KiAffinityContainsProcessorsOtherThanSelf((INT64)CurrentPrcb, (_WORD *)CurrentPrcb + 5852) )
    {
      KiIpiSendRequest((__int64)CurrentPrcb, 0, (unsigned __int16 *)CurrentPrcb + 5852, 0i64, v1);
      KiFlushCurrentTbWorker();
      v5 = 0;
      while( *((_DWORD *)CurrentPrcb + 2912) )
      {
        ++v5;
        _mm_pause();
      }
    }
    else
    {
      KiFlushCurrentTbWorker();
    }
  }
  result = CurrentIrql;
  __writecr8(CurrentIrql);
  return result;
}

Referenced by:

KeFlushEntireTb
KeFlushTb