HalpLoadMicrocode

INT64 __stdcall HalpLoadMicrocode(){
  bool IsMicrosoftCompatibleHvLoaded; 
  _QWORD *v1; 
  INT64 v2; 
  INT64 v3; 
  int updated; 
  CHAR *v5; 
  unsigned int ActiveProcessorCount; 
  char v7; 
  int *v8; 
  __int64 v9; 
  unsigned int v10; 
  INT64 v11; 
  INT64 v12; 
  INT64 v13; 
  UINT64 v15; 
  struct _GROUP_AFFINITY Affinity; 
  struct _GROUP_AFFINITY PreviousAffinity; 
  LODWORD(v15) = 0;
  Affinity = 0i64;
  PreviousAffinity = 0i64;
  IsMicrosoftCompatibleHvLoaded = HalpIsMicrosoftCompatibleHvLoaded();
  updated = HalpMcUpdateInitialize(0i64, v1);
  if( updated < 0 )
    goto LABEL_22;
  if( IsMicrosoftCompatibleHvLoaded && qword_140C4A2F8 )
  {
    v5 = HalpMcExportAllData(&v15, 0i64, NonPagedPoolNx);
    if( v5 )
    {
      updated = qword_140C4A2F8(v5, (unsigned int)v15);
      ExFreePoolWithTag(v5, 0x206C6148u);
    }
    else
    {
      updated = -1073741801;
    }
    HalpUnloadMicrocode();
  }
  else
  {
    updated = HalpMcUpdateLock(v3, v2);
    if( updated < 0 )
    {
LABEL_22:
      HalpMcUpdateInitialize(0i64, 0i64);
      return(unsigned int)updated;
    }
    ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
    v7 = 0;
    if( ActiveProcessorCount )
    {
      v8 = KiProcessorIndexToNumberMappingTable;
      v9 = ActiveProcessorCount;
      do
      {
        v10 = *v8;
        Affinity.Reserved[1] = 0;
        Affinity.Reserved[2] = 0;
        *(_DWORD *)&Affinity.Group = (unsigned __int16)(v10 >> 6);
        Affinity.Mask = 1i64 << (v10 & 0x3F);
        if( v7 )
        {
          KeSetSystemGroupAffinityThread(&Affinity, 0i64);
        }
        else
        {
          KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
          v7 = 1;
        }
        HalpMcUpdateMicrocode(v12, v11, v13);
        ++v8;
        --v9;
      }
      while( v9 );
      KeRevertToUserGroupAffinityThread(&PreviousAffinity);
    }
    HalpMcUpdateUnlock();
  }
  if( updated < 0 )
    goto LABEL_22;
  if( IsMicrosoftCompatibleHvLoaded && !HalMcSleepDisabled )
  {
    updated = PoDisableSleepStates(1i64, 14i64, (CHAR **)&v15);
    if( updated >= 0 )
      HalMcSleepDisabled = 1;
  }
  return(unsigned int)updated;
}

Referenced by:

No references.