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