Get Serial Number of USB HDD (Mac OS)

被刻印的时光 ゝ 提交于 2019-12-22 09:48:22

问题


i've already searched stackoverflow.com and google for an answer but couldn't find anything.

I've got the bsdName of a partition (disk1s1) which belongs to an external USB HDD (disk1).

I need to find out the serial number of that external HDD. I already tried the following (look for a service with the bsd Name):

io_service_t io_service = IOServiceGetMatchingService(kIOMasterPortDefault,IOBSDNameMatching(kIOMasterPortDefault, 0, [@"disk1" cStringUsingEncoding:NSUTF8StringEncoding]));

The Problem with that is: The service type returned is IOMedia which has no field USB Serial Number. I end up with the same problem if i use DiskArbitrationframework (which is an abstraktion for IOMedia)

So i tried the other way around: Get all IOUSBDeviceservices iterate over them and just look for the bsdName or partitions on that IOUSBDevice. Unfortunately, there is no information stored about any partitions or bsd names in IOUSBDevice.

Can anybody help me with this problem?

Further information:

  • XCode 4.3.2
  • Mac OS X Lion (10.7.3)

EDIT: Here is the interesting part of the output if i iterate over all IOUSBDevice or 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";

}

As you can see, i get the serial number but i have no possibility to tell which bsd name this device has.


回答1:


I have a tutorial on how to do this in c++. Given an io_service_t, that's the usbDevice in the code snippet below, you get the bsdName like this:

     bsdName = ( CFStringRef ) IORegistryEntrySearchCFProperty( 
        usbDevice,
        kIOServicePlane,
        CFSTR( kIOBSDNameKey ),
        kCFAllocatorDefault,
        kIORegistryIterateRecursively )

This is code to get the serial number off of USB Flash disks in C++, but it can probably be adapted to your purposes:

http://oroboro.com/usb-serial-number-osx/



来源:https://stackoverflow.com/questions/10348318/get-serial-number-of-usb-hdd-mac-os

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!