Я слушаю NSWorkspaceDidMountNotification и NSWorkspaceDidUnmountNotification для уведомлений о монтировании и отключении USB-устройства.
Эти уведомления не для этого. Это тома уведомления о монтировании и отключении, а том может исходить от чего-то, что не является USB-устройством. Образы дисков, устройства FireWire, оптические диски и карты флэш-памяти — все это устройства, не являющиеся устройствами USB. (Карта может находиться в устройстве чтения карт памяти USB, но карта не является устройством чтения.)
Я думаю, что путь вперед — это IOKit.
Правильный.
Но у меня такое ощущение, что это для низкоуровневого программирования.
Правильный.
Есть ли другой способ найти их?
Вы не можете полностью отключить I/O Kit, но есть ярлык, который может сэкономить вам часть работы. Это структура дискового арбитража.
Зарегистрируйте обратный вызов на диске и обратный вызов при исчезновении диска. Каждая функция обратного вызова, которую вы реализуете, принимает DADiskRef
. Вы можете передать это в функцию DADiskCopyIOMedia
, чтобы получить служебный порт для медиа-объекта I/O Kit для диска.
Я понятия не имею, что тогда делать, за исключением того, что вам нужно будет освободить служебный порт, как описано в этой документации. Кроме того, вам все равно нужно будет отфильтровать устройства, отличные от USB, но, по крайней мере, у вас будет медиа-объект I/O Kit, чтобы сделать это.
Еще одна вещь: это решение и уведомления NSWorkspace, которые вы используете в настоящее время, вероятно, не будут работать, если iPod не настроен на использование или не поддерживает дисковый режим. iPhone и iPod touch — самый большой современный пример. Если это так, то вам просто придется использовать I/O Kit от начала до конца — ни DiskArb, ни NSWorkspace не сделают эту работу за вас.
person
Peter Hosey
schedule
07.01.2010