Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC
ADC Home > Reference Library > Reference > Hardware & Drivers > I/O Kit Framework Reference

 


IOKitLib.h

Include Path:
<IOKit/IOKitLib.h>
Path:
/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h
Includes:
<sys/cdefs.h>
<sys/types.h>
<mach/mach_types.h>
<mach/mach_init.h>
<CoreFoundation/CFBase.h>
<CoreFoundation/CFDictionary.h>
<CoreFoundation/CFRunLoop.h>
<IOKit/IOTypes.h>
<IOKit/IOKitKeys.h>
<IOKit/OSMessageNotification.h>
<AvailabilityMacros.h>

Overview

IOKitLib implements non-kernel task access to common I/O Kit objects - IORegistryEntry, IOService, IOIterator etc. These functions are generic - families may provide API that is more specific.

IOKitLib represents I/O Kit objects outside the kernel with the types io_object_t, io_registry_entry_t, io_service_t, and io_connect_t.

Function names usually begin with the type of object they are compatible with, e.g. IOObjectRelease can be used with any io_object_t.

Inside the kernel, the C++ class hierarchy allows the subclasses of each object type to receive the same requests from user level clients. For example, in the kernel, IOService is a subclass of IORegistryEntry, which means any of the IORegistryEntryXXX functions in IOKitLib may be passed a variable of either type io_service_t or type io_registry_t.

There are functions available to introspect the class of the kernel object which any io_object_t et al. represents. I/O Kit objects returned by all functions should be released with IOObjectRelease.



Functions

CFStringRef IOObjectCopyBundleIdentifierForClass
Returns the bundle identifier of the given class.
CFStringRef IOObjectCopyClass
Returns the class name of an I/O Kit object.
CFStringRef IOObjectCopySuperclassForClass
Returns the superclass name of the given class.
IOBSDNameMatching
Creates a matching dictionary that specifies an IOService match based on BSD device name.
IOConnectAddClient
Informs a connection of a second connection.
IOConnectAddRef
Adds a reference to the connect handle.
IOConnectGetService
Returns the IOService object a connect handle was opened on.
IOConnectMapMemory
Maps hardware or shared memory into the caller's task.
IOConnectRelease
Removes a reference to the connect handle.
IOConnectSetCFProperties
Sets CF container-based properties on a connection.
IOConnectSetCFProperty
Sets a CF container-based property on a connection.
IOConnectSetNotificationPort
Sets a port to receive family specific notifications.
IOConnectUnmapMemory
Removes a mapping made with IOConnectMapMemory.
IOCreateReceivePort
Creates and returns a Mach port suitable for receiving I/O Kit messages of the specified type.
IODispatchCalloutFromMessage
Dispatches callback notifications from a Mach message.
IOIteratorIsValid
Checks an iterator is still valid.
IOIteratorNext
Returns the next object in an iteration.
IOIteratorReset
Resets an iteration back to the beginning.
IOKitGetBusyState
Returns the busyState of all IOService objects.
IOKitWaitQuiet
Waits for the busyState of all IOService objects to be zero.
IOMasterPort
Returns the Mach port used to initiate communication with the I/O Kit.
IONotificationPortCreate
Creates and returns a notification object for receiving I/O Kit notifications of new devices or state changes.
IONotificationPortDestroy
Destroys a notification object created with IONotificationPortCreate.
IONotificationPortGetMachPort
Returns a Mach port to be used to listen for notifications.
IONotificationPortGetRunLoopSource
Returns a CFRunLoopSource to be used to listen for notifications.
IOObjectConformsTo
Performs an OSDynamicCast operation on an I/O Kit object.
IOObjectCopyBundleIdentifierForClass IOObjectCopyBundleIdentifierForClass
Returns the bundle identifier of the given class.
IOObjectCopyClass IOObjectCopyClass
Returns the class name of an I/O Kit object.
IOObjectCopySuperclassForClass IOObjectCopySuperclassForClass
Returns the superclass name of the given class.
IOObjectGetClass
Returns the class name of an I/O Kit object.
IOObjectGetRetainCount
Returns kernel retain count of an I/O Kit object.
IOObjectIsEqualTo
Checks two object handles to see if they represent the same kernel object.
IOObjectRelease
Releases an object handle previously returned by IOKitLib.
IOObjectRetain
Retains an object handle previously returned by IOKitLib.
IOOpenFirmwarePathMatching
Creates a matching dictionary that specifies an IOService match based on an OpenFirmware device path.
IORegistryCreateIterator
Creates an iterator rooted at the I/O Registry root.
IORegistryEntryCreateCFProperties
Creates a CFDictionary representation of a registry entry's property table.
IORegistryEntryCreateCFProperty
Creates a CF representation of a registry entry's property.
IORegistryEntryCreateIterator
Creates an iterator rooted at a given registry entry.
IORegistryEntryFromPath
Looks up a registry entry by path.
IORegistryEntryGetChildEntry
Returns the first child of a registry entry in a plane.
IORegistryEntryGetChildIterator
Returns an iterator over a registry entry's child entries in a plane.
IORegistryEntryGetLocationInPlane
Returns a C string location assigned to a registry entry, in a specified plane.
IORegistryEntryGetName
Returns a C string name assigned to a registry entry.
IORegistryEntryGetNameInPlane
Returns a C string name assigned to a registry entry, in a specified plane.
IORegistryEntryGetParentEntry
Returns the first parent of a registry entry in a plane.
IORegistryEntryGetParentIterator
Returns an iterator over a registry entry's parent entries in a plane.
IORegistryEntryGetPath
Creates a path for a registry entry.
IORegistryEntryInPlane
Determines if the registry entry is attached in a plane.
IORegistryEntrySearchCFProperty
Creates a CF representation of a registry entry's property.
IORegistryEntrySetCFProperties
Sets CF container-based properties in a registry entry.
IORegistryEntrySetCFProperty
Sets a CF container-based property in a registry entry.
IORegistryGetRootEntry
Returns a handle to the I/O Registry root.
IORegistryIteratorEnterEntry
Recurses into the current entry in the registry iteration.
IORegistryIteratorExitEntry
Exits a level of recursion, restoring the current entry.
IOServiceAddInterestNotification
Register for notification of state changes in an IOService object.
IOServiceAddMatchingNotification
Looks up registered IOService objects that match a matching dictionary, and install a notification request of new IOService objects that match.
IOServiceClose
Closes a connection to an IOService object and destroys the connect handle.
IOServiceGetBusyState
Returns the busyState of an IOService object.
IOServiceGetMatchingService
Look up a registered IOService object that matches a matching dictionary.
IOServiceGetMatchingServices
Look up registered IOService objects that match a matching dictionary.
IOServiceMatching
Creates a matching dictionary that specifies an IOService class match.
IOServiceMatchPropertyTable
Match an IOService objects with matching dictionary.
IOServiceNameMatching
Creates a matching dictionary that specifies an IOService name match.
IOServiceOFPathToBSDName
Looks up an IOService from its OpenFirmware device path and returns its BSD device name, if available.
IOServiceOpen
Requests the creation of a connection to an IOService object.
IOServiceRequestProbe
Requests a rescan of a bus for device changes.
IOServiceWaitQuiet
Waits for an IOService object's busyState to be zero.

