HalpHvStartProcessor

NTSTATUS __stdcall HalpHvStartProcessor(INT64 a1, INT64 a2, INT64 a3){
  NTSTATUS v4; 
  int v5; 
  UINT16 v6; 
  INT64 v7; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  INT64 v11; 
  INT64 v12; 
  UINT16 v13; 
  INT64 v14; 
  INT64 v15; 
  __int64 v16; 
  UINT64 v18[5]; 
  INT64 v19[25]; 

  LODWORD(v18[0]) = 0;
  if( qword_140C4A200 )
  {
    v4 = qword_140C4A200(a1, v18);
  }
  else if( HalpIsXboxNanovisorPresent() )
  {
    LODWORD(v18[0]) = v5;
    v4 = 0;
  }
  if( v4 >= 0 )
  {
    memset(v19, 0i64, sizeof(v19));
    v6 = *(_WORD *)(a3 + 440);
    v18[2] = (UINT64)HalpLMStubForVM;
    v18[3] = *(_QWORD *)(a3 + 120);
    v18[4] = 2i64;
    HalpHvInitSegRegister(a3 + 224, v6, (INT64)v19);
    HalpHvInitSegRegister(v7, *(_WORD *)(a3 + 442), (INT64)&v19[2]);
    HalpHvInitSegRegister(v8, *(_WORD *)(a3 + 444), (INT64)&v19[4]);
    HalpHvInitSegRegister(v9, *(_WORD *)(a3 + 446), (INT64)&v19[6]);
    HalpHvInitSegRegister(v10, *(_WORD *)(a3 + 448), (INT64)&v19[8]);
    HalpHvInitSegRegister(v11, *(_WORD *)(a3 + 450), (INT64)&v19[10]);
    HalpHvInitSegRegister(v12, *(_WORD *)(a3 + 256), (INT64)&v19[12]);
    v13 = *(_WORD *)(a3 + 258);
    HIWORD(v19[13]) |= 2u;
    HalpHvInitSegRegister(v14, v13, (INT64)&v19[14]);
    v15 = *(_QWORD *)(a3 + 248);
    HIWORD(v19[16]) = *(_WORD *)(a3 + 246);
    v19[19] = *(_QWORD *)(v16 + 8);
    HIWORD(v19[18]) = *(_WORD *)(v16 + 6);
    v19[21] = *(_QWORD *)(a3 + 144);
    v19[22] = *(_QWORD *)(a3 + 160);
    v19[23] = *(_QWORD *)(a3 + 168);
    v19[20] = *(_QWORD *)(a3 + 136);
    v19[24] = *(_QWORD *)(a3 + 128);
    v19[17] = v15;
    return HalpHvStartVirtualProcessor(LODWORD(v18[0]));
  }
  return v4;
}

Referenced by:

HalpInterruptStartProcessor