VirtualBox

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

Last change on this file since 69844 was 69105, checked in by vboxsync, 7 years ago

include/iprt/: (C) year

  • 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-2017 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_rt_cdrom IPRT CD/DVD/BD-ROM Drive API
34 * @ingroup grp_rt
35 *
36 * The user of the API is currently resposible for serializing calls to it.
37 *
38 * @{
39 */
40
41/** CD-ROM drive handle. */
42typedef struct RTCDROMINT *RTCDROM;
43/** Pointer to a CD-ROM handle. */
44typedef RTCDROM *PRTCDROM;
45/** NIL CD-ROM handle value. */
46#define NIL_RTCDROM ((RTCDROM)0)
47
48
49/** @name CD-ROM open flags.
50 * @{ */
51#define RTCDROM_O_READ RT_BIT(0)
52#define RTCDROM_O_WRITE RT_BIT(1)
53#define RTCDROM_O_CONTROL RT_BIT(2)
54#define RTCDROM_O_QUERY RT_BIT(3)
55#define RTCDROM_O_ALL_ACCESS (RTCDROM_O_READ | RTCDROM_O_WRITE | RTCDROM_O_CONTROL | RTCDROM_O_QUERY)
56/** @} */
57
58/**
59 * Opens the CD-ROM drive (by name).
60 *
61 * @returns IPRT status code.
62 * @param pszName The CD-ROM name (path).
63 * @param fFlags Open flags, see RTCDROM_O_XXX.
64 * @param phCdrom Where to return the CDROM handle.
65 */
66RTDECL(int) RTCdromOpen(const char *pszName, uint32_t fFlags, PRTCDROM phCdrom);
67
68/**
69 * Retains a reference to the CD-ROM handle.
70 *
71 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
72 * @param hCdrom The CD-ROM handle to retain.
73 */
74RTDECL(uint32_t) RTCdromRetain(RTCDROM hCdrom);
75
76/**
77 * Releases a reference to the CD-ROM handle.
78 *
79 * When the reference count reaches zero, the CD-ROM handle is destroy.
80 *
81 * @returns New reference count, UINT32_MAX on invalid handle (asserted).
82 * @param hCdrom The CD-ROM handle to retain.
83 */
84RTDECL(uint32_t) RTCdromRelease(RTCDROM hCdrom);
85
86/**
87 * Query the primary mount point of the CD-ROM.
88 *
89 * @returns IPRT status code.
90 * @retval VERR_BUFFER_OVERFLOW if the buffer is too small. The buffer will be
91 * set to an empty string if possible.
92 *
93 * @param hCdrom The CD-ROM handle.
94 * @param pszMountPoint Where to return the mount point.
95 * @param cbMountPoint The size of the mount point buffer.
96 */
97RTDECL(int) RTCdromQueryMountPoint(RTCDROM hCdrom, char *pszMountPoint, size_t cbMountPoint);
98
99/**
100 * Unmounts all file-system mounts related to the CD-ROM.
101 *
102 * @returns IPRT status code.
103 * @param hCdrom The CD-ROM handle.
104 */
105RTDECL(int) RTCdromUnmount(RTCDROM hCdrom);
106
107/**
108 * Ejects the CD-ROM from the drive.
109 *
110 * @returns IPRT status code.
111 * @param hCdrom The CD-ROM handle.
112 * @param fForce If set, unmount and unlock will be performed.
113 */
114RTDECL(int) RTCdromEject(RTCDROM hCdrom, bool fForce);
115
116/**
117 * Locks the CD-ROM so it cannot be ejected by the user or system.
118 *
119 * @returns IPRT status code.
120 * @param hCdrom The CD-ROM handle.
121 */
122RTDECL(int) RTCdromLock(RTCDROM hCdrom);
123
124/**
125 * Unlocks the CD-ROM so it can be ejected by the user or system.
126 *
127 * @returns IPRT status code.
128 * @param hCdrom The CD-ROM handle.
129 */
130RTDECL(int) RTCdromUnlock(RTCDROM hCdrom);
131
132
133/** @name Ordinal / Enumeration
134 * @{ */
135/**
136 * Get the current number of CD-ROMs.
137 *
138 * This is handy for using RTCdromOpenByOrdinal() or RTCdromOrdinalToName() to
139 * perform some kind of enumeration of all drives.
140 *
141 * @returns Number of CD-ROM drivers in the system.
142 */
143RTDECL(unsigned) RTCdromCount(void);
144
145/**
146 * Translates an CD-ROM drive ordinal number to a path suitable for RTCdromOpen.
147 *
148 * @returns IRPT status code.
149 * @retval VINF_SUCCESS on success, with the name in the buffer.
150 * @retval VERR_BUFFER_OVERFLOW if the buffer is too small. The buffer will be
151 * set to an empty string if possible, in order to prevent trouble.
152 * @retval VERR_OUT_OF_RANGE if the ordinal number is higher than the current
153 * number of CD-ROM drives.
154 *
155 * @param iCdrom The CD-ROM drive ordinal. Starts at 0.
156 * @param pszName Where to return the name (path).
157 * @param cbName Size of the output buffer.
158 *
159 * @remarks The ordinals are volatile. They may change as drives are attached
160 * or detected from the host.
161 */
162RTDECL(int) RTCdromOrdinalToName(unsigned iCdrom, char *pszName, size_t cbName);
163
164/**
165 * Combination of RTCdromOrdinalToName() and RTCdromOpen().
166 *
167 * @returns IPRT status code.
168 * @param iCdrom The CD-ROM number.
169 * @param fFlags Open flags, see RTCDROM_O_XXX.
170 * @param phCdrom Where to return the CDROM handle .
171 * @remarks See remarks on RTCdromOrdinalToName().
172 */
173RTDECL(int) RTCdromOpenByOrdinal(unsigned iCdrom, uint32_t fFlags, PRTCDROM phCdrom);
174
175/** @} */
176
177/** @} */
178
179RT_C_DECLS_END
180
181#endif
182
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