2

私が使用しています: IOServiceGetMatchingServices

kr = IOServiceGetMatchingServices(kIOMasterPortDefault,
IOServiceNameMatching("AppleUSBEHCI"), &io_objects);

上記はUSBデバイスをプローブするため、内部HDに関する情報を見つける方法を探しています。

これを教えてくれるリストや何かが見つからないようです。

基本的に、システムから一意の ID を取得する方法を探しています。Windows では、他の開発者がハードディスク ID を使用します。

誰かがこれらの価値観に光を当てることができますか?

4

2 に答える 2

1

あなたがしたいのは、デバイス記述子を見て、シリアル番号があるかどうかを確認することだと思います。シリアル番号を提供するのはデバイス次第であり、提供された場合、番号が一意でない可能性があります。デバイスにカスタム記述子がある場合は、そこにも役立つ場合があります。

記述子については、以下を参照してください。http: //www.beyondlogic.org/usbnutshell/usb5.shtml

HIDデバイスラッパークラスのシリアル番号を取得するプロパティがあるようです。

https://developer.apple.com/library/mac/#documentation/IOKit/Reference/IOHIDBase_header_reference/Reference/reference.html#//apple_ref/doc/uid/TP40012400

それでも問題が解決しない場合は、USBデバイスに直接アクセスして、必要なデータを要求する方法が必要です。

于 2013-03-04T21:59:50.537 に答える
0

コマンドラインで、ioregツールを使用してIOキットレジストリを調べることができます。Lion以上の場合は、AppleのHardwareIOToolsパッケージにある便利なIORegistryExplorerGUIツールを使用することもできます。(Mountain Lionでクラッシュします)

内部ハードドライブのプロパティを確認するには、これはかなり良いスタートです。

ioreg -irc IOAHCIBlockStorageDevice -w 0

私のMacBookAirではどれが得られますか:

+-o IOAHCIBlockStorageDevice  <class IORegistryEntry:IOService:IOBlockStorageDevice:IOAHCIBlockStorageDevice, id 0x100000216, registered, matched, active, busy 0 (472 ms), retain 7>
  | {
  |   "IOCFPlugInTypes" = {"24514B7A-2804-11D6-8A02-003065704866"="SMARTLib.plugin"}
  |   "device-type" = "Generic"
  |   "IOStorageFeatures" = {"Unmap"=Yes}
  |   "Device Characteristics" = {"Logical Block Size"=512,"Product Name"="APPLE SSD TS256C                        ","Medium Type"="Solid State","Physical Block Size"=512,"SATA Features"=23,"Serial Number"="        X06S10H7THRZ","Product Revision Level"="CJAA0201"}
  |   "Protocol Characteristics" = {"Physical Interconnect"="SATA","Physical Interconnect Location"="Internal"}
  |   "SMART Capable" = Yes
  |   "IOMinimumSegmentAlignmentByteCount" = 4
  | }
  | 
  +-o IOBlockStorageDriver  <class IORegistryEntry:IOService:IOStorage:IOBlockStorageDriver, id 0x100000219, registered, matched, active, busy 0 (471 ms), retain 8>
    +-o APPLE SSD TS256C Media  <class IORegistryEntry:IOService:IOStorage:IOMedia, id 0x10000021a, registered, matched, active, busy 0 (471 ms), retain 11>
      +-o IOMediaBSDClient  <class IORegistryEntry:IOService:IOMediaBSDClient, id 0x10000021b, registered, matched, active, busy 0 (0 ms), retain 6>
      +-o IOGUIDPartitionScheme  <class IORegistryEntry:IOService:IOStorage:IOPartitionScheme:IOGUIDPartitionScheme, id 0x10000021d, !registered, !matched, active, busy 0 (3 ms), retain 8>
        +-o EFI system partition@1  <class IORegistryEntry:IOService:IOStorage:IOMedia, id 0x100000263, registered, matched, active, busy 0 (0 ms), retain 9>
        | +-o IOMediaBSDClient  <class IORegistryEntry:IOService:IOMediaBSDClient, id 0x100000266, registered, matched, active, busy 0 (0 ms), retain 6>
        +-o Customer@2  <class IORegistryEntry:IOService:IOStorage:IOMedia, id 0x100000264, registered, matched, active, busy 0 (2 ms), retain 11>
        | +-o IOMediaBSDClient  <class IORegistryEntry:IOService:IOMediaBSDClient, id 0x100000267, registered, matched, active, busy 0 (0 ms), retain 7>
        +-o Recovery HD@3  <class IORegistryEntry:IOService:IOStorage:IOMedia, id 0x100000265, registered, matched, active, busy 0 (3 ms), retain 9>
          +-o IOMediaBSDClient  <class IORegistryEntry:IOService:IOMediaBSDClient, id 0x100000268, registered, matched, active, busy 0 (0 ms), retain 6>

これらのプロパティは、USBですでに検出されているように、IOKitユーザーライブラリを介してプログラムで取得できます。

DADiskCopyDescriptionやや高いレベルでは、一部の情報は、ディスクアービトレーションフレームワーク、関数を介して利用することもできます。この関数を介して公開されたデバイスプロパティは、DADisk.hヘッダーファイルの外部に文書化されていないようですが、それらはかなり自明です。例:

extern const CFStringRef kDADiskDescriptionDeviceGUIDKey;      /* ( CFData       ) */
extern const CFStringRef kDADiskDescriptionDeviceInternalKey;  /* ( CFBoolean    ) */
extern const CFStringRef kDADiskDescriptionDeviceModelKey;     /* ( CFString     ) */
extern const CFStringRef kDADiskDescriptionDevicePathKey;      /* ( CFString     ) */
extern const CFStringRef kDADiskDescriptionDeviceProtocolKey;  /* ( CFString     ) */
extern const CFStringRef kDADiskDescriptionDeviceRevisionKey;  /* ( CFString     ) */
extern const CFStringRef kDADiskDescriptionDeviceUnitKey;      /* ( CFNumber     ) */
extern const CFStringRef kDADiskDescriptionDeviceVendorKey;    /* ( CFString     ) */
于 2013-03-04T22:29:12.317 に答える