HvlpCreateRootVirtualProcessor

NTSTATUS __fastcall HvlpCreateRootVirtualProcessor(__int64 a1, int a2){
  __int64 v4; 
  int v5; 
  NTSTATUS result; 
  _DWORD *v7; 
  __int16 v8; 
  __int16 v9; 
  __int128 PageInfo[3]; 
  _HV_HYPERCALL_INPUT InputControl; 

  InputControl.AsUINT64 = 0i64;
  memset(PageInfo, 0, 32);
  v4 = *(unsigned __int16 *)(KeNodeBlock[*(unsigned __int16 *)(a1 + 12)] + 148);
  v5 = *(_DWORD *)(KeNodeBlock[v4] + 168);
  HvcallInitInputControl(HvCallCreateVp, &InputControl);
  while( 1 )
  {
    result = HvlpDepositPages(v4);
    if( result )
      break;
    v7 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)PageInfo, 1ui64, 0i64, 0x20ui64);
    *(_QWORD *)v7 = HvlPartitionId;
    v7[2] = a2;
    v7[4] = v5;
    v7[5] = -2147483647;
    *((_QWORD *)v7 + 3) = *(unsigned int *)(a1 + 4);
    HvcallInitiateHypercall();
    v9 = v8;
    HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
    if( v9 != 11 )
      return v9 != 0 ? 0xC0000001 : 0;
  }
  return result;
}

Referenced by:

HvlpEnableRootVirtualProcessor