Puedes usar mciSendCommand para abrir o cerrar. Primero, te creas una variable de tipo MCI_OPEN_PARAMS. De esta estructura, nos interesa lpstrDeviceType, a la que le asignaremos MCI_DEVTYPE_CD_AUDIO; y lpstrElementName, a la que le asignaremos el nombre de la unidad (D, E, F, etc). Luego, te creas un DWORD para las banderas, que serán MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID. Finalmente, mandas llamar mciSendCommand. El primer parámetro será NULL, el segundo, MCI_OPEN, el tercero las banderas en el DWORD y el cuarto, la dirección de memoria de la estructura MCI_OPEN_PARAMS, casteada a DWORD. Si la función regresa FALSE, todo fué bien, y ahora abrimos el dispositivo llamando a mciSendCommand, donde el primer parámetro será el miembro wDeviceID de nuestra estructura MCI_OPEN_PARAMS, el segundo parámetro será MCI_SET, el tercero será MCI_SET_DOOR_OPEN para abrir, o MCI_SET_DOOR_CLOSED para cerrar; el cuarto parámetro será NULL. Finalmente, cerramos el manejador con mciSendCommand, donde el segundo parámetro será MCI_CLOSE y el tercero, MCI_WAIT. He aquí el ejemplo:
MCI_OPEN_PARMS mciParams;
DWORD dwFlags;
LPCTSTR szCharDrive = "D";
memset(&mciParams, 0, sizeof(MCI_OPEN_PARMS));
mciParams.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
mciParams.lpstrElementName = szCharDrive;
dwFlags= MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID;
if (!mciSendCommand(0, MCI_OPEN, dwFlags, (DWORD) &mciParams))
{
mciSendCommand(mciParams.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
mciSendCommand(mciParams.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
}
Con el código anterior abres el CDROM. Si cambias MCI_SET_DOOR_OPEN por MCI_SET_DOOR_CLOSE, se cierra (aunque esto depende del tipo de CDROM instalado; por ejemplo, el cerrar el CDROM no funciona con la mayoría de las laptops).
Por cierto, necesitas #incluir windows.h.
Saludos.