HalpMcUpdateInitialize
INT64 __fastcall HalpMcUpdateInitialize(INT64 a1, _QWORD *a2){
_QWORD *DataTableEntry;
int v4;
bool v5;
__int64 v7[5];
__int128 v8;
__int128 v9;
__int128 v10;
__int64 v11;
v11 = 0i64;
DataTableEntry = a2;
v7[0] = (__int64)HalMcUpdateReadPCIConfig;
v7[1] = (__int64)MmLockPagableDataSection;
v7[2] = (__int64)MmLockPagableDataSection;
v7[3] = (__int64)MmLockPagableSectionByHandle;
v7[4] = (__int64)MmUnlockPagableImageSection;
v4 = 0;
v8 = 0i64;
v9 = 0i64;
v10 = 0i64;
if( !a1 || (unsigned __int8)HalpIsPartitionCpuManager() )
{
if( !DataTableEntry )
{
LABEL_9:
HalpMcUpdatePostUpdateFunc = 0i64;
HalpMcUpdateUnlockFunc = 0i64;
HalpMcUpdateLockFunc = 0i64;
HalpMcUpdateExportDataFunc = 0i64;
HalpMcUpdateMicrocodeFuncEx = 0i64;
HalpMcUpdateMicrocodeFunc = 0i64;
return(unsigned int)v4;
}
}
else
{
DataTableEntry = HalpMcUpdateFindDataTableEntry((_QWORD *)(a1 + 16));
v5 = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 0x40000000) != 0;
HalpMcUpdateSelfHosting = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 0x8000000) != 0;
HalpMcUpdateMinVerSupported = v5;
}
if( !DataTableEntry )
goto LABEL_9;
v4 = ((__int64(__fastcall *)(__int128 *, __int64 *))DataTableEntry[7])(&v8, v7);
if( v4 < 0 )
goto LABEL_9;
HalpMcUpdateMicrocodeFuncEx = (__int64(__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD, _DWORD, _DWORD))*((_QWORD *)&v8 + 1);
HalpMcUpdateMicrocodeFunc = (PVOID)v8;
HalpMcUpdateExportDataFunc = (__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))*((_QWORD *)&v10 + 1);
HalpMcUpdateUnlockFunc = (__int64(*)(void))*((_QWORD *)&v9 + 1);
HalpMcUpdateLockFunc = (__int64(__fastcall *)(_QWORD, _QWORD))v9;
HalpMcUpdatePostUpdateFunc = v10;
return(unsigned int)v4;
}Referenced by:
HalpLoadMicrocode
HalpProcInitDiscard
HalpProcInitSystem