MiScanRelocationPage
INT64 MiScanRelocationPage(void){
unsigned int v0;
__int64 v1;
int v2;
_WORD *v3;
__int64 v4;
_WORD *a6;
__int64 v6;
int v7;
unsigned int a5;
int v9;
int v10;
int v11;
__int64 v12;
unsigned int i;
__int16 v14;
unsigned __int16 v15;
unsigned int v16;
INT64 result;
int v18;
__int64 v19;
__int64 a1;
_QWORD *a7;
v19 = v1;
v4 = a1;
a6 = v3;
v6 = v0;
v7 = 0;
a5 = 0;
v9 = 0;
v10 = 0;
v11 = v2;
v12 = v1;
for( i = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)a1 + 56i64) + 64i64); v11; ++a6 )
{
--v11;
v14 = *a6 >> 12;
v15 = *a6 & 0xFFF;
if( v14 )
{
if( v14 == 3 )
{
if( v15 > 0xFFCu )
{
v9 = 1;
v7 = 2;
a5 = 4;
}
}
else
{
if( v14 != 10 )
return 3221226089i64;
if( v15 > 0xFF8u )
{
v9 = 1;
a5 = 8;
}
v18 = 0;
if( v15 <= 0xFF8u )
v18 = v7;
v7 = v18;
}
}
if( v14 )
{
if( (v6 & 0xFFF) != 0 && v15 + (unsigned int)(v6 & 0xFFF) > 0xFFE )
return 3221226089i64;
v16 = v15 + (_DWORD)v6;
if( v16 < i )
return 3221226089i64;
}
else
{
v16 = v6 + v15;
}
if( v9 == 1 )
{
if( v10 == 1 )
return 3221225595i64;
result = MiCreateFixupRecord(v4, v12, v16, v7, a5, a6, a7);
if( (int)result < 0 )
return result;
if( (MiFlags & 0x40000) != 0 && (*(_DWORD *)(v4 + 92) & 0xC0000) != 0 )
{
a1 = 0i64;
if( (*((_BYTE *)MiOffsetToProtos((_CONTROL_AREA *)v4, v6 + v15 + (unsigned __int64)a5, (UINT64 *)&a1) + 32) & 4) != 0 )
return 3221225595i64;
}
v12 = v19;
v9 = 0;
v10 = 1;
}
}
return 0i64;
}Referenced by:
MiRelocateImage