HalpMcUpdateInitialize

__int64 __fastcall HalpMcUpdateInitialize(__int64 a1, INT64 a2){
  INT64 v2; 
  int v4; 
  INT64 v5; 
  bool v6; 
  __int64 v8[5]; 
  __int128 v9; 
  __int128 v10; 
  __int128 v11; 
  __int64 v12; 

  v12 = 0i64;
  v2 = a2;
  v8[0] = (__int64)HalMcUpdateReadPCIConfig;
  v8[1] = (__int64)MmLockPagableDataSection;
  v8[2] = (__int64)MmLockPagableDataSection;
  v8[3] = (__int64)MmLockPagableSectionByHandle;
  v8[4] = (__int64)MmUnlockPagableImageSection;
  v4 = 0;
  v9 = 0i64;
  v10 = 0i64;
  v11 = 0i64;
  if( !a1 || (unsigned __int8)HalpIsPartitionCpuManager() )
  {
    if( !v2 )
    {
LABEL_9:
      *(&CmpDummyThreadEvent + 858) = 0i64;
      *(&CmpDummyThreadEvent + 859) = 0i64;
      *(&CmpDummyThreadEvent + 854) = 0i64;
      *(&CmpDummyThreadEvent + 857) = 0i64;
      *(&CmpDummyThreadEvent + 855) = 0i64;
      *(&CmpDummyThreadEvent + 862) = 0i64;
      return(unsigned int)v4;
    }
  }
  else
  {
    LODWORD(v5) = HalpMcUpdateFindDataTableEntry((INT64 *)(a1 + 16));
    v2 = v5;
    v6 = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 0x40000000) != 0;
    *(&CmpDummyThreadEvent + 6768) = (*(_DWORD *)(*(_QWORD *)(a1 + 240) + 132i64) & 0x8000000) != 0;
    *(&CmpDummyThreadEvent + 6769) = v6;
  }
  if( !v2 )
    goto LABEL_9;
  v4 = (*(__int64(__fastcall **)(__int128 *, __int64 *))(v2 + 56))(&v9, v8);
  if( v4 < 0 )
    goto LABEL_9;
  *(&CmpDummyThreadEvent + 855) = *((_QWORD *)&v9 + 1);
  *(&CmpDummyThreadEvent + 862) = v9;
  *(&CmpDummyThreadEvent + 857) = *((_QWORD *)&v11 + 1);
  *(&CmpDummyThreadEvent + 859) = *((_QWORD *)&v10 + 1);
  *(&CmpDummyThreadEvent + 854) = v10;
  *(&CmpDummyThreadEvent + 858) = v11;
  return(unsigned int)v4;
}

Referenced by:

HalpLoadMicrocode
HalpProcInitDiscard
HalpProcInitSystem