HalpCheckLowMemoryPreSleep
VOID __stdcall HalpCheckLowMemoryPreSleep(INT64 a1){
UINT64 v1;
UINT64 v2;
__int64 v3;
unsigned __int64 v4;
unsigned __int64 i;
INT64 v6;
_DOUBLE v7;
PVOID v8;
UINT64 LowLimit;
UINT64 HighLimit;
if( (a1 & 0x20000) != 0 )
{
HighLimit = 0i64;
LowLimit = 0i64;
RtlClearAllBits((PRTL_BITMAP)&CmpDummyThreadEvent + 366);
IoGetStackLimits(&LowLimit, &HighLimit);
v1 = LowLimit & 0xFFFFFFFFFFFFF000ui64;
v2 = (HighLimit + 4095) & 0xFFFFFFFFFFFFF000ui64;
while( v1 < v2 )
{
LODWORD(v3) = MmGetPhysicalAddress(v1);
v4 = v3 >> 12;
if( v4 < 0x100 )
_bittestandset(*(&CmpDummyThreadEvent + 733), v4);
v1 += 4096i64;
}
memset((char *)&CmpDummyThreadEvent + 5472, 0i64, 0x100u);
for( i = 0i64; i < 0x100; ++i )
{
if( !_bittest(*(&CmpDummyThreadEvent + 735), i) && !_bittest(*(&CmpDummyThreadEvent + 733), i) )
{
v6 = HalpMapPhysicalMemory64((_LARGE_INTEGER)(i << 12), MmCached, 0, 4);
if( v6 )
{
*((_BYTE *)&CmpDummyThreadEvent + i + 5472) = HalpSimpleCheck(v6, v7);
HalpUnmapVirtualAddress(v8, 1i64, 0);
}
}
}
}
}Referenced by:
HaliAcpiSleep