当前位置: 首页 > news >正文

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

为 PDP 上下文/EPS 载体创建 NetAdapter 接口

在建立数据会话之前,MBBCx 将指示客户端驱动程序创建 NETADAPTER 对象,MBBCx 将使用它来表示激活的数据会话的网络接口。 这是通过 MBBCx 调用客户端驱动程序的 EvtMbbDeviceCreateAdapter 回调函数来实现的。

在 EvtMbbDeviceCreateAdapter 回调函数的实现中,MBBCx 客户端驱动程序必须首先执行与任何 NetAdapterCx 客户端驱动程序创建 NETADAPTER 对象所需的相同任务。 此外,它还必须执行以下附加任务:

  • 在 NetAdapterCreate 创建的 NETADAPTER 对象上调用 MbbAdapterInitialize。
  • 调用 MbbAdapterinitialize 后,调用 MbbAdapterGetSessionId 以检索 MBBCx 打算使用此 NETADAPTER 对象的数据会话 ID。 例如,如果返回的值为 0,则表示 MBBCx 会将此 NETADAPTER 接口用于由主 PDP 上下文/默认 EPS 持有者建立的数据会话。
  • 建议 MBBCx 客户端驱动程序在创建的 NETADAPTER 对象和返回的 SessionId 之间保留内部映射。 这有助于跟踪数据会话到 NETADAPTER 对象的关系,当激活多个 PDP 上下文/EPS 载体时尤其有用。
  • 在从 EvtMbbDeviceCreateAdapter返回之前,客户端驱动程序必须通过调用 NetAdapterStart来启动适配器。
  • 还可以通过在 调用 NetAdapterStart之前调用其中一个或多个函数来设置适配器的功能:
NetAdapterSetDatapathCapabilities NetAdapterSetLinkLayerCapabilities NetAdapterSetLinkLayerMtuSize

MBBCx 至少调用此回调函数一次,因此主 PDP 上下文/默认 EPS 载体始终有一个 NETADPATER 对象。 如果激活了多个 PDP 上下文/EPS 载体,MBBCx 可能会多次调用此回调函数,每次建立数据会话时调用一次。 NETADAPTER 对象和数据会话表示的网络接口之间必须存在一对一关系,如下图所示。

以下示例演示如何为数据会话创建 NETADAPTER 对象。 请注意,为简洁和清晰起见,设置适配器功能所需的错误处理和代码已省略。

NTSTATUS EvtMbbDeviceCreateAdapter( WDFDEVICE Device, PNETADAPTER_INIT AdapterInit ) { // Get the client driver defined per-device context PMY_DEVICE_CONTEXT deviceContext = MyGetDeviceContext(Device); // Set up the client driver defined per-adapter context WDF_OBJECT_ATTRIBUTES adapterAttributes; WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&adapterAttributes, MY_NETADAPTER_CONTEXT); // Create the NETADAPTER object NETADAPTER netAdapter; NTSTATUS status = NetAdapterCreate(AdapterInit, &adapterAttributes, &netAdapter); // Initialize the adapter for MBB status = MbbAdapterInitialize(netAdapter); // Retrieve the Session ID and use an array to store // the session <-> NETADAPTER object mapping ULONG sessionId; PMY_NETADAPTER_CONTEXT netAdapterContext = MyGetNetAdapterContext(netAdapter); netAdapterContext->NetAdapter = netAdapter; sessionId = MbbAdapterGetSessionId(netAdapter); netAdapterContext->SessionId = sessionId; deviceContext->Sessions[sessionId].NetAdapterContext = netAdapterContext; // // Optional: set adapter capabilities // ... NetAdapterSetDatapathCapabilities(netAdapter, &txCapabilities, &rxCapabilities); ... NetAdapterSetLinkLayerCapabilities(netAdapter, &linkLayerCapabilities); ... NetAdapterSetLinkLayerMtuSize(netAdapter, MY_MAX_PACKET_SIZE - ETHERNET_HEADER_LENGTH); // // Required: start the adapter // status = NetAdapterStart(netAdapter); return status; }

MBBCx 保证在使用相同会话 ID 请求 MBIM_CID_CONNECT 之前调用 EvtMbbDeviceCreateAdapter。 下列流程图显示了客户端驱动程序与类扩展在创建 NETADAPTER 对象时的交互。

当 EvtDevicePrepareHardware 成功完成时,MBBCx 将启动创建用于主 PDP 上下文/默认 EPS 承载的 NETADAPTER 对象的流程。

每当应用程序请求按需连接时, WwanSvc 就会触发用于为辅助 PDP 上下文/专用 EPS 持有者创建 NETADAPTER 对象的流。

http://www.jsqmd.com/news/1233452/

相关文章:

  • AI大模型与数学 第3课:极限定义、极限四则运算法则
  • 公共艺术装置设计与制作全流程解析
  • k8s可视化看板嵌入AI助手(悬浮对话球)
  • KVM内存虚拟化中的EPT/NPT技术解析
  • 锂电暴风机哪家好? - 中媒介
  • 嵌入式系统高速启动:GPIO与XINTF并行引导模式深度解析
  • C28x DSP SCI增强功能:FIFO与自动波特率检测实战解析
  • 基于STM32单片机温控风扇温度采集PWM调速无线视频监控/WiFi/蓝牙APP设计DIY-T083
  • 多维聚合不是求和:数据空间建模与指标活化实战
  • 神经网络可解释性:从激活最大化到Grad-CAM的实践
  • 嵌入式Linux开发板AI部署实战:从MobileNet模型到API服务
  • 打卡信奥刷题(3459)用C++实现信奥题 P10492 [ICPC 2003 Aizu R] Weather Forecast
  • 在自动化脚本中如何实现播音?
  • 移动游戏开发中PVRTC纹理压缩的完整工作流与避坑指南
  • 2026软件测试工程师学习路线(附详细技能树)
  • 河北针织服装品控哪家推荐? - 中媒介
  • C++高性能Remez算法工具箱:从极小化极大原理到工程实现
  • SillyTavern终极指南:如何打造你的专属AI对话助手
  • SAP GUI 登录界面信息设置详解
  • 朝阳漏水检测维修一站式服务-本地正规防水补漏公司精选推荐(2026最新)全域上门:卫生间厨房阳台屋顶渗漏水免砸砖检测维修补漏全攻略 - 创达咨询
  • 爆款结构迁移引擎 — 技术架构与协议文档 上 整体AI架构
  • Unity Quality设置终极指南:从手游极限优化到PC极致画质
  • 陕西弹性密封胶哪家专业? - 中媒介
  • 单提示生成交互式太阳图仪表盘:GPT4+Plotly零代码实践
  • 临沂汽车空调维修哪家专业? - 中媒介
  • 基于STM32单片机恒温箱K型热电偶工业锅炉温度无线蓝牙WiFi视频监控APP设计DIY-T016
  • 速冻栗哪家烹饪方便? - 中媒介
  • Linux PipeWire深度解析之pw_thread_loop_timed_wait调用流程与实战(十九)
  • C++软渲染器实现:从Phong光照到阴影映射的图形学实践
  • 前端轻量电影推荐浮层:Deep Learning模型浏览器内实时推理