提供来自的条目/服务
IOIteratorNext
,
IORegistryEntryGetPath
做到了:
io_string_t path;
int res = IORegistryEntryGetPath(service, kIOServicePlane, path);
它返回的路径如下:
IOService:/AppleARMPE/arm-io/AppleT600xIO/usb-drd0@2280000/AppleT6000USBXHCI@00000000/usb-drd0-port-hs@00100000/A39F3CD99B172BC@00100000
使用此路径,可以从IO注册表中检索USB设备:
io_service_t service = IORegistryEntryFromPath(kIOMasterPortDefault, path);
if (service == MACH_PORT_NULL)
...error handling...
IOUSBDeviceInterface** dev = iokit_helper::get_interface<IOUSBDeviceInterface>(service, kIOUSBDeviceUserClientTypeID, kIOUSBDeviceInterfaceID);
if (dev == nullptr)
...error handling...;
IOReturn ret = (*dev)->USBDeviceOpen(dev);