CFStringRef IOObjectCopyBundleIdentifierForClass


Returns the bundle identifier of the given class.

CFStringRef IOObjectCopyBundleIdentifierForClass(
    CFStringRef classname);  
Parameters
classname
The name of the class as a CFString.
Return Value

The resulting CFStringRef. This should be released by the caller. If a valid class name is not passed in, then NULL is returned.

Discussion

This function uses the OSMetaClass system in the kernel to derive the name of the kmod, which is the same as the bundle identifier.


CFStringRef IOObjectCopyClass


Returns the class name of an I/O Kit object.

CFStringRef IOObjectCopyClass(
    io_object_t object) ;  
Parameters
object
The I/O Kit object.
Return Value

The resulting CFStringRef. This should be released by the caller. If a valid object is not passed in, then NULL is returned.

Discussion

This function does the same thing as IOObjectGetClass, but returns the result as a CFStringRef.

Availability
Introduced in Mac OS X v10.4.

CFStringRef IOObjectCopySuperclassForClass


Returns the superclass name of the given class.

CFStringRef IOObjectCopySuperclassForClass(
    CFStringRef classname);  
Parameters
classname
The name of the class as a CFString.
Return Value

The resulting CFStringRef. This should be released by the caller. If there is no superclass, or a valid class name is not passed in, then NULL is returned.

Discussion

This function uses the OSMetaClass system in the kernel to derive the name of the superclass of the class.


IOBSDNameMatching


Creates a matching dictionary that specifies an IOService match based on BSD device name.

CFMutableDictionaryRef IOBSDNameMatching( 
    mach_port_t masterPort, 
    uint32_t options, 
    const char *bsdName );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
options
No options are currently defined.
bsdName
The BSD name, as a const char pointer.
Return Value

The matching dictionary created, is returned on success, or zero on failure. The dictionary is commonly passed to IOServiceGetMatchingServices or IOServiceAddMatchingNotification which will consume a reference, otherwise it should be released with CFRelease by the caller.

Discussion

IOService objects that represent BSD devices have an associated BSD name. This function creates a matching dictionary that will match IOService objects with a given BSD name.


IOConnectAddClient


Informs a connection of a second connection.

kern_return_t IOConnectAddClient( 
    io_connect_t connect, 
    io_connect_t client );  
