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