//
//  main.c
//  DriverIterator
//

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

void DeviceAdded (void* refCon, io_iterator_t iterator)
{
	io_service_t		service = 0;
	
	// 迭代所有匹配对象
	while ((service = IOIteratorNext(iterator)) != 0)
	{
		CFStringRef	className;
		//列出所有的IOUSBDevice对象 ,忽略IOUSBDevice的子类对象
        className = IOObjectCopyClass(service);
		if (CFEqual(className, CFSTR("IOUSBDevice")) == true)
		{
			CFTypeRef		vendorName;
			
			vendorName = IORegistryEntryCreateCFProperty(service, CFSTR("USB Vendor Name"), kCFAllocatorDefault, 0);
			CFShow(vendorName);
		}
		CFRelease(className);
		IOObjectRelease(service);
	}
}

int main (int argc, const char * argv[])
{
	CFDictionaryRef			matchingDict = NULL;
	io_iterator_t			iter = 0;
	IONotificationPortRef	notificationPort = NULL;
	CFRunLoopSourceRef		runLoopSource;
	kern_return_t			kr;
	
	//创建一个匹配字典,用于查找任意的 USB 设备
	matchingDict = IOServiceMatching("IOUSBDevice");
	
	notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
	runLoopSource = IONotificationPortGetRunLoopSource(notificationPort);
	CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopDefaultMode);
	
	kr = IOServiceAddMatchingNotification(notificationPort, kIOFirstMatchNotification, matchingDict, DeviceAdded, NULL, &iter);
	DeviceAdded(NULL, iter);
	
	CFRunLoopRun();
	
	IONotificationPortDestroy(notificationPort);
	
	IOObjectRelease(iter);
	
	return 0;
}


Apple Inc.
Apple Inc.
(null)
Kingston