VirtualBox

source: vbox/trunk/include/iprt/cdrom.h@ 40282

Last change on this file since 40282 was 39730, checked in by vboxsync, 13 years ago

iprt/cdrom.h + cdrom-generic.cpp: Sketched out an API for messing with the CD-ROM drive.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.7 KB
Line 
1/** @file
2 * IPRT CD/DVD/BD-ROM Drive API.
3 */
4
5/*
6 * Copyright (C) 2012 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___iprt_cdrom_h
27#define ___iprt_cdrom_h
28
29#include <iprt/types.h>
30
31RT_C_DECLS_BEGIN
32
33/** @defgroup grp_cdrom IPRT CD/DVD/BD-ROM Drive API
34 *
35 * The user of the API is currently resposible for serializing calls to it.
36 *
37 * @{
38 */
39
40/** CD-ROM drive handle. */
41typedef struct RTCDROMINT *RTCDROM;
42/** Pointer to a CD-ROM handle. */
43typedef RTCDROM *PRTCDROM;
44/** NIL CD-ROM handle value. */
45#define NIL_RTCDROM ((RTCDROM)0)
46
47
48/** @name CD-ROM open flags.
49 * @{ */
50#define RTCDROM_O_READ RT_BIT(0)
51#define RTCDROM_O_WRITE RT_BIT(1)
52#define RTCDROM_O_CONTROL RT_BIT(2)
53#define RTCDROM_O_QUERY RT_BIT(3)
54#define RTCDROM_O_ALL_ACCESS (RTCDROM_O_READ | RTCDROM_O_WRITE | RTCDROM_O_CONTROL | RTCDROM_O_QUERY)
55/** @} */
56
57/**
58 * Opens the CD-ROM drive (by name).
59 *
60 * @returns IPRT status code.
61 * @param pszName The CD-ROM name (path).
62 * @param fFlags Open flags, see RTCDROM_O_XXX.
63 * @param phCdrom Where to return the CDROM handle.
64 */
65RTDECL(int) RTCdromOpen(const char *psz, uint32_t fFlags, PRTCDROM phCdrom);
66
67/**
68 * Retains a reference to the CD-ROM handle.
69 *
70 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
71 * @param hCdrom The CD-ROM handle to retain.
72 */
73RTDECL(uint32_t) RTCdromRetain(RTCDROM hCdrom);
74
75/**
76 * Releases a reference to the CD-ROM handle.
77 *
78 * When the reference count reaches zero, the CD-ROM handle is destroy.
79 *
80 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
81 * @param hCdrom The CD-ROM handle to retain.
82 */
83RTDECL(uint32_t) RTCdromRelease(RTCDROM hCdrom);
84
85/**
86 * Query the primary mount point of the CD-ROM.
87 *
88 * @returns IPRT status code.
89 * @retval VERR_BUFFER_OVERFLOW if the buffer is too small. The buffer will be
90 * set to an empty string if possible.
91 *
92 * @param hCdrom The CD-ROM handle.
93 * @param pszMountPoint Where to return the mount point.
94 * @param cbMountPoint The size of the mount point buffer.
95 */
96RTDECL(int) RTCdromQueryMountPoint(RTCDROM hCdrom, char *pszMountPoint, size_t cbMountPoint);
97
98/**
99 * Unmounts all file-system mounts related to the CD-ROM.
100 *
101 * @returns IPRT status code.
102 * @param hCdrom The CD-ROM handle.
103 */
104RTDECL(int) RTCdromUnmount(RTCDROM hCdrom);
105
106/**
107 * Ejects the CD-ROM from the drive.
108 *
109 * @returns IPRT status code.
110 * @param hCdrom The CD-ROM handle.
111 * @param fForce If set, unmount and unlock will be performed.
112 */
113RTDECL(int) RTCdromEject(RTCDROM hCdrom, bool fForce);
114
115/**
116 * Locks the CD-ROM so it cannot be ejected by the user or system.
117 *
118 * @returns IPRT status code.
119 * @param hCdrom The CD-ROM handle.
120 */
121RTDECL(int) RTCdromLock(RTCDROM hCdrom);
122
123/**
124 * Unlocks the CD-ROM so it can be ejected by the user or system.
125 *
126 * @returns IPRT status code.
127 * @param hCdrom The CD-ROM handle.
128 */
129RTDECL(int) RTCdromUnlock(RTCDROM hCdrom);
130
131
132/** @name Ordinal / Enumeration
133 * @{ */
134/**
135 * Get the current number of CD-ROMs.
136 *
137 * This is handy for using RTCdromOpenByOrdinal() or RTCdromOrdinalToName() to
138 * perform some kind of enumeration of all drives.
139 *
140 * @returns Number of CD-ROM drivers in the system.
141 */
142RTDECL(unsigned) RTCdromCount(void);
143
144/**
145 * Translates an CD-ROM drive ordinal number to a path suitable for RTCdromOpen.
146 *
147 * @returns IRPT status code.
148 * @retval VINF_SUCCESS on success, with the name in the buffer.
149 * @retval VERR_BUFFER_OVERFLOW if the buffer is too small. The buffer will be
150 * set to an empty string if possible, in order to prevent trouble.
151 * @retval VERR_OUT_OF_RANGE if the ordinal number is higher than the current
152 * number of CD-ROM drives.
153 *
154 * @param iCdrom The CD-ROM drive ordinal. Starts at 0.
155 * @param pszName Where to return the name (path).
156 * @param cbName Size of the output buffer.
157 *
158 * @remarks The ordinals are volatile. They may change as drives are attached
159 * or detected from the host.
160 */
161RTDECL(int) RTCdromOrdinalToName(unsigned iCdrom, char *pszName, size_t cbName);
162
163/**
164 * Combination of RTCdromOrdinalToName() and RTCdromOpen().
165 *
166 * @returns IPRT status code.
167 * @param pszName The CD-ROM name (path).
168 * @param fFlags Open flags, see RTCDROM_O_XXX.
169 * @param phCdrom Where to return the CDROM handle .
170 * @remarks See remarks on RTCdromOrdinalToName().
171 */
172RTDECL(int) RTCdromOpenByOrdinal(unsigned iCdrom, uint32_t fFlags, PRTCDROM phCdrom);
173
174/** @} */
175
176/** @} */
177
178RT_C_DECLS_END
179
180#endif
181
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette