win10英雄连2兼容模式怎么显示检测到以兼容模式运行

1599人阅读
&&&&& 我们的程序有时候需要精确的判定当前运行在哪个系统下面,也就是说程序的某个功能可能需要知道当前运行在哪个真正的操作系统下,而操作系统提供了一个兼容模式功能,就是用户可以设置某个程序运行在某个模拟的更低的版本的操作系统下面,这是有好处的,因为某些程序在某些更高版本的操作系统下面可能发生兼容性问题而无法运行。在设置兼容模式运行后,程序里面调用ring3层的GetVersionEx得到的将是模拟的的操作系统版本,而不是真正的操作系统版本。
&&&&& 由此而引发两个问题:
&&&&& 1、怎么判定当前程序(自己)运行在兼容模式下了呢?
&&&&& 2、如果有一个需求,在安装时,怎么设置一个程序运行在某个低版本的操作系统兼容模式下呢?
&&&&& 先看下第2个问题,首先看一下在设置了兼容模式运行后,系统做了些什么事情?很容易做到,使用注册表工具对explorer.exe进行监控,在设置兼容模式应用或者确定后,发现系统在注册表 [HKCU/Software/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/Layers]
写下了如下一些东东:
&&&&&&系统把需要进行兼容模式运行的程序路径记录在这个下面,具体兼容哪个环境则由属性的值来确定,譬如WIN2000, NT4SP5, WIN95, WIN98, WINXPSP2, WINXPSP3, WINSRV03SP1, WINSRV08SP1, VISTARTM, VISTASP1, VISTASP2等等(不要在低版本的操作系统下兼容更高版本的操作系统,不会出问题,而是毫无意义,系统直接忽略)。有了这个就可以做到把某个程序写入兼容模式运行中。也可以保护这个注册表位置防止别人来使用兼容模式运行你的程序。
&&&&& 再看看第一个问题,研究下了微软实现兼容模式的原理,网上的资料很少,但是大概就是使用HOOK的原理,windows发现该程序需要进行兼容模式运行(通过查注册表啦,还有一些系统默认以兼容模式运行的程序,应该是记录在其他地方,没有深究),就会加载一些不同的系统DLL(在win32下一个应用程序想跑起来,是需要很多系统的DLL的)来进行程序的运行,大概情况如下,左边是非兼容模式运行时加载的一些DLL,右边是运行在兼容模式环境下后加载的一些DLL:
&&&&& 这是否就给了我们一些思路?可以检测当前程序加载的模块,如果有这些AcGenral.dll之类的模块存在,就认为是运行在兼容模式下呢?这个我没有去试过,但是我觉得可行。o(∩_∩)o
&&&&& 另外一种方法是从原理是来绕过,GetVersionEx这个API来之kernel32.dll,而kernel32.dll又调用了ntdll.dll里面的RtlGetVersion这个函数,如果我们直接调用呢?试了下也是有一定可行性的。不过悲剧的是,这个方法在vista及以上系统就无效了,可能是因为微软在实现兼容模式时,hook得更加深了。
&&&&& 360也有个兼容模式检测功能,去看了下他的实现,还不错。
&&&&& 然后去研究了下,发现很有道理,360的方式是先调用 GetVersionEx 得到一个版本号,譬如是5.0(2000系统),然后算出一个&#*10 + 0);然后调用文件版本API,取出文件ntoskrnl.exe的版本号,譬如是5.1.,然后算出一个&#*10
+ 1),对比前后两个值,如果不相等则认为自身运行在兼容模式下。具体分析可以见调试结果(call 0042980是去取ntoskrnl.exe是版本)。
&&&&& 下面是IDA反编译的结果:
&&&&& 还不错哦。
&&&&& [END]
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:676248次
积分:5783
积分:5783
排名:第4408名
转载:282篇
评论:46条
(7)(1)(2)(30)(10)(7)(11)(34)(24)(2)(5)(4)(2)(10)(3)(1)(2)(12)(23)(12)(5)(16)(30)(12)(1)(9)(6)(2)|  
|  
|  
|  
|  
只需一步,快速开始
查看: 7055|回复: 10
steam启动英雄连2老是说已经运行。到进入不了游戏。怎么办。
主题帖子积分
高级玩家, 积分 348, 距离下一级还需 252 积分
高级玩家, 积分 348, 距离下一级还需 252 积分
steam启动英雄连2老是说已经运行。到进入不了游戏。怎么办。
主题帖子积分
游戏达人, 积分 2080, 距离下一级还需 1420 积分
游戏达人, 积分 2080, 距离下一级还需 1420 积分
我的也是,要重启先电脑才行,最好 选自动登录
主题帖子积分
高级玩家, 积分 348, 距离下一级还需 252 积分
高级玩家, 积分 348, 距离下一级还需 252 积分
电脑从新启动了。还是进入不了游戏。无语了。~~~~~怎么办
主题帖子积分
超级玩家, 积分 923, 距离下一级还需 77 积分
超级玩家, 积分 923, 距离下一级还需 77 积分
可以尝试删掉根目录下ClientRegistry.blob
然后耐心等待,无响应很正常,等着就是了,建议你去做点别的事情,比如去lol鲁一盘再来看。
主题帖子积分
游戏狂人, 积分 1190, 距离下一级还需 810 积分
游戏狂人, 积分 1190, 距离下一级还需 810 积分
用任务管理器关闭一个coh2.exe的进程
主题帖子积分
高级玩家, 积分 348, 距离下一级还需 252 积分
高级玩家, 积分 348, 距离下一级还需 252 积分
我等很久了。没有反应。删除那个文件是在游戏目录删除还是在steam删除啊?
主题帖子积分
高级玩家, 积分 348, 距离下一级还需 252 积分
高级玩家, 积分 348, 距离下一级还需 252 积分
郁闷了。好不容易下载好。无法进入游戏?我是XP系统?XP系统能玩的吧?
主题帖子积分
高级玩家, 积分 348, 距离下一级还需 252 积分
高级玩家, 积分 348, 距离下一级还需 252 积分
公测停止了???
主题帖子积分
高级玩家, 积分 294, 距离下一级还需 306 积分
高级玩家, 积分 294, 距离下一级还需 306 积分
嗯 今晚结束
主题帖子积分
游戏达人, 积分 2080, 距离下一级还需 1420 积分
游戏达人, 积分 2080, 距离下一级还需 1420 积分
我的最近也是登录 经常没有反应,可以在任务管理器里吧那游戏程序关闭,多试几下,,我有时,试两下也不行,多次就可以,最好还有清理下电脑缓存这些
主题帖子积分
初级玩家, 积分 40, 距离下一级还需 60 积分
初级玩家, 积分 40, 距离下一级还需 60 积分
骚年,你没看官网的配置么?XP已经被无情的抛弃了~
Powered by通过命令行设置应用以兼容模式运行
每一代Windows发布后,总会有或多或少的程序因为种种原因不能运行。从Win7开始,微软提供了“以兼容模式运行”的功能,通过它你让某个程序自以为运行在WinXP或是Win98之类的老系统上(我不会告诉你这个可以用来在Win8上覆盖Flash的,会吗?)
这个功能实际上是可以通过命令行完成的:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 win10英雄连2兼容模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信