如何从Mac硬盘获取序列号?

Gir*_*ari 12 macos cocoa

有没有一种简单的方法可以使用API​​获取Mac中所有硬盘的序列号?

基本上,我正在寻找硬盘的唯一标识符,我可以用它来判断硬盘是否已被我的应用程序使用(或引用).

如果有任何其他解决方案,请告诉我.

注意:我需要10.4及更高版本的此解决方案.

dic*_*ciu 12

我不确定"AppleUSBEHCI"是否适合查找,但您可以使用IOKit框架检索此类数据:

#include <IOKit/IOKitLib.h>
#include <Cocoa/Cocoa.h>

kern_return_t   kr;
io_iterator_t   io_objects;
io_service_t    io_service;

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

if(kr != KERN_SUCCESS)
    exit(1);

while((io_service= IOIteratorNext(io_objects)))
{
    kr = IORegistryEntryCreateCFProperties(io_service, &service_properties, kCFAllocatorDefault, kNilOptions);
    if(kr == KERN_SUCCESS)
    {
        NSDictionary * m = (NSDictionary *)service_properties;
        NSLog(@"%@", m);
        CFRelease(service_properties);
    }

    io_iterator_t   iter;
    //handle kr error
    kr = IORegistryEntryGetChildIterator(io_service, kIOServicePlane, &iter);

    io_registry_entry_t     child;
    while( (child = IOIteratorNext( iter )))
    {
        kr = IORegistryEntryCreateCFProperties(child, &child_props,  kCFAllocatorDefault, kNilOptions );
        NSLog(@"Child props: %@", child_props);
        //release child_props
    }

    IOObjectRelease(io_service);
}

IOObjectRelease(io_objects);
Run Code Online (Sandbox Code Playgroud)


Mat*_*aun 9

从命令行:

ioreg -rd1 -w0 -c AppleAHCIDiskDriver | grep Serial

这为您提供了内置硬盘的序列号.


Yuj*_*uji 6

我认为最好获得Volume UUID(例如,它出现在磁盘工具中).UUID可以使用Disk Arbitration框架获得,该框架略高于IOKit并且更易于使用.创建DADiskRef使用DADiskCreateFromBSDName,并使用DADiskCopyDescription获取信息字典,并查找密钥kDADiskDescriptionMediaUUIDKey.有关挂载点等的信息可以通过statfs获得.

也就是说,调用命令行实用程序diskutil可能更容易,并且可以选择-plist以plist格式获取信息.

示例代码FSMegaInfo对于如何获取有关磁盘的更多信息也可能具有指导意义.