HvlSetupPhysicalFaultNotificationQueue
__int64 __fastcall HvlSetupPhysicalFaultNotificationQueue(_QWORD *a1, _DWORD *a2){
VOID *OverlayPages;
VOID *v5;
unsigned int v6;
__int64 v7;
__int64 v8;
_DWORD *v9;
int *v10;
int v11;
__int16 v12;
PHYSICAL_ADDRESS v14[2];
__int128 v15;
__int128 PageInfo[2];
memset(PageInfo, 0, sizeof(PageInfo));
*(_OWORD *)&v14[0].anonymous_0.LowPart = 0i64;
v15 = 0i64;
OverlayPages = HvlpAllocateOverlayPages((UINT64)a1);
v5 = OverlayPages;
if( OverlayPages )
{
memset(OverlayPages, 0i64, 0x1000u);
LODWORD(v7) = MmGetPhysicalAddress((UINT64)v5);
v8 = v7;
v9 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)PageInfo, 1ui64, 0i64, 0x18ui64);
v10 = (int *)HvlpAcquireHypercallPage(v14, 2ui64, 0i64, 8ui64);
v9[1] = 0;
*v9 = 1;
*((_QWORD *)v9 + 1) = v8 / 4096;
*((_QWORD *)v9 + 2) = 1i64;
HvcallInitiateHypercall();
v11 = *v10;
LOWORD(v8) = v12;
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v14);
HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
if( (_WORD)v8 )
{
v6 = -1073741823;
}
else
{
v6 = 0;
*a1 = v5;
v5 = 0i64;
*a2 = v11 << 12;
}
if( v5 )
MmFreeContiguousMemory(v5);
}
else
{
return(unsigned int)-1073741670;
}
return v6;
}Referenced by:
KeInitSystem