MiFreeUnmappedPageTables

void **__fastcall MiFreeUnmappedPageTables(__int64 a1, _QWORD *a2){
  void **result; 
  __int64 v3; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  void *retaddr; 
  result = &retaddr;
  v3 = 0i64;
  v5 = a1;
  if( a1 )
  {
    do
    {
      v6 = *(_QWORD *)v5;
      v7 = (unsigned __int8)MiLockPageInline(v5);
      *(_BYTE *)(v5 + 34) = *(_BYTE *)(v5 + 34) & 0xF8 | 6;
      if( (unsigned int)MiDecrementShareCount(v5) == 3 )
        ++a2[1];
      _InterlockedAnd64((volatile signed __int64 *)(v5 + 24), 0x7FFFFFFFFFFFFFFFui64);
      result = (void **)(unsigned int)KiIrqlFlags;
      __writecr8(v7);
      ++v3;
      v5 = v6;
    }
    while( v6 );
  }
  a2[3] += v3;
  *a2 += v3;
  return result;
}

Referenced by:

MiDeleteSystemPageTableTail