日期:2014-05-17  浏览次数:20868 次

user32.dll 在内存中重定位

我安装了萝卜家园的主题包,之后运行一些软件(比如迅雷什么的)出现问题。上图是运行酷狗出现的错误截图。我上网查了,大都说是因为主题包把user32.dll给替换了,说找到原系统的安装盘,把它拷到电脑里覆盖。但是我现在没有那个安装盘,上网搜了一些,覆盖之后重启系统,也还是没用。可能是user32.dll的版本与我的不一样造成的吧。我也不想系统还原(系统还原之后很多软件不能用了,对吧),更不想重装系统。我的user32.dll版本的5.1.2600.5512,系统是xp sp3 的。请高手解决。

------解决方案--------------------
user32.dll不是windows系统比较重要的核心文件,没听说过在系统使用过程中能轻易把系统重要文件给替换掉,除非重启类操作

主题文件,一般修改的不是uxtheme.dll等文件么
------解决方案--------------------
问题出在 oleaut32.dll 上吧,不是 user32.dll
应该是主题包替换了 oleaut32.dll,所以更新个这个文件后再试试。
具体形成的原因和那些程序以及 oleaut32.dll 文件有关。那些程序在加载系统 dll 时,根据 IMPORT 节中的顺序进行加载。有些程序将 oleaut32.dll 排在比较前面,这里就是比 user32.dll 靠前,所以先加载 oleaut32.dll。可偏偏这个 oleaut32.dll 基址和 user32.dll 冲突。通常的这个冲突可以通过对后加载的 dll 进行基址重定位解决,但 user32.dll 又是个核心 dll,早已经存在于内存中的,无法再行调整,导致 user32.dll 无法载入。所以应该更新 oleaut32.dll 来避开对 user32.dll 基址的冲突。
这个问题以前在个 hp 的笔记本上遇见过,是声卡的附加程序和个帮助模块文件基址冲突。
另外,我 xp/sp3,user32 和 oleaut32 都是 5.1.2600.5512。加载基址分别为 77D10000 和 770F0000