MiApplyCompressedFixups
VOID __stdcall MiApplyCompressedFixups(
ULONG_PTR ControlArea,
VOID *MappingVa,
_IMAGE_BASE_RELOCATION *NextBlock,
UINT64 Diff){
void *v5;
_QWORD *v6;
unsigned __int16 v7;
char v8;
unsigned __int8 *BugCheckParameter4;
int v10;
unsigned int v11;
__int16 v12;
v5 = *(void **)&ControlArea;
v6 = MappingVa;
v7 = 4;
v8 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(*(_QWORD *)&ControlArea + 96i64) + 32i64) + 68i64) & 0xF;
BugCheckParameter4 = (unsigned __int8 *)((unsigned __int64)NextBlock & 0xFFFFFFFFFFFFFFFEui64);
while( 1 )
{
v10 = *BugCheckParameter4++;
if( (v10 & 0xF0) == 0xF0 )
break;
if( (_BYTE)v10 != 0xEF )
{
if( (unsigned __int8)v10 >= 0xEBu )
{
v11 = 239 - v10;
goto LABEL_7;
}
v7 = v10;
goto LABEL_6;
}
v11 = *BugCheckParameter4;
if( v11 <= 4 )
KeBugCheckEx(0x1Au, (PVOID)0x31, v5, MappingVa, BugCheckParameter4);
++BugCheckParameter4;
do
{
LABEL_7:
v6 = (_QWORD *)((char *)v6 + v7);
if( v6 >= (_QWORD *)((char *)MappingVa + 4096) )
KeBugCheckEx(0x1Au, (PVOID)0x31, v5, MappingVa, BugCheckParameter4);
if( v8 == 10 )
{
if( ((unsigned __int16)v6 & 0xFFFu) <= 0xFF8 )
*v6 += Diff;
}
else if( v8 && v8 == 3 && ((unsigned __int16)v6 & 0xFFFu) <= 0xFFC )
{
*(_DWORD *)v6 += Diff;
}
--v11;
}
while( v11 );
}
v12 = *BugCheckParameter4;
if( (_BYTE)v12 )
{
v7 = (16 * v12) | v10 & 0xFF0F;
++BugCheckParameter4;
LABEL_6:
v11 = 1;
goto LABEL_7;
}
}Referenced by:
MiPerformFixups