KiFlushRangeWorker

VOID __fastcall KiFlushRangeWorker(INT64 a1){
  void **v1; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  int v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  _QWORD v8[2]; 
  _QWORD v9[2]; 
  v1 = *(void ***)a1;
  v3 = *(_QWORD *)a1 + 8i64 * *(unsigned int *)(a1 + 8);
  do
  {
    v4 = (unsigned __int64)*v1;
    v5 = (1 << *(_DWORD *)(a1 + 12)) & 0xA;
    if( v5 && KiFlushPcid && !*(_BYTE *)(*((_QWORD *)KeGetCurrentThread() + 23) + 912i64) )
    {
      if( (KiFlushPcid & 2) != 0 )
      {
        v8[0] = 1i64;
        v8[1] = v4;
        _invpcid(0, v8);
      }
      else
      {
        KiSetUserTbFlushPending();
      }
    }
    __invlpg((void *)v4);
    v6 = 4096i64 << (9 * ((unsigned __int8)(v4 >> 10) & 3u));
    v7 = v4 & 0x3FF;
    if( (v4 & 0x3FF) != 0 )
    {
      do
      {
        v4 += v6;
        if( v5 && KiFlushPcid && !*(_BYTE *)(*((_QWORD *)KeGetCurrentThread() + 23) + 912i64) )
        {
          if( (KiFlushPcid & 2) != 0 )
          {
            v9[0] = 1i64;
            v9[1] = v4;
            _invpcid(0, v9);
          }
          else
          {
            KiSetUserTbFlushPending();
          }
        }
        __invlpg((void *)v4);
        --v7;
      }
      while( v7 );
    }
    ++v1;
  }
  while( (unsigned __int64)v1 < v3 );
}

Referenced by:

KeFlushMultipleRangeTb