windows网络适配器驱动开发-开发 WiFiCx 客户端驱动程序(四) 用于创建适配器的事件回调客户端驱动程序使用相同的事件回调创建工作站适配器和 WfdRole 适配器 EvtWifiDeviceCreateAdapter。调用 WifiAdapterGetType 来确定适配器类型。如果在创建适配器之前驱动程序需要从 NETADAPTER_INIT 对象查询适配器类型请调用 WifiAdapterInitGetType。调用 WifiAdapterGetPortId 确定端口 ID用于消息命令。NTSTATUS EvtWifiDeviceCreateAdapter( WDFDEVICE Device, NETADAPTER_INIT* AdapterInit ) { NET_ADAPTER_DATAPATH_CALLBACKS datapathCallbacks; NET_ADAPTER_DATAPATH_CALLBACKS_INIT(datapathCallbacks, EvtAdapterCreateTxQueue, EvtAdapterCreateRxQueue); NetAdapterInitSetDatapathCallbacks(AdapterInit, datapathCallbacks); WDF_OBJECT_ATTRIBUTES adapterAttributes; WDF_OBJECT_ATTRIBUTES_INIT(adapterAttributes); WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(adapterAttributes, WIFI_NETADAPTER_CONTEXT); adapterAttributes.EvtCleanupCallback EvtAdapterContextCleanup; NETADAPTER netAdapter; NTSTATUS ntStatus NetAdapterCreate(AdapterInit, adapterAttributes, netAdapter); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: NetAdapterCreate failed, status0x%x\n, ntStatus); return ntStatus; } ntStatus WifiAdapterInitialize(netAdapter); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: WifiAdapterInitialize failed with %!STATUS!\n, ntStatus); return ntStatus; } ntStatus ClientDriverInitDataAdapterContext( Device, netAdapter, WifiAdapterGetType(netAdapter) WIFI_ADAPTER_EXTENSIBLE_STATION ? EXTSTA_PORT : EXT_P2P_ROLE_PORT, WifiAdapterGetPortId(netAdapter)); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: ClientDriverInitDataAdapterContext failed with %!STATUS!\n, ntStatus); return ntStatus; } ntStatus ClientDriverNetAdapterStart(netAdapter); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, %!FUNC!: ClientDriverNetAdapterStart failed with %!STATUS!\n, ntStatus); return ntStatus; } return ntStatus; }该函数是 WiFiCx 客户端驱动程序中用于创建默认网络适配器通常对应基础站模式的核心回调由 WiFiCx 框架在硬件准备完成后调用。其执行流程可概括为六个步骤依次完成数据路径配置、适配器对象创建、WiFiCx 上下文初始化、客户端自定义设置以及适配器启动。函数初始化一个用于注册数据路径回调的结构体并指定发送队列和接收队列的创建函数然后将其设置到适配器初始化对象中。这一步的作用是告诉 NetAdapterCx 框架当需要为网络数据收发创建队列时应调用哪些驱动提供的回调。函数准备适配器对象的属性为适配器关联一个自定义的上下文结构用于存储驱动私有数据并注册一个清理回调以便在适配器销毁时释放资源。随后调用 NetAdapterCx 的创建函数生成底层的 NETADAPTER 对象该对象代表一个网络接口。创建成功后函数调用 WiFiCx 提供的初始化函数将新生成的 NETADAPTER 对象与 WiFiCx 框架绑定完成 Wi-Fi 专用的上下文初始化使得该适配器能够支持 WDI 命令处理。函数进入客户端自定义阶段。它会根据适配器的类型是基础站还是 Wi-Fi Direct 角色以及端口 ID调用驱动程序自定义的初始化上下文函数。在此过程中它使用 WiFiCx 的辅助函数来获取适配器类型和端口号以便正确配置驱动内部的端口数据结构。函数调用驱动程序自定义的启动函数。该函数通常会执行必要的硬件准备或状态同步并最终调用 NetAdapterCx 的标准启动例程使适配器进入活动状态。一旦启动成功WiFiCx 框架便会向设备下发初始配置和无线电状态设置等命令。整个函数将 WDF 的对象管理、NetAdapterCx 的数据路径创建以及 WiFiCx 的 Wi-Fi 控制功能有机地结合在一起是驱动从初始化阶段过渡到正常运行阶段的关键桥梁。每一步都有明确的失败处理如果任何调用失败函数会记录错误并立即返回避免继续执行无效操作。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/2 15:29:32
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