HalpAuditQuerySlicAddresses
__int64 __fastcall HalpAuditQuerySlicAddresses(_LARGE_INTEGER *a1){
ULONG v1;
unsigned int v3;
unsigned int *v4;
unsigned int *v5;
ULONG v6;
__int64 v7;
__int64 v8;
unsigned __int64 v9;
VOID **PoolWithTag;
_LARGE_INTEGER v11;
ULONG v12;
__int64 v13;
unsigned int *v14;
_LARGE_INTEGER *v15;
_LARGE_INTEGER v16;
_DWORD *v17;
VOID *v18;
__int64 v20;
ULONG v21;
unsigned int *v22;
v1 = 4096 - (a1->anonymous_0.LowPart & 0xFFF);
if( v1 < 0x24 )
v1 = 36;
v3 = 0;
v21 = v1;
do
{
v4 = (unsigned int *)MmMapIoSpaceEx(*a1, v1, 0x204ui64);
v5 = v4;
if( !v4 )
return(unsigned int)-1073741823;
v6 = v4[1];
if( v1 < v6 )
{
MmUnmapIoSpace(v4, v1);
v5 = 0i64;
v21 = v6;
v1 = v6;
}
}
while( !v5 );
v7 = v5[1];
v8 = v7;
if( (a1[1].anonymous_0.HighPart & 4) != 0 )
{
if( (unsigned int)v7 >= 0x24 )
v8 = 36i64;
v9 = (unsigned __int64)(v7 - v8) >> 3;
}
else
{
if( (unsigned int)v7 >= 0x24 )
v8 = 36i64;
v9 = (unsigned __int64)(v7 - v8) >> 2;
}
if( (_DWORD)v9 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, 8i64 * (unsigned int)v9, 543973704i64);
v11.QuadPart = (LONGLONG)PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, 8 * v9);
v12 = 0;
v13 = (unsigned int)v9;
v14 = v5 + 9;
v15 = (_LARGE_INTEGER *)(v5 + 9);
v22 = v5 + 9;
do
{
if( (a1[1].anonymous_0.HighPart & 4) != 0 )
v16 = *v15;
else
v16.QuadPart = *v14;
v17 = MmMapIoSpaceEx(v16, 0x24ui64, 0x204ui64);
v18 = v17;
if( v17 )
{
if( *v17 == 1128877139 )
{
v20 = v12++;
*(_LARGE_INTEGER *)(v11.QuadPart + 8 * v20) = v16;
}
MmUnmapIoSpace(v18, 0x24ui64);
}
++v14;
v15 = (_LARGE_INTEGER *)(v22 + 2);
v22 += 2;
--v13;
}
while( v13 );
v1 = v21;
a1[3] = v11;
a1[2].anonymous_0.LowPart = v12;
}
else
{
v3 = -1073741801;
}
}
MmUnmapIoSpace(v5, v1);
return v3;
}Referenced by:
HalpAuditAcpiTables