Windows 10 中 32 位应用程序的 CreateWindowEx 函数问题

在某些情况下,升级到较新版本后,Windows 10在某些 32 位应用程序中创建窗口时从msctf.dll调用(msctf.dll)CreateWindowEx函数会导致崩溃或其他问题。在这篇文章中,我们将了解  CreateWindowEx函数是什么——探索导致此函数错误的可能原因,然后提供缓解问题的推荐解决方案。

了解CreateWindowEx函数

CreateWindowEx 函数

Windows应用程序,包括使用Windows窗体或Windows Presentation Foundation ( WPF ) 的 .NET 应用程序,通过调用CreateWindowExACreateWindowExW函数来创建它们的窗口。

这两个函数在内部调用一个通用的USER32函数,该函数将执行一些参数验证,例如调用中指定的窗口样式和句柄,如果指定了WS_EX_MDICHILD扩展窗口样式,则处理创建(WS_EX_MDICHILD)MDI子窗口并处理调用的当前激活上下文线。如果在CreateWindowEx调用的 USER32(CreateWindowEx)(USER32-side)一切正常,它会调用 CreateWindowEx 的内核模式 ( WIN32K (CreateWindowEx))(WIN32K)实现。

CreateWindowEx在尝试创建新窗口对象时将执行以下任务:

  • 确定为新窗口对象创建句柄是否会超过调用进程的 用户(User)句柄配额限制。
  • 从桌面堆中为新窗口对象分配内存。
  • 初始化新窗口对象的内存。
  • 在用户(User)句柄表中为新窗口对象创建句柄。

CreateWindowEx 失败的原因

一些可以触发CreateWindowEx函数问题的条件列举如下:

  • 指定的窗口类不存在。
  • 使用无效的窗口样式或扩展的窗口样式。
  • 使用无效的用户(User)句柄,例如窗口句柄和菜单句柄。
  • 试图在不指定父窗口的情况下创建子窗口。
  • 尝试创建子窗口或拥有的窗口,并且指定的父/所有者属于与调用线程不同的桌面。
  • 创建子窗口或拥有的窗口将超出嵌套窗口限制。
  • 创建一个新的窗口对象将超过调用进程的句柄配额。
  • 桌面堆中的可用堆空间不足,无法为新窗口对象分配内存。
  • 用户(User)句柄表中没有可用条目。

修复(Fix CreateWindowEx)Windows 10中 32 位应用程序的 CreateWindowEx 函数问题

Microsoft提供了针对CreateWindowEx函数问题的解决方法。

要解决此问题,您必须将Windows 10 安装回滚到以前的版本。

Windows 10中的回滚选项在您升级 Windows 10 安装后的10 天内(10 days)(大多数情况下)可用。

此操作会保留您的个人文件,但会删除升级后安装的应用程序和驱动程序,还会撤消您对设置所做的任何更改。

如果回滚选项不可用 -备份您的个人文件,那么您可以联系您的 IT 支持或帮助台或Microsoft 支持(Microsoft Support)以获取帮助以将您的设备恢复到以前的Window 10版本。

That’s it!

PS:Microsoft 正在制定解决方案,并将在即将发布的Windows 10版本中提供更新。(Windows 10)



About the author

在商业和技术方面,Windows 10 和 Windows 11/10 是非常重要的工具。它们使您可以比以往更轻松、更安全地与计算机交互,并运行功能强大但可自定义的应用程序,而不会带来任何安全风险。这些工具对于希望能够扩大其在线业务并吸引新客户的企业来说也是必不可少的。因此,我会说我在 Windows 10 和 Windows 11/10 方面的技能使我成为此类工作或业务的理想人选。



Related posts