KeFlushSingleCurrentTb
VOID __stdcall KeFlushSingleCurrentTb(PVOID Virtual){
unsigned int v1;
unsigned int v2;
bool IsSecureProcessFlush;
unsigned __int64 v5;
__int64 v6;
unsigned __int8 CurrentIrql;
char v8[8];
unsigned __int64 v9;
UINT64 v10;
unsigned __int64 v11;
_QWORD v12[2];
INT64 result[22];
v2 = v1;
v10 = 0i64;
memset((INT64)result, 0i64);
v8[0] = 0;
IsSecureProcessFlush = KiIsSecureProcessFlush((UINT64)Virtual, v2);
if( !IsSecureProcessFlush
|| (KiPrepareFlushParameters(v2, &v10, v8),
KiPrepareFlushCurrentAffinity(result),
LOBYTE(v6) = IsSecureProcessFlush,
v11 = (unsigned __int64)Virtual & 0xFFFFFFFFFFFFF000ui64,
!HvlFlushRangeListTb(v10, (__int64)result, v8[0], v6, 0, 1u, &v11)) )
{
if( ((1 << v2) & 0xA) != 0 && KiFlushPcid && !*(_BYTE *)(*((_QWORD *)KeGetCurrentThread() + 23) + 912i64) )
{
if( (KiFlushPcid & 2) != 0 )
{
v12[0] = 1i64;
v12[1] = Virtual;
_invpcid(0, v12);
}
else
{
KiSetUserTbFlushPending();
}
}
__invlpg(Virtual);
}
v5 = (unsigned __int64)Virtual & 0xFFFFFFFFFFFFF000ui64;
if( VmTbFlushEnabled )
{
v9 = v5;
VmFlushTb(1u, &v9, v2);
}
if( ExTbFlushActive )
{
v9 = v5;
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
ExFlushTb(1u, (__int64)&v9, v2);
__writecr8(CurrentIrql);
}
}Referenced by:
MiDbgReleaseAddress
MiDbgTranslatePhysicalAddress
MiDbgUnTranslatePhysicalAddress
MiDbgWriteCheck
MiStackTheftIsr
MmInvalidateDumpAddresses
MmReadProcessPageTables