The code sample in Listing 11-3 shows a typical interrupt registration process during driver initialization.
Listing 11-3 Interrupt registration
 
#include <Devices.h>
#include <Interrupts.h>
#include <NameRegistry.h>
/* useful global data within my driver */
DriverRefNum                myDriverRefNum;
RegEntryID                  myRegEntryID;
InterruptSetMember          myISTMember;
void *                      theDefaultRefCon;
InterruptHandler            theDefaultHandlerFunction;
InterruptEnabler            theDefaultEnableFunction;
InterruptDisabler           theDefaultDisableFunction;
// the ISR function to be registered
InterruptMemberNumber
myISRHandler(       InterruptSetMember          member,
                    void *                      refCon,
                    UInt32                      theIntCount)
    {
    Boolean myDeviceWantsService( void );
    void serviceMyDevice( void );
    // see if your device was the one that requested an interrupt
    if( myDeviceWantsService() == false )
        return kIsrIsNotComplete
    // do what ever is required to service your hardware here
    serviceMyDevice();
    // tell the system that this interrupt has been serviced
    return kIsrIsComplete;
    }
// the main entry point for interrupt initialization
OSErr
DoInitializeCommand(        DriverRefNum        myRefNum,
                            RegEntryID          myRegID )
    {
    OSErr                           Status;
    RegPropertyValueSize            propertySize;
    ISTProperty                     theISTProperty;
    // remember our RefNum and Registry Entry ID
    myDriverRefNum = myRefNum;
    myRegEntryID   = myRegID;
    // get 'driver-ist' property from the Registry for my device
    propertySize = sizeof( theISTProperty );
    Status = RegistryPropertyGet(           &myRegEntryID,
                                            kISTPropertyName,
                                            theISTProperty,
                                            &propertySize );
    // return if we got an error
    if( Status != noErr )
        return Status;
    // remember the first InterruptSetMember in the 'driver-ist' 
    // as the IST member that my driver is connected to
    myISTMember.setID = theISTProperty[ kISTChipInterruptSource ].setID;
    myISTMember.member = theISTProperty[ kISTChipInterruptSource ].member;
    // get the default "enabler" function for my IST member
    Status = GetInterruptFunctions(             myISTMember.setID,
                                                myISTMember.member,
                                                &theDefaultRefCon,
                                                &theDefaultHandlerFunction,
                                                &theDefaultEnableFunction,
                                                &theDefaultDisableFunction );
    
    // return if we got an error
    if( Status != noErr )
        return Status;
    // register my ISR with my IST member. Don't register an
    // "enabler" or "disabler" function since the IST member
    // my driver is connected to is a Macintosh on-board device.
    Status = InstallInterruptFunctions(             myISTMember.setID,
                                                   myISTMember.member,
                                                   0,
                                                    (InterruptHandler)myISRHandler,
                                                   (InterruptEnabler)0,
                                                   (InterruptDisabler)0 );
    // return if we got an error
    if( Status != noErr )
        return Status;
    // make sure that interrupts are enabled for my IST member
    theDefaultEnableFunction(           myISTMember,
                                       0 );
    return Status;
    }