2012-04-27 23 views
3

私はすでにstackoverflow.comとgoogleを検索して回答していますが、何も見つかりませんでした。USB HDDのシリアル番号を取得する(Mac OS)

私は、外付けUSB HDD(disk1)に属するパーティション(disk1s1)のbsdNameを取得しました。

その外付けHDDのシリアル番号を調べる必要があります。 私はすでに(BSDの名前のサービスを探してください)次のことを試してみました:

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

その通報は、次のとおりです。返されたサービスの種類には、フィールドUSB Serial Numberを持っていないIOMediaです。私は、私は他の方法で回避しようとした(IOMedia用abstraktionです)DiskArbitration枠組み

を使用する場合、私は同じ問題で終わる:すべてIOUSBDeviceサービスは、それらを反復し、ちょうどその上bsdNameまたはパーティションを探しなさいIOUSBDevice 。残念ながら、IOUSBDeviceにはパーティションやbsdの名前に関する情報は格納されていません。

誰でもこの問題を解決できますか?

詳しい情報:

  • 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名が付いているのかわかりません。

+0

そこで質問がhttp://stackoverflow.com/questions/2019244/how-to-get-serial-number-from-mac-hard-disks – Deepesh

+0

elppaこんにちは、おかげであなたのリンクのソリューションは、私がすでに試したことです:AppleUSBEHCIのサブセットであるすべてのIOUSBDevicesを繰り返しました。このアプローチを試してみると、bsdの名前やパーティションに関する情報を見つけることができません。たぶん私は何かが欠けているかもしれません。その場合、より多くの情報を教えてください。 –

+0

注:これはハードドライブのシリアル番号ではありません。それはUSBのシリアル番号です、彼らは2つの異なるものです。 (これはまた、ハードディスクの名前が表示されない理由です。つまり、これはハードドライブインタフェースではなく、単にUSBインタフェースであるためです)。 – chacham15

答えて

2

私はこれをC++で行う方法についてのチュートリアルを持っています。 io_service_tを考えると、それは以下のコードスニペットにusbDeviceだ、あなたはこのようbsdNameを得る:

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

これは、C++でのUSBフラッシュディスクのオフシリアル番号を取得するためのコードですが、それはおそらくに適合させることができますあなたの目的:あなたの答えのための

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

+0

'#import 'を追加するのを忘れないでください。 – codingFriend1

関連する問題