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