windows网络适配器驱动开发-编写 MBBCx 客户端驱动程序(下)

📅 2026/7/21 8:18:34
windows网络适配器驱动开发-编写 MBBCx 客户端驱动程序(下)
NETADAPTER 对象的生存期在 MBB-NetAdapter 客户端驱动模型中NETADAPTER 对象的创建与销毁完全由 MBBCx 控制这与其他类型的 NetAdapterCx 客户端驱动程序存在显著差异。创建时机与方式与其他 NetAdapterCx 驱动程序在 EvtDriverDeviceAdd 回调中自行创建 NETADAPTER 对象不同MBB 客户端驱动程序不得在该回调中创建 NETADAPTER 对象。相反NETADAPTER 对象的创建由 MBBCx 在需要建立数据会话时触发。MBBCx 会调用客户端驱动程序的 EvtMbbDeviceCreateAdapter 回调函数指示其创建一个 NETADAPTER 对象。此回调至少会被调用一次用于建立主 PDP 上下文或默认 EPS 承载之后可能被多次调用每次对应一个需要建立的数据会话。在 EvtMbbDeviceCreateAdapter 回调中客户端驱动程序负责调用 NetAdapterCreate 创建对象并必须在返回前调用 NetAdapterStart 启动适配器。销毁时机与方式当数据会话被停用例如额外的 PDP 上下文或 EPS 承载被去激活后对应的 NETADAPTER 对象便不再需要。此时MBBCx 会自动销毁该 NETADAPTER 对象。客户端驱动程序绝对不得在创建的 NETADAPTER 对象上调用 WdfObjectDelete对象的销毁由框架全权管理。资源清理如果客户端驱动程序需要在 NETADAPTER 对象销毁时清理与其绑定的上下文数据如为对象分配的私有内存、打开的设备句柄等则必须在调用 NetAdapterCreate 时在对象属性WDF_OBJECT_ATTRIBUTES结构中提供 EvtDestroyCallback 回调函数。当 MBBCx 销毁 NETADAPTER 对象时框架会调用此回调让驱动程序有机会执行最后的清理工作从而避免资源泄漏。MBB 设备的电源管理MBB 设备通常通过 USB 连接到现代待机Modern Standby平台。对于电源管理MBB 客户端驱动程序应遵循与其他类型 NetAdapterCx 客户端驱动程序相同的模式即使用 NETPOWERSETTINGS 对象。具体而言驱动程序通过 NETPOWERSETTINGS 对象向电源管理框架报告其电源管理能力和唤醒功能。这包括设备支持的电源状态、从低功耗状态恢复的时间等。此外驱动程序还需处理标准的 WDF 电源管理事件回调如 EvtDeviceD0Entry 和 EvtDeviceD0Exit在设备电源状态转换时执行必要的硬件操作。需要注意的是虽然驱动程序使用通用的 WDF/NetAdapterCx 电源管理框架但 MBB 设备本身有一套特定的电源管理模式。这些模式是预配置状态、连接状态和无线电电源状态的组合。模式之间的转换通常由移动宽带类驱动程序或通过 USB 总线命令触发。不过在 MBBCx 客户端驱动程序层面电源管理主要通过标准的 WDF 和 NetAdapterCx 接口来实现。处理设备服务会话DSS设备服务会话Device Service Session, DSS是 MBBCx 提供的一种机制允许上层应用程序与调制解调器设备进行私有数据交换。DSS 数据的收发由 MBBCx 通过两个核心回调函数与客户端驱动程序交互。下行数据应用程序 → 设备当应用程序向下发送 DSS 数据到调制解调器设备时MBBCx 会调用客户端驱动程序的 EvtMbbDeviceSendServiceSessionData 回调函数。在此回调中驱动程序需要异步地将数据发送到其硬件设备。数据包含在框架传入的 WDFMEMORY 对象中。关键在于驱动程序完成数据发送后无论成功或失败必须调用 MbbDeviceSendServiceSessionDataComplete 方法。此调用会通知 MBBCx 发送操作已完成并释放之前为 DSS 数据分配的内存。如果驱动程序忘记调用此方法将导致内存泄漏。上行数据设备 → 应用程序当调制解调器有数据需要传递给应用程序时客户端驱动程序应调用 MbbDeviceReceiveDeviceServiceSessionData 方法。驱动程序需自行分配一个 WDFMEMORY 对象来存放从设备接收到的数据然后调用此方法将数据和对应的会话 IDSessionId传递给 MBBCx。MBBCx 随后会将这些数据路由到发起请求的应用程序。在调用 MbbDeviceReceiveDeviceServiceSessionData 后驱动程序通常可以调用 WdfObjectDelete 来释放其分配的 WDFMEMORY 对象。总结综上所述MBB-NetAdapter 客户端驱动程序在 NETADAPTER 对象管理上遵循“MBBCx 控制生命周期客户端驱动负责实现创建与清理”的原则在电源管理上复用标准的 NetAdapterCx 机制在设备服务会话处理上则通过明确的异步回调与内存管理约定实现了应用程序与调制解调器设备之间的私有数据通道。理解这些机制是编写稳定、高效的 MBB 客户端驱动程序的基础。