You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows WDI驱动示例:MiniportInitializeEx在步骤c执行失败求助

排查WDI驱动初始化在OID_WDI_SET_ADAPTER_CONFIGURATION后回滚失败的问题

我正在学习GitHub上微软Windows-driver-samples-master\network\wlan\WDI中的Windows WDI驱动示例,按照官方教程及示例代码编写代码。根据教程,MiniportInitializeEx在MiniportWdiOpenAdapter后会执行以下步骤:

  • a. 调用MiniportWdiTalTxRxInitialize初始化数据路径和交换处理程序
  • b. 调用OID_WDI_GET_ADAPTER_CAPABILITIES获取适配器能力
  • c. 调用OID_WDI_SET_ADAPTER_CONFIGURATION配置适配器
  • d. 若初始无线电状态不符合预期则调用OID_WDI_TASK_SET_RADIO_STATE设置状态
  • e. 调用MiniportWdiTalTxRxStart建立数据路径
  • f. 调用OID_WDI_TASK_CREATE_PORT创建初始端口

任何步骤失败,微软组件都会回滚前置操作导致初始化失败。我的调试日志显示执行完步骤c后触发了回滚,日志如下:

[DriverEntry:12] >>
[WdiInitialize:726] >>
[WdiInitialize:801] <<

[DriverEntry:25] <<

[AllocateAdapterHandler:161] >>
[AllocateAdapterHandler:200] <<

[OpenAdapterHandler:225] >>
[OpenAdapterHandler:232] <<

[TalTxRxInitializeHandler:631] >>
[TalTxRxInitializeHandler:695] <<

[OidRequestHandler:48] >>
[DbgPrintOidName:84] OID_WDI_GET_ADAPTER_CAPABILITIES
[OidRequestHandler:51] PortNumber:0
[OidRequestHandler:52] InputBufferLength: 16
[WdiOidGetAdapterCapabilities:471] >>
[WdiOidGetAdapterCapabilities:505] <<

[OidRequestHandler:89] BytesWritten: 203
[OidRequestHandler:92] <<

[OidRequestHandler:48] >>
[DbgPrintOidName:84] OID_WDI_SET_ADAPTER_CONFIGURATION
[OidRequestHandler:51] PortNumber:0
[OidRequestHandler:52] InputBufferLength: 47
[OidRequestHandler:89] BytesWritten: 16
[OidRequestHandler:92] <<

[TalTxRxDeinitializeHandler:708] >>
[TalTxRxDeinitializeHandler:713] <<

[CloseAdapterHandler:246] >>
[CloseAdapterHandler:252] <<

[FreeAdapterHandler:211] >>
[FreeAdapterHandler:212] <<

[UnloadHandler:27] >>
[UnloadHandler:33] <<

排查方向

  1. 检查OID请求的返回状态
    现有日志仅记录了字节写入量,未输出OID_WDI_SET_ADAPTER_CONFIGURATION的NTSTATUS返回值。需在OidRequestHandler中添加该OID的返回状态打印,确认是否返回了STATUS_SUCCESS以外的错误码(如STATUS_INVALID_PARAMETER、STATUS_UNSUCCESSFUL)——WDI框架会在OID请求失败时触发回滚流程。

  2. 验证配置参数的合法性
    该OID的输入缓冲区对应WDI_ADAPTER_CONFIGURATION结构,需重点检查:

    • DesiredPowerMode是否与之前OID_WDI_GET_ADAPTER_CAPABILITIES返回的支持模式匹配
    • DeviceSleepConfig、WakeUpCapabilities等字段是否符合硬件实际规格
    • 输入缓冲区长度(日志中为47)是否与结构实际大小一致,避免参数截断或内存越界
  3. 对照官方示例的实现细节
    检查你的WdiOidSetAdapterConfiguration函数是否遗漏关键步骤:

    • 是否正确将配置参数存储到适配器上下文
    • 是否向硬件下发了对应配置命令,且硬件返回成功响应
    • 输出缓冲区的WDI_ADAPTER_CONFIGURATION_COMPLETION结构中Status字段是否设置为WDI_STATUS_SUCCESS
  4. 确认硬件初始化状态
    执行配置OID前,需确保硬件处于就绪状态:

    • 硬件是否完成基础初始化,能够接收配置命令
    • 之前的MiniportWdiTalTxRxInitialize是否正确初始化了数据路径,确保配置命令可正常下发到硬件
  5. 启用WDI框架详细日志
    通过注册表开启WDI框架的调试日志:

    • 注册表路径:HKLM\System\CurrentControlSet\Services\WdiWiFi\Parameters
    • 添加DebugLevel DWORD值,设置为0x0000000F(启用所有日志类别)
    • 重启系统后重新触发初始化,查看框架日志获取回滚的具体触发原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:54:23