KiFlushRangeTb

VOID __fastcall KiFlushRangeTb(UINT64 a1, CHAR a2){
  UINT64 v2; 
  int v3; 
  __int64 v4; 
  bool v5; 
  UINT64 i; 
  _QWORD v7[2]; 
  _QWORD v8[2]; 
  v2 = a1;
  v3 = (1 << a2) & 0xA;
  if( v3 && KiFlushPcid && !*(_BYTE *)(*((_QWORD *)KeGetCurrentThread() + 23) + 912i64) )
  {
    if( (KiFlushPcid & 2) != 0 )
    {
      v7[0] = 1i64;
      v7[1] = a1;
      _invpcid(0, v7);
    }
    else
    {
      KiSetUserTbFlushPending();
    }
  }
  v4 = 4096i64 << (9 * ((unsigned __int8)(v2 >> 10) & 3u));
  v5 = (v2 & 0x3FF) == 0;
  for( i = v2 & 0x3FF; ; v5 = i == 0 )
  {
    __invlpg((void *)v2);
    if( v5 )
      break;
    v2 += v4;
    if( v3 && KiFlushPcid && !*(_BYTE *)(*((_QWORD *)KeGetCurrentThread() + 23) + 912i64) )
    {
      if( (KiFlushPcid & 2) != 0 )
      {
        v8[0] = 1i64;
        v8[1] = v2;
        _invpcid(0, v8);
      }
      else
      {
        KiSetUserTbFlushPending();
      }
    }
    --i;
  }
}

Referenced by:

KeFlushMultipleRangeCurrentTb
KeFlushMultipleRangeTb