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