HalpCheckLowMemoryPreSleep

VOID __fastcall HalpCheckLowMemoryPreSleep(INT64 a1, DOUBLE a2){
  char *v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  unsigned __int64 i; 
  INT64 v6; 
  PVOID v7; 
  unsigned __int64 LowLimit; 
  unsigned __int64 HighLimit; 
  if( (a1 & 0x20000) != 0 )
  {
    HighLimit = 0i64;
    LowLimit = 0i64;
    RtlClearAllBits(&HalpLowMemoryMapStack);
    IoGetStackLimits(&LowLimit, &HighLimit);
    v2 = (char *)(LowLimit & 0xFFFFFFFFFFFFF000ui64);
    v3 = (HighLimit + 4095) & 0xFFFFFFFFFFFFF000ui64;
    while( (unsigned __int64)v2 < v3 )
    {
      v4 = MmGetPhysicalAddress(v2).QuadPart >> 12;
      if( v4 < 0x100 )
        _bittestandset((signed __int32 *)HalpLowMemoryMapStack.Buffer, v4);
      v2 += 4096;
    }
    memset((INT64)&HalpPhysicalMemoryCheckSums, 0i64);
    for( i = 0i64; i < 0x100; ++i )
    {
      if( !_bittest((const signed __int32 *)HalpLowMemoryMap.Buffer, i)
        && !_bittest((const signed __int32 *)HalpLowMemoryMapStack.Buffer, i) )
      {
        v6 = HalpMapPhysicalMemory64((LARGE_INTEGER)(i << 12), MmCached);
        if( v6 )
        {
          *((_BYTE *)&HalpPhysicalMemoryCheckSums + i) = HalpSimpleCheck(v6, a2);
          HalpUnmapVirtualAddress(v7, 1i64, 0);
        }
      }
    }
  }
}

Referenced by:

HaliAcpiSleep