最近也遇到了這個問題。這個問題並沒有開始爲我過濾bsdName,它實際上與首先從USB查詢獲得結果有關。在El Capitan發現IOUSBDevice有點贊成IOUSBHostDevice。以下是我所需要做的:
// -- Begin Relevant Changes Part! ---
// Get current version
auto current_supported_version = __MAC_OS_X_VERSION_MAX_ALLOWED;
// El Capitan is 101100 (in AvailabilityInternal.h)
auto el_capitan = 101100;
// IOUSBDevice has become IOUSBHostDevice in El Capitan...
auto service_matcher = current_supported_version < el_capitan ? "IOUSBDevice" : "IOUSBHostDevice";
// Create matching dict to search
CFMutableDictionaryRef matchingDict = IOServiceMatching(service_matcher);
// -- End Relevant Changes Part! ---
// The rest of this is just example implementation code.
if (matchingDict == NULL)
{
// IOServiceMatching Failed
}
// Fill it with other stuff if necessary (vendor id, etc...)
// Do actual search
io_iterator_t iter;
kern_return_t kr;
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter);
if (kr != KERN_SUCCESS)
{
// IOServiceGetMatchingServices Failed
}
io_service_t service;
while ((service = IOIteratorNext(iter)))
{
// Ought to work now, regardless of version of OSX being ran.
CFStringRef bsdName = (CFStringRef) IORegistryEntrySearchCFProperty(
service,
kIOServicePlane,
CFSTR(kIOBSDNameKey),
kCFAllocatorDefault,
kIORegistryIterateRecursively
);
}
您是否嘗試了磁盤仲裁方法? – pmdj
看起來像磁盤仲裁會讓我們有能力識別USB設備何時連接。任何想法,如果它提供了找到特定的IO服務USB設備條目的能力?我們需要獲得關於USB設備的特定屬性,所以只需要安裝點就夠了。 – Cobar
在e上您有一個DADisk對象,您可以通過DADiskCopyIOMedia獲得對其IOMedia對象的引用。從那裏,你應該能夠找到你所需要的。 – pmdj