新闻详情

新闻详情

首页 / 资讯中心 / 详情

Windows 驱动实例分析系列:libwdi 驱动分析 - examples 篇(二)

发布时间:2026/9/29 3:27:11来源:尧图网络
Windows 驱动实例分析系列:libwdi 驱动分析 - examples 篇(二)
子文档二wdi-simple —— 命令行极简安装器wdi-simple.c是 libwdi 提供的最简单的驱动安装示例其代码行数不足 200 行但却完整地展示了 libwdi 的核心工作流程。它非常适合开发者快速理解如何在自己的应用程序中集成驱动安装功能。核心流程wdi-simple 的执行流程可概括为四个步骤解析命令行参数使用 GNU getopt 解析用户输入的 VID、PID、驱动类型、INF 名称、目标目录等。准备驱动文件调用wdi_prepare_driver生成 INF 和 CAT 文件并提取所需的驱动二进制。枚举设备调用wdi_create_list获取当前系统中的所有 USB 设备链表。匹配并安装遍历设备链表查找与指定 VID/PID 匹配的设备若找到则调用wdi_install_driver安装驱动若未找到则直接调用wdi_install_driver以“预安装”模式仅复制 INF 到系统目录等待设备插入。命令行参数设计wdi-simple支持以下主要选项-v, --vid设置 VID十六进制-p, --pid设置 PID十六进制-i, --iid设置复合设备的接口号MI-t, --type驱动类型0WinUSB, 1libusb-win32, 2libusbK, 3usbser, 4custom-n, --name设备描述用于 INF 中的设备名称-f, --infINF 文件名-d, --dest提取目录-e, --external使用外部 INF 文件替代内置模板-x, --extract仅提取文件不安装-s, --silent静默模式-c, --cert安装嵌入的证书到受信任发布者存储这些参数几乎覆盖了wdi_options_prepare_driver和wdi_options_install_driver结构体的所有字段使得开发者可以灵活控制安装行为。关键代码片段分析1. 设备匹配与安装for(;(ldev!NULL)(rWDI_SUCCESS);ldevldev-next){if((ldev-viddev.vid)(ldev-piddev.pid)(ldev-midev.mi)(ldev-is_compositedev.is_composite)){dev.hardware_idldev-hardware_id;dev.device_idldev-device_id;matching_device_foundTRUE;rwdi_install_driver(dev,ext_dir,inf_name,oid);}}该循环遍历 libwdi 返回的设备链表通过 VID/PID/MI 三要素匹配目标设备。一旦匹配成功将设备的hardware_id和device_id赋值给dev结构体然后调用wdi_install_driver执行安装。这种设计使得安装器可以自动适配当前插入的特定型号设备。2. 预安装模式当没有匹配的已连接设备时wdi_install_driver仍然会被调用此时dev结构体中仅包含 VID/PID/描述等信息但hardware_id和device_id为空。libwdi 内部会检测到设备未连接转而调用SetupCopyOEMInf将 INF 复制到系统目录并标记设备以便下次插入时自动安装。这实现了“先准备驱动再插入设备”的用户体验。3. 进度反馈wdi-simple支持-b参数显示进度条若指定 HWND 则作为父窗口否则使用控制台窗口句柄。它通过GetConsoleHwnd获取控制台窗口句柄并将其传递给wdi_options_install_driver的hWnd字段从而触发 libwdi 内部的进度对话框模式。这展示了 libwdi 如何在 GUI 和无头环境下切换安装界面。使用场景wdi-simple 非常适合以下场景驱动程序开发者的快速测试在开发过程中快速为测试设备安装驱动。自动化部署通过脚本调用实现无人值守的驱动安装。学习 libwdi API 的入门参考代码简洁注释清晰是理解 libwdi 工作原理的最佳起点。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

深入理解二进制运算:从精度误差到位运算实战 2026/9/29 4:20:09

深入理解二进制运算:从精度误差到位运算实战

去年我给一个电商后台排查订单金额问题,后台反馈有两笔订单的优惠分摊总是差一分钱,而且不是偶发,是稳定复现。我一开始以为是数据库字段精度设置有问题,查了一圈,发现存储层完全正常,最后定位到是 Java 里…

阅读更多 →
x402、AP2、MPP、ACP四类支付协议本质与协同实战指南 2026/9/29 4:20:08

x402、AP2、MPP、ACP四类支付协议本质与协同实战指南

1. 这不是协议说明书,是支付系统工程师的“协议地图”你刚接手一个跨境支付网关改造项目,需求文档里赫然写着“需兼容x402、AP2、MPP、ACP四类协议”,技术负责人甩来一句:“这四个都得跑通,别问为什么,先搭…

阅读更多 →
3分钟索引Linux内核!codebase-memory-mcp让Claude Code效率提升120倍 2026/9/29 4:20:02

3分钟索引Linux内核!codebase-memory-mcp让Claude Code效率提升120倍

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

阅读更多 →
RAG 志愿填报系统测试用例:用 TaoToken 统一 Key 跑通检索增强问答回归 2026/9/29 4:20:02

RAG 志愿填报系统测试用例:用 TaoToken 统一 Key 跑通检索增强问答回归

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

阅读更多 →
数字化智能工厂L1-L5五级架构:从设备自动化到商务智能的顶层设计 2026/9/29 4:20:02

数字化智能工厂L1-L5五级架构:从设备自动化到商务智能的顶层设计

简介:一套系统梳理数字化智能工厂从基础自动化到企业级智能协同路径的PPT方案,面向智能制造与工业互联网领域的规划者、技术骨干及方案售前人员,重点解决多层级工厂建设中的功能边界与升级顺序问题。资源共1个pptx文件,压缩包约6.…

阅读更多 →
Windows安装Ubuntu 18.04双系统:UEFI分区与GRUB避坑 2026/9/29 4:20:02

Windows安装Ubuntu 18.04双系统:UEFI分区与GRUB避坑

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