HvlInitializeProcessor

NTSTATUS __fastcall HvlInitializeProcessor(_QWORD *a1, int a2){
  NTSTATUS result; 
  __int64 v4; 
  VOID *v5; 
  VOID *v6; 
  VOID *v7; 
  VOID *v8; 
  INT64 IndependentPages; 
  PHYSICAL_ADDRESS *v10; 
  if( !(_BYTE)HvlHypervisorConnected )
    return 0;
  v4 = 2i64;
  if( (HvlpFlags & 2) == 0 || (result = HvlpEnableRootVirtualProcessor((__int64)a1, a2), result >= 0) )
  {
    v5 = 0i64;
    v6 = 0i64;
    if( (HvlpFlags & 0x80000) != 0 && (HvlpFlags & 2) == 0 )
    {
      LODWORD(v7) = HvlpAllocateOverlayPages((UINT64)a1);
      v6 = v7;
      if( !v7 )
        return -1073741670;
      a1[4209] = v7;
    }
    if( (HvlpFlags & 2) == 0 && (HvlpFlags & 0x8000) != 0 )
    {
      LODWORD(v8) = HvlpAllocateOverlayPages((unsigned int)HvlpFlags);
      v5 = v8;
      if( !v8 )
      {
LABEL_18:
        if( v6 )
        {
          HvlpFreeOverlayPages(v6);
          a1[4209] = 0i64;
        }
        if( v5 )
        {
          HvlpFreeOverlayPages(v5);
          a1[4247] = 0i64;
        }
        return -1073741670;
      }
      a1[4247] = v8;
    }
    IndependentPages = MmAllocateIndependentPagesEx(0x6000ui64, *(unsigned __int16 *)(a1[24] + 146i64), 0i64, 0i64);
    v10 = (PHYSICAL_ADDRESS *)IndependentPages;
    if( IndependentPages )
    {
      a1[4208] = IndependentPages;
      do
      {
        v10[2] = MmGetPhysicalAddress(v10);
        v10 += 512;
        --v4;
      }
      while( v4 );
      HvlpSetupCachedHypercallPages((_KPRCB *)a1);
      return 0;
    }
    goto LABEL_18;
  }
  return result;
}

Referenced by:

KeStartAllProcessors
KiStartDynamicProcessor