HalpApicInitializeLocalUnit
UINT64 __stdcall HalpApicInitializeLocalUnit(PVOID BaseVa, PVOID EndVa, UINT64 LevelsNeeded){
int v3;
int v4;
int v5;
UINT64 result;
__int64 v8;
unsigned int v9;
__int64 v10;
unsigned int v11;
unsigned int v12;
__int64 v13;
unsigned int v14;
bool v15;
unsigned int *v16;
__int64 v17[3];
INT64 v18;
unsigned int v19;
unsigned int *v20;
LODWORD(v18) = 0;
v4 = v3;
LODWORD(v17[0]) = 0;
v5 = LevelsNeeded;
if( !*(&stru_140CF2E80 + 6617) && !byte_140C50778 )
{
if( !*(&CmpDummyThreadEvent + 878) )
return 3221225486i64;
if( !qword_140C50770 )
{
qword_140C50770 = HalMapIoSpace(*(&CmpDummyThreadEvent + 878), 0x1000ui64, MmNonCached, v3);
if( !qword_140C50770 )
return 3221225626i64;
}
}
LODWORD(result) = HalpApicSetupRegisterAccess();
if( (result & 0x80000000) == 0i64 )
{
if( !*((_BYTE *)BaseVa + 27) && HalpApicIsCmciImplemented(&v18, v17) )
{
*((_DWORD *)BaseVa + 8) = v18;
*((_DWORD *)BaseVa + 9) = v17[0];
}
v8 = *((unsigned int *)BaseVa + 8);
v9 = v4 | 0x10000;
if( (_DWORD)v8 )
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(v8, v9);
v10 = *((unsigned int *)BaseVa + 9);
if( (_DWORD)v10 )
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(v10, v9);
HalpApicSetPriority(0i64, 0xFui64);
v11 = v5 | 0x100;
if( *(&CmpDummyThreadEvent + 3888) && (((__int64(__fastcall *)(__int64))qword_140C50760)(48i64) & 0x1000000) != 0 )
v11 |= 0x1000u;
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(240i64, v11);
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(800i64, v4 | 0x30000u);
((void(__fastcall *)(__int64, __int64))qword_140C50768)(992i64, 11i64);
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(880i64, v19);
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(832i64, v9);
v12 = ((__int64(__fastcall *)(__int64))qword_140C50760)(848i64);
v13 = v12;
LODWORD(v13) = v12 | 0x10000;
((void(__fastcall *)(__int64, __int64))qword_140C50768)(848i64, v13);
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(848i64, v9);
((void(__fastcall *)(__int64, _QWORD))qword_140C50768)(864i64, v4 | 0x18400u);
v14 = ((__int64(__fastcall *)(__int64))qword_140C50760)(32i64);
v15 = *(&stru_140CF2E80 + 6617) == 0;
v16 = v20;
*v20 = v14;
if( v15 )
*v16 = HIBYTE(v14);
if( *((_BYTE *)BaseVa + 27) )
return 0i64;
LODWORD(result) = HalpApicDescribeLocalLines(BaseVa);
if( (result & 0x80000000) == 0i64 )
{
*((_BYTE *)BaseVa + 27) = 1;
return 0i64;
}
}
return result;
}Referenced by:
No references.