HvlSetupPhysicalFaultNotificationQueue

INT64 __fastcall HvlSetupPhysicalFaultNotificationQueue(_QWORD *a1, _DWORD *a2){
  INT64 v4; 
  void *v5; 
  unsigned int v6; 
  PHYSICAL_ADDRESS PhysicalAddress; 
  LONGLONG *v8; 
  LONGLONG *v9; 
  int v10; 
  __int16 v11; 
  __int128 v13[2]; 
  __int128 v14[2]; 
  memset(v14, 0, sizeof(v14));
  memset(v13, 0, sizeof(v13));
  LODWORD(v4) = HvlpAllocateOverlayPages((UINT64)a1);
  v5 = (void *)v4;
  if( v4 )
  {
    memset(v4, 0i64);
    PhysicalAddress = MmGetPhysicalAddress(v5);
    v8 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v14, 1, 0i64, 24i64);
    v9 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v13, 2, 0i64, 8i64);
    *((_DWORD *)v8 + 1) = 0;
    *(_DWORD *)v8 = 1;
    v8[1] = PhysicalAddress.QuadPart / 4096;
    v8[2] = 1i64;
    HvcallInitiateHypercall();
    v10 = *(_DWORD *)v9;
    LOWORD(PhysicalAddress.LowPart) = v11;
    HvlpReleaseHypercallPage((unsigned int *)v13);
    HvlpReleaseHypercallPage((unsigned int *)v14);
    if( LOWORD(PhysicalAddress.LowPart) )
    {
      v6 = -1073741823;
    }
    else
    {
      v6 = 0;
      *a1 = v5;
      v5 = 0i64;
      *a2 = v10 << 12;
    }
    if( v5 )
      MmFreeContiguousMemory(v5);
  }
  else
  {
    return(unsigned int)-1073741670;
  }
  return v6;
}

Referenced by:

KeInitSystem