VslStartSecureProcessor
NTSTATUS __stdcall VslStartSecureProcessor(ULONG a1, INT64 a2){
VOID **PoolWithTag;
VOID **v5;
NTSTATUS result;
unsigned __int64 Prcb;
VOID *v8;
int v9;
INT64 v10[10];
INT64 v11[10];
INT64 v12[14];
memset(v11, 0i64, 0x48u);
memset(v12, 0i64, 0x68u);
memset(v10, 0i64, 0x48u);
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x100ui64, 1416850774i64);
v5 = PoolWithTag;
if( !PoolWithTag )
return -1073741670;
Prcb = KeLoaderBlock_0->Prcb;
*(_DWORD *)PoolWithTag = a1;
*((_DWORD *)PoolWithTag + 1) = *(unsigned __int8 *)(Prcb + 209) | (*(unsigned __int8 *)(Prcb + 208) << 8);
*((_OWORD *)PoolWithTag + 2) = *(_OWORD *)a2;
*((_OWORD *)PoolWithTag + 3) = *(_OWORD *)(a2 + 16);
*((_OWORD *)PoolWithTag + 4) = *(_OWORD *)(a2 + 32);
*((_OWORD *)PoolWithTag + 5) = *(_OWORD *)(a2 + 48);
*((_OWORD *)PoolWithTag + 6) = *(_OWORD *)(a2 + 64);
*((_OWORD *)PoolWithTag + 7) = *(_OWORD *)(a2 + 80);
*((_OWORD *)PoolWithTag + 8) = *(_OWORD *)(a2 + 96);
*((_OWORD *)PoolWithTag + 9) = *(_OWORD *)(a2 + 112);
*((_OWORD *)PoolWithTag + 10) = *(_OWORD *)(a2 + 128);
*((_OWORD *)PoolWithTag + 11) = *(_OWORD *)(a2 + 144);
*((_OWORD *)PoolWithTag + 12) = *(_OWORD *)(a2 + 160);
*((_OWORD *)PoolWithTag + 13) = *(_OWORD *)(a2 + 176);
*((_OWORD *)PoolWithTag + 14) = *(_OWORD *)(a2 + 192);
*((_OWORD *)PoolWithTag + 15) = *(_OWORD *)(a2 + 208);
result = VslpLockPagesForTransfer((INT64)v11, Prcb - 384, 0xB080ui64, 2i64, 2);
if( result >= 0 )
{
v5[1] = (VOID *)v11[0];
v5[2] = (VOID *)v11[7];
LODWORD(v8) = MmGetPhysicalAddress(*(_QWORD *)(a2 + 176));
v5[3] = v8;
v9 = VslpLockPagesForTransfer((INT64)v10, (INT64)v5, 0x100ui64, 0i64, 0);
if( v9 >= 0 )
{
v12[1] = v10[0];
v12[2] = v10[7];
v9 = VslpEnterIumSecureMode(2u, 2, 0i64, (INT64)v12);
VslpUnlockPagesForTransfer((INT64 **)v10);
}
VslpUnlockPagesForTransfer((INT64 **)v11);
ExFreePoolWithTag(v5, 0);
return v9;
}
return result;
}Referenced by:
HvlHalStartVirtualProcessor