Parameters
connect
The connect handle created by IOServiceOpen.
client
Another connect handle created by IOServiceOpen.
Return Value

A kern_return_t error code returned by the family.

Discussion

This is a generic method to inform a family connection of a second connection, and is rarely used.


IOConnectAddRef


Adds a reference to the connect handle.

kern_return_t IOConnectAddRef( 
    io_connect_t connect );  
Parameters
connect
The connect handle created by IOServiceOpen.
Return Value

A kern_return_t error code.


IOConnectGetService


Returns the IOService object a connect handle was opened on.

kern_return_t IOConnectGetService( 
    io_connect_t connect, 
    io_service_t *service );  
Parameters
connect
The connect handle created by IOServiceOpen.
service
On success, the service handle the connection was opened on, which should be released with IOObjectRelease.
Return Value

A kern_return_t error code.

Discussion

Finds and returns the service object a connection was opened on.


IOConnectMapMemory


Maps hardware or shared memory into the caller's task.

kern_return_t IOConnectMapMemory( 
    io_connect_t connect, 
    uint32_t memoryType, 
    task_port_t intoTask, 
    vm_address_t *atAddress, 
    vm_size_t *ofSize, 
    IOOptionBits options );  
Parameters
connect
The connect handle created by IOServiceOpen.
memoryType
What is being requested to be mapped, family defined and not interpreted by I/O Kit. The family may support physical hardware or shared memory mappings.
intoTask
The task port for the task in which to create the mapping (note that this may be different from the task that opened the connection). Pass mach_task_self() to refer to the process calling this function. Note that in Mac OS X, each process is based on a Mach task and one or more Mach threads. For more information on the composition of a Mach task and its relationship with Mach threads, see "Tasks and Threads".
atAddress
An in/out parameter - if the kIOMapAnywhere option is not set, the caller should pass the address where it requests the mapping be created, otherwise nothing needs to be set on input. The address of the mapping created is passed back on success.
ofSize
The size of the mapping created is passed back on success.
Return Value

A kern_return_t error code.

Discussion

This is a generic method to create a mapping in the caller's task. The family will interpret the memoryType parameter to determine what sort of mapping is being requested. Cache modes and placed mappings may be requested by the caller.


IOConnectRelease


Removes a reference to the connect handle.

kern_return_t IOConnectRelease( 
    io_connect_t connect );  
Parameters
connect
The connect handle created by IOServiceOpen.
Return Value

A kern_return_t error code.

Discussion

If the last reference is removed an implicit IOServiceClose is performed.


IOConnectSetCFProperties


Sets CF container-based properties on a connection.

kern_return_t IOConnectSetCFProperties( 
    io_connect_t connect, 
    CFTypeRef properties );  
Parameters
connect
The connect handle created by IOServiceOpen.
properties
A CF container - commonly a CFDictionary but this is not enforced. The container should consist of objects which are understood by the I/O Kit - these are currently : CFDictionary, CFArray, CFSet, CFString, CFData, CFNumber, CFBoolean, and are passed in the kernel as the corresponding OSDictionary, OSArray, etc. objects.
Return Value

A kern_return_t error code returned by the family.

Discussion

This is a generic method to pass a CF container of properties to the connection. The properties are interpreted by the family and commonly represent configuration settings, but may be interpreted as anything.


IOConnectSetCFProperty


Sets a CF container-based property on a connection.

kern_return_t IOConnectSetCFProperty( 
    io_connect_t connect, 
    CFStringRef propertyName, 
    CFTypeRef property );  
Parameters
connect
The connect handle created by IOServiceOpen.
propertyName
The name of the property as a CFString.
property
A CF container - should consist of objects which are understood by the I/O Kit - these are currently : CFDictionary, CFArray, CFSet, CFString, CFData, CFNumber, CFBoolean, and are passed in the kernel as the corresponding OSDictionary etc. objects.
Return Value

A kern_return_t error code returned by the object.

Discussion

This is a generic method to pass a CF property to the connection. The property is interpreted by the family and commonly represents configuration settings, but may be interpreted as anything.


IOConnectSetNotificationPort


Sets a port to receive family specific notifications.

kern_return_t IOConnectSetNotificationPort( 
    io_connect_t connect, 
    uint32_t type, 
    mach_port_t port, 
    uintptr_t reference );  
Parameters
connect
The connect handle created by IOServiceOpen.
type
The type of notification requested, family defined and not interpreted by the I/O Kit.
port
The port to which to send notifications.
reference
Some families may support passing a reference parameter for the caller's use with the notification.
Return Value

A kern_return_t error code.

Discussion

This is a generic method to pass a Mach port send right to be be used by family specific notifications.


IOConnectUnmapMemory


Removes a mapping made with IOConnectMapMemory.

