KeFlushMultipleRangeCurrentTb
VOID __stdcall KeFlushMultipleRangeCurrentTb(UINT64 Number, _KTB_FLUSH_VA *Virtual, _KTBFLUSH_TYPE FlushType){
__int64 v5;
union {$35D744587036AE522A5F9ADC4D2A64A6 __s0;void *Va;unsigned __int64 VaLong;} v6;
BOOL IsSecureProcessFlush;
_KTB_FLUSH_VA *v8;
__int64 v9;
UINT64 v10;
char v11;
unsigned __int8 CurrentIrql;
VOID **VaList;
char Global[8];
UINT64 AddressSpace;
_KAFFINITY_EX ProcessorSet;
AddressSpace = 0i64;
v5 = (unsigned int)Number;
memset(&ProcessorSet, 0i64, sizeof(ProcessorSet));
v6.0 = ($35D744587036AE522A5F9ADC4D2A64A6)Virtual->u1;
Global[0] = 0;
IsSecureProcessFlush = KiIsSecureProcessFlush(v6.VaLong, (unsigned int)FlushType);
if( !IsSecureProcessFlush
|| (KiPrepareFlushParameters(FlushType, &AddressSpace, (UINT8 *)Global),
KiPrepareFlushCurrentAffinity(&ProcessorSet),
LOBYTE(v10) = IsSecureProcessFlush,
LOBYTE(VaList) = 0,
HvlFlushRangeListTb(AddressSpace, &ProcessorSet, Global[0], v10, VaList),
!v11) )
{
if( (_DWORD)v5 )
{
v8 = Virtual;
v9 = v5;
do
{
KiFlushRangeTb((_KTB_FLUSH_VA)v8->u1.0);
++v8;
--v9;
}
while( v9 );
}
}
if( VmTbFlushEnabled )
VmFlushTb((_MEMORY_CACHING_TYPE_ORIG)v5, (UINT64 *)Virtual, (unsigned int)FlushType);
if( *(&stru_140CF2E80 + 1830) )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
ExFlushTb((unsigned int)v5, Virtual, FlushType);
__writecr8(CurrentIrql);
}
}Referenced by:
MiAgeWorkingSetTail
MiFlushTbList