HalpHvInitSegRegister
NTSTATUS __stdcall HalpHvInitSegRegister(INT64 a1, UINT16 a2, INT64 a3){
__int64 v3;
unsigned __int64 v4;
unsigned __int64 v5;
int v6;
int v7;
int v8;
__int16 v9;
NTSTATUS result;
*(_WORD *)(a3 + 12) = a2;
if( a2 )
{
v3 = *(_QWORD *)(a1 + 8);
v4 = (unsigned __int64)a2 >> 3;
if( (*(_DWORD *)(v3 + 8 * v4 + 4) & 0x1000) != 0 )
v5 = *(unsigned __int8 *)(v3 + 8 * v4 + 7);
else
v5 = *(unsigned __int8 *)(v3 + 8 * v4 + 7) | ((unsigned __int64)*(unsigned int *)(v3 + 8 * v4 + 8) << 8);
*(_QWORD *)a3 = *(unsigned __int16 *)(v3 + 8 * v4 + 2) | ((*(unsigned __int8 *)(v3 + 8 * v4 + 4) | (v5 << 8)) << 16);
v6 = *(unsigned __int16 *)(v3 + 8 * v4);
v7 = *(_DWORD *)(v3 + 8 * v4 + 4);
*(_WORD *)(a3 + 14) = 0;
v8 = v6 | v7 & 0xF0000;
*(_DWORD *)(a3 + 8) = v8;
LOWORD(v6) = *(unsigned __int8 *)(v3 + 8 * v4 + 5);
*(_WORD *)(a3 + 14) = v6;
v9 = v6 | (*(unsigned __int8 *)(v3 + 8 * v4 + 6) << 8);
result = 61695;
v9 &= 0xF0FFu;
*(_WORD *)(a3 + 14) = v9;
if( v9 < 0 )
*(_DWORD *)(a3 + 8) = (v8 << 12) + 4095;
}
else
{
*(_QWORD *)a3 = 0i64;
*(_DWORD *)(a3 + 8) = 0;
*(_WORD *)(a3 + 14) = 0;
}
return result;
}Referenced by:
HalpHvStartProcessor