kern_return_t IOConnectUnmapMemory( 
    io_connect_t connect, 
    uint32_t memoryType, 
    task_port_t fromTask, 
    vm_address_t atAddress );  
Parameters
connect
The connect handle created by IOServiceOpen.
memoryType
The memory type originally requested in IOConnectMapMemory.
intoTask
The task port for the task from which to remove the mapping (note that this may be different from the task that opened the connection). Pass mach_task_self() to refer to the process calling this function. Note in Mac OS X, each process is based on a Mach task and one or more Mach threads. For more information on the composition of a Mach task and its relationship with Mach threads, see "Tasks and Threads".
atAddress
The address of the mapping to be removed.
Return Value

A kern_return_t error code.

Discussion

This is a generic method to remove a mapping in the caller's task.


IOCreateReceivePort


Creates and returns a Mach port suitable for receiving I/O Kit messages of the specified type.

kern_return_t IOCreateReceivePort(
    uint32_t msgType,
    mach_port_t *recvPort );  
Parameters
msgType
Type of message to be sent to this port (kOSNotificationMessageID or kOSAsyncCompleteMessageID).
recvPort
The created port is returned.
Return Value

A kern_return_t error code.

Discussion

In the future, the I/O Kit may use specialized messages and ports instead of the standard ports created by mach_port_allocate(). Use this function instead of mach_port_allocate() to ensure compatibility with future revisions of the I/O Kit.


IODispatchCalloutFromMessage


Dispatches callback notifications from a Mach message.

void IODispatchCalloutFromMessage( 
    void *unused, 
    mach_msg_header_t *msg, 
    void *reference );  
Parameters
unused
Not used, set to zero.
msg
A pointer to the message received.
reference
Pass the IONotificationPortRef for the object.
Discussion

A notification object may deliver notifications to a Mach messaging client, which should call this function to generate the callbacks associated with the notifications arriving on the port.


IOIteratorIsValid


Checks an iterator is still valid.

boolean_t IOIteratorIsValid( 
    io_iterator_t iterator );  
Parameters
iterator
An I/O Kit iterator handle.
Return Value

True if the iterator handle is valid, otherwise false is returned.

Discussion

Some iterators will be made invalid if changes are made to the structure they are iterating over. This function checks the iterator is still valid and should be called when IOIteratorNext returns zero. An invalid iterator can be reset and the iteration restarted.


IOIteratorNext


Returns the next object in an iteration.

io_object_t IOIteratorNext( 
    io_iterator_t iterator );  
Parameters
iterator
An I/O Kit iterator handle.
Return Value

If the iterator handle is valid, the next element in the iteration is returned, otherwise zero is returned. The element should be released by the caller when it is finished.

Discussion

This function returns the next object in an iteration, or zero if no more remain or the iterator is invalid.


IOIteratorReset


Resets an iteration back to the beginning.

void IOIteratorReset( 
    io_iterator_t iterator );  
Parameters
iterator
An I/O Kit iterator handle.
Discussion

If an iterator is invalid, or if the caller wants to start over, IOIteratorReset will set the iteration back to the beginning.


IOKitGetBusyState


Returns the busyState of all IOService objects.

kern_return_t IOKitGetBusyState( 
    mach_port_t masterPort, 
    uint32_t *busyState );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
busyState
The busyState count is returned.
Return Value

A kern_return_t error code.

Discussion

Many activities in IOService are asynchronous. When registration, matching, or termination is in progress on an IOService object, its busyState is increased by one. Change in busyState to or from zero also changes the IOService object's provider's busyState by one, which means that an IOService object is marked busy when any of the above activities is ocurring on it or any of its clients. IOKitGetBusyState returns the busy state of the root of the service plane, which reflects the busy state of all IOService objects.


IOKitWaitQuiet


Waits for the busyState of all IOService objects to be zero.

kern_return_t IOKitWaitQuiet( 
    mach_port_t masterPort, 
    mach_timespec_t *waitTime );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
waitTime
Specifies a maximum time to wait.
Return Value

Returns an error code if Mach synchronization primitives fail, kIOReturnTimeout, or kIOReturnSuccess.

Discussion

Blocks the caller until all IOService objects are non busy, see IOKitGetBusyState.


IOMasterPort


Returns the Mach port used to initiate communication with the I/O Kit.

kern_return_t IOMasterPort(
    mach_port_t bootstrapPort, 
    mach_port_t *masterPort );  
Parameters
bootstrapPort
Pass MACH_PORT_NULL for the default.
masterPort
The master port is returned.
Return Value

A kern_return_t error code.

Discussion

Functions that don't specify an existing object require the I/O Kit master port to be passed. This function obtains that port.


IONotificationPortCreate


Creates and returns a notification object for receiving I/O Kit notifications of new devices or state changes.

IONotificationPortRef IONotificationPortCreate( 
    mach_port_t masterPort );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
