I started stripping down some IMAPI code to make something to enumerate the cdroms and eject, but it is still enormous, and anyway it will only do burner drives.
So here is another way instead, using windows media players api:

VB Code:
  1. 'look in oject browser: com component windows media player (wmp.dll)
  2.     Dim WithEvents lv As New ListView
  3.     Dim wmp As Object
  4.     Dim cdroms As Object
  5.     Dim cdrom As Object
  6.  
  7.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.         lv.View = View.Details
  9.         lv.Dock = DockStyle.Fill
  10.         lv.Columns.Add("Cdrom identifier", 100, HorizontalAlignment.Left)
  11.         lv.MultiSelect = False
  12.         Me.Controls.Add(lv)
  13.         wmp = CreateObject("WMPlayer.OCX.7")
  14.         cdroms = wmp.cdromCollection
  15.         For i As Long = 0 To wmp.cdromCollection.count - 1
  16.             cdrom = cdroms.item(i)
  17.             Dim lvi As New ListViewItem
  18.             lvi.Text = cdrom.drivespecifier
  19.             lvi.Tag = i
  20.             lv.Items.Add(lvi)
  21.         Next
  22.     End Sub
  23.  
  24.     'double click an item to eject
  25.     Private Sub lv_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lv.DoubleClick
  26.         If lv.SelectedItems(0) Is Nothing Then Exit Sub
  27.         Dim index As Integer = lv.SelectedItems(0).Tag ' we stored the cdrom index in the tag
  28.         cdrom = cdroms.item(index)
  29.         cdrom.eject()
  30.     End Sub

I think there might be another way too, I'll pursue it...