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