A pice of code from HardwareGrowler:
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [workspace notificationCenter];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidMount:) name:NSWorkspaceDidMountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidUnmount:) name:NSWorkspaceDidUnmountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeWillUnmount:) name:NSWorkspaceWillUnmountNotification object:nil];
You then need to implement the methods to react on the notifications ala
+ (void) volumeDidUnmount:(NSNotification *)aNotification;
{
...
}
For the whole implementation check out http://growl.info/source.php
In the Source bundle go to Extras/HardwareGrowler and there check out VolumeNotifier.h/m
UPDATE:
Peters answer is superior to this. Please consider using the Disk Arbitration framework if you come about this problem.