KeInvalidateRangeAllCachesNoIpi
VOID __stdcall KeInvalidateRangeAllCachesNoIpi(PVOID BaseAddress, UINT64 a2){
char *v2;
INT64 v3;
char *v4;
if( (unsigned int)a2 >= KiLargestCacheSize )
{
KeInvalidateAllCaches();
}
else
{
v2 = (char *)BaseAddress + (unsigned int)a2;
v3 = *((unsigned int *)KeGetCurrentPrcb() + 58);
v4 = (char *)((unsigned __int64)BaseAddress & ~(v3 - 1));
if( (KeFeatureBits & 0x800000000i64) != 0 )
{
KiFlushCacheLines(
(CHAR *)((unsigned __int64)BaseAddress & ~(v3 - 1)),
(~(v3 - 1) & (unsigned __int64)&v2[v3 - 1]) - (_QWORD)v4,
v3);
}
else
{
for( ; v4 < v2; v4 += v3 )
_mm_clflush(v4);
}
}
}Referenced by:
HalpIommuAllocateAndZeroPageTable
HalpIommuInitializeDmarPageTable
HalpIommuMapLogical
HalpIommuMapLogicalRange
HalpIommuUnmapLogicalRange
IvtInitializeIdentityMappings
KeInvalidateRangeAllCaches
MiFlushCacheForAttributeChange