子文档一:examples 目录概述与设计意图
libwdi 的 examples/ 目录是该项目为开发者提供的 "活文档"与"参考实现" 集合。它不仅仅是一个简单示例的堆放处,而是通过两个完整的工具(wdi-simple 命令行工具和 Zadig 图形化工具)以及若干辅助模块,全面展示了 libwdi API 的各种使用场景和集成方式。
目录结构概览
examples/
├── libusb-win32_version.h # 版本号定义(供参考)
├── profile.c / profile.h # INI 风格配置文件解析器(源自 Kerberos)
├── wdi-simple.c # 命令行极简安装示例
├── zadig.c # Zadig GUI 主程序
├── zadig.h # 全局声明与辅助宏
├── zadig_license.h # 关于对话框中的版权文本
├── zadig_net.c # 网络更新检查模块
├── zadig_parser.c # UTF-16 配置文件解析器
├── zadig_registry.h # 注册表访问封装
├── zadig_resource.h # 资源 ID 定义
├── zadig_stdlg.c # 标准对话框(关于、通知、文件夹浏览等)
└── getopt/ # GNU getopt 移植(命令行解析)
├── getopt.c
├── getopt.h
└── getopt1.c
设计意图
-
展示 API 的完整用法 :
wdi-simple示范了最简调用流程(枚举→准备→安装),而Zadig则展示了如何将 libwdi 集成到一个复杂的 GUI 应用程序中,包括处理设备热插拔、进度反馈、日志显示等高级主题。 -
提供可复用的 UI 组件 :
zadig_stdlg.c和zadig_net.c中的代码可以作为通用 Windows GUI 编程的参考,例如自定义通知对话框、带进度条的异步操作、网络下载等。 -
解决字符串编码问题 :所有示例均使用 UTF-8 字符串与 libwdi API 交互,并借助
msapi_utf8.h(位于libwdi/目录)封装的 UTF-8 版本 Windows API,确保在非英文系统上正确显示。 -
提供配置文件支持 :
profile.c和zadig_parser.c分别演示了如何使用两种不同的配置解析方式------一种是传统的 INI 风格(来自 Kerberos 项目),另一种是自定义的键值对解析(支持 UTF-16),为应用程序提供启动参数定制能力。 -
网络更新机制 :
zadig_net.c展示了一种轻量级的在线更新检查方案,利用 WinINet 和后台线程实现无阻塞的版本检测和下载。
运行模式对比
| 特性 | wdi-simple | Zadig |
|---|---|---|
| 用户界面 | 命令行 | GUI (Win32 原生) |
| 设备选择 | 通过命令行参数指定 VID/PID | 下拉列表动态选择 |
| 驱动类型 | 命令行参数指定 | 菜单/按钮切换 |
| 进度反馈 | 控制台打印 | 进度条 + 日志窗口 |
| 高级功能 | 无 | 设备创建、WCID 支持、过滤器驱动、证书安装 |
| 配置文件 | 命令行选项 | zadig.ini + .cfg 预设文件 |
这两个示例覆盖了 libwdi 从入门到精通的所有层次,是开发者学习和借鉴的宝贵资源。