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.