#include "ioregpath.h"
#include <IOKit/IOKitLib.h>
CFDictionaryRef
myIORegistryEntryCopyValue(const char * path)
{
io_registry_entry_t service;
kern_return_t status;
CFMutableDictionaryRef properties = NULL;
service = IORegistryEntryFromPath(kIOMasterPortDefault, path);
if (service == MACH_PORT_NULL) {
return (NULL);
}
status = IORegistryEntryCreateCFProperties(service,
&properties,
kCFAllocatorDefault,
kNilOptions);
if (status != KERN_SUCCESS) {
properties = NULL;
}
IOObjectRelease(service);
return (properties);
}
CFTypeRef
myIORegistryEntryCopyProperty(const char * path, CFStringRef prop)
{
io_registry_entry_t service;
CFTypeRef val;
service = IORegistryEntryFromPath(kIOMasterPortDefault, path);
if (service == MACH_PORT_NULL) {
return (NULL);
}
val = IORegistryEntryCreateCFProperty(service, prop,
kCFAllocatorDefault,
kNilOptions);
IOObjectRelease(service);
return (val);
}
CFDictionaryRef
myIORegistryEntryBSDNameMatchingCopyValue(const char * devname, Boolean parent)
{
kern_return_t status;
CFMutableDictionaryRef properties = NULL;
io_registry_entry_t service;
service
= IOServiceGetMatchingService(kIOMasterPortDefault,
IOBSDNameMatching(kIOMasterPortDefault, 0, devname));
if (service == MACH_PORT_NULL) {
return (NULL);
}
if (parent) {
io_registry_entry_t parent_service;
status = IORegistryEntryGetParentEntry(service, kIOServicePlane,
&parent_service);
if (status == KERN_SUCCESS) {
status = IORegistryEntryCreateCFProperties(parent_service,
&properties,
kCFAllocatorDefault,
kNilOptions);
IOObjectRelease(parent_service);
}
}
else {
status = IORegistryEntryCreateCFProperties(service,
&properties,
kCFAllocatorDefault,
kNilOptions);
}
if (status != KERN_SUCCESS) {
properties = NULL;
}
IOObjectRelease(service);
return (properties);
}