Как получить порядковый номер от жестких дисков Mac?

Существует ли простой способ получить порядковый номер всех жестких дисков в Mac с помощью API?

В основном я ищу уникальный идентификатор для жесткого диска, с которым я могу выяснить, использовался ли жесткий диск (или упоминался) моим приложением или нет.

Сообщите мне, существует ли какое-либо другое решение.

Примечание: Мне нужно это решение для 10,4 и выше.

12
задан Matthias Braun 28 July 2017 в 08:38
поделиться

4 ответа

Не уверен, что "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);
12
ответ дан 2 December 2019 в 04:43
поделиться

Взгляните на IOKit.

На вашем Mac есть два удобных инструмента, чтобы узнать о его возможностях:

  • ioreg, инструмент командной строки
  • IORegistryExplorer, тот же самый с графическим интерфейсом.
1
ответ дан 2 December 2019 в 04:43
поделиться

может быть, вы просто разместите скрытый файл на жестком диске, который использует ваше приложение? Например, как это делает "Машина Времени" от Apple.

0
ответ дан 2 December 2019 в 04:43
поделиться

Я думаю, что лучше получить громкость UUID (например, в дисковой утилите.) UUID может быть получен с использованием арбитража диска , который немного более высокий уровень, чем iokit и легче использовать. Создать DADISKREF Использование DadiskCreateFrombsdname , и использовать DadiskCopydescription , чтобы получить информационный словарь, и посмотреть клавишу KDADISKDESCRICEMEDIAUUUIDKEY . Информация о монтированной точке и т. Д. Может быть получена .

, которые сказали, что может быть проще просто вызвать утилиту командной строки Diskutil с вариантом -PList , чтобы получить информацию в формате plist.

Образец код fsmegainfo может также быть поучительным, как получить гораздо больше информации о диске.

6
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: