KeFlushMultipleRangeCurrentTb
VOID __fastcall KeFlushMultipleRangeCurrentTb(UINT64 a1, UINT64 *a2, INT64 a3){
unsigned int v3;
__int64 v5;
UINT64 v6;
bool IsSecureProcessFlush;
UINT64 *v8;
__int64 v9;
__int64 v10;
unsigned __int8 CurrentIrql;
char v12[8];
UINT64 v13;
INT64 result[22];
v13 = 0i64;
v3 = a3;
v5 = (unsigned int)a1;
memset((INT64)result, 0i64);
v6 = *a2;
v12[0] = 0;
IsSecureProcessFlush = KiIsSecureProcessFlush(v6, v3);
if( !IsSecureProcessFlush
|| (KiPrepareFlushParameters(v3, &v13, v12),
KiPrepareFlushCurrentAffinity(result),
LOBYTE(v10) = IsSecureProcessFlush,
!HvlFlushRangeListTb(v13, (__int64)result, v12[0], v10, 0, v5, a2)) )
{
if( (_DWORD)v5 )
{
v8 = a2;
v9 = v5;
do
{
KiFlushRangeTb(*v8++, v3);
--v9;
}
while( v9 );
}
}
if( VmTbFlushEnabled )
VmFlushTb(v5, a2, v3);
if( ExTbFlushActive )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
ExFlushTb(v5, (__int64)a2, v3);
__writecr8(CurrentIrql);
}
}Referenced by:
MiAgeWorkingSetTail
MiFlushTbList