打开控件 alt 删除菜单时,Windows 环境有哪些具体变化?

use*_*742 15 windows-7 keyboard-shortcuts windows-10

背景信息

因此,在 Windows 7 及更高版本上,当登录时按下 control + alt + delete 时会打开一个菜单。此菜单会弹出一个带有各种选项的 GUI。这是控件 alt 删除(或 CAD)菜单。当您尝试以管理员模式运行任何程序时,会出现一个名为“UAC 同意 UI”的弹出窗口,要求用户确认所需的管理员权限。

游戏

我看到发生这种情况的具体程序是Nintendo Nightmare,这是一款 2009 年 5 月的旧游戏。 然而,该游戏很可能是重新编译的,因为游戏内部报告说它是用 Game Maker 8 编译的,而 2009 年 5 月并不存在。

漏洞利用

由于未知和不清楚的原因,打开 CAD 菜单或同意 UI 对话框会导致游戏无法执行部分游戏代码。这包括碰撞检测和处理帧速率上限的任何代码。我只能在 Windows 7 上进行检查,但这也已被确认在 Windows 10 上也可以使用。我会询问是否有人可以在 Windows 8 上运行,但由于某些 Windows 8 midi 错误,该游戏甚至无法在 Windows 8 上运行。

为什么这甚至有助于理解

所以我和其他人快速运行这个游戏......或者至少尝试。我尤其对它非常恐惧。不管实际上有没有一种有用的方法,这个故障都可以潜在地用于节省运行时间。实际上,几乎立即会想到六个地点。

这是我大约一个月前制作的 TAS 视频,以供参考当前的速通路线:[TAS] Nintendo Nightmare in 24:04 by Typhon

在路线中,有以下关键点:

  1. 第一次 Boss 战中的剧本死亡。
  2. 最终马里奥级别死亡蛋部分。
  3. Link 在让 Jetpack 扭曲到地牢入口后尽快死亡。
  4. 链接尽快死亡,以摆脱秘密的 Arwing 关卡。
  5. Link 在让 Hookshot 传送到地牢入口后尽快死亡。
  6. Link 在让 Hammer 传送到地牢入口后尽快死亡。

对于其中五个简单地调用一个 bug 立即掉下地板将是最快的死亡方式,所以那些只通过使用这个 bug 而没有任何花哨的东西可以节省很少的时间。

不过,第二点更有用,意义更大。马里奥的死亡蛋部分同时是运行中最难的部分,也是迄今为止最长的部分,纯粹是因为敌人实体的数量庞大。在该区域花费的大部分时间都在杀死敌人。然而,通过在精确数量的帧中调用这个错误,玩家可以假设跳跃,然后让所有敌方实体从地板上掉下来,从而立即杀死房间里的一切。这样做很可能会在整个运行中减少五分之一的时间。

跳过第 2 点实际上是很长一段时间以来的主要兴趣点,找到一种跳过它的方法可能是最高优先级。

所以我试图确定这个错误为什么会在技术层面发生,以及如何在准确的时间潜在地复制它(即不实际打开那些侵入性弹出窗口之一)。

迄今为止的故事

所以我问过的其他一些人显然更了解 Game Maker 8.0 引擎的内部结构,显然这个 bug 会影响所有Game Maker 8.0 游戏,尽管这并没有说明多少,因为该 bug 在当前不再存在发布。因此,询问开发人员与询问其他熟悉引擎的人一样有用。

使用一些挖掘工具(别问我,我不知道),他们发现在主游戏循环中抛出了一个异常,代码“0EEDFADE”显然等同于一些未知的 Delphi 异常。这反过来会导致 gameLoop 跳过帧执行的其余部分。Game Maker 8 据说是用 Delphi 编写的,所以只能告诉我们某些东西收到了意外或无效的东西。同样,在这两点之间,他们缩小了必须发生的异常的范围,他们发现他们唯一能找到的 Windows API 是对 JoyGetPosEX 的调用,它显然用于操纵杆功能。显然,即使在没有操纵杆的游戏中,它仍然会被调用。

所以现在我只是想弄清楚这些对话框是什么导致操纵杆(?)功能中断,以及是否有更简单的方法来“中断操纵杆功能”。

Bob*_*Bob 29

Ctrl+ Alt+Delete的组合,更正式的安全警告序列,带来了对Windows安全对话框安全桌面。这是一个完全独立的桌面,与在 ( \Sessions\1\Windows\WinSta0\Winlogonvs \Sessions\1\Windows\WinSta0\Default) 1上运行的所有其他应用程序完全不同。Microsoft 文档中提供更多信息。

此行为自 Windows Vista 中引入安全桌面以来就存在。默认情况下,类似的过程用于 UAC 提升提示。

桌面切换可能会导致某些应用程序出现问题,尤其是那些使用 3D 图形的应用程序。在 Vista 的早期,由于它与早期 WDDM 图形驱动程序的交互方式,它特别慢。

作为替代方案,如果你的要求是,打开任务管理器,你可以这样做Ctrl+ Shift+Esc或通过任务栏上单击鼠标右键。这不会导致桌面切换。


1来自 Windows Internals 7th Ed Part 1 的第 7 章

  • @user64742 我怀疑(!)发生的事情是因为[输入桌面](https://docs.microsoft.com/en-us/windows/win32/winstation/desktops)在此过程中发生了变化,古老的多媒体操纵杆API 有点不高兴。请注意,现代软件倾向于将 DirectInput(也是旧版)或 XInput 用于操纵杆。您可能(?)在 [so](尽管您可能需要一个可重现/最少的代码示例)甚至 [retrocomputing.se] 上获得更深入的答案。WinMM API 是在 Win95/98 中引入的,从那时起就没有真正更新过。 (3认同)
  • @user64742 根据程序的年龄和性质,在使用较旧操作系统(XP、Win98)的虚拟机(VirtualBox 等)中运行它可能会更幸运。或者通过 Linux 上的 WINE,它比现代 Windows 更好地支持一些旧的 Windows API。还有 [WINE on Windows](https://github.com/otya128/winevdm) 实现可能会有所帮助。 (2认同)