You need to enable JavaScript to run this app. Windows10调用DxDiag接口触发Miracast相关CWiFiDisplayException崩溃问询
优惠活动
大模型
产品
解决方案
定价
更多

Windows10调用DxDiag接口触发Miracast相关CWiFiDisplayException崩溃问询

根本原因

该问题是Windows 10原生系统组件的已知bug,仅在1903到21H1区间的特定Win10版本上触发,崩溃路径如下:
调用DxDiag接口枚举显示设备属性时,dxdiagn.dll会内部调用WiFiDisplay.dll的IsMiracastSupportedByWlan接口检测Miracast支持状态,该接口会进一步调用wlanapi的WFDOpenHandle打开Wi-Fi Direct显示服务句柄。当系统Miracast服务状态异常、WLAN驱动存在兼容性问题,或Wi-Fi Direct组件未正常初始化时,WFDOpenHandle内部会触发未捕获的RPC异常直接向上抛出,而dxdiagn.dll未对这部分异常做捕获处理,最终导致进程崩溃,因触发条件和设备环境强相关,所以表现为偶现。

可行的规避方案

  • 方案1:为DxDiag调用段添加结构化异常处理
    在调用IDxDiagProvider相关接口的代码外层添加SEH(结构化异常处理),捕获所有系统抛出的未预期异常,避免进程直接崩溃,参考实现如下:
__try
{
    // 此处放置原有DxDiag相关调用代码
    if (SUCCEEDED(dxDiagProvider->Initialize(&initParams)) && SUCCEEDED(dxDiagProvider->GetRootContainer(&rootContainer)))
    {
      IDxDiagContainer* childContainer;
      if (SUCCEEDED(rootContainer->GetChildContainer(L"DxDiag_DisplayDevices", &childContainer)))
        childContainer->Release();
      rootContainer->Release();
    }
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
    // 异常分支标记DxDiag信息获取失败即可,不影响主流程
}
  • 方案2:改用其他接口采集显示设备信息
    如果不需要DxDiag提供的特殊显示属性,可以直接使用EnumDisplayDevices、Direct3D设备枚举等原生接口获取显卡、显示设备信息,完全规避调用dxdiagn.dll相关接口,从根源上避免触发该问题。
  • 方案3:引导用户更新系统和驱动
    面向终端用户的软件可以提示偶发崩溃的用户安装Windows最新累积更新,或升级无线网卡驱动,部分新版本的Win10累积更新已经修复了该异常未捕获的问题。

内容的提问来源于stack exchange,提问作者Mats391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 21:09:01