防止 1995 年游戏中的 ForceDisplayMode 变化

防止 1995 年游戏中的 ForceDisplayMode 变化

我正在对 Windows 3.1/95 进行逆向工程游戏从 1995 年开始,这会在启动时将我的显示分辨率更改为 800x600。我想阻止此分辨率更改,而是以窗口模式运行游戏。但是,我无法确定此更改在​​代码中发生的位置。

当我将 x32dbg 连接到游戏时,我注意到分辨率更改似乎在执行主函数之前就发生了,更具体地说是在 apphelp.dll 中。我在执行分辨率更改的函数中的注册表中发现了以下内容。

edx:L"__COMPAT_LAYER=HighDpiAware", [ebx+8]:L"ForceDisplayMode"

我想了解为什么 Windows 决定使用 800x600 的 ForceDisplayMode 以及如何防止这种情况发生。

答案1

更新 PE 头

我找到了该问题的解决方案,即更新可执行文件的 PE 标头以适应较新版本的 Windows。我尝试了不同的组合,只有使用 Windows 8 值(版本 6.2)才有效。以下是详细步骤:

步骤如下:

  • 下载并安装PE编辑器,例如CFF 探索者
  • 在 PE 编辑器中打开可执行文件。
  • 导航到“可选标题”部分以修改以下字段:
    • 主要操作系统版本 -> 6
    • 次要操作系统版本 -> 2
    • 主要子系统版本 -> 6
    • 次要子系统版本 -> 2
  • 保存

注意:使用 Windows 7 值仍会导致应用程序调整大小,而使用 Windows 10 值会导致崩溃。将 PE 标头更新为 Windows 8 值(6 和 2)是我发现的唯一成功组合。

相关内容