MiUpdateThunks

VOID __stdcall MiUpdateThunks(_LOADER_PARAMETER_BLOCK *LoaderBlock, PVOID OldAddress, PVOID NewAddress, UINT64 a4){
  char *v4; 
  char *v5; 
  char *v6; 
  signed __int64 v7; 
  unsigned __int64 *v9; 
  unsigned __int64 *v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  UINT64 Size; 
  LODWORD(Size) = 0;
  v4 = (char *)OldAddress + (unsigned int)(a4 - 1);
  v5 = (char *)LoaderBlock + 16;
  v6 = (char *)*((_QWORD *)LoaderBlock + 2);
  v7 = (_BYTE *)NewAddress - (_BYTE *)OldAddress;
  while( v6 != v5 )
  {
    LODWORD(v9) = RtlImageDirectoryEntryToData(*((PVOID *)v6 + 6), 1u, 0xCu, &Size);
    v10 = v9;
    if( v9 )
    {
      LODWORD(Size) = (unsigned int)Size >> 3;
      v11 = (unsigned int)Size;
      if( (_DWORD)Size )
      {
        do
        {
          v12 = *v10;
          if( *v10 >= (unsigned __int64)OldAddress && v12 <= (unsigned __int64)v4 )
            *v10 = v7 + v12;
          ++v10;
          --v11;
        }
        while( v11 );
      }
    }
    v6 = *(char **)v6;
  }
}

Referenced by:

MiBootImageRelocated