有没有办法通过使用 Windows c/c++ API(例如 PnP 配置管理器 API)来获取设备的 PCI 坐标(总线/插槽/功能编号)?我已经知道如何在内核模式下做到这一点,我需要一个用户模式的解决方案。我的目标系统是 Windows XP-32 位。
问问题
2789 次
1 回答
5
我最终找到了一个简单的解决方案(这只是深入研究 MSDN 的问题)。
这个最小的代码根据总线/插槽/功能查找设备的 PCI 坐标:
DWORD bus, addr, slot, func;
HDEVINFO h; // Obtained by SetupDiGetClassDevs
SP_DEVINFO_DATA d; // Filled by SetupDiGetDeviceInterfaceDetail
SetupDiGetDeviceRegistryProperty(h,&d,SPDRP_BUSNUMBER,NULL,&bus,sizeof(bus),NULL);
SetupDiGetDeviceRegistryProperty(h,&d,SPDRP_ADDRESS,NULL,&addr,sizeof(addr),NULL);
slot = (addr >> 16) & 0xFFFF;
func = addr & 0xFFFF;
注意:对于实际生产,输出缓冲区的大小必须通过先前调用 API 函数来获得,以便动态分配它,当然还必须添加错误检查。
于 2014-02-20T09:14:34.723 回答