IommupHvGetPageFault
INT64 __fastcall IommupHvGetPageFault(
UINT64 *a1,
INT64 a2,
INT64 *a3,
_QWORD *a4,
_WORD *a5,
_DWORD *a6,
UINT64 *a7,
INT64 *a8){
__int64 v11;
UINT64 v12;
int v13;
__int64 v14;
int v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
v11 = *(_QWORD *)a1[1];
if( (_DWORD)v11 == HIDWORD(v11) )
{
if( *(_BYTE *)(a1[1] + 9) )
((void(__fastcall *)(_QWORD, INT64, INT64 *))qword_140C4A278)(*(unsigned int *)a1, a2, a3);
return 0i64;
}
else
{
v12 = a1[2];
v13 = 0;
*(_OWORD *)a2 = *(_OWORD *)(v12 + 40i64 * (unsigned int)v11);
*(_OWORD *)(a2 + 16) = *(_OWORD *)(v12 + 40i64 * (unsigned int)v11 + 16);
*(_QWORD *)(a2 + 32) = *(_QWORD *)(v12 + 40i64 * (unsigned int)v11 + 32);
if( (_DWORD)v11 != 101 )
v13 = v11 + 1;
*(_DWORD *)a1[1] = v13;
if( *(__int64 *)(a2 + 32) >= 0 )
{
v15 = *(_DWORD *)(a2 + 8);
if( (v15 & 0x100000) == 0 )
KeBugCheckEx(0x159u, 0x3100ui64, a2, *(_QWORD *)a2, *(_QWORD *)(a2 + 8));
if( (*(_BYTE *)(a2 + 16) & 8) != 0 )
KeBugCheckEx(0x159u, 0x3101ui64, a2, *(_QWORD *)a2, *(_QWORD *)(a2 + 8));
*(_DWORD *)a3 = v15 & 0xFFFFF;
*a4 = *(_QWORD *)a2;
*a5 = (*(_DWORD *)(a2 + 8) >> 21) & 0x1FF;
*a6 = 0;
*a7 = *(_QWORD *)(a2 + 16) & 0xFFFFFFFFFFFFF000ui64;
v16 = *(_QWORD *)(a2 + 16);
v17 = *(_DWORD *)(a2 + 16) & 1 | 2i64;
if( (*(_QWORD *)(a2 + 16) & 2) == 0 )
v17 = *(_QWORD *)(a2 + 16) & 1i64;
v18 = v17 | 4;
if( (v16 & 4) == 0 )
v18 = v17;
v19 = v18 | 0x10;
if( (*(_DWORD *)(a2 + 8) & 0x40000000) == 0 )
v19 = v18;
v14 = v19 | 0x20;
if( *(int *)(a2 + 8) >= 0 )
v14 = v19;
}
else
{
*(_DWORD *)a3 = -1;
*a4 = 0i64;
*a5 = -1;
*a6 = 0;
*a7 = 0i64;
v14 = 64i64;
}
*a8 = v14;
return 1i64;
}
}Referenced by:
No references.