思维调试:理解 DDE 的初始化过程
最近有人问我下面这个问题,调试我们依然可以使用之前我提到的理解 “思维调试” 来研究研究。
我们碰到了一个技术问题。初始程当在资源管理器中双击打开文档时,化过资源管理器不会启动我们的调试应用程序 。
更加奇怪的理解是,如果我们将一个调试器挂接到资源管理器进程,初始程并在 kernel32 模块的化过 CreateProcessW 处下断点,然后等待 CreateProcess 返回 ,调试并在调试器中继续执行 ,源码库理解则文档可以正常打开 。初始程但是化过,如果我们不做任何等待 ,调试应用程序也可以正常打开,理解但是初始程它不会加载文档 ,在这种情况下,我们得到了这样的错误信息 :Windows 找不到 ‘abc.lit’ 。请确保你输入了正确的文档名称,然后重试 。
下面是源码下载我们使用的命令行:“F:\Program Files\LitSoft\LitWare\LitWare.exe” /dde到底是哪里出了问题呢 ?如果你仔细研究过 DDE 初始化的工作原理文章,那么我想你应该已经知道原因了。
回想一下,通过 DDE 打开文档是通过首先查找 DDE 服务器来完成的,如果未找到,则手动启动服务器并重试 。上面的命令行显然已注册为与 ddeexec 关联的命令。云计算
我们有两个线索:首先是文档名称本身在命令行上不存在 。(这不可能是直接执行,因为程序不知道它应该打开什么文档!但是这条线索是命令行上的短语 /dde 。显然 ,资源管理器尝试第二个 DDE 对话打开文档时出现问题。让资源管理器等待几秒钟可以解决问题的事实使原因显而易见:DDE 服务器初始化和侦听自身的速度很慢 。高防服务器资源管理器启动服务器并尝试与其通信 ,但服务器尚未准备就绪 ,因此不响应 DDE 启动。
如何解决这个问题 ?
外壳程序假定 DDE 服务器在输入空闲时已准备好接受连接 。一旦 DDE 服务器上的 WaitForInputIdle 返回,资源管理器将第二次尝试启动 DDE 会话 。此修复程序是让应用程序在开始处理消息之前启动并运行其 DDE 服务器 。
我的猜测是应用程序将其 DDE 服务器移动到后台线程以提高启动性能 ,因为 DDE 服务器不参与正常的程序操作 。服务器租用
但是这太糟糕了,当传递 /dde 标志时 ,程序忘记在输入空闲之前启动并运行 DDE 服务器。让 DDE 服务器运行很重要,但它错过了正确的时间点 。总结
如果你要实现了一个 DDE 服务器,请确保在主线程开始处理消息之前就启动它。否则 ,应用程序启动和尝试与之通信的外壳之间存在竞争条件 。
相关文章
随着日常用品变得更加智能,我们的数字足迹正在不断扩大。从手表和汽车到教室黑板和婴儿摇篮,这些支持互联网的设备都充当物联网系统中的数据传输端点。物联网安全定义物联网安全是网络安全的一个焦点,它保护基于云2025-12-07
随着数字音乐的兴起和流行,越来越多的人开始对音乐剪辑软件产生了兴趣。然而,在市场上有许多不同类型的音乐剪辑软件可供选择,如何找到最适合自己的软件成为了一个关键问题。本文将通过分析一些受欢迎的音乐剪辑软2025-12-07
惠普笔记本BIOS设置U盘启动教程(一步步教你如何设置惠普笔记本的BIOS以实现U盘启动)
惠普笔记本是一款功能强大、性能稳定的电脑设备,但在某些情况下,我们可能需要通过U盘来启动系统。本文将详细介绍如何在惠普笔记本中设置BIOS以实现U盘启动的步骤,希望能帮助到有需要的读者。了解BIOS12025-12-07
Vodafone在欧洲的市场表现如何?(评估Vodafone作为欧洲主要电信运营商的关键因素)
Vodafone作为全球领先的电信运营商之一,其在欧洲市场的表现一直备受关注。本文将通过评估Vodafone在欧洲的市场地位、服务质量、竞争对手以及未来发展趋势等关键因素,对其在欧洲市场的表现进行深入2025-12-07
在计算机行业,“删库跑路”流传已久,早已成为诸多程序员用来发泄工作压力的口头语。估计很难想到,魔幻照进了现实,真的有“傻大胆”敢为人先,企图删库跑路,一走了之。近期,原链家网北京)科技有限公司一韩姓员2025-12-07
现代社会的快节奏生活让人们更加注重健康饮食,而厨房电器的发展也在不断满足人们的需求。格兰仕微蒸烤Q6作为一款集微波炉、蒸箱和烤箱于一体的多功能厨房电器,以其创新的技术和便利的操作,成为了现代家庭厨房中2025-12-07

最新评论