HalpAcpiCheckAndMapTable
UINT64 __stdcall HalpAcpiCheckAndMapTable(
_LOADER_PARAMETER_BLOCK *LoaderBlock,
_LARGE_INTEGER PhysicalAddress,
UINT8 *OemId,
UINT8 *OemTableId,
UINT8 *Str1,
UINT8 *OemTableIda,
INT64 PerformChecksum,
UINT64 *Size){
UINT64 v8;
int v9;
unsigned int v10;
UINT64 v13;
UINT64 v14;
UINT64 v15;
UINT64 v17;
int v18;
char v19;
char *v20;
char v21;
char v22;
UINT64 Protection;
v8 = 0i64;
v9 = (int)OemTableId;
v10 = (unsigned int)OemId;
if( PhysicalAddress.QuadPart )
{
LODWORD(v13) = 36;
if( LoaderBlock )
{
LODWORD(Protection) = 4;
v14 = HalpMap(
PhysicalAddress,
(_MEMORY_CACHING_TYPE)(((unsigned __int64)(PhysicalAddress.anonymous_0.LowPart & 0xFFF) + 4131) >> 12),
MmCached,
0,
Protection);
}
else
{
v14 = (UINT64)MmMapIoSpaceEx(PhysicalAddress, 0x24ui64, 0x204ui64);
}
v15 = v14;
if( v14 )
{
if( *(_DWORD *)(v14 + 4) < v10
|| v9 && *(_DWORD *)v14 != v9
|| Str1 && strncmp((INT8 *)Str1, (INT8 *)(v14 + 10), 6ui64)
|| OemTableIda && strncmp((INT8 *)OemTableIda, (INT8 *)(v15 + 16), 8ui64) )
{
LABEL_8:
if( v15 )
{
if( LoaderBlock )
HalpUnmapVirtualAddress((PVOID)v15, ((v15 & 0xFFF) + 4095 + (unsigned int)v13) >> 12, 0);
else
MmUnmapIoSpace((VOID *)v15, (unsigned int)v13);
}
return v8;
}
v13 = *(unsigned int *)(v15 + 4);
if( LoaderBlock )
HalpUnmapVirtualAddress((PVOID)v15, ((v15 & 0xFFF) + 4131) >> 12, 0);
else
MmUnmapIoSpace((VOID *)v15, 0x24ui64);
if( LoaderBlock )
{
LODWORD(Protection) = 4;
v17 = HalpMap(
PhysicalAddress,
(_MEMORY_CACHING_TYPE)(((PhysicalAddress.anonymous_0.LowPart & 0xFFF) + 4095i64 + v13) >> 12),
MmCached,
0,
Protection);
}
else
{
v17 = (UINT64)MmMapIoSpaceEx(PhysicalAddress, v13, 0x204ui64);
}
v15 = v17;
if( v17 )
{
if( !(_BYTE)PerformChecksum )
goto LABEL_26;
v18 = *(_DWORD *)(v17 + 4);
v19 = 0;
if( !v18 )
goto LABEL_26;
v20 = (char *)v17;
do
{
v21 = *v20++;
v22 = v19 + v21;
v19 = v22;
--v18;
}
while( v18 );
if( !v22 )
{
LABEL_26:
v8 = v15;
v15 = 0i64;
*(_DWORD *)Size = v13;
}
goto LABEL_8;
}
}
}
return v8;
}Referenced by:
HalpAcpiGetAllTablesWork
HalpAcpiGetFacsMapping
HalpAcpiGetRsdt
HalpAcpiGetTableFromBios