HalpExtInitExtensions
VOID __fastcall HalpExtInitExtensions(_LOADER_PARAMETER_BLOCK *LoaderBlock){
int v2;
_LIST_ENTRY *p_HalExtensionModuleList;
_LIST_ENTRY *Flink;
size_t v5;
PSTR MemoryInternal;
_LARGE_INTEGER *Table;
unsigned int v8;
_LIST_ENTRY *v9;
_LIST_ENTRY *v10;
_LIST_ENTRY *v11;
_LIST_ENTRY *Blink;
unsigned __int64 v13;
_LIST_ENTRY *i;
__int64 v15;
__int64 v16;
qword_140C49CA8 = LoaderBlock;
v16 = 0i64;
v2 = 0;
p_HalExtensionModuleList = &LoaderBlock->Extension->HalExtensionModuleList;
dword_140C49CA0 = 0;
Flink = p_HalExtensionModuleList->Flink;
if( p_HalExtensionModuleList->Flink != p_HalExtensionModuleList )
{
do
{
Flink = Flink->Flink;
++v2;
}
while( Flink != p_HalExtensionModuleList );
dword_140C49CA0 = v2;
if( v2 )
{
v5 = v2 << 6;
MemoryInternal = HalpMmAllocateMemoryInternal(v5, MmCached);
qword_140C49C98 = (__int64)MemoryInternal;
if( MemoryInternal )
{
memset(MemoryInternal, 0i64, v5);
Table = HalpAcpiGetTable(LoaderBlock, (const UINT8 *)0x54525343, 0i64);
if( Table )
{
v8 = 0;
v9 = &LoaderBlock->Extension->HalExtensionModuleList;
v10 = v9->Flink;
while( v10 != v9 )
{
if( SLODWORD(v10[2].Blink) >= 0 )
{
v11 = v10[1].Flink;
Blink = v11[3].Blink;
v16 = 0i64;
if( ((__int64(__fastcall *)(_QWORD, __int64 *, void **))Blink)(0i64, &v16, &HalpExtensionImports) >= 0
&& v16 )
{
v13 = qword_140C49C98 + ((unsigned __int64)v8 << 6);
*(_QWORD *)(v13 + 8) = v11[3].Blink;
*(_QWORD *)(v13 + 16) = v16;
*(_DWORD *)(v13 + 24) = 0;
*(_QWORD *)(v13 + 48) = v11[3].Flink;
*(_DWORD *)(v13 + 56) = v11[4].Flink;
*(_BYTE *)v13 = 1;
*(_QWORD *)(v13 + 40) = v13 + 32;
*(_QWORD *)(v13 + 32) = v13 + 32;
for( i = v10[1].Blink; i != (_LIST_ENTRY *)&v10[1].Blink; i = i->Flink )
(**(void(__fastcall ***)(_QWORD, char *))(v13 + 16))(v8, (char *)Table + LODWORD(i[1].Flink));
*(_BYTE *)v13 = 0;
}
}
else
{
LODWORD(v15) = v10[2].Blink;
DbgPrintEx(0x65u, 0, "HAL Extension %s failed load, status=0x%x\n", (const char *)v10[3].Flink, v15);
}
++v8;
v10 = v10->Flink;
v9 = &LoaderBlock->Extension->HalExtensionModuleList;
}
}
}
}
}
}Referenced by:
HalpHalExtInitSystem