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