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