Return Value

A reference to the notification object.

Discussion

Creates the notification object to receive notifications from the I/O Kit of new device arrivals or state changes. The notification object can be supply a CFRunLoopSource, or mach_port_t to be used to listen for events.


IONotificationPortDestroy


Destroys a notification object created with IONotificationPortCreate.

void IONotificationPortDestroy( 
    IONotificationPortRef notify );  
Parameters
notify
A reference to the notification object.


IONotificationPortGetMachPort


Returns a Mach port to be used to listen for notifications.

mach_port_t IONotificationPortGetMachPort( 
    IONotificationPortRef notify );  
Parameters
notify
The notification object.
Return Value

A mach_port_t for the notification object.

Discussion

A notification object may deliver notifications to a Mach messaging client if they listen for messages on the port obtained from this function. Callbacks associated with the notifications may be delivered by calling IODispatchCalloutFromMessage with messages received.


IONotificationPortGetRunLoopSource


Returns a CFRunLoopSource to be used to listen for notifications.

CFRunLoopSourceRef IONotificationPortGetRunLoopSource( 
    IONotificationPortRef notify );  
Parameters
notify
The notification object.
Return Value

A CFRunLoopSourceRef for the notification object.

Discussion

A notification object may deliver notifications to a CFRunLoop client by adding the run loop source returned by this function to the run loop.


IOObjectConformsTo


Performs an OSDynamicCast operation on an I/O Kit object.

boolean_t IOObjectConformsTo( 
    io_object_t object, 
    const io_name_t className );  
Parameters
object
An I/O Kit object.
className
The name of the class, as a C string.
Return Value

If the object handle is valid, and represents an object in the kernel that dynamic casts to the class true is returned, otherwise false.

Discussion

This function uses the OSMetaClass system in the kernel to determine if the object will dynamic cast to a class, specified as a C string (in other words, if the object is of that class or a subclass).


IOObjectCopyBundleIdentifierForClass IOObjectCopyBundleIdentifierForClass


Returns the bundle identifier of the given class.

CFStringRef IOObjectCopyBundleIdentifierForClass(
    CFStringRef classname);  
Parameters
classname
The name of the class as a CFString.
Return Value

The resulting CFStringRef. This should be released by the caller. If a valid class name is not passed in, then NULL is returned.

Discussion

This function uses the OSMetaClass system in the kernel to derive the name of the kmod, which is the same as the bundle identifier.


IOObjectCopyClass IOObjectCopyClass


Returns the class name of an I/O Kit object.

CFStringRef IOObjectCopyClass(
    io_object_t object) ;  
Parameters
object
The I/O Kit object.
Return Value

The resulting CFStringRef. This should be released by the caller. If a valid object is not passed in, then NULL is returned.

Discussion

This function does the same thing as IOObjectGetClass, but returns the result as a CFStringRef.

Availability
Introduced in Mac OS X v10.4.

IOObjectCopySuperclassForClass IOObjectCopySuperclassForClass


Returns the superclass name of the given class.

CFStringRef IOObjectCopySuperclassForClass(
    CFStringRef classname);  
Parameters
classname
The name of the class as a CFString.
Return Value

The resulting CFStringRef. This should be released by the caller. If there is no superclass, or a valid class name is not passed in, then NULL is returned.

Discussion

This function uses the OSMetaClass system in the kernel to derive the name of the superclass of the class.


IOObjectGetClass


Returns the class name of an I/O Kit object.

kern_return_t IOObjectGetClass( 
    io_object_t object, 
    io_name_t className );  
Parameters
object
The I/O Kit object.
className
Caller allocated buffer to receive the name string.
Return Value

A kern_return_t error code.

Discussion

This function uses the OSMetaClass system in the kernel to derive the name of the class the object is an instance of.


IOObjectGetRetainCount


Returns kernel retain count of an I/O Kit object.

uint32_t IOObjectGetRetainCount( 
    io_object_t object );  
Parameters
object
An I/O Kit object.
Return Value

If the object handle is valid, the kernel objects retain count is returned, otherwise zero is returned.

Discussion

This function may be used in diagnostics to determine the current retain count of the kernel object.


IOObjectIsEqualTo


Checks two object handles to see if they represent the same kernel object.

boolean_t IOObjectIsEqualTo( 
    io_object_t object, 
    io_object_t anObject );  
Parameters
object
An I/O Kit object.
anObject
Another I/O Kit object.
Return Value

If both object handles are valid, and represent the same object in the kernel true is returned, otherwise false.

Discussion

If two object handles are returned by IOKitLib functions, this function will compare them to see if they represent the same kernel object.


IOObjectRelease


Releases an object handle previously returned by IOKitLib.

kern_return_t IOObjectRelease( 
    io_object_t object );  
Parameters
object
The I/O Kit object to release.
Return Value

