Information about setupapi.dev.log

Intro

This page record information about setupapi.dev.log.

Format of a Text Log Section Body

Event_category field strings: 		SetupAPI operation
			"ndv: "		New device wizard
			"dvi: "		Device installation
			"sig: "		Verify digital signatures
			"inf: "		Manage INF files
			"sto: "		Manage the driver store
			"flq: "		Manage file queues
			"pol: "		?? Driver package policy check
			"bak: "		Backup data
			"cpy: "		Copy files
			"idb: "		?? Install drivers database management
			"ump: "		User-mode PnP manager

Parent Device ID

For software device, the parent device ID is often set to: "Parent device: HTREE\ROOT\0".

2: kd> !devnode 0 1
Dumping IopRootDeviceNode (= 0xffffb5895edc9970)
DevNode 0xffffb5895edc9970 for PDO 0xffffb5895eebfd90
  InstancePath is "HTREE\ROOT\0"
  State = DeviceNodeStarted (0x308)
  Previous State = DeviceNodeEnumerateCompletion (0x30d)
  DevNode 0xffffb589
### Java 中通过 `setupapi.dll` 枚举 USB 设备 虽然 Java 是一种跨平台的语言,但它本身并不直接支持调用本地 Windows API(如 `setupapi.dll`),因此需要借助 JNI(Java Native Interface)或其他工具库来实现这一目标。以下是基于现有引用内容以及专业知识构建的解决方案。 #### 方法概述 为了在 Java 中调用 `setupapi.dll` 来枚举 USB 设备,可以利用 JNA(Java Native Access)库简化与本地 DLL 的交互过程[^1]。JNA 提供了一种无需编写 C/C++ 代码的方式访问本机函数,从而显著降低了开发复杂度。 #### 示例代码 以下是一个完整的示例程序,展示如何使用 JNA 调用 `setupapi.dll` 并枚举连接到系统的 USB 设备: ```java import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.SetupAPI; import com.sun.jna.ptr.IntByReference; import com.sun.jna.win32.W32APIOptions; public class UsbDeviceEnumerator { public interface SetupApi extends SetupAPI { SetupApi INSTANCE = (SetupApi) Native.load("setupapi", SetupApi.class, W32APIOptions.DEFAULT_OPTIONS); boolean SetupDiGetClassDevs(Pointer.ByValue ClassGuid, String Enumerator, Pointer hwndParent, int Flags, IntByReference DeviceInfoSet); boolean SetupDiEnumDeviceInfo(IntByReference deviceInfoSet, int memberIndex, SP_DEVINFO_DATA deviceInfoData); } public static void main(String[] args) { try { // 初始化设备信息集 IntByReference deviceInfoSet = new IntByReference(); if (!SetupApi.INSTANCE.SetupDiGetClassDevs(null, "USB", null, 0x00000002 | 0x00000010, deviceInfoSet)) { System.out.println("Failed to get device information set."); return; } // 遍历设备列表 SP_DEVINFO_DATA devinfo = new SP_DEVINFO_DATA(); for (int i = 0; ; i++) { if (!SetupApi.INSTANCE.SetupDiEnumDeviceInfo(deviceInfoSet, i, devinfo)) { break; // 列举完成 } // 获取设备描述符并打印 String description = getStringProperty(deviceInfoSet.getValue(), devinfo.getDevInst()); System.out.println("Found USB Device: " + description); } } catch (Exception e) { e.printStackTrace(); } } private static String getStringProperty(int deviceInfoSet, long devInst) { // 实现获取属性字符串逻辑... return "<device-description>"; } } ``` 上述代码展示了如何加载 `setupapi.dll` 并调用其导出函数以列举 USB 设备。需要注意的是,实际应用中可能还需要处理更多细节,例如错误检测、资源释放等。 #### 关键点解析 - **依赖管理**:如果未安装 JNA 库,则需先将其加入项目的类路径中。对于 Maven 用户,可以在 `pom.xml` 文件中添加如下依赖项: ```xml <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.9.0</version> </dependency> ``` - **架构兼容性**:默认情况下生成的目标文件适用于 x86 架构;若要支持 x64 环境,请确保编译器选项已设置为生成对应的二进制产物[^2]。 - **硬件通信扩展**:某些场景下除了基本的信息检索外还涉及具体的数据传输操作,此时可考虑引入额外的支持组件比如串口转 USB 模块辅助完成更复杂的任务需求[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值