我已经搜索了 stackoverflow.com 和谷歌的答案,但找不到任何东西。
我有属于外部 USB 硬盘 (disk1) 的分区 (disk1s1) 的 bsdName。
我需要找出那个外置硬盘的序列号。我已经尝试了以下方法(查找具有 bsd 名称的服务):
io_service_t io_service = IOServiceGetMatchingService(kIOMasterPortDefault,IOBSDNameMatching(kIOMasterPortDefault, 0, [@"disk1" cStringUsingEncoding:NSUTF8StringEncoding]));
问题在于:返回的服务类型IOMedia
没有字段USB Serial Number
。如果我使用DiskArbitration
框架(这是 的抽象IOMedia
) ,我最终会遇到同样的问题
所以我尝试了另一种方法:让所有IOUSBDevice
服务对其进行迭代,然后在上面查找 bsdName 或分区IOUSBDevice
。不幸的是,没有存储任何关于任何分区或 bsd 名称的信息IOUSBDevice
。
有人可以帮我解决这个问题吗?
更多信息:
- XCode 4.3.2
- Mac OS X 狮子 (10.7.3)
编辑: 如果我遍历所有 IOUSBDevice 或 AppleUSBEHCI io_services ,这是输出中有趣的部分:
Child props: {
"Bus Power Available" = 250;
"Device Speed" = 2;
IOCFPlugInTypes = {
"9dc7b780-9ec0-11d4-a54f-000a27052861" = "IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle";
};
IOGeneralInterest = "IOCommand is not serializable";
IOUserClientClass = IOUSBDeviceUserClientV2;
"Low Power Displayed" = 0;
PortNum = 3;
"Requested Power" = 250;
"USB Address" = 6;
"USB Product Name" = "Mass Storage Device";
"USB Serial Number" = 09021000000000003740385375;
"USB Vendor Name" = JetFlash;
bDeviceClass = 0;
bDeviceProtocol = 0;
bDeviceSubClass = 0;
bMaxPacketSize0 = 64;
bNumConfigurations = 1;
bcdDevice = 2560;
iManufacturer = 1;
iProduct = 2;
iSerialNumber = 3;
idProduct = 4096;
idVendor = 34148;
kHasMSCInterface = 1;
locationID = "-99418112";
sessionID = 209792844564562;
uid = "USB:85641000003740385375";
}
如您所见,我得到了序列号,但我无法知道该设备具有哪个 bsd 名称。