A kern_return_t error code.

Discussion

All objects returned by IOKitLib should be released with this function when access to them is no longer needed. Using the object after it has been released may or may not return an error, depending on how many references the task has to the same object in the kernel.


IOObjectRetain


Retains an object handle previously returned by IOKitLib.

kern_return_t IOObjectRetain( 
    io_object_t object );  
Parameters
object
The I/O Kit object to retain.
Return Value

A kern_return_t error code.

Discussion

Gives the caller an additional reference to an existing object handle previously returned by IOKitLib.


IOOpenFirmwarePathMatching


Creates a matching dictionary that specifies an IOService match based on an OpenFirmware device path.

CFMutableDictionaryRef IOOpenFirmwarePathMatching( 
    mach_port_t masterPort, 
    uint32_t options, 
    const char *path );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
options
No options are currently defined.
path
The OpenFirmware device path, as a const char pointer.
Return Value

The matching dictionary created, is returned on success, or zero on failure. The dictionary is commonly passed to IOServiceGetMatchingServices or IOServiceAddMatchingNotification which will consume a reference, otherwise it should be released with CFRelease by the caller.

Discussion

Certain IOService objects (currently, block and ethernet boot devices) may be looked up by a path that specifies their location in the OpenFirmware device tree, represented in the I/O Registry by the kIODeviceTreePlane plane. This function creates a matching dictionary that will match IOService objects found with a given OpenFirmware device path.


IORegistryCreateIterator


Creates an iterator rooted at the I/O Registry root.

kern_return_t IORegistryCreateIterator( 
    mach_port_t masterPort, 
    const io_name_t plane, 
    IOOptionBits options, 
    io_iterator_t *iterator );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
plane
The name of an existing I/O Registry plane. Plane names are defined in IOKitKeys.h, eg. kIOServicePlane.
options
kIORegistryIterateRecursively may be set to recurse automatically into each entry as it is returned from calls on the registry iterator.
iterator
A created iterator handle, to be released by the caller when it has finished with it.
Return Value

A kern_return_t error code.

Discussion

This method creates an IORegistryIterator object in the kernel that is set up with options to iterate over the children of the I/O Registry root entry, and to recurse automatically into entries as they are returned, or only when instructed with calls to IORegistryIteratorEnterEntry. The iterator object keeps track of entries that have been recursed into previously to avoid loops.


IORegistryEntryCreateCFProperties


Creates a CFDictionary representation of a registry entry's property table.

kern_return_t IORegistryEntryCreateCFProperties( 
    io_registry_entry_t entry, 
    CFMutableDictionaryRef *properties, 
    CFAllocatorRef allocator, 
    IOOptionBits options );  
Parameters
entry
The registry entry handle whose property table to copy.
properties
A CFDictionary is created and returned the caller on success. The caller should release with CFRelease.
allocator
The CF allocator to use when creating the CF containers.
options
No options are currently defined.
Return Value

A kern_return_t error code.

Discussion

This function creates an instantaneous snapshot of a registry entry's property table, creating a CFDictionary analogue in the caller's task. Not every object available in the kernel is represented as a CF container; currently OSDictionary, OSArray, OSSet, OSSymbol, OSString, OSData, OSNumber, OSBoolean are created as their CF counterparts.


IORegistryEntryCreateCFProperty


Creates a CF representation of a registry entry's property.

CFTypeRef IORegistryEntryCreateCFProperty( 
    io_registry_entry_t entry, 
    CFStringRef key, 
    CFAllocatorRef allocator, 
    IOOptionBits options );  
Parameters
entry
The registry entry handle whose property to copy.
key
A CFString specifying the property name.
allocator
The CF allocator to use when creating the CF container.
options
No options are currently defined.
Return Value

A CF container is created and returned the caller on success. The caller should release with CFRelease.

Discussion

This function creates an instantaneous snapshot of a registry entry property, creating a CF container analogue in the caller's task. Not every object available in the kernel is represented as a CF container; currently OSDictionary, OSArray, OSSet, OSSymbol, OSString, OSData, OSNumber, OSBoolean are created as their CF counterparts.


IORegistryEntryCreateIterator


Creates an iterator rooted at a given registry entry.

kern_return_t IORegistryEntryCreateIterator( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    IOOptionBits options, 
    io_iterator_t *iterator );  
Parameters
entry
The root entry to begin the iteration at.
plane
The name of an existing I/O Registry plane. Plane names are defined in IOKitKeys.h, eg. kIOServicePlane.
options
kIORegistryIterateRecursively may be set to recurse automatically into each entry as it is returned from calls on the registry iterator. kIORegistryIterateParents may be set to iterate the parents of each entry, by default the children are iterated.
iterator
A created iterator handle, to be released by the caller when it has finished with it.
Return Value

