Giu*_*ini 5 winapi windows-xp wdk pci-bus pci
是否可以通过使用Windows c / c ++ API(例如PnP Configuration Manager API)来获取设备的PCI坐标(总线/插槽/功能编号)?我已经知道如何在内核模式下执行此操作,我需要一个用户模式解决方案。我的目标系统是Windows XP-32位。
我最终找到了一个简单的解决方案(这只是研究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;
Run Code Online (Sandbox Code Playgroud)
注意:对于实际生产,输出缓冲区的大小必须通过API函数的先前调用来获得,以便动态分配它,并且当然必须添加错误检查。
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |