HalpHvBuildDeviceId
CHAR __stdcall HalpHvBuildDeviceId(INT64 a1, INT64 *a2, CHAR a3, INT64 a4){
int v4;
__int16 v5;
int v6;
int v7;
char v8;
int v9;
int v10;
__int16 v11;
v4 = *(_DWORD *)a2;
*(_QWORD *)a4 = 0x4000000000000000i64;
v5 = *((_WORD *)a2 + 2);
*(_WORD *)(a4 + 2) = v5;
v6 = v4 - 1;
if( v6 )
{
v7 = v6 - 1;
if( v7 )
{
if( v7 == 1 )
{
v8 = *((_BYTE *)a2 + 8);
*(_WORD *)(a4 + 6) |= 4u;
*(_BYTE *)(a4 + 5) = v8;
LOBYTE(v5) = *((_BYTE *)a2 + 9);
*(_BYTE *)(a4 + 4) = v5;
}
}
else
{
v9 = *((unsigned __int8 *)a2 + 10);
*(_WORD *)(a4 + 6) &= ~4u;
*(_BYTE *)(a4 + 1) = *((_BYTE *)a2 + 8);
LOBYTE(v5) = 8 * *((_BYTE *)a2 + 9);
*(_BYTE *)a4 = v5 | v9 & 7;
}
}
else
{
v10 = *((unsigned __int8 *)a2 + 10);
*(_BYTE *)(a4 + 1) = *((_BYTE *)a2 + 8);
v11 = *(_WORD *)(a4 + 6);
*(_BYTE *)a4 = (8 * *((_BYTE *)a2 + 9)) | v10 & 7;
v5 = v11 & 0xFFF8;
*(_WORD *)(a4 + 6) = v5 | a3 & 3;
}
return v5;
}Referenced by:
HalpHvMapDeviceMsiRange
HalpHvUnmapDeviceMsiRange
HalpTimerInitializeHypervisorTimer