MiScanRelocationPage

NTSTATUS __stdcall MiScanRelocationPage(
        VOID *ImageBase,
        UINT64 Rva,
        UINT64 NumberOfEntries,
        UINT16 *NextOffset,
        _CONTROL_AREA *ControlArea,
        _MI_DYNAMIC_RELOCATIONS *DynamicRelocations){
  _CONTROL_AREA *v6; 
  __int64 v8; 
  unsigned int v9; 
  unsigned int v10; 
  int v11; 
  int v12; 
  int v13; 
  VOID *v14; 
  unsigned int i; 
  __int16 v16; 
  unsigned __int16 v17; 
  UINT64 v18; 
  NTSTATUS result; 
  unsigned int v20; 
  UINT64 FixupLength; 

  v6 = ControlArea;
  v8 = (unsigned int)Rva;
  v9 = 0;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v13 = NumberOfEntries;
  v14 = ImageBase;
  for( i = ControlArea->Segment->u2.ImageInformation->InternalImageInformation.SizeOfHeaders; v13; ++NextOffset )
  {
    --v13;
    v16 = *NextOffset >> 12;
    v17 = *NextOffset & 0xFFF;
    if( v16 )
    {
      if( v16 == 3 )
      {
        if( v17 > 0xFFCu )
        {
          v11 = 1;
          v9 = 2;
          v10 = 4;
        }
      }
      else
      {
        if( v16 != 10 )
          return -1073741207;
        if( v17 > 0xFF8u )
        {
          v11 = 1;
          v10 = 8;
        }
        v20 = 0;
        if( v17 <= 0xFF8u )
          v20 = v9;
        v9 = v20;
      }
    }
    if( v16 )
    {
      if( (v8 & 0xFFF) != 0 && v17 + (unsigned int)(v8 & 0xFFF) > 0xFFE )
        return -1073741207;
      v18 = v17 + (unsigned int)v8;
      if( (unsigned int)v18 < i )
        return -1073741207;
    }
    else
    {
      v18 = (unsigned int)v8 + v17;
    }
    if( v11 == 1 )
    {
      if( v12 == 1 )
        return -1073741701;
      LODWORD(FixupLength) = v10;
      result = MiCreateFixupRecord(v6, v14, v18, v9, FixupLength, NextOffset, DynamicRelocations);
      if( result < 0 )
        return result;
      if( (MiFlags & 0x40000) != 0 && (v6->u2.WritableUserReferences & 0xC0000) != 0 )
      {
        ControlArea = 0i64;
        if( (MiOffsetToProtos(v6, v8 + v17 + (unsigned __int64)v10, (UINT64 *)&ControlArea)->u.LongFlags & 4) != 0 )
          return -1073741701;
      }
      v14 = ImageBase;
      v11 = 0;
      v12 = 1;
    }
  }
  return 0;
}

Referenced by:

MiRelocateImage