开源
功能说明:本程序是一个基于易语言编写的 USB 硬件信息读取工具,核心功能是获取连接到计算机的 USB 存储设备(即通常所说的 U 盘)的硬件序列号。程序通过调用 Windows 操作系统底层的 SetupAPI 接口(Setupapi.dll)来实现对 USB 设备的枚举、筛选和信息提取。
程序的主要执行流程始于用户界面交互。当用户点击界面上的“按钮 1"时,触发 `_按钮 1_被单击` 子程序。该子程序作为主控制逻辑,首先调用 `打开 USB 类设备信息` 函数,传入特定的 USB 类 GUID(在 `__启动窗口_创建完毕` 中定义),以获取系统当前所有 USB 设备的信息集合句柄。如果获取句柄失败(返回 -1),程序会弹出错误提示框并终止运行。
获取句柄成功后,程序进入一个判断循环,调用 `取下一个 U 盘` 子程序。该子程序内部使用 `DLL_SetupDiEnumDeviceInfo` 命令遍历设备信息列表。为了确保只处理存储设备,程序嵌入了 `根据设备信息判断是否 U 盘` 子程序。该子程序通过读取设备的注册表属性(服务名),判断其是否等于"USBSTOR"。只有服务名为"USBSTOR"的设备才会被确认为 U 盘,从而跳出循环进入下一步处理,否则继续枚举下一个设备。
一旦确认是 U 盘,程序立即调用 `取硬件信息_序列号` 子程序。该子程序封装了 `DLL_SetupDiGetDeviceInstanceId` 命令,用于获取设备的实例 ID,这通常被视为硬件的唯一序列号。获取到的序列号会被处理(去除路径前缀)并通过 `输出调试文本` 显示出来,方便开发者查看或后续逻辑使用。
在所有设备遍历完成后,程序调用 `关闭 USB 类设备信息` 子程序,执行 `DLL_SetupDiDestroyDeviceInfoList` 命令,释放之前分配的设备信息句柄,防止内存泄漏。
技术细节方面,程序定义了一个名为 `_设备信息数据` 的结构体,用于存储设备信息的底层数据(如 GUID、设备实例句柄等)。此外,程序声明了多个 DLL 命令,包括 `DLL_SetupDiGetClassDevs`(获取设备信息集)、`DLL_SetupDiEnumDeviceInfo`(枚举设备信息)、`DLL_SetupDiGetDeviceRegistryProperty`(获取设备注册表属性)等,这些都直接映射到 Windows API 中的 SetupDI 系列函数。
综上所述,该程序是一个典型的硬件信息采集工具。其主要用途可能包括:
1. 软件授权绑定:将软件 license 与特定 U 盘的序列号绑定。
2. 设备管理:监控和管理插入计算机的 USB 存储设备。
3. 安全审计:记录 USB 设备的使用痕迹。
程序结构清晰,模块化程度较高,将设备打开、枚举、筛选、信息获取和关闭操作分别封装为独立的子程序,便于维护和扩展。
======窗口程序集1
| |
| |------ _按钮1_被单击
| |
| |------ 取硬件信息_序列号
| |
| |------ 打开USB类设备信息
| |
| |------ 取下一个U盘
| |
| |------ 关闭USB类设备信息
| |
| |------ 根据设备信息判断是否U盘
| |
| |------ __启动窗口_创建完毕
| |
| |
======调用的Dll
| |
| |---[dll]------ DLL_SetupDiGetDeviceInstanceId
| |
| |---[dll]------ DLL_SetupDiGetClassDevs
| |
| |---[dll]------ DLL_SetupDiEnumDeviceInfo
| |
| |---[dll]------ DLL_SetupDiDestroyDeviceInfoList
| |
| |---[dll]------ DLL_SetupDiGetDeviceRegistryProperty
| |
| |---[dll]------ DLL_SetupDiGetDeviceRegistryProperty_text
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。