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