HvlGetCoverageData

BOOL __fastcall HvlGetCoverageData(CHAR a1, UINT64 a2, VOID *a3){
  __int16 v3; 
  bool v5; 
  _MDL *Mdl; 
  _MDL *v7; 
  unsigned __int64 v8; 
  LONGLONG *v9; 
  __int16 v10; 
  __int128 v12[2]; 
  __int128 v13[2]; 
  char v14[144]; 
  char v15[2064]; 
  v3 = (__int16)a3;
  v5 = 0;
  memset(v13, 0, sizeof(v13));
  memset(v12, 0, sizeof(v12));
  Mdl = IoAllocateMdl(a3, a2, 0, 0, 0i64);
  v7 = Mdl;
  if( Mdl )
  {
    MmBuildMdlForNonPagedPool(Mdl);
    v8 = ((v3 & 0xFFF) + 4095i64 + (unsigned __int64)v7->ByteCount) >> 12;
    v9 = HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v13, 1, (__int64)v15, 1032i64);
    HvlpAcquireHypercallPage((PHYSICAL_ADDRESS *)v12, 2, (__int64)v14, 72i64);
    *(_DWORD *)v9 = (a1 != 0) + 1;
    *((_DWORD *)v9 + 1) = v8;
    memmove((UINT8 *)v9 + 8, (UINT8 *)&v7[1], 8i64 * (unsigned int)v8);
    HvcallInitiateHypercall();
    LOWORD(v9) = v10;
    HvlpReleaseHypercallPage((unsigned int *)v12);
    HvlpReleaseHypercallPage((unsigned int *)v13);
    v5 = (_WORD)v9 == 0;
    IoFreeMdl(v7);
  }
  LOBYTE(Mdl) = v5;
  return(int)Mdl;
}

Referenced by:

ExpCovQueryHypervisorInformation