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