您的位置:首页 > 其它

iphone IOKit 遍历 IORegistryEntry,获取名称和属性

2012-05-19 16:27 267 查看
1、加入IOKit.framework

2、

io_name_t name;

io_registry_entry_t rootEntry = IORegistryGetRootEntry(kIOMasterPortDefault);

IORegistryEntryGetName(rootEntry,name); //获取名称
printf("Device's name = %s\n", name);

[self findChild:rootEntry level:0];

3、

-(void) findChild:(io_registry_entry_t) parent level:(int) iLevel{

io_iterator_t iterator;

io_name_t name;

IORegistryEntryGetChildIterator(parent,kIOServicePlane,&iterator);

io_iterator_t t = IOIteratorNext(iterator);

while(t!=0){

IORegistryEntryGetName(t,name);

for(int i=0;i<iLevel;i++){

printf("--");

}

printf("|%s\n", name);

//获取属性

CFTypeRef IORegistryEntrySearchCFProperty(

io_registry_entry_t entry,

const io_name_t plane,

CFStringRef key,

CFAllocatorRef allocator,

IOOptionBits options );

if([self compareCharArray:name to:"IOAccessoryPortSerial"]){

[Util showAlertDialog:@"RegistryEntry" aMessage:[NSString stringWithFormat:@" retain count=%d", [(NSString*)t retainCount]]];

CFTypeRef typeRef = nil;

typeRef = IORegistryEntrySearchCFProperty(

t,

kIOServicePlane,

CFSTR("IOAccessoryDevicePort"),

kCFAllocatorDefault,

kIORegistryIterateRecursively);

[Util showAlertDialog:@"IOkit" aMessage:[NSString stringWithFormat:@"%@", (CFNumberRef)typeRef]];

}

[self findChild:t level:iLevel+1];

t = IOIteratorNext(iterator);

}

4、没有发现遍历属性的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: