MiCreateFixupRecord

__int64 __fastcall MiCreateFixupRecord(__int64 a1, __int64 a2, unsigned int a3, int a4, int a5, _WORD *a6, _QWORD *a7){
  unsigned __int64 v7; 
  __int64 v9; 
  __int16 v10; 
  unsigned int v11; 
  int v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  __int64 v16; 
  v7 = a3;
  if( (a3 + 4096) >> 12 >= *(_DWORD *)(*(_QWORD *)a1 + 8i64) )
    return 3221225477i64;
  v9 = 0i64;
  HIDWORD(v16) = 0;
  v10 = *a6 >> 12;
  v11 = 4096 - a4;
  if( (a3 & 0xFFF) < 4096 - a4 )
  {
    v12 = a5;
    if( a5 == 4 )
    {
      LODWORD(v16) = *(_DWORD *)(a3 + a2);
      v9 = v16;
    }
    else
    {
      v9 = *(_QWORD *)(a3 + a2);
    }
  }
  else
  {
    *a6 &= 0xFFFu;
    v12 = a5;
  }
  LODWORD(v13) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
  v14 = v13;
  if( !v13 )
    return 3221225626i64;
  *(_WORD *)(v13 + 16) = v10;
  v15 = v7 + v12;
  *(_DWORD *)(v14 + 12) = v7 + v12;
  if( (v7 & 0xFFF) < v11 )
  {
    *(_DWORD *)(v14 + 8) = v7;
    *(_QWORD *)(v14 + 24) = v9;
    *(_QWORD *)(*a7 + 8 * (v7 >> 12)) |= 1ui64;
    v15 = *(_DWORD *)(v14 + 12);
  }
  else
  {
    *(_DWORD *)(v14 + 8) = (v7 & 0xFFFFF000) + 4096;
  }
  *(_QWORD *)(*a7 + 8 * ((unsigned __int64)v15 >> 12)) |= 1ui64;
  *(_QWORD *)v14 = a7[2];
  a7[2] = v14;
  return 0i64;
}

Referenced by:

MiScanRelocationPage