HvlpStartLogicalProcessor
NTSTATUS __fastcall HvlpStartLogicalProcessor(int a1, int a2, unsigned __int16 a3, __int64 a4){
__int64 v7;
NTSTATUS result;
_QWORD *v9;
_OWORD *v10;
__int64 v11;
_OWORD *v12;
__int16 v13;
__int16 v14;
PHYSICAL_ADDRESS v15[2];
__int128 v16;
__int128 PageInfo[2];
*(_OWORD *)a4 = 0i64;
memset(PageInfo, 0, sizeof(PageInfo));
*(_OWORD *)(a4 + 16) = 0i64;
*(_OWORD *)&v15[0].anonymous_0.LowPart = 0i64;
v16 = 0i64;
*(_OWORD *)(a4 + 32) = 0i64;
*(_QWORD *)(a4 + 48) = 0i64;
v7 = *(unsigned __int16 *)(KeNodeBlock[a3] + 148);
while( 1 )
{
result = HvlpDepositPages(v7);
if( result )
break;
v9 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)PageInfo, 1ui64, 0i64, 0x18ui64);
v10 = HvlpAcquireHypercallPage(v15, 2ui64, 0i64, 0x38ui64);
v11 = KeNodeBlock[v7];
v12 = v10;
v9[2] = 0i64;
*(_DWORD *)v9 = a1;
*((_DWORD *)v9 + 1) = a2;
*((_DWORD *)v9 + 2) = *(_DWORD *)(v11 + 168);
*((_DWORD *)v9 + 3) = -2147483647;
HvcallInitiateHypercall();
v14 = v13;
if( v13 != 11 )
{
*(_OWORD *)a4 = *v12;
*(_OWORD *)(a4 + 16) = v12[1];
*(_OWORD *)(a4 + 32) = v12[2];
*(_QWORD *)(a4 + 48) = *((_QWORD *)v12 + 6);
*(_WORD *)a4 = v13;
}
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v15);
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
if( v14 != 11 )
return v14 != 0 ? 0xC0000001 : 0;
}
return result;
}Referenced by:
HvlpEnableNextLogicalProcessor