KiFlushRangeTb

VOID __stdcall KiFlushRangeTb(_KTB_FLUSH_VA Virtual){
  char v1; 
  union {$35D744587036AE522A5F9ADC4D2A64A6 __s0;void *Va;unsigned __int64 VaLong;} v2; 
  int v3; 
  __int64 v4; 
  bool v5; 
  __int64 i; 
  _QWORD v7[2]; 
  _QWORD v8[2]; 

  v2.0 = Virtual.u1.0;
  v3 = (1 << v1) & 0xA;
  if( v3 && KiFlushPcid && !KeGetCurrentThread()->ApcState.Process->Pcb.AddressPolicy )
  {
    if( (KiFlushPcid & 2) != 0 )
    {
      v7[0] = 1i64;
      v7[1] = Virtual.u1.0;
      _invpcid(0, v7);
    }
    else
    {
      KiSetUserTbFlushPending();
    }
  }
  v4 = 4096i64 << (9 * ((unsigned __int8)(v2.VaLong >> 10) & 3u));
  v5 = (*(_WORD *)&v2.0 & 0x3FF) == 0;
  for( i = *(_WORD *)&v2.0 & 0x3FF; ; v5 = i == 0 )
  {
    __invlpg(v2.Va);
    if( v5 )
      break;
    v2.VaLong += v4;
    if( v3 && KiFlushPcid && !KeGetCurrentThread()->ApcState.Process->Pcb.AddressPolicy )
    {
      if( (KiFlushPcid & 2) != 0 )
      {
        v8[0] = 1i64;
        v8[1] = v2.0;
        _invpcid(0, v8);
      }
      else
      {
        KiSetUserTbFlushPending();
      }
    }
    --i;
  }
}

Referenced by:

KeFlushMultipleRangeCurrentTb
KeFlushMultipleRangeTb