A kern_return_t error code.

Discussion

This method creates an IORegistryIterator object in the kernel that is set up with options to iterate over the children or parents of a root entry, and to recurse automatically into entries as they are returned, or only when instructed with calls to IORegistryIteratorEnterEntry. The iterator object keeps track of entries that have been recursed into previously to avoid loops.


IORegistryEntryFromPath


Looks up a registry entry by path.

io_registry_entry_t IORegistryEntryFromPath( 
    mach_port_t masterPort, 
    const io_string_t path );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
path
A C string path.
Return Value

A handle to the IORegistryEntry object that was found with the path (to be released with IOObjectRelease by the caller) or MACH_PORT_NULL on failure.

Discussion

This function parses paths to look up registry entries. The path should begin with '<plane name>:' If there are characters remaining unparsed after an entry has been looked up, this is considered an invalid lookup. Paths are further documented in IORegistryEntry.h.


IORegistryEntryGetChildEntry


Returns the first child of a registry entry in a plane.

kern_return_t IORegistryEntryGetChildEntry( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_registry_entry_t *child );  
Parameters
entry
The registry entry whose child to look up.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
child
The first child of the registry entry, on success. The child must be released by the caller.
Return Value

A kern_return_t error code.

Discussion

This function will return the child that first attached to a registry entry in a plane.


IORegistryEntryGetChildIterator


Returns an iterator over a registry entry's child entries in a plane.

kern_return_t IORegistryEntryGetChildIterator( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_iterator_t *iterator );  
Parameters
entry
The registry entry whose children to iterate over.
plane
The name of an existing I/O Registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
iterator
The created iterator over the children of the entry, on success. The iterator must be released when the iteration is finished.
Return Value

A kern_return_t error code.

Discussion

This method creates an iterator which will return each of a registry entry's child entries in a specified plane.


IORegistryEntryGetLocationInPlane


Returns a C string location assigned to a registry entry, in a specified plane.

kern_return_t IORegistryEntryGetLocationInPlane( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_name_t location );  
Parameters
entry
The registry entry handle whose name to look up.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, eg. kIOServicePlane.
location
The caller's buffer to receive the location string.
Return Value

A kern_return_t error code.

Discussion

Registry entries can given a location string in a particular plane, or globally. If the entry has had a location set in the specified plane that location string will be returned, otherwise the global location string is returned. If no global location string has been set, an error is returned.


IORegistryEntryGetName


Returns a C string name assigned to a registry entry.

kern_return_t IORegistryEntryGetName( 
    io_registry_entry_t entry, 
    io_name_t name );  
Parameters
entry
The registry entry handle whose name to look up.
name
The caller's buffer to receive the name.
Return Value

A kern_return_t error code.

Discussion

Registry entries can be named in a particular plane or globally. This function returns the entry's global name. The global name defaults to the entry's meta class name if it has not been named.


IORegistryEntryGetNameInPlane


Returns a C string name assigned to a registry entry, in a specified plane.

kern_return_t IORegistryEntryGetNameInPlane( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_name_t name );  
Parameters
entry
The registry entry handle whose name to look up.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
name
The caller's buffer to receive the name.
Return Value

A kern_return_t error code.

Discussion

Registry entries can be named in a particular plane, or globally. This function returns the entry's name in the specified plane or global name if it has not been named in that plane. The global name defaults to the entry's meta class name if it has not been named.


IORegistryEntryGetParentEntry


Returns the first parent of a registry entry in a plane.

kern_return_t IORegistryEntryGetParentEntry( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_registry_entry_t *parent );  
Parameters
entry
The registry entry whose parent to look up.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
parent
The first parent of the registry entry, on success. The parent must be released by the caller.
Return Value

A kern_return_t error code.

Discussion

This function will return the parent to which the registry entry was first attached in a plane.


IORegistryEntryGetParentIterator


Returns an iterator over a registry entry's parent entries in a plane.

kern_return_t IORegistryEntryGetParentIterator( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_iterator_t *iterator );  
Parameters
entry
The registry entry whose parents to iterate over.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
iterator
The created iterator over the parents of the entry, on success. The iterator must be released when the iteration is finished.
Return Value

A kern_return_t error.

Discussion

This method creates an iterator which will return each of a registry entry's parent entries in a specified plane.


IORegistryEntryGetPath


Creates a path for a registry entry.

kern_return_t IORegistryEntryGetPath( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    io_string_t path );  
Parameters
entry
The registry entry handle whose path to look up.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, e.g. kIOServicePlane.
path
A char buffer allocated by the caller.
Return Value

IORegistryEntryGetPath will fail if the entry is not attached in the specified plane, or if the buffer is not large enough to contain the path.

Discussion

