HvlpLpCpuid

VOID __stdcall HvlpLpCpuid(UINT64 LpIndex, UINT64 Eax, UINT64 Ecx, _CPU_INFO *CpuInfo){
  int v5; 
  int v6; 
  int v7; 
  __int64 v8; 
  _DWORD *v9; 
  unsigned int *v10; 
  PHYSICAL_ADDRESS v11[2]; 
  __int128 v12; 
  PHYSICAL_ADDRESS PageInfo[2]; 
  __int128 v14; 

  v5 = Ecx;
  v6 = Eax;
  v7 = LpIndex;
  *(_OWORD *)&PageInfo[0].anonymous_0.LowPart = 0i64;
  v14 = 0i64;
  *(_OWORD *)&v11[0].anonymous_0.LowPart = 0i64;
  v12 = 0i64;
  if( (_DWORD)LpIndex == -1 )
  {
    v8 = __cpuid(Eax, Ecx);
    CpuInfo->AsUINT32[0] = EAX(v8);
    CpuInfo->AsUINT32[1] = EBX(v8);
    CpuInfo->AsUINT32[2] = ECX(v8);
    CpuInfo->AsUINT32[3] = EDX(v8);
  }
  else
  {
    v9 = HvlpAcquireHypercallPage(PageInfo, 1ui64, 0i64, 0x10ui64);
    v10 = (unsigned int *)HvlpAcquireHypercallPage(v11, 2ui64, 0i64, 0x10ui64);
    *v9 = v7;
    v9[1] = 0x10000;
    v9[2] = v6;
    v9[3] = v5;
    HvcallInitiateHypercall();
    CpuInfo->AsUINT32[0] = *v10;
    CpuInfo->AsUINT32[1] = v10[1];
    CpuInfo->AsUINT32[2] = v10[2];
    CpuInfo->AsUINT32[3] = v10[3];
    HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v11);
    HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
  }
}

Referenced by:

HvlpDiscoverTopologyAmd
HvlpDiscoverTopologyIntel