HalpUnmapVirtualAddress
VOID __stdcall HalpUnmapVirtualAddress(PVOID VirtualAddress, INT64 NumberPages, UINT8 FlushCurrentTLB){
char *v4;
__int64 v5;
unsigned __int64 v6;
_QWORD *v7;
char *v8;
v4 = (char *)VirtualAddress + 4096 * (unsigned __int64)(unsigned int)NumberPages - 1;
v5 = (unsigned int)NumberPages;
if( VirtualAddress >= HalpOriginalHeapStart && v4 >= VirtualAddress && (unsigned __int64)v4 <= HalpOriginalHeapEnd )
{
v6 = (unsigned __int64)VirtualAddress & 0xFFFFFFFFFFFFF000ui64;
v7 = (_QWORD *)((char *)MmGetPteBase() + 8 * ((v6 >> 12) & 0xFFFFFFFFFi64));
v8 = (char *)v6;
if( (_DWORD)NumberPages )
{
do
{
*v7 = 0i64;
if( FlushCurrentTLB )
__invlpg(v8);
v8 += 4096;
++v7;
--v5;
}
while( v5 );
}
if( !FlushCurrentTLB )
HalpFlushTLB();
if( (unsigned __int64)HalpHeapStart > v6 )
HalpHeapStart = (VOID *)v6;
}
}Referenced by:
HalUnmapIoSpace
HalpAcpiCheckAndMapTable
HalpAcpiGetRsdt
HalpAcpiGetTableWork
HalpAcpiIsCachedTableCompromised
HalpAcpiPostSleep
HalpAcpiTableCacheInit
HalpCheckLowMemoryPreSleep
HalpHpetDiscover
HalpIvtProcessDrhdEntry
HalpSfiTimerInitialize
HalpUsbLegacyStopOhciInterrupt
WdHwDestroyHardwareRegister