The path for a registry entry is copied to the caller's buffer. The path describes the entry's attachment in a particular plane, which must be specified. The path begins with the plane name followed by a colon, and then followed by '/' separated path components for each of the entries between the root and the registry entry. An alias may also exist for the entry, and will be returned if available.


IORegistryEntryInPlane


Determines if the registry entry is attached in a plane.

boolean_t IORegistryEntryInPlane( 
    io_registry_entry_t entry, 
    const io_name_t plane );  
Parameters
entry
The registry entry.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, eg. kIOServicePlane.
Return Value

If the entry has a parent in the plane, true is returned, otherwise false is returned.

Discussion

This method determines if the entry is attached in a plane to any other entry.


IORegistryEntrySearchCFProperty


Creates a CF representation of a registry entry's property.

CFTypeRef IORegistryEntrySearchCFProperty( 
    io_registry_entry_t entry, 
    const io_name_t plane, 
    CFStringRef key, 
    CFAllocatorRef allocator, 
    IOOptionBits options );  
Parameters
entry
The registry entry at which to start the search.
plane
The name of an existing registry plane. Plane names are defined in IOKitKeys.h, eg. kIOServicePlane.
key
A CFString specifying the property name.
allocator
The CF allocator to use when creating the CF container.
options
kIORegistryIterateRecursively may be set to recurse automatically into the registry hierarchy. Without this option, this method degenerates into the standard IORegistryEntryCreateCFProperty call. kIORegistryIterateParents may be set to iterate the parents of the entry, in place of the children.
Return Value

A CF container is created and returned the caller on success. The caller should release with CFRelease.

Discussion

This function creates an instantaneous snapshot of a registry entry property, creating a CF container analogue in the caller's task. Not every object available in the kernel is represented as a CF container; currently OSDictionary, OSArray, OSSet, OSSymbol, OSString, OSData, OSNumber, OSBoolean are created as their CF counterparts. This function will search for a property, starting first with the specified registry entry's property table, then iterating recusively through either the parent registry entries or the child registry entries of this entry. Once the first occurrence is found, it will look up and return the value of the property, using the same semantics as IORegistryEntryCreateCFProperty. The iteration keeps track of entries that have been recursed into previously to avoid loops.


IORegistryEntrySetCFProperties


Sets CF container-based properties in a registry entry.

kern_return_t IORegistryEntrySetCFProperties( 
    io_registry_entry_t entry, 
    CFTypeRef properties );  
Parameters
entry
The registry entry whose properties to set.
properties
A CF container - commonly a CFDictionary but this is not enforced. The container should consist of objects which are understood by the I/O Kit - these are currently : CFDictionary, CFArray, CFSet, CFString, CFData, CFNumber, CFBoolean, and are passed in the kernel as the corresponding OSDictionary etc. objects.
Return Value

A kern_return_t error code returned by the object.

Discussion

This is a generic method to pass a CF container of properties to an object in the I/O Registry. Setting properties in a registry entry is not generally supported; it is more common to support IOConnectSetCFProperties for connection-based property setting. The properties are interpreted by the object.


IORegistryEntrySetCFProperty


Sets a CF container-based property in a registry entry.

kern_return_t IORegistryEntrySetCFProperty( 
    io_registry_entry_t entry, 
    CFStringRef propertyName, 
    CFTypeRef property );  
Parameters
entry
The registry entry whose property to set.
propertyName
The name of the property as a CFString.
property
A CF container - should consist of objects which are understood by the I/O Kit - these are currently : CFDictionary, CFArray, CFSet, CFString, CFData, CFNumber, CFBoolean, and are passed in the kernel as the corresponding OSDictionary etc. objects.
Return Value

A kern_return_t error code returned by the object.

Discussion

This is a generic method to pass a CF container as a property to an object in the I/O Registry. Setting properties in a registry entry is not generally supported, it is more common to support IOConnectSetCFProperty for connection-based property setting. The property is interpreted by the object.


IORegistryGetRootEntry


Returns a handle to the I/O Registry root.

io_registry_entry_t IORegistryGetRootEntry( 
    mach_port_t masterPort );  
Parameters
masterPort
The master port obtained from IOMasterPort. Pass kIOMasterPortDefault to look up the default master port.
Return Value

A handle to the IORegistryEntry root instance (to be released with IOObjectRelease by the caller) or MACH_PORT_NULL on failure.

Discussion

This method provides an accessor to the root of the I/O Registry for the machine. The root may be passed to a registry iterator object when iterating a plane, and contains properties that describe the available planes, and diagnostic information for the I/O Kit.


IORegistryIteratorEnterEntry


Recurses into the current entry in the registry iteration.

kern_return_t IORegistryIteratorEnterEntry( 
    io_iterator_t iterator );  
Return Value

A kern_return_t error code.

Discussion

This method makes the current entry, i.e. the last entry returned by IOIteratorNext, the root in a new level of recursion.