HalpMcRecordProcessorInfo
INT64 __fastcall HalpMcRecordProcessorInfo(INT64 a1){
int v1;
PVOID *v3;
PVOID v4;
_QWORD *PoolWithTag;
_QWORD *v7;
_QWORD *v8;
v1 = *(_DWORD *)(a1 + 16);
if( v1 == -2 )
{
HalpMcSetUpdateInfoInvalid();
HalpMcUpdateRecordingSupported = 0;
return 0i64;
}
if( !HalpMcUpdateInfoValid || v1 == -1 )
return 0i64;
v3 = (PVOID *)HalpMcUpdateInfoHead;
if( HalpMcUpdateInfoHead != &HalpMcUpdateInfoHead )
{
v4 = *(PVOID *)(a1 + 24);
while( v3[3] != v4 )
{
v3 = (PVOID *)*v3;
if( v3 == &HalpMcUpdateInfoHead )
goto LABEL_8;
}
return 0i64;
}
LABEL_8:
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x30ui64, 0x206C6148ui64);
v7 = PoolWithTag;
if( PoolWithTag )
{
*(_OWORD *)PoolWithTag = 0i64;
*((_OWORD *)PoolWithTag + 1) = 0i64;
*((_OWORD *)PoolWithTag + 2) = 0i64;
PoolWithTag[3] = *(_QWORD *)(a1 + 24);
v8 = HalpMcUpdateInfoHead;
if( *((PVOID **)HalpMcUpdateInfoHead + 1) != &HalpMcUpdateInfoHead )
__fastfail(3u);
*v7 = HalpMcUpdateInfoHead;
v7[1] = &HalpMcUpdateInfoHead;
v8[1] = v7;
HalpMcUpdateInfoHead = v7;
return 0i64;
}
HalpMcSetUpdateInfoInvalid();
return 3221225495i64;
}Referenced by:
HalpMcInitializeMicrocodeInfo
HalpMcUpdateMicrocode