行业资讯
windows网络适配器驱动开发-编写 MBBCx 客户端驱动程序(上)
MBBCx 客户端驱动程序的 INF 文件与其他 NetAdapterCx 客户端驱动程序相同。确保 INF 文件满足通用要求。初始化设备除了 NetAdapterCx 为 NetAdapter 设备初始化所需的任务外MBB 客户端驱动程序还必须在其 EvtDriverDeviceAdd 回调函数中执行以下任务在调用 NetDeviceInitConfig 之后调用MBB_DEVICE_CONFIG_INIT但在调用 WdfDeviceCreate 之前引用框架传入的同一WDFDEVICE_INIT对象。调用 MbbDeviceInitialize 以使用初始化 的MBB_DEVICE_CONFIG 结构和从 WdfDeviceCreate 获取的 WDFDEVICE 对象注册 MBB 设备特定的回调函数。以下示例演示如何初始化 MBB 设备。 为了清楚起见错误处理已被排除。status NetDeviceInitConfig(deviceInit); status MbbDeviceInitConfig(deviceInit); // Set up other callbacks such as Pnp and Power policy status WdfDeviceCreate(deviceInit, deviceAttributes, wdfDevice); MBB_DEVICE_CONFIG mbbDeviceConfig; MBB_DEVICE_CONFIG_INIT(mbbDeviceConfig, EvtMbbDeviceSendMbimFragment, EvtMbbDeviceReceiveMbimFragment, EvtMbbDeviceSendServiceSessionData, EvtMbbDeviceCreateAdapter); status MbbDeviceInitialize(wdfDevice, mbbDeviceConfig);与其他类型的 NetAdapterCx 驱动程序不同MBB 客户端驱动程序不得从 EvtDriverDeviceAdd 回调函数中创建 NETADAPTER 对象。 相反MBBCx 会指示它稍后再这样做。接下来客户端驱动程序必须调用 MbbDeviceSetMbimParameters通常位于后面的 EvtDevicePrepareHardware 回调函数中。此消息流图说明了初始化过程。此消息流图说明了初始化过程。处理 MBIM 控制消息MBBCx 使用 MBIM 规范 Rev 1.0、第 8 节、9 和 10 中为控制平面定义的标准 MBIM 控件命令。 命令和响应通过 MBBCx 提供的客户端驱动程序和 API 提供的一组回调函数交换。 MBBCx 通过使用以下函数调用来模拟 MBIM 设备的操作模型如 MBIM 规范版本 1.0 第 5.3 节中所定义MBBCx 通过调用其 EvtMbbDeviceSendMbimFragment 回调函数将 MBIM 命令消息发送到客户端驱动程序。 客户端驱动程序通过调用 MbbRequestComplete 异步完成此发送请求。客户端驱动程序通过调用 MbbDeviceResponseAvailable 来指示结果的可用性。MBBCx 通过调用其 EvtMbbDeviceReceiveMbimFragment 回调函数从客户端驱动程序提取 MBIM 响应消息。 客户端驱动程序通过调用 MbbRequestCompleteWithInformation 异步完成此 get-response 请求。MBB 客户端驱动程序可以调用 MbbDeviceResponseAvailable 来通知 MBBCx 有未请求的设备事件。 然后MBBCx 从客户端驱动程序检索信息这与它提取 MBIM 响应消息的方式类似。下图演示了 MBBCx 客户端驱动程序消息交换流。MBIM 控制消息的同步MBBCx 框架始终将调用序列化到客户端驱动程序的 EvtMbbDeviceSendMbimFragment 和 EvtMbbDeviceReceiveMbimFragment 回调函数中。 在客户端驱动程序调用 MbbRequestComplete 或 MbbRequestCompleteWithInformation 之前框架不会发出任何新调用。虽然保证客户端驱动程序不会接收重叠的 EvtMbbDeviceSendMbimFragment 或 EvtMbbDeviceReceiveMbimFragment 回调但在设备提供上一个命令的响应之前它可能会连续接收对它们的多次调用。如果设备未处于 D0 状态MBBCx 框架将首先将设备引入 D0换句话说在调用 EvtMbbDeviceSendMbimFragment 或 EvtMbbDeviceReceiveMbimFragment 之前调用 EvtDeviceDeviceD0Entry。 MBBCx 框架还保证它将设备保持为 D0 状态这意味着在客户端调用 MbbRequestComplete 或 MbbRequestCompleteWithInformation 之前它不会调用 EvtDeviceD0Exit。
郑州网站建设
网页设计
企业官网