VirtualBox

source: vbox/trunk/src/VBox/Main/idl/VirtualBox.xidl@ 27722

Last change on this file since 27722 was 27712, checked in by vboxsync, 15 years ago

Main/GuestImpl: Try to fix SDK burns.

  • Property svn:eol-style set to native
File size: 517.3 KB
Line 
1<?xml version="1.0" ?>
2
3<!--
4 * :tabSize=2:indentSize=2:noTabs=true:
5 * :folding=explicit:collapseFolds=1:
6 *
7 * Master declaration for VirtualBox's Main API, represented
8 * by COM/XPCOM and web service interfaces.
9 *
10 * From this document, the build system generates several files
11 * via XSLT that are then used during the build process.
12 *
13 * Below is the list of XSL templates that operate on this file and
14 * output files they generate. These XSL templates must be updated
15 * whenever the schema of this file changes:
16 *
17 * 1. src/VBox/Main/idl/midl.xsl =>
18 * out/<platform>/bin/sdk/idl/VirtualBox.idl
19 * (MS COM interface definition file for Main API)
20 *
21 * 2. src/VBox/Main/idl/xpidl.xsl =>
22 * out/<platform>/bin/sdk/idl/VirtualBox_XPCOM.idl
23 * (XPCOM interface definition file for Main API)
24 *
25 * 3. src/VBox/Main/idl/doxygen.xsl =>
26 * out/<platform>/obj/src/VBox/Main/VirtualBox.idl
27 * (pseudo-IDL for Doxygen to generate the official Main API
28 * documentation)
29 *
30 * 4. src/VBox/Main/webservice/*.xsl =>
31 * a bunch of WSDL and C++ files
32 * (VirtualBox web service sources and SOAP mappers;
33 * see src/VBox/Main/webservice/Makefile.kmk for details)
34 *
35 * 5. src/VBox/Frontends/VirtualBox/include/COMWrappers.xsl =>
36 * out/<platform>/obj/src/VBox/Frontends/VirtualBox/VirtualBox/include/COMWrappers.h
37 * (smart Qt-based C++ wrapper classes for COM interfaces
38 * of the Main API)
39 *
40 * 6. src/VBox/Installer/win32/VirtualBox_TypeLib.xsl =>
41 * out/<platform>/obj/src/VBox/Installer/win32/VirtualBox_TypeLib.wxi
42 * (Main API TypeLib block for the WiX installer)
43 *
44 * 7. src/VBox/Runtime/common/err/errmsgvboxcom.xsl =>
45 * out/<platform>/obj/Runtime/errmsgvboxcomdata.h
46 * (<result> extraction for the %Rhrc format specifier)
47 *
48 Copyright (C) 2006-2010 Sun Microsystems, Inc.
49
50 This file is part of VirtualBox Open Source Edition (OSE), as
51 available from http://www.virtualbox.org. This file is free software;
52 you can redistribute it and/or modify it under the terms of the GNU
53 General Public License (GPL) as published by the Free Software
54 Foundation, in version 2 as it comes in the "COPYING" file of the
55 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
56 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
57
58 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
59 Clara, CA 95054 USA or visit http://www.sun.com if you need
60 additional information or have any questions.
61-->
62
63<idl>
64
65<desc>
66 Welcome to the <b>VirtualBox Main API documentation</b>. This documentation
67 describes the so-called <i>VirtualBox Main API</i> which comprises all public
68 COM interfaces and components provided by the VirtualBox server and by the
69 VirtualBox client library.
70
71 VirtualBox employs a client-server design, meaning that whenever any part of
72 VirtualBox is running -- be it the Qt GUI, the VBoxManage command-line
73 interface or any virtual machine --, a dedicated server process named
74 VBoxSVC runs in the background. This allows multiple processes working with
75 VirtualBox to cooperate without conflicts. These processes communicate to each
76 other using inter-process communication facilities provided by the COM
77 implementation of the host computer.
78
79 On Windows platforms, the VirtualBox Main API uses Microsoft COM, a native COM
80 implementation. On all other platforms, Mozilla XPCOM, an open-source COM
81 implementation, is used.
82
83 All the parts that a typical VirtualBox user interacts with (the Qt GUI,
84 the VBoxManage command-line interface and the VBoxVRDP server) are technically
85 front-ends to the Main API and only use the interfaces that are documented
86 in this Main API documentation. This ensures that, with any given release
87 version of VirtualBox, all capabilities of the product that could be useful
88 to an external client program are always exposed by way of this API.
89
90 The VirtualBox Main API (also called the <i>VirtualBox COM library</i>)
91 contains two public component classes:
92 <tt>%VirtualBox.VirtualBox</tt> and <tt>%VirtualBox.Session</tt>, which
93 implement IVirtualBox and ISession interfaces respectively. These two classes
94 are of supreme importance and will be needed in order for any front-end
95 program to do anything useful. It is recommended to read the documentation of
96 the mentioned interfaces first.
97
98 The <tt>%VirtualBox.VirtualBox</tt> class is a singleton. This means that
99 there can be only one object of this class on the local machine at any given
100 time. This object is a parent of many other objects in the VirtualBox COM
101 library and lives in the VBoxSVC process. In fact, when you create an instance
102 of the <tt>VirtualBox.VirtualBox</tt>, the COM subsystem checks if the VBoxSVC
103 process is already running, starts it if not, and returns you a reference to
104 the <tt>VirtualBox</tt> object created in this process. When the last reference
105 to this object is released, the VBoxSVC process ends (with a 5 second delay to
106 protect from too frequent restarts).
107
108 The <tt>%VirtualBox.Session</tt> class is a regular component. You can create
109 as many <tt>Session</tt> objects as you need but all of them will live in a
110 process which issues the object instantiation call. <tt>Session</tt> objects
111 represent virtual machine sessions which are used to configure virtual
112 machines and control their execution.
113</desc>
114
115<if target="midl">
116 <cpp line="enum {"/>
117 <cpp line=" kTypeLibraryMajorVersion = 1,"/>
118 <cpp line=" kTypeLibraryMinorVersion = 0"/>
119 <cpp line="};"/>
120</if>
121
122<if target="xpidl">
123 <!-- NS_IMPL_THREADSAFE_ISUPPORTSxx_CI macros are placed here, for convenience -->
124 <cpp>
125/* currently, nsISupportsImpl.h lacks the below-like macros */
126
127#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI NS_IMPL_QUERY_INTERFACE1_CI
128#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI NS_IMPL_QUERY_INTERFACE2_CI
129#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI NS_IMPL_QUERY_INTERFACE3_CI
130
131#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
132# define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
133 NS_IMPL_THREADSAFE_ADDREF(_class) \
134 NS_IMPL_THREADSAFE_RELEASE(_class) \
135 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI(_class, _interface) \
136 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
137#endif
138
139#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
140# define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
141 NS_IMPL_THREADSAFE_ADDREF(_class) \
142 NS_IMPL_THREADSAFE_RELEASE(_class) \
143 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
144 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
145#endif
146
147#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_CI
148# define NS_IMPL_THREADSAFE_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
149 NS_IMPL_THREADSAFE_ADDREF(_class) \
150 NS_IMPL_THREADSAFE_RELEASE(_class) \
151 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
152 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
153#endif
154
155#ifndef NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
156# define NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
157 NS_INTERFACE_MAP_BEGIN(_class) \
158 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
159 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
160 NS_IMPL_QUERY_CLASSINFO(_class) \
161 NS_INTERFACE_MAP_END
162#endif
163
164#ifndef NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
165# define NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
166 _i2, _ic2) \
167 NS_INTERFACE_MAP_BEGIN(_class) \
168 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
169 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
170 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
171 NS_IMPL_QUERY_CLASSINFO(_class) \
172 NS_INTERFACE_MAP_END
173#endif
174
175#ifndef NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
176# define NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
177 _i2, _ic2, _i3, _ic3) \
178 NS_INTERFACE_MAP_BEGIN(_class) \
179 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
180 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
181 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i3, _ic3) \
182 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
183 NS_IMPL_QUERY_CLASSINFO(_class) \
184 NS_INTERFACE_MAP_END
185#endif
186
187#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
188#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
189#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
190
191#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI
192# define NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI(_class, _i1, _ic1) \
193 NS_IMPL_THREADSAFE_ADDREF(_class) \
194 NS_IMPL_THREADSAFE_RELEASE(_class) \
195 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
196 NS_IMPL_CI_INTERFACE_GETTER1(_class, _i1)
197#endif
198
199#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI
200# define NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI(_class, _i1, _ic1, \
201 _i2, _ic2) \
202 NS_IMPL_THREADSAFE_ADDREF(_class) \
203 NS_IMPL_THREADSAFE_RELEASE(_class) \
204 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
205 _i2, _ic2) \
206 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
207#endif
208
209#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI
210# define NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI(_class, _i1, _ic1, \
211 _i2, _ic2, _i3, _ic3) \
212 NS_IMPL_THREADSAFE_ADDREF(_class) \
213 NS_IMPL_THREADSAFE_RELEASE(_class) \
214 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
215 _i2, _ic2, _i3, _ic3) \
216 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
217#endif
218
219 </cpp>
220</if>
221
222<library
223 name="VirtualBox"
224 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
225 version="1.3"
226 desc="VirtualBox Type Library"
227 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
228 supportsErrorInfo="yes"
229>
230
231
232 <!--
233 // COM result codes for VirtualBox
234 /////////////////////////////////////////////////////////////////////////
235 -->
236
237 <descGroup id="VirtualBox_COM_result_codes" title="VirtualBox COM result codes">
238 <desc>
239 This section describes all VirtualBox-specific COM result codes that may
240 be returned by methods of VirtualBox COM interfaces in addition to
241 standard COM result codes.
242
243 Note that along with the result code, every VirtualBox method returns
244 extended error information through the IVirtualBoxErrorInfo interface on
245 failure. This interface is a preferred way to present the error to the end
246 user because it contains a human readable description of the error. Raw
247 result codes, both standard and described in this section, are intended to
248 be used by programs to analyze the reason of a failure and select an
249 appropriate course of action without involving the end user (for example,
250 retry the operation later or make a different call).
251
252 The standard COM result codes that may originate from our methods include:
253
254 <table>
255 <tr><td>E_INVALIDARG</td>
256 <td>
257 Returned when the value of the method's argument is not within the range
258 of valid values. This should not be confused with situations when the
259 value is within the range but simply doesn't suit the current object
260 state and there is a possibility that it will be accepted later (in such
261 cases VirtualBox-specific codes are returned, for example,
262 <link to="VBOX_E_OBJECT_NOT_FOUND"/>).
263 </td>
264 </tr>
265 <tr><td>E_POINTER</td>
266 <td>
267 Returned if a memory pointer for the output argument is invalid (for
268 example, @c null). Note that when pointers representing input
269 arguments (such as strings) are invalid, E_INVALIDARG is returned.
270 </td>
271 </tr>
272 <tr><td>E_ACCESSDENIED</td>
273 <td>
274 Returned when the called object is not ready. Since the lifetime of a
275 public COM object cannot be fully controlled by the implementation,
276 VirtualBox maintains the readiness state for all objects it creates and
277 returns this code in response to any method call on the object that was
278 deactivated by VirtualBox and is not functioning any more.
279 </td>
280 </tr>
281 <tr><td>E_OUTOFMEMORY</td>
282 <td>
283 Returned when a memory allocation operation fails.
284 </td>
285 </tr>
286 </table>
287 </desc>
288 </descGroup>
289
290 <!--
291 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
292 everything in <result>/<desc> after (and including) the first dot, so express
293 the matter of the error code in the first sentence and keep it short.
294 -->
295
296 <result name="VBOX_E_OBJECT_NOT_FOUND" value="0x80BB0001">
297 <desc>
298 Object corresponding to the supplied arguments does not exist.
299 </desc>
300 </result>
301
302 <result name="VBOX_E_INVALID_VM_STATE" value="0x80BB0002">
303 <desc>
304 Current virtual machine state prevents the operation.
305 </desc>
306 </result>
307
308 <result name="VBOX_E_VM_ERROR" value="0x80BB0003">
309 <desc>
310 Virtual machine error occurred attempting the operation.
311 </desc>
312 </result>
313
314 <result name="VBOX_E_FILE_ERROR" value="0x80BB0004">
315 <desc>
316 File not accessible or erroneous file contents.
317 </desc>
318 </result>
319
320 <result name="VBOX_E_IPRT_ERROR" value="0x80BB0005">
321 <desc>
322 Runtime subsystem error.
323 </desc>
324 </result>
325
326 <result name="VBOX_E_PDM_ERROR" value="0x80BB0006">
327 <desc>
328 Pluggable Device Manager error.
329 </desc>
330 </result>
331
332 <result name="VBOX_E_INVALID_OBJECT_STATE" value="0x80BB0007">
333 <desc>
334 Current object state prohibits operation.
335 </desc>
336 </result>
337
338 <result name="VBOX_E_HOST_ERROR" value="0x80BB0008">
339 <desc>
340 Host operating system related error.
341 </desc>
342 </result>
343
344 <result name="VBOX_E_NOT_SUPPORTED" value="0x80BB0009">
345 <desc>
346 Requested operation is not supported.
347 </desc>
348 </result>
349
350 <result name="VBOX_E_XML_ERROR" value="0x80BB000A">
351 <desc>
352 Invalid XML found.
353 </desc>
354 </result>
355
356 <result name="VBOX_E_INVALID_SESSION_STATE" value="0x80BB000B">
357 <desc>
358 Current session state prohibits operation.
359 </desc>
360 </result>
361
362 <result name="VBOX_E_OBJECT_IN_USE" value="0x80BB000C">
363 <desc>
364 Object being in use prohibits operation.
365 </desc>
366 </result>
367
368 <!--
369 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
370 everything in <result>/<desc> after (and including) the first dot, so express
371 the matter of the error code in the first sentence and keep it short.
372 -->
373
374 <descGroup/>
375
376 <!--
377 // all common enums
378 /////////////////////////////////////////////////////////////////////////
379 -->
380
381 <enum name="SettingsVersion"
382 uuid="52bd6f5f-1adb-4493-975d-581a9c4b803f"
383 >
384 <desc>Settings version of VirtualBox settings files. This is written to
385 the "version" attribute of the root "VirtualBox" element in the settings
386 file XML and indicates which VirtualBox version wrote the file.
387 </desc>
388
389 <const name="Null" value="0">
390 <desc>Null value, indicates invalid version.</desc>
391 </const>
392 <const name="v1_0" value="1">
393 <desc>Legacy settings version, not currently supported.</desc>
394 </const>
395 <const name="v1_1" value="2">
396 <desc>Legacy settings version, not currently supported.</desc>
397 </const>
398 <const name="v1_2" value="3">
399 <desc>Legacy settings version, not currently supported.</desc>
400 </const>
401 <const name="v1_3pre" value="4">
402 <desc>Legacy settings version, not currently supported.</desc>
403 </const>
404 <const name="v1_3" value="5">
405 <desc>Settings version "1.3", written by VirtualBox 2.0.12.</desc>
406 <!--
407 Machine XML: Capitalization of Uart, Lpt elements and many attributes changed.
408 -->
409 </const>
410 <const name="v1_4" value="6">
411 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
412 <!--
413 VirtualBox.xml: big DiskRegistry -> MediaRegistry revamp, various HardDisk types merged
414 (was VirtualDiskImage, VMDKImage, VHDImage, ISCSIHardDisk, CustomHardDisk, DiffHardDisk)
415 -->
416 </const>
417 <const name="v1_5" value="7">
418 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
419 <!-- 2008-09-04: 2.0.0 released
420 2008-11-20: settings version 1.5 introduced
421 2008-12-17: 2.1.0 released
422 Machine changes:
423 guest OS identifiers changed;
424 Machine/Hardware/Display/MonitorCount renamed to monitorCount;
425 Machine/Hardware/Display/Accelerate3D renamed to accelerate3D;
426 Machine/Hardware/CPU/CPUCount/@count changed to CPU/@count
427 -->
428 </const>
429 <const name="v1_6" value="8">
430 <desc>Settings version "1.6", written by VirtualBox 2.1.4 (at least).</desc>
431 <!-- 2008-12-17: 2.1.0 released
432 2008-12-19: settings version 1.6 introduced (is in 2.1 branch)
433 2009-04-08: 2.2.0 released
434 Machine changes: remove all Machine/Hardware/Network/Adapter/HostInterface[@TAPSetup or @TAPTerminate]/ attributes (done)
435 -->
436 </const>
437 <const name="v1_7" value="9">
438 <desc>Settings version "1.7", written by VirtualBox 2.2.x and 3.0.x.</desc>
439 <!-- 2008-12-17: 2.1.0 released
440 2009-03-11: settings version 1.7 introduced (is in 2.2 branch)
441 2009-04-08: 2.2.0 released
442 VirtualBox.xml additions: NetserviceRegistry with DHCPServers (done)
443 Machine changes: HardDiskAttachments is now StorageControllers (done)
444 -->
445 </const>
446 <const name="v1_8" value="10">
447 <desc>Intermediate settings version "1.8", understood by VirtualBox 3.1.x.</desc>
448 <!-- Machine additions: Display/@accelerate2DVideo (done)
449 -->
450 </const>
451 <const name="v1_9" value="11">
452 <desc>Settings version "1.9", written by VirtualBox 3.1.x.</desc>
453 <!-- The big storage controller / DVD / Floppy rework (done)
454 -->
455 </const>
456 <const name="v1_10" value="12">
457 <desc>Settings version "1.10", written by VirtualBox 3.2.x.</desc>
458 <!-- Machine changes: RTC localOrUTC (done)
459 CPU hot-plug support
460 -->
461 </const>
462 <const name="Future" value="13">
463 <desc>Settings version greater than "1.10", written by a future VirtualBox version.</desc>
464 </const>
465 </enum>
466
467 <enum
468 name="AccessMode"
469 uuid="1da0007c-ddf7-4be8-bcac-d84a1558785f"
470 >
471 <desc>
472 Access mode for opening files.
473 </desc>
474
475 <const name="ReadOnly" value="1"/>
476 <const name="ReadWrite" value="2"/>
477 </enum>
478
479 <enum
480 name="MachineState"
481 uuid="36518cf6-cdf0-4d0d-ad2a-5ee9c60c7494"
482 >
483 <desc>
484 Virtual machine execution state.
485
486 This enumeration represents possible values of the <link
487 to="IMachine::state"/> attribute.
488
489 Below is the basic virtual machine state diagram. It shows how the state
490 changes during virtual machine execution. The text in square braces shows
491 a method of the IConsole interface that performs the given state
492 transition.
493
494 <pre>
495 +---------[powerDown()] &lt;- Stuck &lt;--[failure]-+
496 V |
497 +-&gt; PoweredOff --+--&gt;[powerUp()]--&gt; Starting --+ | +-----[resume()]-----+
498 | | | | V |
499 | Aborted -----+ +--&gt; Running --[pause()]--&gt; Paused
500 | | ^ | ^ |
501 | Saved -----------[powerUp()]--&gt; Restoring -+ | | | |
502 | ^ | | | |
503 | | +-----------------------------------------+-|-------------------+ +
504 | | | | |
505 | | +-- Saving &lt;--------[takeSnapshot()]&lt;-------+---------------------+
506 | | | |
507 | +-------- Saving &lt;--------[saveState()]&lt;----------+---------------------+
508 | | |
509 +-------------- Stopping -------[powerDown()]&lt;----------+---------------------+
510 </pre>
511
512 Note that states to the right from PoweredOff, Aborted and Saved in the
513 above diagram are called <i>online VM states</i>. These states
514 represent the virtual machine which is being executed in a dedicated
515 process (usually with a GUI window attached to it where you can see the
516 activity of the virtual machine and interact with it). There are two
517 special pseudo-states, FirstOnline and LastOnline, that can be used in
518 relational expressions to detect if the given machine state is online or
519 not:
520
521 <pre>
522 if (machine.GetState() &gt;= MachineState_FirstOnline &amp;&amp;
523 machine.GetState() &lt;= MachineState_LastOnline)
524 {
525 ...the machine is being executed...
526 }
527 </pre>
528
529 When the virtual machine is in one of the online VM states (that is, being
530 executed), only a few machine settings can be modified. Methods working
531 with such settings contain an explicit note about that. An attempt to
532 change any oter setting or perform a modifying operation during this time
533 will result in the <link to="VBOX_E_INVALID_VM_STATE"/> error.
534
535 All online states except Running, Paused and Stuck are transitional: they
536 represent temporary conditions of the virtual machine that will last as
537 long as the operation that initiated such a condition.
538
539 The Stuck state is a special case. It means that execution of the machine
540 has reached the "Guru Meditation" condition. This condition indicates an
541 internal VMM (virtual machine manager) failure which may happen as a
542 result of either an unhandled low-level virtual hardware exception or one
543 of the recompiler exceptions (such as the <i>too-many-traps</i>
544 condition).
545
546 Note also that any online VM state may transit to the Aborted state. This
547 happens if the process that is executing the virtual machine terminates
548 unexpectedly (for example, crashes). Other than that, the Aborted state is
549 equivalent to PoweredOff.
550
551 There are also a few additional state diagrams that do not deal with
552 virtual machine execution and therefore are shown separately. The states
553 shown on these diagrams are called <i>offline VM states</i> (this includes
554 PoweredOff, Aborted and Saved too).
555
556 The first diagram shows what happens when a lengthy setup operation is
557 being executed (such as <link to="IMachine::attachDevice"/>).
558
559 <pre>
560 +----------------------------------(same state as before the call)------+
561 | |
562 +-&gt; PoweredOff --+ |
563 | | |
564 |-&gt; Aborted -----+--&gt;[lengthy VM configuration call] --&gt; SettingUp -----+
565 | |
566 +-&gt; Saved -------+
567 </pre>
568
569 The next two diagrams demonstrate the process of taking a snapshot of a
570 powered off virtual machine and performing one of the "discard..."
571 operations, respectively.
572
573 <pre>
574 +----------------------------------(same state as before the call)------+
575 | |
576 +-&gt; PoweredOff --+ |
577 | +--&gt;[takeSnapshot()] -------------------&gt; Saving ------+
578 +-&gt; Aborted -----+
579
580 +-&gt; PoweredOff --+
581 | |
582 | Aborted -----+--&gt;[restoreSnapshot() ]-------&gt; RestoringSnapshot -+
583 | | [deleteSnapshot() ]-------&gt; DeletingSnapshot --+
584 +-&gt; Saved -------+ |
585 | |
586 +---(Saved if restored from an online snapshot, PoweredOff otherwise)---+
587 </pre>
588
589 Note that the Saving state is present in both the offline state group and
590 online state group. Currently, the only way to determine what group is
591 assumed in a particular case is to remember the previous machine state: if
592 it was Running or Paused, then Saving is an online state, otherwise it is
593 an offline state. This inconsistency may be removed in one of the future
594 versions of VirtualBox by adding a new state.
595
596 <note internal="yes">
597 For whoever decides to touch this enum: In order to keep the
598 comparisons involving FirstOnline and LastOnline pseudo-states valid,
599 the numeric values of these states must be correspondingly updated if
600 needed: for any online VM state, the condition
601 <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
602 @c true. The same relates to transient states for which
603 the condition <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
604 @c true.
605 </note>
606 </desc>
607
608 <const name="Null" value="0">
609 <desc>Null value (never used by the API).</desc>
610 </const>
611 <const name="PoweredOff" value="1">
612 <desc>
613 The machine is not running and has no saved execution state; it has
614 either never been started or been shut down successfully.
615 </desc>
616 </const>
617 <const name="Saved" value="2">
618 <desc>
619 The machine is not currently running, but the execution state of the machine
620 has been saved to an external file when it was running, from where
621 it can be resumed.
622 </desc>
623 </const>
624 <const name="Teleported" value="3">
625 <desc>
626 The machine was teleported to a different host (or process) and then
627 powered off. Take care when powering it on again may corrupt resources
628 it shares with the teleportation target (e.g. disk and network).
629 </desc>
630 </const>
631 <const name="Aborted" value="4">
632 <desc>
633 The process running the machine has terminated abnormally. This may
634 indicate a crash of the VM process in host execution context, or
635 the VM process has been terminated externally.
636 </desc>
637 </const>
638 <const name="Running" value="5">
639 <desc>
640 The machine is currently being executed.
641 <note internal="yes">
642 For whoever decides to touch this enum: In order to keep the
643 comparisons in the old source code valid, this state must immediately
644 precede the Paused state.
645 TODO: Lift this spectacularly wonderful restriction.
646 </note>
647 </desc>
648 </const>
649 <const name="Paused" value="6">
650 <desc>
651 Execution of the machine has been paused.
652 <note internal="yes">
653 For whoever decides to touch this enum: In order to keep the
654 comparisons in the old source code valid, this state must immediately
655 follow the Running state.
656 TODO: Lift this spectacularly wonderful restriction.
657 </note>
658 </desc>
659 </const>
660 <const name="Stuck" value="7">
661 <desc>
662 Execution of the machine has reached the "Guru Meditation"
663 condition. This indicates a severe error in the hypervisor itself.
664 <note internal="yes">
665 bird: Why this uncool name? Could we rename it to "GuruMeditation" or
666 "Guru", perhaps? Or are there some other VMM states that are
667 intended to be lumped in here as well?
668 </note>
669 </desc>
670 </const>
671 <const name="Teleporting" value="8">
672 <desc>
673 The machine is about to be teleported to a different host or process.
674 It is possible to pause a machine in this state, but it will go to the
675 <link to="MachineState::PausedTeleporting"/> state and it will not be
676 possible to resume it again unless the teleportation fails.
677 </desc>
678 </const>
679 <const name="LiveSnapshotting" value="9">
680 <desc>
681 A live snapshot is being taken. The machine is running normally, but
682 some of the runtime configuration options are inaccessible. Also, if
683 paused while in this state it will transition to
684 <link to="MachineState::Saving"/> and it will not be resume the
685 execution until the snapshot operation has completed.
686 </desc>
687 </const>
688 <const name="Starting" value="10">
689 <desc>
690 Machine is being started after powering it on from a
691 zero execution state.
692 </desc>
693 </const>
694 <const name="Stopping" value="11">
695 <desc>
696 Machine is being normally stopped powering it off, or after the guest OS
697 has initiated a shutdown sequence.
698 </desc>
699 </const>
700 <const name="Saving" value="12">
701 <desc>
702 Machine is saving its execution state to a file, or an online
703 snapshot of the machine is being taken.
704 </desc>
705 </const>
706 <const name="Restoring" value="13">
707 <desc>
708 Execution state of the machine is being restored from a file
709 after powering it on from the saved execution state.
710 </desc>
711 </const>
712 <const name="TeleportingPausedVM" value="14">
713 <desc>
714 The machine is being teleported to another host or process, but it is
715 not running. This is the paused variant of the
716 <link to="MachineState::Teleporting"/> state.
717 </desc>
718 </const>
719 <const name="TeleportingIn" value="15">
720 <desc>
721 Teleporting the machine state in from another host or process.
722 </desc>
723 </const>
724 <const name="RestoringSnapshot" value="16">
725 <desc>
726 A machine snapshot is being restored; this typically does not take long.
727 </desc>
728 </const>
729 <const name="DeletingSnapshot" value="17">
730 <desc>
731 A machine snapshot is being deleted; this can take a long time since this
732 may require merging differencing media.
733 </desc>
734 </const>
735 <const name="SettingUp" value="18">
736 <desc>
737 Lengthy setup operation is in progress.
738 </desc>
739 </const>
740
741 <const name="FirstOnline" value="5" wsmap="suppress"> <!-- Running -->
742 <desc>
743 Pseudo-state: first online state (for use in relational expressions).
744 </desc>
745 </const>
746 <const name="LastOnline" value="13" wsmap="suppress"> <!-- TeleportingIn -->
747 <desc>
748 Pseudo-state: last online state (for use in relational expressions).
749 </desc>
750 </const>
751
752 <const name="FirstTransient" value="8" wsmap="suppress"> <!-- Teleporting -->
753 <desc>
754 Pseudo-state: first transient state (for use in relational expressions).
755 </desc>
756 </const>
757 <const name="LastTransient" value="18" wsmap="suppress"> <!-- SettingUp -->
758 <desc>
759 Pseudo-state: last transient state (for use in relational expressions).
760 </desc>
761 </const>
762
763 </enum>
764
765 <enum
766 name="SessionState"
767 uuid="cf2700c0-ea4b-47ae-9725-7810114b94d8"
768 >
769 <desc>
770 Session state. This enumeration represents possible values of
771 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
772 attributes. See individual enumerator descriptions for the meaning for
773 every value.
774 </desc>
775
776 <const name="Null" value="0">
777 <desc>Null value (never used by the API).</desc>
778 </const>
779 <const name="Closed" value="1">
780 <desc>
781 The machine has no open sessions (<link to="IMachine::sessionState"/>);
782 the session is closed (<link to="ISession::state"/>)
783 </desc>
784 </const>
785 <const name="Open" value="2">
786 <desc>
787 The machine has an open direct session (<link to="IMachine::sessionState"/>);
788 the session is open (<link to="ISession::state"/>)
789 </desc>
790 </const>
791 <const name="Spawning" value="3">
792 <desc>
793 A new (direct) session is being opened for the machine as a result of
794 <link to="IVirtualBox::openRemoteSession"/> call
795 (<link to="IMachine::sessionState"/> or <link to="ISession::state"/>).
796 This state also occurs as a short transient state when a new direct
797 session is opened by calling <link to="IVirtualBox::openSession"/>.
798 </desc>
799 </const>
800 <const name="Closing" value="4">
801 <desc>
802 The direct session is being closed (<link to="IMachine::sessionState"/>);
803 the session is being closed (<link to="ISession::state"/>)
804 </desc>
805 </const>
806 </enum>
807
808 <enum
809 name="CPUPropertyType"
810 uuid="24d356a6-2f45-4abd-b977-1cbe9c4701f5"
811 >
812 <desc>
813 Virtual CPU property type. This enumeration represents possible values of the
814 IMachine get- and setCPUProperty methods.
815 </desc>
816 <const name="Null" value="0">
817 <desc>Null value (never used by the API).</desc>
818 </const>
819 <const name="PAE" value="1">
820 <desc>
821 This setting determines whether VirtualBox will expose the Physical Address
822 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
823 is not available, it will not be reported.
824 </desc>
825 </const>
826 <const name="Synthetic" value="2">
827 <desc>
828 This setting determines whether VirtualBox will expose a synthetic CPU to the guest to allow
829 teleporting between host systems that differ significantly.
830 </desc>
831 </const>
832 </enum>
833
834
835 <enum
836 name="HWVirtExPropertyType"
837 uuid="ce81dfdd-d2b8-4a90-bbea-40ee8b7ffcee"
838 >
839 <desc>
840 Hardware virtualization property type. This enumeration represents possible values
841 for the <link to="IMachine::getHWVirtExProperty"/> and
842 <link to="IMachine::setHWVirtExProperty"/> methods.
843 </desc>
844 <const name="Null" value="0">
845 <desc>Null value (never used by the API).</desc>
846 </const>
847 <const name="Enabled" value="1">
848 <desc>
849 Whether hardware virtualization (VT-x/AMD-V) is enabled at all. If
850 such extensions are not available, they will not be used.
851 </desc>
852 </const>
853 <const name="Exclusive" value="2">
854 <desc>
855 Whether hardware virtualization is used exclusively by VirtualBox. When enabled,
856 VirtualBox assumes it can acquire full and exclusive access to the VT-x or AMD-V
857 feature of the host. To share these with other hypervisors, you must disable this property.
858 </desc>
859 </const>
860 <const name="VPID" value="3">
861 <desc>
862 Whether VT-x VPID is enabled. If this extension is not available, it will not be used.
863 </desc>
864 </const>
865 <const name="NestedPaging" value="4">
866 <desc>
867 Whether Nested Paging is enabled. If this extension is not available, it will not be used.
868 </desc>
869 </const>
870 <const name="LargePages" value="5">
871 <desc>
872 Whether large page allocation is enabled; requires nested paging and a 64 bits host.
873 </desc>
874 </const>
875 </enum>
876
877 <enum
878 name="SessionType"
879 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
880 >
881 <desc>
882 Session type. This enumeration represents possible values of the
883 <link to="ISession::type"/> attribute.
884 </desc>
885
886 <const name="Null" value="0">
887 <desc>Null value (never used by the API).</desc>
888 </const>
889 <const name="Direct" value="1">
890 <desc>
891 Direct session
892 (opened by <link to="IVirtualBox::openSession"/>)
893 </desc>
894 </const>
895 <const name="Remote" value="2">
896 <desc>
897 Remote session
898 (opened by <link to="IVirtualBox::openRemoteSession"/>)
899 </desc>
900 </const>
901 <const name="Existing" value="3">
902 <desc>
903 Existing session
904 (opened by <link to="IVirtualBox::openExistingSession"/>)
905 </desc>
906 </const>
907 </enum>
908
909 <enum
910 name="DeviceType"
911 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
912 >
913 <desc>
914 Device type.
915 </desc>
916 <const name="Null" value="0">
917 <desc>
918 Null value, may also mean "no device" (not allowed for
919 <link to="IConsole::getDeviceActivity"/>).
920 </desc>
921 </const>
922 <const name="Floppy" value="1">
923 <desc>Floppy device.</desc>
924 </const>
925 <const name="DVD" value="2">
926 <desc>CD/DVD-ROM device.</desc>
927 </const>
928 <const name="HardDisk" value="3">
929 <desc>Hard disk device.</desc>
930 </const>
931 <const name="Network" value="4">
932 <desc>Network device.</desc>
933 </const>
934 <const name="USB" value="5">
935 <desc>USB device.</desc>
936 </const>
937 <const name="SharedFolder" value="6">
938 <desc>Shared folder device.</desc>
939 </const>
940 </enum>
941
942 <enum
943 name="DeviceActivity"
944 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
945 >
946 <desc>
947 Device activity for <link to="IConsole::getDeviceActivity"/>.
948 </desc>
949
950 <const name="Null" value="0"/>
951 <const name="Idle" value="1"/>
952 <const name="Reading" value="2"/>
953 <const name="Writing" value="3"/>
954 </enum>
955
956 <enum
957 name="ClipboardMode"
958 uuid="33364716-4008-4701-8f14-be0fa3d62950"
959 >
960 <desc>
961 Host-Guest clipboard interchange mode.
962 </desc>
963
964 <const name="Disabled" value="0"/>
965 <const name="HostToGuest" value="1"/>
966 <const name="GuestToHost" value="2"/>
967 <const name="Bidirectional" value="3"/>
968 </enum>
969
970 <enum
971 name="Scope"
972 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
973 >
974 <desc>
975 Scope of the operation.
976
977 A generic enumeration used in various methods to define the action or
978 argument scope.
979 </desc>
980
981 <const name="Global" value="0"/>
982 <const name="Machine" value="1"/>
983 <const name="Session" value="2"/>
984 </enum>
985
986 <enum
987 name="GuestStatisticType"
988 uuid="aa7c1d71-aafe-47a8-9608-27d2d337cf55"
989 >
990 <desc>
991 Statistics type for <link to="IGuest::getStatistic"/>.
992 </desc>
993
994 <const name="CPULoad_Idle" value="0">
995 <desc>
996 Idle CPU load (0-100%) for last interval.
997 </desc>
998 </const>
999 <const name="CPULoad_Kernel" value="1">
1000 <desc>
1001 Kernel CPU load (0-100%) for last interval.
1002 </desc>
1003 </const>
1004 <const name="CPULoad_User" value="2">
1005 <desc>
1006 User CPU load (0-100%) for last interval.
1007 </desc>
1008 </const>
1009 <const name="Threads" value="3">
1010 <desc>
1011 Total number of threads in the system.
1012 </desc>
1013 </const>
1014 <const name="Processes" value="4">
1015 <desc>
1016 Total number of processes in the system.
1017 </desc>
1018 </const>
1019 <const name="Handles" value="5">
1020 <desc>
1021 Total number of handles in the system.
1022 </desc>
1023 </const>
1024 <const name="MemoryLoad" value="6">
1025 <desc>
1026 Memory load (0-100%).
1027 </desc>
1028 </const>
1029 <const name="PhysMemTotal" value="7">
1030 <desc>
1031 Total physical memory in megabytes.
1032 </desc>
1033 </const>
1034 <const name="PhysMemAvailable" value="8">
1035 <desc>
1036 Free physical memory in megabytes.
1037 </desc>
1038 </const>
1039 <const name="PhysMemBalloon" value="9">
1040 <desc>
1041 Ballooned physical memory in megabytes.
1042 </desc>
1043 </const>
1044 <const name="MemCommitTotal" value="10">
1045 <desc>
1046 Total amount of memory in the committed state in megabytes.
1047 </desc>
1048 </const>
1049 <const name="MemKernelTotal" value="11">
1050 <desc>
1051 Total amount of memory used by the guest OS's kernel in megabytes.
1052 </desc>
1053 </const>
1054 <const name="MemKernelPaged" value="12">
1055 <desc>
1056 Total amount of paged memory used by the guest OS's kernel in megabytes.
1057 </desc>
1058 </const>
1059 <const name="MemKernelNonpaged" value="13">
1060 <desc>
1061 Total amount of non-paged memory used by the guest OS's kernel in megabytes.
1062 </desc>
1063 </const>
1064 <const name="MemSystemCache" value="14">
1065 <desc>
1066 Total amount of memory used by the guest OS's system cache in megabytes.
1067 </desc>
1068 </const>
1069 <const name="PageFileSize" value="15">
1070 <desc>
1071 Pagefile size in megabytes.
1072 </desc>
1073 </const>
1074 <const name="SampleNumber" value="16">
1075 <desc>
1076 Statistics sample number
1077 </desc>
1078 </const>
1079 <const name="MaxVal" value="17"/>
1080 </enum>
1081
1082 <enum
1083 name="BIOSBootMenuMode"
1084 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
1085 >
1086 <desc>
1087 BIOS boot menu mode.
1088 </desc>
1089
1090 <const name="Disabled" value="0"/>
1091 <const name="MenuOnly" value="1"/>
1092 <const name="MessageAndMenu" value="2"/>
1093 </enum>
1094
1095 <enum
1096 name="ProcessorFeature"
1097 uuid="64c38e6b-8bcf-45ad-ac03-9b406287c5bf"
1098 >
1099 <desc>
1100 CPU features.
1101 </desc>
1102
1103 <const name="HWVirtEx" value="0"/>
1104 <const name="PAE" value="1"/>
1105 <const name="LongMode" value="2"/>
1106 <const name="NestedPaging" value="3"/>
1107 </enum>
1108
1109 <enum
1110 name="FirmwareType"
1111 uuid="b903f264-c230-483e-ac74-2b37ce60d371"
1112 >
1113 <desc>
1114 Firmware type.
1115 </desc>
1116 <const name="BIOS" value="1">
1117 <desc>BIOS Firmware.</desc>
1118 </const>
1119 <const name="EFI" value="2">
1120 <desc>EFI Firmware, bitness detetced basing on OS type.</desc>
1121 </const>
1122 <const name="EFI32" value="3">
1123 <desc>Efi firmware, 32-bit.</desc>
1124 </const>
1125 <const name="EFI64" value="4">
1126 <desc>Efi firmware, 64-bit.</desc>
1127 </const>
1128 <const name="EFIDUAL" value="5">
1129 <desc>Efi firmware, combined 32 and 64-bit.</desc>
1130 </const>
1131 </enum>
1132
1133 <enum
1134 name="PointingHidType"
1135 uuid="0d3c17a2-821a-4b2e-ae41-890c6c60aa97"
1136 >
1137 <desc>
1138 Type of pointing device used in a virtual machine.
1139 </desc>
1140 <const name="None" value="1">
1141 <desc>No mouse.</desc>
1142 </const>
1143 <const name="PS2Mouse" value="2">
1144 <desc>PS/2 auxillary device, a.k.a. mouse.</desc>
1145 </const>
1146 <const name="USBMouse" value="3">
1147 <desc>USB mouse (relative pointer).</desc>
1148 </const>
1149 <const name="USBTablet" value="4">
1150 <desc>USB tablet (absolute pointer).</desc>
1151 </const>
1152 <const name="ComboMouse" value="5">
1153 <desc>Combined device, working as PS/2 or USB mouse, depending on guest behavior.
1154 Using of such device can have negative performance implications. </desc>
1155 </const>
1156 </enum>
1157
1158 <enum
1159 name="KeyboardHidType"
1160 uuid="5a5b0996-3a3e-44bb-9019-56979812cbcc"
1161 >
1162 <desc>
1163 Type of keyboard device used in a virtual machine.
1164 </desc>
1165 <const name="None" value="1">
1166 <desc>No keyboard.</desc>
1167 </const>
1168 <const name="PS2Keyboard" value="2">
1169 <desc>PS/2 keyboard.</desc>
1170 </const>
1171 <const name="USBKeyboard" value="3">
1172 <desc>USB keyboard.</desc>
1173 </const>
1174 <const name="ComboKeyboard" value="4">
1175 <desc>Combined device, working as PS/2 or USB keyboard, depending on guest behavior.
1176 Using of such device can have negative performance implications. </desc>
1177 </const>
1178 </enum>
1179
1180 <enum
1181 name="IoMgrType"
1182 uuid="35567419-4d2a-4256-a74e-efcae33493a2"
1183 >
1184 <desc>
1185 Type of the I/O manager used for the image files in a virtual machine.
1186 </desc>
1187 <const name="Simple" value="1">
1188 <desc>Simple manager. Normally only used if the default one runs into an
1189 error. </desc>
1190 </const>
1191 <const name="Async" value="2">
1192 <desc>Asynchronous manager using the async I/O API on the host if present.
1193 This is the default manager.</desc>
1194 </const>
1195 </enum>
1196
1197 <enum
1198 name="IoBackendType"
1199 uuid="2a7e16d1-4e6b-4d5d-b0c9-b9bbe6c5b2ad"
1200 >
1201 <desc>
1202 Type of I/O backend used for the image files in a virtual machine.
1203 </desc>
1204 <const name="Buffered" value="1">
1205 <desc>Image files will use the host cache if possible.
1206 This type does not work with the Async I/O manager on Linux hosts.
1207 Default on all hosts except Linux.</desc>
1208 </const>
1209 <const name="Unbuffered" value="2">
1210 <desc>Image files will not use the host cache.
1211 This should be used on OS X and Linux hosts if a high I/O load is expected
1212 or many virtual machines are running to prevent I/O cache
1213 related hangs. Default on Linux hosts.</desc>
1214 </const>
1215 </enum>
1216
1217 <!--
1218 // IVirtualBoxErrorInfo
1219 /////////////////////////////////////////////////////////////////////////
1220 -->
1221
1222 <interface
1223 name="IVirtualBoxErrorInfo" extends="$errorinfo"
1224 uuid="4b86d186-407e-4f9e-8be8-e50061be8725"
1225 supportsErrorInfo="no"
1226 wsmap="managed"
1227 >
1228 <desc>
1229 The IVirtualBoxErrorInfo interface represents extended error information.
1230
1231 Extended error information can be set by VirtualBox components after
1232 unsuccessful or partially successful method invocation. This information
1233 can be retrieved by the calling party as an IVirtualBoxErrorInfo object
1234 and then shown to the client in addition to the plain 32-bit result code.
1235
1236 In MS COM, this interface extends the IErrorInfo interface,
1237 in XPCOM, it extends the nsIException interface. In both cases,
1238 it provides a set of common attributes to retrieve error
1239 information.
1240
1241 Sometimes invocation of some component's method may involve methods of
1242 other components that may also fail (independently of this method's
1243 failure), or a series of non-fatal errors may precede a fatal error that
1244 causes method failure. In cases like that, it may be desirable to preserve
1245 information about all errors happened during method invocation and deliver
1246 it to the caller. The <link to="#next"/> attribute is intended
1247 specifically for this purpose and allows to represent a chain of errors
1248 through a single IVirtualBoxErrorInfo object set after method invocation.
1249
1250 Note that errors are stored to a chain in the reverse order, i.e. the
1251 initial error object you query right after method invocation is the last
1252 error set by the callee, the object it points to in the @a next attribute
1253 is the previous error and so on, up to the first error (which is the last
1254 in the chain).
1255 </desc>
1256
1257 <attribute name="resultCode" type="long" readonly="yes">
1258 <desc>
1259 Result code of the error.
1260 Usually, it will be the same as the result code returned
1261 by the method that provided this error information, but not
1262 always. For example, on Win32, CoCreateInstance() will most
1263 likely return E_NOINTERFACE upon unsuccessful component
1264 instantiation attempt, but not the value the component factory
1265 returned. Value is typed 'long', not 'result',
1266 to make interface usable from scripting languages.
1267 <note>
1268 In MS COM, there is no equivalent.
1269 In XPCOM, it is the same as nsIException::result.
1270 </note>
1271 </desc>
1272 </attribute>
1273
1274 <attribute name="interfaceID" type="uuid" mod="string" readonly="yes">
1275 <desc>
1276 UUID of the interface that defined the error.
1277 <note>
1278 In MS COM, it is the same as IErrorInfo::GetGUID, except for the
1279 data type.
1280 In XPCOM, there is no equivalent.
1281 </note>
1282 </desc>
1283 </attribute>
1284
1285 <attribute name="component" type="wstring" readonly="yes">
1286 <desc>
1287 Name of the component that generated the error.
1288 <note>
1289 In MS COM, it is the same as IErrorInfo::GetSource.
1290 In XPCOM, there is no equivalent.
1291 </note>
1292 </desc>
1293 </attribute>
1294
1295 <attribute name="text" type="wstring" readonly="yes">
1296 <desc>
1297 Text description of the error.
1298 <note>
1299 In MS COM, it is the same as IErrorInfo::GetDescription.
1300 In XPCOM, it is the same as nsIException::message.
1301 </note>
1302 </desc>
1303 </attribute>
1304
1305 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
1306 <desc>
1307 Next error object if there is any, or @c null otherwise.
1308 <note>
1309 In MS COM, there is no equivalent.
1310 In XPCOM, it is the same as nsIException::inner.
1311 </note>
1312 </desc>
1313 </attribute>
1314
1315 </interface>
1316
1317 <interface
1318 name="ILocalOwner" extends="$dispatched"
1319 uuid="308FF42A-DC45-49D4-A950-B1EEE5E00BB5" wsmap="suppress"
1320 >
1321 <desc>
1322 The ILocalOwner interface allows to register local objects
1323 (created without COM calls, but with new()).
1324 Once registered, calls to methods of such objects can be made
1325 from remote COM processes.
1326 The main usecase is the event callback implementation where
1327 API clients provide callback objects.
1328 </desc>
1329 <method name="setLocalObject">
1330 <desc>
1331 Set local object.
1332 </desc>
1333 <param name="object" type="$unknown" dir="in">
1334 <desc>Local object to forward requests to.
1335 If null, clears currently set local object.</desc>
1336 </param>
1337 </method>
1338 </interface>
1339
1340 <!--
1341 // IVirtualBox
1342 /////////////////////////////////////////////////////////////////////////
1343 -->
1344
1345 <interface
1346 name="IVirtualBoxCallback" extends="$unknown"
1347 uuid="9a65adf2-3ee6-406b-bca2-2b1fa05f0d0b"
1348 wsmap="suppress"
1349 >
1350
1351 <method name="onMachineStateChange">
1352 <desc>
1353 The execution state of the given machine has changed.
1354 <see>IMachine::state</see>
1355 </desc>
1356 <param name="machineId" type="uuid" mod="string" dir="in">
1357 <desc>ID of the machine this event relates to.</desc>
1358 </param>
1359 <param name="state" type="MachineState" dir="in">
1360 <desc>New execution state.</desc>
1361 </param>
1362 </method>
1363
1364 <method name="onMachineDataChange">
1365 <desc>
1366 Any of the settings of the given machine has changed.
1367 </desc>
1368 <param name="machineId" type="uuid" mod="string" dir="in">
1369 <desc>ID of the machine this event relates to.</desc>
1370 </param>
1371 </method>
1372
1373 <method name="onExtraDataCanChange">
1374 <desc>
1375 Notification when someone tries to change extra data for
1376 either the given machine or (if @c null) global extra data.
1377 This gives the chance to veto against changes.
1378 </desc>
1379 <param name="machineId" type="uuid" mod="string" dir="in">
1380 <desc>
1381 ID of the machine this event relates to
1382 (@c null ID for global extra data change requests).
1383 </desc>
1384 </param>
1385 <param name="key" type="wstring" dir="in">
1386 <desc>
1387 Extra data key for the attempted write.
1388 </desc>
1389 </param>
1390 <param name="value" type="wstring" dir="in">
1391 <desc>
1392 Extra data value for the given key.
1393 </desc>
1394 </param>
1395 <param name="error" type="wstring" dir="out">
1396 <desc>
1397 Optional error message describing the reason of the
1398 veto (ignored if this notification returns @c true).
1399 </desc>
1400 </param>
1401 <param name="allowChange" type="boolean" dir="return">
1402 <desc>
1403 Flag to indicate whether the callee agrees (@c true)
1404 or vetoes against the change (@c false).
1405 </desc>
1406 </param>
1407 </method>
1408
1409 <method name="onExtraDataChange">
1410 <desc>
1411 Notification when machine specific or global extra data
1412 has changed.
1413 </desc>
1414 <param name="machineId" type="uuid" mod="string" dir="in">
1415 <desc>
1416 ID of the machine this event relates to.
1417 Null for global extra data changes.
1418 </desc>
1419 </param>
1420 <param name="key" type="wstring" dir="in">
1421 <desc>
1422 Extra data key that has changed.
1423 </desc>
1424 </param>
1425 <param name="value" type="wstring" dir="in">
1426 <desc>
1427 Extra data value for the given key.
1428 </desc>
1429 </param>
1430 </method>
1431
1432 <method name="onMediumRegistered">
1433 <desc>
1434 The given medium was registered or unregistered
1435 within this VirtualBox installation.
1436
1437 The @a mediumType parameter describes what type of
1438 medium the specified @a mediumId refers to. Possible
1439 values are:
1440
1441 <ul>
1442 <li><link to="DeviceType_HardDisk"/>: the medium is a hard disk
1443 that, if registered, can be obtained using the
1444 <link to="IVirtualBox::getHardDisk"/> call.</li>
1445 <li><link to="DeviceType_DVD"/>: the medium is a CD/DVD image
1446 that, if registered, can be obtained using the
1447 <link to="IVirtualBox::getDVDImage"/> call.</li>
1448 <li><link to="DeviceType_Floppy"/>: the medium is a Floppy image
1449 that, if registered, can be obtained using the
1450 <link to="IVirtualBox::getFloppyImage"/> call.</li>
1451 </ul>
1452
1453 Note that if this is a deregistration notification,
1454 there is no way to access the object representing the
1455 unregistered medium. It is supposed that the
1456 application will do required cleanup based on the
1457 @a mediumId value.
1458 </desc>
1459 <param name="mediumId" type="uuid" mod="string" dir="in">
1460 <desc>ID of the medium this event relates to.</desc>
1461 </param>
1462 <param name="mediumType" type="DeviceType" dir="in">
1463 <desc>Type of the medium this event relates to.</desc>
1464 </param>
1465 <param name="registered" type="boolean" dir="in">
1466 <desc>
1467 If @c true, the medium was registered, otherwise it was
1468 unregistered.
1469 </desc>
1470 </param>
1471 </method>
1472
1473 <method name="onMachineRegistered">
1474 <desc>
1475 The given machine was registered or unregistered
1476 within this VirtualBox installation.
1477 </desc>
1478 <param name="machineId" type="uuid" mod="string" dir="in">
1479 <desc>ID of the machine this event relates to.</desc>
1480 </param>
1481 <param name="registered" type="boolean" dir="in">
1482 <desc>
1483 If @c true, the machine was registered, otherwise it was
1484 unregistered.
1485 </desc>
1486 </param>
1487 </method>
1488
1489 <method name="onSessionStateChange">
1490 <desc>
1491 The state of the session for the given machine was changed.
1492 <see>IMachine::sessionState</see>
1493 </desc>
1494 <param name="machineId" type="uuid" mod="string" dir="in">
1495 <desc>ID of the machine this event relates to.</desc>
1496 </param>
1497 <param name="state" type="SessionState" dir="in">
1498 <desc>New session state.</desc>
1499 </param>
1500 </method>
1501
1502 <method name="onSnapshotTaken">
1503 <desc>
1504 A new snapshot of the machine has been taken.
1505 <see>ISnapshot</see>
1506 </desc>
1507 <param name="machineId" type="uuid" mod="string" dir="in">
1508 <desc>ID of the machine this event relates to.</desc>
1509 </param>
1510 <param name="snapshotId" type="uuid" mod="string" dir="in">
1511 <desc>ID of the new snapshot.</desc>
1512 </param>
1513 </method>
1514
1515 <method name="onSnapshotDiscarded">
1516 <desc>
1517 Snapshot of the given machine has been discarded.
1518
1519 <note>
1520 This notification is delivered <b>after</b> the snapshot
1521 object has been uninitialized on the server (so that any
1522 attempt to call its methods will return an error).
1523 </note>
1524
1525 <see>ISnapshot</see>
1526 </desc>
1527 <param name="machineId" type="uuid" mod="string" dir="in">
1528 <desc>ID of the machine this event relates to.</desc>
1529 </param>
1530 <param name="snapshotId" type="uuid" mod="string" dir="in">
1531 <desc>
1532 ID of the discarded snapshot. @c null means the current machine
1533 state has been discarded (restored from the current snapshot).
1534 </desc>
1535 </param>
1536 </method>
1537
1538 <method name="onSnapshotChange">
1539 <desc>
1540 Snapshot properties (name and/or description) have been changed.
1541 <see>ISnapshot</see>
1542 </desc>
1543 <param name="machineId" type="uuid" mod="string" dir="in">
1544 <desc>ID of the machine this event relates to.</desc>
1545 </param>
1546 <param name="snapshotId" type="uuid" mod="string" dir="in">
1547 <desc>ID of the changed snapshot.</desc>
1548 </param>
1549 </method>
1550
1551 <method name="onGuestPropertyChange">
1552 <desc>
1553 Notification when a guest property has changed.
1554 </desc>
1555 <param name="machineId" type="uuid" mod="string" dir="in">
1556 <desc>
1557 ID of the machine this event relates to.
1558 </desc>
1559 </param>
1560 <param name="name" type="wstring" dir="in">
1561 <desc>
1562 The name of the property that has changed.
1563 </desc>
1564 </param>
1565 <param name="value" type="wstring" dir="in">
1566 <desc>
1567 The new property value.
1568 </desc>
1569 </param>
1570 <param name="flags" type="wstring" dir="in">
1571 <desc>
1572 The new property flags.
1573 </desc>
1574 </param>
1575 </method>
1576
1577 </interface>
1578
1579 <interface
1580 name="IDHCPServer" extends="$unknown"
1581 uuid="6cfe387c-74fb-4ca7-bff6-973bec8af7a3"
1582 wsmap="managed"
1583 >
1584 <desc>
1585 The IDHCPServer interface represents the vbox dhcp server configuration.
1586
1587 To enumerate all the dhcp servers on the host, use the
1588 <link to="IVirtualBox::DHCPServers"/> attribute.
1589 </desc>
1590
1591 <attribute name="enabled" type="boolean">
1592 <desc>
1593 specifies if the dhcp server is enabled
1594 </desc>
1595 </attribute>
1596
1597 <attribute name="IPAddress" type="wstring" readonly="yes">
1598 <desc>
1599 specifies server IP
1600 </desc>
1601 </attribute>
1602
1603 <attribute name="networkMask" type="wstring" readonly="yes">
1604 <desc>
1605 specifies server network mask
1606 </desc>
1607 </attribute>
1608
1609 <attribute name="networkName" type="wstring" readonly="yes">
1610 <desc>
1611 specifies internal network name the server is used for
1612 </desc>
1613 </attribute>
1614
1615 <attribute name="lowerIP" type="wstring" readonly="yes">
1616 <desc>
1617 specifies from IP adrres in server address range
1618 </desc>
1619 </attribute>
1620
1621 <attribute name="upperIP" type="wstring" readonly="yes">
1622 <desc>
1623 specifies to IP adrres in server address range
1624 </desc>
1625 </attribute>
1626
1627 <method name="setConfiguration">
1628 <desc>
1629 configures the server
1630 <result name="E_INVALIDARG">
1631 invalid configuration supplied
1632 </result>
1633 </desc>
1634 <param name="IPAddress" type="wstring" dir="in">
1635 <desc>
1636 server IP address
1637 </desc>
1638 </param>
1639 <param name="networkMask" type="wstring" dir="in">
1640 <desc>
1641 server network mask
1642 </desc>
1643 </param>
1644 <param name="FromIPAddress" type="wstring" dir="in">
1645 <desc>
1646 server From IP address for address range
1647 </desc>
1648 </param>
1649 <param name="ToIPAddress" type="wstring" dir="in">
1650 <desc>
1651 server To IP address for address range
1652 </desc>
1653 </param>
1654 </method>
1655
1656 <method name="start">
1657 <desc>
1658 Starts DHCP server process.
1659 <result name="E_FAIL">
1660 Failed to start the process.
1661 </result>
1662 </desc>
1663 <param name="networkName" type="wstring" dir="in">
1664 <desc>
1665 Name of internal network DHCP server should attach to.
1666 </desc>
1667 </param>
1668 <param name="trunkName" type="wstring" dir="in">
1669 <desc>
1670 Name of internal network trunk.
1671 </desc>
1672 </param>
1673 <param name="trunkType" type="wstring" dir="in">
1674 <desc>
1675 Type of internal network trunk.
1676 </desc>
1677 </param>
1678 </method>
1679
1680 <method name="stop">
1681 <desc>
1682 Stops DHCP server process.
1683 <result name="E_FAIL">
1684 Failed to stop the process.
1685 </result>
1686 </desc>
1687 </method>
1688 </interface>
1689
1690 <interface
1691 name="IVirtualBox" extends="$dispatched"
1692 uuid="3f36e024-7fed-4f20-a02c-9158a82b44e6"
1693 wsmap="managed"
1694 >
1695 <desc>
1696 The IVirtualBox interface represents the main interface exposed by the
1697 product that provides virtual machine management.
1698
1699 An instance of IVirtualBox is required for the product to do anything
1700 useful. Even though the interface does not expose this, internally,
1701 IVirtualBox is implemented as a singleton and actually lives in the
1702 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
1703 IVirtualBox can track the state of all virtual machines on a particular
1704 host, regardless of which frontend started them.
1705
1706 To enumerate all the virtual machines on the host, use the
1707 <link to="IVirtualBox::machines"/> attribute.
1708 </desc>
1709
1710 <attribute name="version" type="wstring" readonly="yes">
1711 <desc>
1712 A string representing the version number of the product. The
1713 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
1714 last number represents the build number and will frequently change.
1715 </desc>
1716 </attribute>
1717
1718 <attribute name="revision" type="unsigned long" readonly="yes">
1719 <desc>
1720 The internal build revision number of the product.
1721 </desc>
1722 </attribute>
1723
1724 <attribute name="packageType" type="wstring" readonly="yes">
1725 <desc>
1726 A string representing the package type of this product. The
1727 format is OS_ARCH_DIST where OS is either WINDOWS, LINUX,
1728 SOLARIS, DARWIN. ARCH is either 32BITS or 64BITS. DIST
1729 is either GENERIC, UBUNTU_606, UBUNTU_710, or something like
1730 this.
1731 </desc>
1732 </attribute>
1733
1734 <attribute name="homeFolder" type="wstring" readonly="yes">
1735 <desc>
1736 Full path to the directory where the global settings file,
1737 <tt>VirtualBox.xml</tt>, is stored.
1738
1739 In this version of VirtualBox, the value of this property is
1740 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
1741 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
1742 as determined by the host OS), and cannot be changed.
1743
1744 This path is also used as the base to resolve relative paths in
1745 places where relative paths are allowed (unless otherwise
1746 expressly indicated).
1747 </desc>
1748 </attribute>
1749
1750 <attribute name="settingsFilePath" type="wstring" readonly="yes">
1751 <desc>
1752 Full name of the global settings file.
1753 The value of this property corresponds to the value of
1754 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
1755 </desc>
1756 </attribute>
1757
1758 <attribute name="host" type="IHost" readonly="yes">
1759 <desc>Associated host object.</desc>
1760 </attribute>
1761
1762 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
1763 <desc>Associated system information object.</desc>
1764 </attribute>
1765
1766 <attribute name="machines" type="IMachine" readonly="yes" safearray="yes">
1767 <desc>
1768 Array of machine objects registered within this VirtualBox instance.
1769 </desc>
1770 </attribute>
1771
1772 <attribute name="hardDisks" type="IMedium" readonly="yes" safearray="yes">
1773 <desc>
1774 Array of medium objects known to this VirtualBox installation.
1775
1776 This array contains only base media. All differencing
1777 media of the given base medium can be enumerated using
1778 <link to="IMedium::children"/>.
1779 </desc>
1780 </attribute>
1781
1782 <attribute name="DVDImages" type="IMedium" readonly="yes" safearray="yes">
1783 <desc>
1784 Array of CD/DVD image objects registered with this VirtualBox instance.
1785 </desc>
1786 </attribute>
1787
1788 <attribute name="floppyImages" type="IMedium" readonly="yes" safearray="yes">
1789 <desc>
1790 Array of floppy image objects registered with this VirtualBox instance.
1791 </desc>
1792 </attribute>
1793
1794 <attribute name="progressOperations" type="IProgress" readonly="yes" safearray="yes"/>
1795
1796 <attribute name="guestOSTypes" type="IGuestOSType" readonly="yes" safearray="yes"/>
1797
1798 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
1799 <desc>
1800 Collection of global shared folders. Global shared folders are
1801 available to all virtual machines.
1802
1803 New shared folders are added to the collection using
1804 <link to="#createSharedFolder"/>. Existing shared folders can be
1805 removed using <link to="#removeSharedFolder"/>.
1806
1807 <note>
1808 In the current version of the product, global shared folders are not
1809 implemented and therefore this collection is always empty.
1810 </note>
1811 </desc>
1812 </attribute>
1813
1814 <attribute name="performanceCollector" type="IPerformanceCollector" readonly="yes">
1815 <desc>
1816 Associated performance collector object.
1817 </desc>
1818 </attribute>
1819
1820 <attribute name="DHCPServers" type="IDHCPServer" safearray="yes" readonly="yes">
1821 <desc>
1822 dhcp server settings.
1823 </desc>
1824 </attribute>
1825
1826 <method name="createMachine">
1827 <desc>
1828 Creates a new virtual machine.
1829
1830 The new machine is created unregistered, with the initial configuration
1831 set according to the specified guest OS type. A typical sequence of
1832 actions to create a new virtual machine is as follows:
1833
1834 <ol>
1835 <li>
1836 Call this method to have a new machine created. The returned machine
1837 object will be "mutable" allowing to change any machine property.
1838 </li>
1839
1840 <li>
1841 Configure the machine using the appropriate attributes and methods.
1842 </li>
1843
1844 <li>
1845 Call <link to="IMachine::saveSettings" /> to write the settings
1846 to the machine's XML settings file. The configuration of the newly
1847 created machine will not be saved to disk until this method is
1848 called.
1849 </li>
1850
1851 <li>
1852 Call <link to="#registerMachine" /> to add the machine to the list
1853 of machines known to VirtualBox.
1854 </li>
1855 </ol>
1856
1857 You should specify valid name for the newly created machine when calling
1858 this method. See the <link to="IMachine::name"/> attribute description
1859 for more details about the machine name.
1860
1861 The specified guest OS type identifier must match an ID of one of known
1862 guest OS types listed in the <link to="IVirtualBox::guestOSTypes"/>
1863 array.
1864
1865 Every machine has a <i>settings file</i> that is used to store
1866 the machine configuration. This file is stored in a directory called the
1867 <i>machine settings subfolder</i>. Both the settings subfolder and file
1868 will have a name that corresponds to the name of the virtual machine.
1869 You can specify where to create the machine setting subfolder using the
1870 @a baseFolder argument. The base folder can be absolute (full path) or
1871 relative to the <link to="IVirtualBox::homeFolder">VirtualBox home
1872 directory</link>.
1873
1874 If @a baseFolder is a @c null or empty string (which is recommended), the
1875 <link to="ISystemProperties::defaultMachineFolder">default machine
1876 settings folder</link> will be used as a base folder for the created
1877 machine. Otherwise the given base folder will be used. In either case,
1878 the full path to the resulting settings file has the following
1879 structure:
1880 <pre>
1881 &lt;base_folder&gt;/&lt;machine_name&gt;/&lt;machine_name&gt;.xml
1882 </pre>
1883
1884 Note that if the resulting settings file already exists, this method
1885 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1886
1887 Optionally, you may specify an UUID of to assign to the created machine.
1888 However, this is not recommended and you should normally pass an empty
1889 (@c null) UUID to this method so that a new UUID will be automatically
1890 generated for every created machine. You can use UUID
1891 00000000-0000-0000-0000-000000000000 as @c null value.
1892
1893 <note>
1894 There is no way to change the name of the settings file or
1895 subfolder of the created machine directly.
1896 </note>
1897
1898 <result name="VBOX_E_OBJECT_NOT_FOUND">
1899 @a osTypeId is invalid.
1900 </result>
1901 <result name="VBOX_E_FILE_ERROR">
1902 Resulting settings file name is invalid or the settings file already
1903 exists or could not be created due to an I/O error.
1904 </result>
1905 <result name="E_INVALIDARG">
1906 @a name is empty or @c null.
1907 </result>
1908 </desc>
1909
1910 <param name="name" type="wstring" dir="in">
1911 <desc>Machine name.</desc>
1912 </param>
1913 <param name="osTypeId" type="wstring" dir="in">
1914 <desc>Guest OS Type ID.</desc>
1915 </param>
1916 <param name="baseFolder" type="wstring" dir="in">
1917 <desc>Base machine folder (optional).</desc>
1918 </param>
1919 <param name="id" type="uuid" mod="string" dir="in">
1920 <desc>Machine UUID (optional).</desc>
1921 </param>
1922 <param name="override" type="boolean" dir="in">
1923 <desc>Create the VM even if there are conflicting files.</desc>
1924 </param>
1925 <param name="machine" type="IMachine" dir="return">
1926 <desc>Created machine object.</desc>
1927 </param>
1928 </method>
1929
1930 <method name="createLegacyMachine">
1931 <desc>
1932 Creates a new virtual machine in "legacy" mode, using the specified
1933 settings file to store machine settings.
1934
1935 As opposed to machines created by <link to="#createMachine"/>,
1936 the settings file of the machine created in "legacy" mode is not
1937 automatically renamed when the machine name is changed -- it will always
1938 remain the same as specified in this method call.
1939
1940 The specified settings file name can be absolute (full path) or relative
1941 to the <link to="IVirtualBox::homeFolder">VirtualBox home
1942 directory</link>. If the file name doesn't contain an extension, the
1943 default extension (.xml) will be appended.
1944
1945 Note that the configuration of the newly created machine is not
1946 saved to disk (and therefore no settings file is created)
1947 until <link to="IMachine::saveSettings"/> is called. If the
1948 specified settings file already exists, this method
1949 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1950
1951 See <link to="#createMachine"/> for more information.
1952
1953 @deprecated This method may be removed later. Use <link
1954 to="IVirtualBox::createMachine"/> instead.
1955
1956 <note>
1957 There is no way to change the name of the settings file
1958 of the machine created in "legacy" mode.
1959 </note>
1960
1961 <result name="VBOX_E_OBJECT_NOT_FOUND">
1962 @a osTypeId is invalid.
1963 </result>
1964 <result name="VBOX_E_FILE_ERROR">
1965 @a settingsFile is invalid or the settings file already exists or
1966 could not be created due to an I/O error.
1967 </result>
1968 <result name="E_INVALIDARG">
1969 @a name or @a settingsFile is empty or @c null.
1970 </result>
1971 </desc>
1972
1973 <param name="name" type="wstring" dir="in">
1974 <desc>Machine name.</desc>
1975 </param>
1976 <param name="osTypeId" type="wstring" dir="in">
1977 <desc>Machine OS Type ID.</desc>
1978 </param>
1979 <param name="settingsFile" type="wstring" dir="in">
1980 <desc>Name of the machine settings file.</desc>
1981 </param>
1982 <param name="id" type="uuid" mod="string" dir="in">
1983 <desc>Machine UUID (optional).</desc>
1984 </param>
1985 <param name="machine" type="IMachine" dir="return">
1986 <desc>Created machine object.</desc>
1987 </param>
1988 </method>
1989
1990 <method name="openMachine">
1991 <desc>
1992 Opens a virtual machine from the existing settings file.
1993 The opened machine remains unregistered until you call
1994 <link to="#registerMachine"/>.
1995
1996 The specified settings file name can be absolute
1997 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1998 VirtualBox home directory</link>. This file must exist
1999 and must be a valid machine settings file whose contents
2000 will be used to construct the machine object.
2001
2002 @deprecated Will be removed soon.
2003 <result name="VBOX_E_FILE_ERROR">
2004 Settings file name invalid, not found or sharing violation.
2005 </result>
2006 </desc>
2007 <param name="settingsFile" type="wstring" dir="in">
2008 <desc>
2009 Name of the machine settings file.
2010 </desc>
2011 </param>
2012 <param name="machine" type="IMachine" dir="return">
2013 <desc>Opened machine object.</desc>
2014 </param>
2015 <note>
2016 <link to="IMachine::settingsModified"/> will return
2017 @c false for the created machine, until any of machine settings
2018 are changed.
2019 </note>
2020 </method>
2021
2022 <method name="registerMachine">
2023 <desc>
2024
2025 Registers the machine previously created using
2026 <link to="#createMachine"/> or opened using
2027 <link to="#openMachine"/> within this VirtualBox installation. After
2028 successful method invocation, the
2029 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
2030 to all registered callbacks.
2031
2032 <note>
2033 This method implicitly calls <link to="IMachine::saveSettings"/>
2034 to save all current machine settings before registering it.
2035 </note>
2036
2037 <result name="VBOX_E_OBJECT_NOT_FOUND">
2038 No matching virtual machine found.
2039 </result>
2040 <result name="VBOX_E_INVALID_OBJECT_STATE">
2041 Virtual machine was not created within this VirtualBox instance.
2042 </result>
2043
2044 </desc>
2045 <param name="machine" type="IMachine" dir="in"/>
2046 </method>
2047
2048 <method name="getMachine">
2049 <desc>
2050 Attempts to find a virtual machine given its UUID.
2051 To look up a machine by name, use <link to="IVirtualBox::findMachine" />
2052 instead.
2053
2054 <result name="VBOX_E_OBJECT_NOT_FOUND">
2055 Could not find registered machine matching @a id.
2056 </result>
2057
2058 </desc>
2059 <param name="id" type="uuid" mod="string" dir="in"/>
2060 <param name="machine" type="IMachine" dir="return"/>
2061 </method>
2062
2063 <method name="findMachine">
2064 <desc>
2065 Attempts to find a virtual machine given its name.
2066 To look up a machine by UUID, use <link to="IVirtualBox::getMachine" />
2067 instead.
2068
2069 <result name="VBOX_E_OBJECT_NOT_FOUND">
2070 Could not find registered machine matching @a name.
2071 </result>
2072
2073 </desc>
2074 <param name="name" type="wstring" dir="in"/>
2075 <param name="machine" type="IMachine" dir="return"/>
2076 </method>
2077
2078 <method name="unregisterMachine">
2079 <desc>
2080
2081 Unregisters the machine previously registered using
2082 <link to="#registerMachine"/>. After successful method invocation, the
2083 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
2084 to all registered callbacks.
2085
2086 <note>
2087 The specified machine must not be in the Saved state, have an open
2088 (or a spawning) direct session associated with it, have snapshots or
2089 have any medium attached.
2090 </note>
2091
2092 <note>
2093 This method implicitly calls <link to="IMachine::saveSettings"/> to
2094 save all current machine settings before unregistering it.
2095 </note>
2096
2097 <note>
2098 If the given machine is inaccessible (see
2099 <link to="IMachine::accessible"/>), it will be unregistered and
2100 fully uninitialized right afterwards. As a result, the returned
2101 machine object will be unusable and an attempt to call
2102 <b>any</b> method will return the "Object not ready" error.
2103 </note>
2104
2105 <result name="VBOX_E_OBJECT_NOT_FOUND">
2106 Could not find registered machine matching @a id.
2107 </result>
2108 <result name="VBOX_E_INVALID_VM_STATE">
2109 Machine is in Saved state.
2110 </result>
2111 <result name="VBOX_E_INVALID_OBJECT_STATE">
2112 Machine has snapshot or open session or medium attached.
2113 </result>
2114
2115 </desc>
2116 <param name="id" type="uuid" mod="string" dir="in">
2117 <desc>UUID of the machine to unregister.</desc>
2118 </param>
2119 <param name="machine" type="IMachine" dir="return">
2120 <desc>Unregistered machine object.</desc>
2121 </param>
2122 </method>
2123
2124 <method name="createAppliance">
2125 <desc>
2126 Creates a new appliance object, which represents an appliance in the Open Virtual Machine
2127 Format (OVF). This can then be used to import an OVF appliance into VirtualBox or to export
2128 machines as an OVF appliance; see the documentation for <link to="IAppliance" /> for details.
2129 </desc>
2130 <param name="appliance" type="IAppliance" dir="return">
2131 <desc>New appliance.</desc>
2132 </param>
2133 </method>
2134
2135 <method name="createHardDisk">
2136 <desc>
2137 Creates a new base medium object that will use the given storage
2138 format and location for medium data.
2139
2140 Note that the actual storage unit is not created by this method. In
2141 order to do it, and before you are able to attach the created medium
2142 to virtual machines, you must call one of the following methods to
2143 allocate a format-specific storage unit at the specified location:
2144 <ul>
2145 <li><link to="IMedium::createBaseStorage"/></li>
2146 <li><link to="IMedium::createDiffStorage"/></li>
2147 </ul>
2148
2149 Some medium attributes, such as <link to="IMedium::id"/>, may
2150 remain uninitialized until the medium storage unit is successfully
2151 created by one of the above methods.
2152
2153 After the storage unit is successfully created, the medium gets
2154 remembered by this VirtualBox installation and will be accessible
2155 through <link to="#getHardDisk"/> and <link to="#findHardDisk"/>
2156 methods. Remembered base medium are also returned as part of
2157 the <link to="#hardDisks"/> array. See IMedium for more details.
2158
2159 The list of all storage formats supported by this VirtualBox
2160 installation can be obtained using
2161 <link to="ISystemProperties::mediumFormats"/>. If the @a format
2162 attribute is empty or @c null then the default storage format
2163 specified by <link to="ISystemProperties::defaultHardDiskFormat"/> will
2164 be used for creating a storage unit of the medium.
2165
2166 Note that the format of the location string is storage format specific.
2167 See <link to="IMedium::location"/>, IMedium and
2168 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
2169
2170 <result name="VBOX_E_OBJECT_NOT_FOUND">
2171 @a format identifier is invalid. See
2172 <link to="ISystemProperties::mediumFormats"/>.
2173 </result>
2174 <result name="VBOX_E_FILE_ERROR">
2175 @a location is a not valid file name (for file-based formats only).
2176 </result>
2177 </desc>
2178 <param name="format" type="wstring" dir="in">
2179 <desc>
2180 Identifier of the storage format to use for the new medium.
2181 </desc>
2182 </param>
2183 <param name="location" type="wstring" dir="in">
2184 <desc>
2185 Location of the storage unit for the new medium.
2186 </desc>
2187 </param>
2188 <param name="medium" type="IMedium" dir="return">
2189 <desc>Created medium object.</desc>
2190 </param>
2191 </method>
2192
2193 <method name="openHardDisk">
2194 <desc>
2195 Opens a medium from an existing location, optionally replacing
2196 the image UUID and/or parent UUID.
2197
2198 After the medium is successfully opened by this method, it gets
2199 remembered by (known to) this VirtualBox installation and will be
2200 accessible through <link to="#getHardDisk"/> and
2201 <link to="#findHardDisk"/> methods. Remembered base media
2202 are also returned as part of the <link to="#hardDisks"/> array and can
2203 be attached to virtual machines. See IMedium for more details.
2204
2205 If a differencing medium is to be opened by this method, the
2206 operation will succeed only if its parent medium and all ancestors,
2207 if any, are already known to this VirtualBox installation (for example,
2208 were opened by this method before).
2209
2210 This method tries to guess the storage format of the specified medium
2211 by reading medium data at the specified location.
2212
2213 If @a accessMode is ReadWrite (which it should be), the image is opened
2214 for read/write access and must have according permissions, as VirtualBox
2215 may actually write status information into the disk's metadata sections.
2216
2217 Note that write access is required for all typical image usage in VirtualBox,
2218 since VirtualBox may need to write metadata such as a UUID into the image.
2219 The only exception is opening a source image temporarily for copying and
2220 cloning when the image will quickly be closed again.
2221
2222 Note that the format of the location string is storage format specific.
2223 See <link to="IMedium::location"/>, IMedium and
2224 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
2225
2226 <result name="VBOX_E_FILE_ERROR">
2227 Invalid medium storage file location or could not find the medium
2228 at the specified location.
2229 </result>
2230 <result name="VBOX_E_IPRT_ERROR">
2231 Could not get medium storage format.
2232 </result>
2233 <result name="E_INVALIDARG">
2234 Invalid medium storage format.
2235 </result>
2236
2237 </desc>
2238 <param name="location" type="wstring" dir="in">
2239 <desc>
2240 Location of the storage unit that contains medium data in one of
2241 the supported storage formats.
2242 </desc>
2243 </param>
2244 <param name="accessMode" type="AccessMode" dir="in">
2245 <desc>
2246 Determines whether to open the image in read/write or read-only mode.
2247 </desc>
2248 </param>
2249 <param name="setImageId" type="boolean" dir="in">
2250 <desc>
2251 Select whether a new image UUID is set or not.
2252 </desc>
2253 </param>
2254 <param name="imageId" type="uuid" mod="string" dir="in">
2255 <desc>
2256 New UUID for the image. If an empty string is passed, then a new
2257 UUID is automatically created. Specifying a zero UUIDs is not valid.
2258 </desc>
2259 </param>
2260 <param name="setParentId" type="boolean" dir="in">
2261 <desc>
2262 Select whether a new parent UUID is set or not.
2263 </desc>
2264 </param>
2265 <param name="parentId" type="uuid" mod="string" dir="in">
2266 <desc>
2267 New parent UUID for the image. If an empty string is passed, then a
2268 new UUID is automatically created, provided @a setParentId is
2269 @c true. A zero UUID is valid.
2270 </desc>
2271 </param>
2272 <param name="medium" type="IMedium" dir="return">
2273 <desc>Opened medium object.</desc>
2274 </param>
2275 </method>
2276
2277 <method name="getHardDisk" const="yes">
2278 <desc>
2279 Returns a medium with the given UUID.
2280
2281 The medium with the given UUID must be known to this VirtualBox
2282 installation, i.e. it must be previously created by
2283 <link to="#createHardDisk"/> or opened by <link
2284 to="#openHardDisk"/>, or attached to some known virtual machine.
2285
2286 <result name="VBOX_E_OBJECT_NOT_FOUND">
2287 No medium object matching @a id found.
2288 </result>
2289
2290 </desc>
2291 <param name="id" type="uuid" mod="string" dir="in">
2292 <desc>UUID of the medium to look for.</desc>
2293 </param>
2294 <param name="medium" type="IMedium" dir="return">
2295 <desc>Found medium object.</desc>
2296 </param>
2297 </method>
2298
2299 <method name="findHardDisk">
2300 <desc>
2301 Returns a medium that uses the given location to store medium data.
2302
2303 The given medium must be known to this VirtualBox installation, i.e.
2304 it must be previously created by
2305 <link to="#createHardDisk"/> or opened by <link
2306 to="#openHardDisk"/>, or attached to some known virtual machine.
2307
2308 The search is done by comparing the value of the @a location argument to
2309 the <link to="IMedium::location"/> attribute of each known medium.
2310
2311 For locations represented by file names in the host's file system, the
2312 requested location can be a path relative to the
2313 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2314 only a file name without any path is given, the
2315 <link to="ISystemProperties::defaultHardDiskFolder"> default medium
2316 folder</link> will be prepended to the file name before searching. Note
2317 that on case sensitive file systems, a case sensitive comparison is
2318 performed, otherwise the case of symbols in the file path is ignored.
2319
2320 <result name="VBOX_E_OBJECT_NOT_FOUND">
2321 No medium object matching @a location found.
2322 </result>
2323
2324 </desc>
2325 <param name="location" type="wstring" dir="in">
2326 <desc>Location string to search for.</desc>
2327 </param>
2328 <param name="medium" type="IMedium" dir="return">
2329 <desc>Found medium object.</desc>
2330 </param>
2331 </method>
2332
2333 <method name="openDVDImage">
2334 <desc>
2335 Opens a CD/DVD image contained in the specified file of the supported
2336 format and assigns it the given UUID.
2337
2338 After the image is successfully opened by this method, it gets
2339 remembered by (known to) this VirtualBox installation and will be
2340 accessible through <link to="#getDVDImage"/> and
2341 <link to="#findDVDImage"/> methods. Remembered images are also
2342 returned as part of the <link to="#DVDImages"/> array and can be mounted
2343 to virtual machines. See IMedium for more details.
2344
2345 See <link to="IMedium::location"/> to get more details about the format
2346 of the location string.
2347
2348 <note>
2349 Currently only ISO 9960 CD/DVD images are supported by VirtualBox.
2350 </note>
2351
2352 <result name="VBOX_E_FILE_ERROR">
2353 Invalid CD/DVD image file location or could not find the CD/DVD
2354 image at the specified location.
2355 </result>
2356 <result name="VBOX_E_INVALID_OBJECT_STATE">
2357 CD/DVD image already exists in the media registry.
2358 </result>
2359
2360 </desc>
2361 <param name="location" type="wstring" dir="in">
2362 <desc>
2363 Full path to the file that contains a valid CD/DVD image.
2364 </desc>
2365 </param>
2366 <param name="id" type="uuid" mod="string" dir="in">
2367 <desc>
2368 UUID to assign to the given image within this VirtualBox installation.
2369 If an empty (@c null) UUID is specified, the system will randomly
2370 generate a new UUID.
2371 </desc>
2372 </param>
2373 <param name="image" type="IMedium" dir="return">
2374 <desc>Opened CD/DVD image object.</desc>
2375 </param>
2376 </method>
2377
2378 <method name="getDVDImage">
2379 <desc>
2380 Returns a CD/DVD image with the given UUID.
2381
2382 The image with the given UUID must be known to this VirtualBox
2383 installation, i.e. it must be previously opened by <link
2384 to="#openDVDImage"/>, or mounted to some known virtual machine.
2385
2386 <result name="VBOX_E_OBJECT_NOT_FOUND">
2387 No matching DVD image found in the media registry.
2388 </result>
2389
2390 </desc>
2391 <param name="id" type="uuid" mod="string" dir="in">
2392 <desc>UUID of the image to look for.</desc>
2393 </param>
2394 <param name="image" type="IMedium" dir="return">
2395 <desc>Found CD/DVD image object.</desc>
2396 </param>
2397 </method>
2398
2399 <method name="findDVDImage">
2400 <desc>
2401 Returns a CD/DVD image with the given image location.
2402
2403 The image with the given UUID must be known to this VirtualBox
2404 installation, i.e. it must be previously opened by <link
2405 to="#openDVDImage"/>, or mounted to some known virtual machine.
2406
2407 The search is done by comparing the value of the @a location argument to
2408 the <link to="IMedium::location"/> attribute of each known CD/DVD image.
2409
2410 The requested location can be a path relative to the
2411 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2412 only a file name without any path is given, the
2413 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2414 folder</link> will be prepended to the file name before searching. Note
2415 that on case sensitive file systems, a case sensitive comparison is
2416 performed, otherwise the case in the file path is ignored.
2417
2418 <result name="VBOX_E_FILE_ERROR">
2419 Invalid image file location.
2420 </result>
2421 <result name="VBOX_E_OBJECT_NOT_FOUND">
2422 No matching DVD image found in the media registry.
2423 </result>
2424
2425 </desc>
2426 <param name="location" type="wstring" dir="in">
2427 <desc>CD/DVD image file path to look for.</desc>
2428 </param>
2429 <param name="image" type="IMedium" dir="return">
2430 <desc>Found CD/DVD image object.</desc>
2431 </param>
2432 </method>
2433
2434 <method name="openFloppyImage">
2435 <desc>
2436 Opens a floppy image contained in the specified file of the supported
2437 format and assigns it the given UUID.
2438
2439 After the image is successfully opened by this method, it gets
2440 remembered by (known to) this VirtualBox installation and will be
2441 accessible through <link to="#getFloppyImage"/> and
2442 <link to="#findFloppyImage"/> methods. Remembered images are also
2443 returned as part of the <link to="#floppyImages"/> array and can be
2444 mounted to virtual machines. See IMedium for more details.
2445
2446 See <link to="IMedium::location"/> to get more details about the format
2447 of the location string.
2448
2449 <result name="VBOX_E_FILE_ERROR">
2450 Invalid floppy image file location or could not find the floppy
2451 image at the specified location.
2452 </result>
2453 <result name="VBOX_E_INVALID_OBJECT_STATE">
2454 Floppy image already exists in the media registry.
2455 </result>
2456
2457 <note>
2458 Currently, only raw floppy images are supported by VirtualBox.
2459 </note>
2460 </desc>
2461 <param name="location" type="wstring" dir="in">
2462 <desc>
2463 Full path to the file that contains a valid floppy image.
2464 </desc>
2465 </param>
2466 <param name="id" type="uuid" mod="string" dir="in">
2467 <desc>
2468 UUID to assign to the given image file within this VirtualBox
2469 installation. If an empty (@c null) UUID is specified, the system will
2470 randomly generate a new UUID.
2471 </desc>
2472 </param>
2473 <param name="image" type="IMedium" dir="return">
2474 <desc>Opened floppy image object.</desc>
2475 </param>
2476 </method>
2477
2478 <method name="getFloppyImage">
2479 <desc>
2480 Returns a floppy image with the given UUID.
2481
2482 The image with the given UUID must be known to this VirtualBox
2483 installation, i.e. it must be previously opened by <link
2484 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2485
2486 <result name="VBOX_E_OBJECT_NOT_FOUND">
2487 No matching floppy image found in the media registry.
2488 </result>
2489
2490 </desc>
2491 <param name="id" type="uuid" mod="string" dir="in">
2492 <desc>UUID of the image to look for.</desc>
2493 </param>
2494 <param name="image" type="IMedium" dir="return">
2495 <desc>Found floppy image object.</desc>
2496 </param>
2497 </method>
2498
2499 <method name="findFloppyImage">
2500 <desc>
2501 Returns a floppy image with the given image location.
2502
2503 The image with the given UUID must be known to this VirtualBox
2504 installation, i.e. it must be previously opened by <link
2505 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2506
2507 The search is done by comparing the value of the @a location argument to
2508 the <link to="IMedium::location"/> attribute of each known floppy image.
2509
2510 The requested location can be a path relative to the
2511 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2512 only a file name without any path is given, the
2513 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2514 folder</link> will be prepended to the file name before searching. Note
2515 that on case sensitive file systems, a case sensitive comparison is
2516 performed, otherwise the case of symbols in the file path is ignored.
2517
2518 <result name="VBOX_E_FILE_ERROR">
2519 Invalid image file location.
2520 </result>
2521 <result name="VBOX_E_OBJECT_NOT_FOUND">
2522 No matching floppy image found in the media registry.
2523 </result>
2524
2525 </desc>
2526 <param name="location" type="wstring" dir="in">
2527 <desc>Floppy image file path to look for.</desc>
2528 </param>
2529 <param name="image" type="IMedium" dir="return">
2530 <desc>Found floppy image object.</desc>
2531 </param>
2532 </method>
2533
2534 <method name="getGuestOSType">
2535 <desc>
2536 Returns an object describing the specified guest OS type.
2537
2538 The requested guest OS type is specified using a string which is a
2539 mnemonic identifier of the guest operating system, such as
2540 <tt>"win31"</tt> or <tt>"ubuntu"</tt>. The guest OS type ID of a
2541 particular virtual machine can be read or set using the
2542 <link to="IMachine::OSTypeId"/> attribute.
2543
2544 The <link to="IVirtualBox::guestOSTypes"/> collection contains all
2545 available guest OS type objects. Each object has an
2546 <link to="IGuestOSType::id"/> attribute which contains an identifier of
2547 the guest OS this object describes.
2548
2549 <result name="E_INVALIDARG">
2550 @a id is not a valid Guest OS type.
2551 </result>
2552
2553 </desc>
2554 <param name="id" type="uuid" mod="string" dir="in">
2555 <desc>Guest OS type ID string.</desc>
2556 </param>
2557 <param name="type" type="IGuestOSType" dir="return">
2558 <desc>Guest OS type object.</desc>
2559 </param>
2560 </method>
2561
2562 <method name="createSharedFolder">
2563 <desc>
2564 Creates a new global shared folder by associating the given logical
2565 name with the given host path, adds it to the collection of shared
2566 folders and starts sharing it. Refer to the description of
2567 <link to="ISharedFolder"/> to read more about logical names.
2568 <note>
2569 In the current implementation, this operation is not
2570 implemented.
2571 </note>
2572 </desc>
2573 <param name="name" type="wstring" dir="in">
2574 <desc>Unique logical name of the shared folder.</desc>
2575 </param>
2576 <param name="hostPath" type="wstring" dir="in">
2577 <desc>Full path to the shared folder in the host file system.</desc>
2578 </param>
2579 <param name="writable" type="boolean" dir="in">
2580 <desc>Whether the share is writable or readonly</desc>
2581 </param>
2582 </method>
2583
2584 <method name="removeSharedFolder">
2585 <desc>
2586 Removes the global shared folder with the given name previously
2587 created by <link to="#createSharedFolder"/> from the collection of
2588 shared folders and stops sharing it.
2589 <note>
2590 In the current implementation, this operation is not
2591 implemented.
2592 </note>
2593 </desc>
2594 <param name="name" type="wstring" dir="in">
2595 <desc>Logical name of the shared folder to remove.</desc>
2596 </param>
2597 </method>
2598
2599 <method name="getExtraDataKeys">
2600 <desc>
2601 Returns an array representing the global extra data keys which currently
2602 have values defined.
2603 </desc>
2604 <param name="value" type="wstring" dir="return" safearray="yes">
2605 <desc>Array of extra data keys.</desc>
2606 </param>
2607 </method>
2608
2609 <method name="getExtraData">
2610 <desc>
2611 Returns associated global extra data.
2612
2613 If the requested data @a key does not exist, this function will
2614 succeed and return an empty string in the @a value argument.
2615
2616 <result name="VBOX_E_FILE_ERROR">
2617 Settings file not accessible.
2618 </result>
2619 <result name="VBOX_E_XML_ERROR">
2620 Could not parse the settings file.
2621 </result>
2622
2623 </desc>
2624 <param name="key" type="wstring" dir="in">
2625 <desc>Name of the data key to get.</desc>
2626 </param>
2627 <param name="value" type="wstring" dir="return">
2628 <desc>Value of the requested data key.</desc>
2629 </param>
2630 </method>
2631
2632 <method name="setExtraData">
2633 <desc>
2634 Sets associated global extra data.
2635
2636 If you pass @c null or empty string as a key @a value, the given @a key
2637 will be deleted.
2638
2639 <note>
2640 Before performing the actual data change, this method will ask all
2641 registered callbacks using the
2642 <link to="IVirtualBoxCallback::onExtraDataCanChange"/>
2643 notification for a permission. If one of the callbacks refuses the
2644 new value, the change will not be performed.
2645 </note>
2646 <note>
2647 On success, the
2648 <link to="IVirtualBoxCallback::onExtraDataChange"/> notification
2649 is called to inform all registered callbacks about a successful data
2650 change.
2651 </note>
2652
2653 <result name="VBOX_E_FILE_ERROR">
2654 Settings file not accessible.
2655 </result>
2656 <result name="VBOX_E_XML_ERROR">
2657 Could not parse the settings file.
2658 </result>
2659 <result name="E_ACCESSDENIED">
2660 Modification request refused.
2661 </result>
2662
2663 </desc>
2664 <param name="key" type="wstring" dir="in">
2665 <desc>Name of the data key to set.</desc>
2666 </param>
2667 <param name="value" type="wstring" dir="in">
2668 <desc>Value to assign to the key.</desc>
2669 </param>
2670 </method>
2671
2672 <method name="openSession">
2673 <desc>
2674 Opens a new direct session with the given virtual machine.
2675
2676 A direct session acts as a local lock on the given VM.
2677 There can be only one direct session open at a time for every
2678 virtual machine, protecting the VM from being manipulated by
2679 conflicting actions from different processes. Only after a
2680 direct session has been opened, one can change all VM settings
2681 and execute the VM in the process space of the session object.
2682
2683 Sessions therefore can be compared to mutex semaphores that
2684 lock a given VM for modification and execution.
2685 See <link to="ISession">ISession</link> for details.
2686
2687 <note>Unless you are writing a new VM frontend, you will not
2688 want to execute a VM in the current process. To spawn a new
2689 process that executes a VM, use
2690 <link to="IVirtualBox::openRemoteSession" />
2691 instead.</note>
2692
2693 Upon successful return, the session object can be used to
2694 get access to the machine and to the VM console.
2695
2696 In VirtualBox terminology, the machine becomes "mutable" after
2697 a session has been opened. Note that the "mutable" machine
2698 object, on which you may invoke IMachine methods to change its
2699 settings, will be a different object from the immutable IMachine
2700 objects returned by various IVirtualBox methods. To obtain a
2701 mutable IMachine object (upon which you can invoke settings methods),
2702 use the <link to="ISession::machine" /> attribute.
2703
2704 One must always call <link to="ISession::close" /> to release the
2705 lock on the machine, or the machine's state will eventually be
2706 set to "Aborted".
2707
2708 In other words, to change settings on a machine, the following
2709 sequence is typically performed:
2710
2711 <ol>
2712 <li>Call this method (openSession) to have a machine locked for
2713 the current session.</li>
2714
2715 <li>Obtain a mutable IMachine object from <link to="ISession::machine" />.</li>
2716
2717 <li>Change the settings of the machine.</li>
2718
2719 <li>Call <link to="IMachine::saveSettings" />.</li>
2720
2721 <li>Close the session by calling <link to="ISession::close"/>.</li>
2722 </ol>
2723
2724 <result name="E_UNEXPECTED">
2725 Virtual machine not registered.
2726 </result>
2727 <result name="E_ACCESSDENIED">
2728 Process not started by OpenRemoteSession.
2729 </result>
2730 <result name="VBOX_E_OBJECT_NOT_FOUND">
2731 No matching virtual machine found.
2732 </result>
2733 <result name="VBOX_E_INVALID_OBJECT_STATE">
2734 Session already open or being opened.
2735 </result>
2736 <result name="VBOX_E_VM_ERROR">
2737 Failed to assign machine to session.
2738 </result>
2739
2740 </desc>
2741 <param name="session" type="ISession" dir="in">
2742 <desc>
2743 Session object that will represent the opened session after
2744 successful method invocation. This object must not represent
2745 the already open session.
2746 <note>
2747 This session will be automatically closed if the
2748 VirtualBox server is terminated for some reason.
2749 </note>
2750 </desc>
2751 </param>
2752 <param name="machineId" type="uuid" mod="string" dir="in">
2753 <desc>ID of the virtual machine to open a session with.</desc>
2754 </param>
2755 </method>
2756
2757 <method name="openRemoteSession">
2758 <desc>
2759 Spawns a new process that executes a virtual machine (called a
2760 "remote session").
2761
2762 Opening a remote session causes the VirtualBox server to start a new
2763 process that opens a direct session with the given VM. As a result, the
2764 VM is locked by that direct session in the new process, preventing
2765 conflicting changes from other processes. Since sessions act as locks
2766 that prevent conflicting changes, one cannot open a remote session
2767 for a VM that already has another open session (direct or remote), or
2768 is currently in the process of opening one (see <link
2769 to="IMachine::sessionState"/>).
2770
2771 While the remote session still provides some level of control over the
2772 VM execution to the caller (using the <link to="IConsole" /> interface),
2773 not all VM settings are available for modification within the remote
2774 session context.
2775
2776 This operation can take some time (a new VM is started in a new process,
2777 for which memory and other resources need to be set up). Because of this,
2778 an <link to="IProgress" /> is returned to allow the caller to wait for this
2779 asynchronous operation to be completed. Until then, the remote session
2780 object remains in the closed state, and accessing the machine or its
2781 console through it is invalid. It is recommended to use
2782 <link to="IProgress::waitForCompletion" /> or similar calls to wait for
2783 completion. Completion is signalled when the VM is powered on. Error
2784 messages etc. can be queried via the progress object, if available.
2785
2786 As with all <link to="ISession" /> objects, it is recommended to call
2787 <link to="ISession::close" /> on the local session object once openRemoteSession()
2788 has been called. However, the session's state (see <link to="ISession::state" />)
2789 will not return to "Closed" until the remote session has also closed (i.e.
2790 until the VM is no longer running). In that case, however, the state of
2791 the session will automatically change back to "Closed".
2792
2793 Currently supported session types (values of the @a type
2794 argument) are:
2795 <ul>
2796 <li><tt>"gui"</tt>: VirtualBox Qt GUI session</li>
2797 <li><tt>"vrdp"</tt>: VirtualBox VRDP Server session</li>
2798 <li><tt>"sdl"</tt>: VirtualBox SDL GUI session</li>
2799 </ul>
2800
2801 The @a environment argument is a string containing definitions of
2802 environment variables in the following format:
2803 @code
2804 NAME[=VALUE]\n
2805 NAME[=VALUE]\n
2806 ...
2807 @endcode
2808 where <tt>\\n</tt> is the new line character. These environment
2809 variables will be appended to the environment of the VirtualBox server
2810 process. If an environment variable exists both in the server process
2811 and in this list, the value from this list takes precedence over the
2812 server's variable. If the value of the environment variable is
2813 omitted, this variable will be removed from the resulting environment.
2814 If the environment string is @c null or empty, the server environment
2815 is inherited by the started process as is.
2816
2817 <see>openExistingSession</see>
2818
2819 <result name="E_UNEXPECTED">
2820 Virtual machine not registered.
2821 </result>
2822 <result name="E_INVALIDARG">
2823 Invalid session type @a type.
2824 </result>
2825 <result name="VBOX_E_OBJECT_NOT_FOUND">
2826 No machine matching @a machineId found.
2827 </result>
2828 <result name="VBOX_E_INVALID_OBJECT_STATE">
2829 Session already open or being opened.
2830 </result>
2831 <result name="VBOX_E_IPRT_ERROR">
2832 Launching process for machine failed.
2833 </result>
2834 <result name="VBOX_E_VM_ERROR">
2835 Failed to assign machine to session.
2836 </result>
2837
2838 </desc>
2839 <param name="session" type="ISession" dir="in">
2840 <desc>
2841 Session object that will represent the opened remote session
2842 after successful method invocation (this object must not
2843 represent an already open session).
2844 </desc>
2845 </param>
2846 <param name="machineId" type="uuid" mod="string" dir="in">
2847 <desc>ID of the virtual machine to open a session with.</desc>
2848 </param>
2849 <param name="type" type="wstring" dir="in">
2850 <desc>
2851 Type of the remote session (case sensitive).
2852 </desc>
2853 </param>
2854 <param name="environment" type="wstring" dir="in">
2855 <desc>
2856 Environment to pass to the opened session.
2857 </desc>
2858 </param>
2859 <param name="progress" type="IProgress" dir="return">
2860 <desc>Progress object to track the operation completion.</desc>
2861 </param>
2862 </method>
2863
2864 <method name="openExistingSession">
2865 <desc>
2866 Opens a new remote session with the virtual machine for
2867 which a direct session is already open.
2868
2869 The remote session provides some level of control over the VM
2870 execution (using the IConsole interface) to the caller; however,
2871 within the remote session context, not all VM settings are available
2872 for modification.
2873
2874 As opposed to <link to="#openRemoteSession"/>, the number of
2875 remote sessions opened this way is not limited by the API
2876
2877 <note>
2878 It is an error to open a remote session with the machine that
2879 doesn't have an open direct session.
2880 </note>
2881
2882 <result name="E_UNEXPECTED">
2883 Virtual machine not registered.
2884 </result>
2885 <result name="VBOX_E_OBJECT_NOT_FOUND">
2886 No machine matching @a machineId found.
2887 </result>
2888 <result name="VBOX_E_INVALID_OBJECT_STATE">
2889 Session already open or being opened.
2890 </result>
2891 <result name="VBOX_E_INVALID_SESSION_STATE">
2892 Direct session state not Open.
2893 </result>
2894 <result name="VBOX_E_VM_ERROR">
2895 Failed to get console object from direct session or assign
2896 machine to session.
2897 </result>
2898
2899 <see>openRemoteSession</see>
2900 </desc>
2901 <param name="session" type="ISession" dir="in">
2902 <desc>
2903 Session object that will represent the open remote session
2904 after successful method invocation. This object must not
2905 represent an already open session.
2906 <note>
2907 This session will be automatically closed when the peer
2908 (direct) session dies or gets closed.
2909 </note>
2910 </desc>
2911 </param>
2912 <param name="machineId" type="uuid" mod="string" dir="in">
2913 <desc>ID of the virtual machine to open a session with.</desc>
2914 </param>
2915 </method>
2916
2917 <method name="registerCallback">
2918 <desc>
2919 Registers a new global VirtualBox callback. The methods of the given
2920 callback object will be called by VirtualBox when an appropriate
2921 event occurs.
2922
2923 <result name="E_INVALIDARG">
2924 A @c null callback cannot be registered.
2925 </result>
2926
2927 </desc>
2928 <param name="callback" type="IVirtualBoxCallback" dir="in">
2929 <desc>Callback object to register.</desc>
2930 </param>
2931 </method>
2932
2933 <method name="unregisterCallback">
2934 <desc>
2935 Unregisters the previously registered global VirtualBox callback.
2936
2937 <result name="E_INVALIDARG">
2938 Specified @a callback not registered.
2939 </result>
2940
2941 </desc>
2942 <param name="callback" type="IVirtualBoxCallback" dir="in">
2943 <desc>Callback object to unregister.</desc>
2944 </param>
2945 </method>
2946
2947 <method name="waitForPropertyChange">
2948 <desc>
2949 Blocks the caller until any of the properties represented by the
2950 @a what argument changes the value or until the given timeout interval
2951 expires.
2952
2953 The @a what argument is a comma separated list of property masks that
2954 describe properties the caller is interested in. The property mask is
2955 a string in the following format:
2956
2957 <pre>
2958 [[group.]subgroup.]name
2959 </pre>
2960
2961 where @c name is the property name and @c group, @c subgroup are zero
2962 or more property group specifiers. Each element (group or name) in
2963 the property mask may be either a Latin string or an asterisk symbol
2964 (@c "*") which is used to match any string for the given element. A
2965 property mask that doesn't contain asterisk symbols represents a
2966 single fully qualified property name.
2967
2968 Groups in the fully qualified property name go from more generic (the
2969 left-most part) to more specific (the right-most part). The first
2970 element is usually a name of the object the property belongs to. The
2971 second element may be either a property name, or a child object name,
2972 or an index if the preceding element names an object which is one of
2973 many objects of the same type. This way, property names form a
2974 hierarchy of properties. Here are some examples of property names:
2975
2976 <table>
2977 <tr>
2978 <td><tt>VirtualBox.version</tt></td>
2979 <td><link to="IVirtualBox::version"/> property</td>
2980 </tr>
2981 <tr>
2982 <td><tt>Machine.&lt;UUID&gt;.name</tt></td>
2983 <td><link to="IMachine::name"/> property of the machine with the
2984 given UUID</td>
2985 </tr>
2986 </table>
2987
2988 Most property names directly correspond to the properties of objects
2989 (components) provided by the VirtualBox library and may be used to
2990 track changes to these properties. However, there may be
2991 pseudo-property names that don't correspond to any existing object's
2992 property directly, as well as there may be object properties that
2993 don't have a corresponding property name that is understood by this
2994 method, and therefore changes to such properties cannot be
2995 tracked. See individual object's property descriptions to get a
2996 fully qualified property name that can be used with this method (if
2997 any).
2998
2999 There is a special property mask @c "*" (i.e. a string consisting of a
3000 single asterisk symbol) that can be used to match all properties.
3001 Below are more examples of property masks:
3002
3003 <table>
3004 <tr>
3005 <td><tt>VirtualBox.*</tt></td>
3006 <td>Track all properties of the VirtualBox object</td>
3007 </tr>
3008 <tr>
3009 <td><tt>Machine.*.name</tt></td>
3010 <td>Track changes to the <link to="IMachine::name"/> property of
3011 all registered virtual machines</td>
3012 </tr>
3013 </table>
3014
3015 <note>
3016 This function is not implemented in the current version of the
3017 product.
3018 </note>
3019 </desc>
3020 <param name="what" type="wstring" dir="in">
3021 <desc>Comma separated list of property masks.</desc>
3022 </param>
3023 <param name="timeout" type="unsigned long" dir="in">
3024 <desc>
3025 Wait timeout in milliseconds.
3026 Specify -1 for an indefinite wait.
3027 </desc>
3028 </param>
3029 <param name="changed" type="wstring" dir="out">
3030 <desc>
3031 Comma separated list of properties that have been changed and caused
3032 this method to return to the caller.
3033 </desc>
3034 </param>
3035 <param name="values" type="wstring" dir="out">
3036 <desc>Reserved, not currently used.</desc>
3037 </param>
3038 </method>
3039
3040 <!--method name="createDHCPServerForInterface">
3041 <desc>
3042 Creates a dhcp server settings to be used for the given interface
3043 <result name="E_INVALIDARG">
3044 Host network interface @a name already exists.
3045 </result>
3046 </desc>
3047 <param name="interface" type="IHostNetworkInterface" dir="in">
3048 <desc>Network Interface</desc>
3049 </param>
3050 <param name="server" type="IDHCPServer" dir="out">
3051 <desc>Dhcp server settings</desc>
3052 </param>
3053 </method-->
3054
3055 <method name="createDHCPServer">
3056 <desc>
3057 Creates a dhcp server settings to be used for the given internal network name
3058 <result name="E_INVALIDARG">
3059 Host network interface @a name already exists.
3060 </result>
3061 </desc>
3062 <param name="name" type="wstring" dir="in">
3063 <desc>server name</desc>
3064 </param>
3065 <param name="server" type="IDHCPServer" dir="return">
3066 <desc>Dhcp server settings</desc>
3067 </param>
3068 </method>
3069
3070 <method name="findDHCPServerByNetworkName">
3071 <desc>
3072 Searches a dhcp server settings to be used for the given internal network name
3073 <result name="E_INVALIDARG">
3074 Host network interface @a name already exists.
3075 </result>
3076
3077 </desc>
3078 <param name="name" type="wstring" dir="in">
3079 <desc>server name</desc>
3080 </param>
3081 <param name="server" type="IDHCPServer" dir="return">
3082 <desc>Dhcp server settings</desc>
3083 </param>
3084 </method>
3085
3086 <!--method name="findDHCPServerForInterface">
3087 <desc>
3088 Searches a dhcp server settings to be used for the given interface
3089 <result name="E_INVALIDARG">
3090 Host network interface @a name already exists.
3091 </result>
3092 </desc>
3093 <param name="interface" type="IHostNetworkInterface" dir="in">
3094 <desc>Network Interface</desc>
3095 </param>
3096 <param name="server" type="IDHCPServer" dir="out">
3097 <desc>Dhcp server settings</desc>
3098 </param>
3099 </method-->
3100
3101 <method name="removeDHCPServer">
3102 <desc>
3103 Removes the dhcp server settings
3104 <result name="E_INVALIDARG">
3105 Host network interface @a name already exists.
3106 </result>
3107 </desc>
3108 <param name="server" type="IDHCPServer" dir="in">
3109 <desc>Dhcp server settings to be removed</desc>
3110 </param>
3111 </method>
3112
3113
3114 <method name="checkFirmwarePresent">
3115 <desc>
3116 Check if this VirtualBox installation has a firmware
3117 of the given type available, either system-wide or per-user.
3118 Optionally, this may return a hint where this firmware can be
3119 downloaded from.
3120 </desc>
3121 <param name="firmwareType" type="FirmwareType" dir="in">
3122 <desc>
3123 Type of firmware to check.
3124 </desc>
3125 </param>
3126 <param name="version" type="wstring" dir="in">
3127 <desc>Expected version number, usually empty string (presently ignored).</desc>
3128 </param>
3129
3130 <param name="url" type="wstring" dir="out">
3131 <desc>
3132 Suggested URL to download this firmware from.
3133 </desc>
3134 </param>
3135
3136 <param name="file" type="wstring" dir="out">
3137 <desc>
3138 Filename of firmware, only valid if result == TRUE.
3139 </desc>
3140 </param>
3141
3142 <param name="result" type="boolean" dir="return">
3143 <desc>If firmware of this type and version is available.</desc>
3144 </param>
3145 </method>
3146
3147 </interface>
3148
3149 <!--
3150 // IVFSExplorer
3151 /////////////////////////////////////////////////////////////////////////
3152 -->
3153
3154 <enum
3155 name="VFSType"
3156 uuid="813999ba-b949-48a8-9230-aadc6285e2f2"
3157 >
3158 <desc>
3159 Virtual file systems supported by VFSExplorer.
3160 </desc>
3161
3162 <const name="File" value="1" />
3163 <const name="Cloud" value="2" />
3164 <const name="S3" value="3" />
3165 <const name="WebDav" value="4" />
3166 </enum>
3167
3168 <enum
3169 name="VFSFileType"
3170 uuid="714333cd-44e2-415f-a245-d378fa9b1242"
3171 >
3172 <desc>
3173 File types known by VFSExplorer.
3174 </desc>
3175
3176 <const name="Unknown" value="1" />
3177 <const name="Fifo" value="2" />
3178 <const name="DevChar" value="3" />
3179 <const name="Directory" value="4" />
3180 <const name="DevBlock" value="5" />
3181 <const name="File" value="6" />
3182 <const name="SymLink" value="7" />
3183 <const name="Socket" value="8" />
3184 <const name="WhiteOut" value="9" />
3185 </enum>
3186
3187 <interface
3188 name="IVFSExplorer" extends="$unknown"
3189 uuid="2bb864a1-02a3-4474-a1d4-fb5f23b742e1"
3190 wsmap="managed"
3191 >
3192 <desc>
3193 The VFSExplorer interface unifies access to different file system
3194 types. This includes local file systems as well remote file systems like
3195 S3. For a list of supported types see <link to="VFSType" />.
3196 An instance of this is returned by <link to="IAppliance::createVFSExplorer" />.
3197 </desc>
3198
3199 <attribute name="path" type="wstring" readonly="yes">
3200 <desc>Returns the current path in the virtual file system.</desc>
3201 </attribute>
3202
3203 <attribute name="type" type="VFSType" readonly="yes">
3204 <desc>Returns the file system type which is currently in use.</desc>
3205 </attribute>
3206
3207 <method name="update">
3208 <desc>Updates the internal list of files/directories from the
3209 current directory level. Use <link to="#entryList" /> to get the full list
3210 after a call to this method.</desc>
3211
3212 <param name="aProgress" type="IProgress" dir="return">
3213 <desc>Progress object to track the operation completion.</desc>
3214 </param>
3215 </method>
3216
3217 <method name="cd">
3218 <desc>Change the current directory level.</desc>
3219
3220 <param name="aDir" type="wstring" dir="in">
3221 <desc>The name of the directory to go in.</desc>
3222 </param>
3223
3224 <param name="aProgress" type="IProgress" dir="return">
3225 <desc>Progress object to track the operation completion.</desc>
3226 </param>
3227 </method>
3228
3229 <method name="cdUp">
3230 <desc>Go one directory upwards from the current directory level.</desc>
3231
3232 <param name="aProgress" type="IProgress" dir="return">
3233 <desc>Progress object to track the operation completion.</desc>
3234 </param>
3235 </method>
3236
3237 <method name="entryList">
3238 <desc>Returns a list of files/directories after a call to <link
3239 to="#update" />. The user is responsible for keeping this internal
3240 list up do date.</desc>
3241
3242 <param name="aNames" type="wstring" safearray="yes" dir="out">
3243 <desc>The list of names for the entries.</desc>
3244 </param>
3245
3246 <param name="aTypes" type="unsigned long" safearray="yes" dir="out">
3247 <desc>The list of types for the entries.</desc>
3248 </param>
3249 </method>
3250
3251 <method name="exists">
3252 <desc>Checks if the given file list exists in the current directory
3253 level.</desc>
3254
3255 <param name="aNames" type="wstring" safearray="yes" dir="in">
3256 <desc>The names to check.</desc>
3257 </param>
3258
3259 <param name="aExists" type="wstring" safearray="yes" dir="return">
3260 <desc>The names which exist.</desc>
3261 </param>
3262 </method>
3263
3264 <method name="remove">
3265 <desc>Deletes the given files in the current directory level.</desc>
3266
3267 <param name="aNames" type="wstring" safearray="yes" dir="in">
3268 <desc>The names to remove.</desc>
3269 </param>
3270
3271 <param name="aProgress" type="IProgress" dir="return">
3272 <desc>Progress object to track the operation completion.</desc>
3273 </param>
3274 </method>
3275
3276 </interface>
3277
3278 <!--
3279 // IAppliance
3280 /////////////////////////////////////////////////////////////////////////
3281 -->
3282
3283 <interface
3284 name="IAppliance" extends="$unknown"
3285 uuid="e3ba9ab9-ac2c-4266-8bd2-91c4bf721ceb"
3286 wsmap="managed"
3287 >
3288 <desc>
3289 Represents a platform-independent appliance in OVF format. An instance of this is returned
3290 by <link to="IVirtualBox::createAppliance" />, which can then be used to import and export
3291 virtual machines within an appliance with VirtualBox.
3292
3293 The OVF standard suggests two different physical file formats:
3294
3295 <ol>
3296 <li>If the appliance is distributed as a set of files, there must be at least one XML descriptor
3297 file that conforms to the OVF standard and carries an <tt>.ovf</tt> file extension. If
3298 this descriptor file references other files such as disk images, as OVF appliances typically
3299 do, those additional files must be in the same directory as the descriptor file.</li>
3300
3301 <li>If the appliance is distributed as a single file, it must be in TAR format and have the
3302 <tt>.ova</tt> file extension. This TAR file must then contain at least the OVF descriptor
3303 files and optionally other files.
3304
3305 At this time, VirtualBox does not not yet support the packed (TAR) variant; support will
3306 be added with a later version.</li>
3307 </ol>
3308
3309 <b>Importing</b> an OVF appliance into VirtualBox as instances of
3310 <link to="IMachine" /> involves the following sequence of API calls:
3311
3312 <ol>
3313 <li>Call <link to="IVirtualBox::createAppliance" />. This will create an empty IAppliance object.
3314 </li>
3315
3316 <li>On the new object, call <link to="#read" /> with the full path of the OVF file you
3317 would like to import. So long as this file is syntactically valid, this will succeed
3318 and return an instance of IAppliance that contains the parsed data from the OVF file.
3319 </li>
3320
3321 <li>Next, call <link to="#interpret" />, which analyzes the OVF data and sets up the
3322 contents of the IAppliance attributes accordingly. These can be inspected by a
3323 VirtualBox front-end such as the GUI, and the suggestions can be displayed to the
3324 user. In particular, the <link to="#virtualSystemDescriptions" /> array contains
3325 instances of <link to="IVirtualSystemDescription" /> which represent the virtual
3326 systems in the OVF, which in turn describe the virtual hardware prescribed by the
3327 OVF (network and hardware adapters, virtual disk images, memory size and so on).
3328 The GUI can then give the user the option to confirm and/or change these suggestions.
3329 </li>
3330
3331 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
3332 virtual system to override the suggestions made by the interpret() routine.
3333 </li>
3334
3335 <li>Finally, call <link to="#importMachines" /> to create virtual machines in
3336 VirtualBox as instances of <link to="IMachine" /> that match the information in the
3337 virtual system descriptions.
3338 </li>
3339 </ol>
3340
3341 <b>Exporting</b> VirtualBox machines into an OVF appliance involves the following steps:
3342
3343 <ol>
3344 <li>As with importing, first call <link to="IVirtualBox::createAppliance" /> to create
3345 an empty IAppliance object.
3346 </li>
3347
3348 <li>For each machine you would like to export, call <link to="IMachine::export" />
3349 with the IAppliance object you just created. This creates an instance of
3350 <link to="IVirtualSystemDescription" /> inside the appliance.
3351 </li>
3352
3353 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
3354 virtual system to override the suggestions made by the export() routine.
3355 </li>
3356
3357 <li>Finally, call <link to="#write" /> with a path specification to have the OVF
3358 file written.</li>
3359 </ol>
3360
3361 </desc>
3362
3363 <attribute name="path" type="wstring" readonly="yes">
3364 <desc>Path to the main file of the OVF appliance, which is either the <tt>.ovf</tt> or
3365 the <tt>.ova</tt> file passed to <link to="#read" /> (for import) or
3366 <link to="#write" /> (for export).
3367 This attribute is empty until one of these methods has been called.
3368 </desc>
3369 </attribute>
3370
3371 <attribute name="disks" type="wstring" readonly="yes" safearray="yes">
3372 <desc>
3373 Array of virtual disk definitions. One such description exists for each
3374 disk definition in the OVF; each string array item represents one such piece of
3375 disk information, with the information fields separated by tab (\t) characters.
3376
3377 The caller should be prepared for additional fields being appended to
3378 this string in future versions of VirtualBox and therefore check for
3379 the number of tabs in the strings returned.
3380
3381 In the current version, the following eight fields are returned per string
3382 in the array:
3383
3384 <ol>
3385 <li>Disk ID (unique string identifier given to disk)</li>
3386
3387 <li>Capacity (unsigned integer indicating the maximum capacity of the disk)</li>
3388
3389 <li>Populated size (optional unsigned integer indicating the current size of the
3390 disk; can be approximate; -1 if unspecified)</li>
3391
3392 <li>Format (string identifying the disk format, typically
3393 "http://www.vmware.com/specifications/vmdk.html#sparse")</li>
3394
3395 <li>Reference (where to find the disk image, typically a file name; if empty,
3396 then the disk should be created on import)</li>
3397
3398 <li>Image size (optional unsigned integer indicating the size of the image,
3399 which need not necessarily be the same as the values specified above, since
3400 the image may be compressed or sparse; -1 if not specified)</li>
3401
3402 <li>Chunk size (optional unsigned integer if the image is split into chunks;
3403 presently unsupported and always -1)</li>
3404
3405 <li>Compression (optional string equalling "gzip" if the image is gzip-compressed)</li>
3406 </ol>
3407 </desc>
3408 </attribute>
3409
3410 <attribute name="virtualSystemDescriptions" type="IVirtualSystemDescription" readonly="yes" safearray="yes">
3411 <desc> Array of virtual system descriptions. One such description is created
3412 for each virtual system found in the OVF.
3413 This array is empty until either <link to="#interpret" /> (for import) or <link to="IMachine::export" />
3414 (for export) has been called.
3415 </desc>
3416 </attribute>
3417
3418 <method name="read">
3419 <desc>
3420 Reads an OVF file into the appliance object.
3421
3422 This method succeeds if the OVF is syntactically valid and, by itself, without errors. The
3423 mere fact that this method returns successfully does not mean that VirtualBox supports all
3424 features requested by the appliance; this can only be examined after a call to <link to="#interpret" />.
3425 </desc>
3426 <param name="file" type="wstring" dir="in">
3427 <desc>
3428 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3429 on whether the appliance is distributed as a set of files or as a single file, respectively).
3430 </desc>
3431 </param>
3432 <param name="aProgress" type="IProgress" dir="return">
3433 <desc></desc>
3434 </param>
3435 </method>
3436
3437 <method name="interpret">
3438 <desc>
3439 Interprets the OVF data that was read when the appliance was constructed. After
3440 calling this method, one can inspect the
3441 <link to="#virtualSystemDescriptions" /> array attribute, which will then contain
3442 one <link to="IVirtualSystemDescription" /> for each virtual machine found in
3443 the appliance.
3444
3445 Calling this method is the second step of importing an appliance into VirtualBox;
3446 see <link to="IAppliance" /> for an overview.
3447
3448 After calling this method, one should call <link to="#getWarnings" /> to find out
3449 if problems were encountered during the processing which might later lead to
3450 errors.
3451 </desc>
3452 </method>
3453
3454 <method name="importMachines">
3455 <desc>
3456 Imports the appliance into VirtualBox by creating instances of <link to="IMachine" />
3457 and other interfaces that match the information contained in the appliance as
3458 closely as possible, as represented by the import instructions in the
3459 <link to="#virtualSystemDescriptions" /> array.
3460
3461 Calling this method is the final step of importing an appliance into VirtualBox;
3462 see <link to="IAppliance" /> for an overview.
3463
3464 Since importing the appliance will most probably involve copying and converting
3465 disk images, which can take a long time, this method operates asynchronously and
3466 returns an IProgress object to allow the caller to monitor the progress.
3467 </desc>
3468
3469 <param name="aProgress" type="IProgress" dir="return">
3470 <desc></desc>
3471 </param>
3472 </method>
3473
3474 <method name="createVFSExplorer">
3475 <desc>Returns a <link to="IVFSExplorer" /> object for the given URI.</desc>
3476
3477 <param name="aUri" type="wstring" dir="in">
3478 <desc>The URI describing the file system to use.</desc>
3479 </param>
3480
3481 <param name="aExplorer" type="IVFSExplorer" dir="return">
3482 <desc></desc>
3483 </param>
3484 </method>
3485
3486 <method name="write">
3487 <desc>
3488 Writes the contents of the appliance exports into a new OVF file.
3489
3490 Calling this method is the final step of exporting an appliance from VirtualBox;
3491 see <link to="IAppliance" /> for an overview.
3492
3493 Since exporting the appliance will most probably involve copying and converting
3494 disk images, which can take a long time, this method operates asynchronously and
3495 returns an IProgress object to allow the caller to monitor the progress.
3496 </desc>
3497 <param name="format" type="wstring" dir="in">
3498 <desc>
3499 Output format, as a string. Currently supported formats are "ovf-0.9" and "ovf-1.0";
3500 future versions of VirtualBox may support additional formats.
3501 </desc>
3502 </param>
3503 <param name="path" type="wstring" dir="in">
3504 <desc>
3505 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3506 on whether the appliance is distributed as a set of files or as a single file, respectively).
3507 </desc>
3508 </param>
3509 <param name="aProgress" type="IProgress" dir="return">
3510 <desc>Progress object to track the operation completion.</desc>
3511 </param>
3512 </method>
3513
3514 <method name="getWarnings">
3515 <desc>Returns textual warnings which occured during execution of <link to="#interpret" />.</desc>
3516
3517 <param name="aWarnings" type="wstring" dir="return" safearray="yes">
3518 <desc></desc>
3519 </param>
3520 </method>
3521
3522 </interface>
3523
3524 <enum
3525 name="VirtualSystemDescriptionType"
3526 uuid="aacc58de-5b45-4f82-ae2e-dd9a824fc3b5"
3527 >
3528 <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
3529 a configuration value.</desc>
3530
3531 <const name="Ignore" value="1" />
3532 <const name="OS" value="2" />
3533 <const name="Name" value="3" />
3534 <const name="Product" value="4" />
3535 <const name="Vendor" value="5" />
3536 <const name="Version" value="6" />
3537 <const name="ProductUrl" value="7" />
3538 <const name="VendorUrl" value="8" />
3539 <const name="Description" value="9" />
3540 <const name="License" value="10" />
3541 <const name="Miscellaneous" value="11" />
3542 <const name="CPU" value="12" />
3543 <const name="Memory" value="13" />
3544 <const name="HardDiskControllerIDE" value="14" />
3545 <const name="HardDiskControllerSATA" value="15" />
3546 <const name="HardDiskControllerSCSI" value="16" />
3547 <const name="HardDiskImage" value="17" />
3548 <const name="Floppy" value="18" />
3549 <const name="CDROM" value="19" />
3550 <const name="NetworkAdapter" value="20" />
3551 <const name="USBController" value="21" />
3552 <const name="SoundCard" value="22" />
3553
3554 </enum>
3555
3556 <enum
3557 name="VirtualSystemDescriptionValueType"
3558 uuid="56d9403f-3425-4118-9919-36f2a9b8c77c"
3559 >
3560 <desc>Used with <link to="IVirtualSystemDescription::getValuesByType" /> to describe the value
3561 type to fetch.</desc>
3562
3563 <const name="Reference" value="1" />
3564 <const name="Original" value="2" />
3565 <const name="Auto" value="3" />
3566 <const name="ExtraConfig" value="4" />
3567
3568 </enum>
3569
3570 <interface
3571 name="IVirtualSystemDescription" extends="$unknown"
3572 uuid="d7525e6c-531a-4c51-8e04-41235083a3d8"
3573 wsmap="managed"
3574 >
3575
3576 <desc>This interface is used in the <link to="IAppliance::virtualSystemDescriptions" /> array.
3577 After <link to="IAppliance::interpret" /> has been called, that array contains
3578 information about how the virtual systems described in the OVF should best be imported into VirtualBox
3579 virtual machines. See <link to="IAppliance" /> for the steps required to import an OVF
3580 into VirtualBox.
3581 </desc>
3582
3583 <attribute name="count" type="unsigned long" readonly="yes">
3584 <desc>Return the number of virtual system description entries.</desc>
3585 </attribute>
3586
3587 <method name="getDescription">
3588 <desc>Returns information about the virtual system as arrays of instruction items. In each array, the
3589 items with the same indices correspond and jointly represent an import instruction for VirtualBox.
3590
3591 The list below identifies the value sets that are possible depending on the
3592 <link to="VirtualSystemDescriptionType" /> enum value in the array item in aTypes[]. In each case,
3593 the array item with the same index in aOvfValues[] will contain the original value as contained
3594 in the OVF file (just for informational purposes), and the corresponding item in aVBoxValues[]
3595 will contain a suggested value to be used for VirtualBox. Depending on the description type,
3596 the aExtraConfigValues[] array item may also be used.
3597
3598 <ul>
3599 <li>
3600 "OS": the guest operating system type. There must be exactly one such array item on import. The
3601 corresponding item in aVBoxValues[] contains the suggested guest operating system for VirtualBox.
3602 This will be one of the values listed in <link to="IVirtualBox::guestOSTypes" />. The corresponding
3603 item in aOvfValues[] will contain a numerical value that described the operating system in the OVF.
3604 </li>
3605 <li>
3606 "Name": the name to give to the new virtual machine. There can be at most one such array item;
3607 if none is present on import, then an automatic name will be created from the operating system
3608 type. The correponding item im aOvfValues[] will contain the suggested virtual machine name
3609 from the OVF file, and aVBoxValues[] will contain a suggestion for a unique VirtualBox
3610 <link to="IMachine" /> name that does not exist yet.
3611 </li>
3612 <li>
3613 "Description": an arbitrary description.
3614 </li>
3615 <li>
3616 "License": the EULA section from the OVF, if present. It is the responsibility of the calling
3617 code to display such a license for agreement; the Main API does not enforce any such policy.
3618 </li>
3619 <li>
3620 Miscellaneous: reserved for future use.
3621 </li>
3622 <li>
3623 "CPU": the number of CPUs. There can be at most one such item, which will presently be ignored.
3624 </li>
3625 <li>
3626 "Memory": the amount of guest RAM, in bytes. There can be at most one such array item; if none
3627 is present on import, then VirtualBox will set a meaningful default based on the operating system
3628 type.
3629 </li>
3630 <li>
3631 "HarddiskControllerIDE": an IDE hard disk controller. There can be at most one such item. This
3632 has no value in aOvfValues[] or aVBoxValues[].
3633 The matching item in the aRefs[] array will contain an integer that items of the "Harddisk"
3634 type can use to specify which hard disk controller a virtual disk should be connected to.
3635 </li>
3636 <li>
3637 "HarddiskControllerSATA": an SATA hard disk controller. There can be at most one such item. This
3638 has no value in aOvfValues[] or aVBoxValues[].
3639 The matching item in the aRefs[] array will be used as with IDE controllers (see above).
3640 </li>
3641 <li>
3642 "HarddiskControllerSCSI": a SCSI hard disk controller. There can be at most one such item.
3643 The items in aOvfValues[] and aVBoxValues[] will either be "LsiLogic" or "BusLogic".
3644 The matching item in the aRefs[] array will be used as with IDE controllers (see above).
3645 </li>
3646 <li>
3647 "HardDiskImage": a virtual hard disk, most probably as a reference to an image file. There can be an
3648 arbitrary number of these items, one for each virtual disk image that accompanies the OVF.
3649
3650 The array item in aOvfValues[] will contain the file specification from the OVF file (without
3651 a path since the image file should be in the same location as the OVF file itself), whereas the
3652 item in aVBoxValues[] will contain a qualified path specification to where VirtualBox uses the
3653 hard disk image. This means that on import the image will be copied and converted from the
3654 "ovf" location to the "vbox" location; on export, this will be handled the other way round.
3655 On import, the target image will also be registered with VirtualBox.
3656
3657 The matching item in the aExtraConfigValues[] array must contain a string of the following
3658 format: "controller=&lt;index&gt;;channel=&lt;c&gt;"
3659 In this string, &lt;index&gt; must be an integer specifying the hard disk controller to connect
3660 the image to. That number must be the index of an array item with one of the hard disk controller
3661 types (HarddiskControllerSCSI, HarddiskControllerSATA, HarddiskControllerIDE).
3662 In addition, &lt;c&gt; must specify the channel to use on that controller. For IDE controllers,
3663 this can range from 0-3 (which VirtualBox will interpret as primary master, primary slave, secondary master and
3664 secondary slave. For SATA and SCSI controllers, the channel can range from 0-29.
3665 </li>
3666 <li>
3667 "CDROM": a virtual CD-ROM drive. The matching item in aExtraConfigValue[] contains the same
3668 attachment information as with "HardDiskImage" items.
3669 </li>
3670 <li>
3671 "CDROM": a virtual floppy drive. The matching item in aExtraConfigValue[] contains the same
3672 attachment information as with "HardDiskImage" items.
3673 </li>
3674 <li>
3675 "NetworkAdapter": a network adapter. The array item in aVBoxValues[] will specify the hardware
3676 for the network adapter, whereas the array item in aExtraConfigValues[] will have a string
3677 of the "type=&lt;X&gt;" format, where &lt;X&gt; must be either "NAT" or "Bridged".
3678 </li>
3679 <li>
3680 "USBController": a USB controller. There can be at most one such item. If and only if such an
3681 item ispresent, USB support will be enabled for the new virtual machine.
3682 </li>
3683 <li>
3684 "SoundCard": a sound card. There can be at most one such item. If and only if such an item is
3685 present, sound support will be enabled for the new virtual machine. Note that the virtual
3686 machine in VirtualBox will always be presented with the standard VirtualBox soundcard, which
3687 may be different from the virtual soundcard expected by the appliance.
3688 </li>
3689 </ul>
3690
3691 </desc>
3692
3693 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3694 <desc></desc>
3695 </param>
3696
3697 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3698 <desc></desc>
3699 </param>
3700
3701 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3702 <desc></desc>
3703 </param>
3704
3705 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3706 <desc></desc>
3707 </param>
3708
3709 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3710 <desc></desc>
3711 </param>
3712
3713 </method>
3714
3715 <method name="getDescriptionByType">
3716 <desc>This is the same as <link to="#getDescription" /> except that you can specify which types
3717 should be returned.</desc>
3718
3719 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3720 <desc></desc>
3721 </param>
3722
3723 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3724 <desc></desc>
3725 </param>
3726
3727 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3728 <desc></desc>
3729 </param>
3730
3731 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3732 <desc></desc>
3733 </param>
3734
3735 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3736 <desc></desc>
3737 </param>
3738
3739 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3740 <desc></desc>
3741 </param>
3742
3743 </method>
3744
3745 <method name="getValuesByType">
3746 <desc>This is the same as <link to="#getDescriptionByType" /> except that you can specify which
3747 value types should be returned. See <link to="VirtualSystemDescriptionValueType" /> for possible
3748 values.</desc>
3749
3750 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3751 <desc></desc>
3752 </param>
3753
3754 <param name="aWhich" type="VirtualSystemDescriptionValueType" dir="in">
3755 <desc></desc>
3756 </param>
3757
3758 <param name="aValues" type="wstring" dir="return" safearray="yes">
3759 <desc></desc>
3760 </param>
3761
3762 </method>
3763
3764 <method name="setFinalValues">
3765 <desc>
3766 This method allows the appliance's user to change the configuration for the virtual
3767 system descriptions. For each array item returned from <link to="#getDescription" />,
3768 you must pass in one boolean value and one configuration value.
3769
3770 Each item in the boolean array determines whether the particular configuration item
3771 should be enabled.
3772 You can only disable items of the types HardDiskControllerIDE, HardDiskControllerSATA,
3773 HardDiskControllerSCSI, HardDiskImage, CDROM, Floppy, NetworkAdapter, USBController
3774 and SoundCard.
3775
3776 For the "vbox" and "extra configuration" values, if you pass in the same arrays
3777 as returned in the aVBoxValues and aExtraConfigValues arrays from getDescription(),
3778 the configuration remains unchanged. Please see the documentation for getDescription()
3779 for valid configuration values for the individual array item types. If the
3780 corresponding item in the aEnabled array is @c false, the configuration value is ignored.
3781 </desc>
3782
3783 <param name="aEnabled" type="boolean" dir="in" safearray="yes">
3784 <desc></desc>
3785 </param>
3786
3787 <param name="aVBoxValues" type="wstring" dir="in" safearray="yes">
3788 <desc></desc>
3789 </param>
3790
3791 <param name="aExtraConfigValues" type="wstring" dir="in" safearray="yes">
3792 <desc></desc>
3793 </param>
3794 </method>
3795
3796 <method name="addDescription">
3797 <desc>
3798 This method adds an additional description entry to the stack of already
3799 available descriptions for this virtual system. This is handy for writing
3800 values which aren't directly supported by VirtualBox. One example would
3801 be the License type of <link to="VirtualSystemDescriptionType" />.
3802 </desc>
3803
3804 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3805 <desc></desc>
3806 </param>
3807
3808 <param name="aVBoxValue" type="wstring" dir="in">
3809 <desc></desc>
3810 </param>
3811
3812 <param name="aExtraConfigValue" type="wstring" dir="in">
3813 <desc></desc>
3814 </param>
3815 </method>
3816 </interface>
3817
3818
3819 <!--
3820 // IMachine
3821 /////////////////////////////////////////////////////////////////////////
3822 -->
3823
3824 <interface
3825 name="IInternalMachineControl" extends="$unknown"
3826 uuid="35d8d838-d066-447d-927a-fd93afdbec90"
3827 internal="yes"
3828 wsmap="suppress"
3829 >
3830 <method name="setRemoveSavedState">
3831 <desc>
3832 Updates the flag whether saved state is removed on a machine state
3833 change from Saved to PoweredOff.
3834 </desc>
3835 <param name="aRemove" type="boolean" dir="in"/>
3836 </method>
3837
3838 <method name="updateState">
3839 <desc>
3840 Updates the VM state.
3841 <note>
3842 This operation will also update the settings file with
3843 the correct information about the saved state file
3844 and delete this file from disk when appropriate.
3845 </note>
3846 </desc>
3847 <param name="state" type="MachineState" dir="in"/>
3848 </method>
3849
3850 <method name="getIPCId">
3851 <param name="id" type="wstring" dir="return"/>
3852 </method>
3853
3854 <method name="setPowerUpInfo">
3855 <desc>
3856 Transfers success (@c null) or error information for this session.
3857 This method updates the progress object to signal completion of the
3858 <link to="IVirtualBox::openRemoteSession"/> method if appropriate,
3859 which means that the progress object returned by
3860 <link to="IConsole::powerUp"/>.
3861 </desc>
3862 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
3863 </method>
3864
3865 <method name="runUSBDeviceFilters">
3866 <desc>
3867 Asks the server to run USB devices filters of the associated
3868 machine against the given USB device and tell if there is
3869 a match.
3870 <note>
3871 Intended to be used only for remote USB devices. Local
3872 ones don't require to call this method (this is done
3873 implicitly by the Host and USBProxyService).
3874 </note>
3875 </desc>
3876 <param name="device" type="IUSBDevice" dir="in"/>
3877 <param name="matched" type="boolean" dir="out"/>
3878 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
3879 </method>
3880
3881 <method name="captureUSBDevice">
3882 <desc>
3883 Requests a capture of the given host USB device.
3884 When the request is completed, the VM process will
3885 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3886 notification.
3887 </desc>
3888 <param name="id" type="uuid" mod="string" dir="in"/>
3889 </method>
3890
3891 <method name="detachUSBDevice">
3892 <desc>
3893 Notification that a VM is going to detach (@a done = @c false) or has
3894 already detached (@a done = @c true) the given USB device.
3895 When the @a done = @c true request is completed, the VM process will
3896 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
3897 notification.
3898 <note>
3899 In the @a done = @c true case, the server must run its own filters
3900 and filters of all VMs but this one on the detached device
3901 as if it were just attached to the host computer.
3902 </note>
3903 </desc>
3904 <param name="id" type="uuid" mod="string" dir="in"/>
3905 <param name="done" type="boolean" dir="in"/>
3906 </method>
3907
3908 <method name="autoCaptureUSBDevices">
3909 <desc>
3910 Requests a capture all matching USB devices attached to the host.
3911 When the request is completed, the VM process will
3912 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3913 notification per every captured device.
3914 </desc>
3915 </method>
3916
3917 <method name="detachAllUSBDevices">
3918 <desc>
3919 Notification that a VM that is being powered down. The done
3920 parameter indicates whether which stage of the power down
3921 we're at. When @a done = @c false the VM is announcing its
3922 intentions, while when @a done = @c true the VM is reporting
3923 what it has done.
3924 <note>
3925 In the @a done = @c true case, the server must run its own filters
3926 and filters of all VMs but this one on all detach devices as
3927 if they were just attached to the host computer.
3928 </note>
3929 </desc>
3930 <param name="done" type="boolean" dir="in"/>
3931 </method>
3932
3933 <method name="onSessionEnd">
3934 <desc>
3935 Triggered by the given session object when the session is about
3936 to close normally.
3937 </desc>
3938 <param name="session" type="ISession" dir="in">
3939 <desc>Session that is being closed</desc>
3940 </param>
3941 <param name="progress" type="IProgress" dir="return">
3942 <desc>
3943 Used to wait until the corresponding machine is actually
3944 dissociated from the given session on the server.
3945 Returned only when this session is a direct one.
3946 </desc>
3947 </param>
3948 </method>
3949
3950 <method name="beginSavingState">
3951 <desc>
3952 Called by the VM process to inform the server it wants to
3953 save the current state and stop the VM execution.
3954 </desc>
3955 <param name="progress" type="IProgress" dir="in">
3956 <desc>
3957 Progress object created by the VM process to wait until
3958 the state is saved.
3959 </desc>
3960 </param>
3961 <param name="stateFilePath" type="wstring" dir="out">
3962 <desc>
3963 File path the VM process must save the execution state to.
3964 </desc>
3965 </param>
3966 </method>
3967
3968 <method name="endSavingState">
3969 <desc>
3970 Called by the VM process to inform the server that saving
3971 the state previously requested by #beginSavingState is either
3972 successfully finished or there was a failure.
3973
3974 <result name="VBOX_E_FILE_ERROR">
3975 Settings file not accessible.
3976 </result>
3977 <result name="VBOX_E_XML_ERROR">
3978 Could not parse the settings file.
3979 </result>
3980
3981 </desc>
3982
3983 <param name="success" type="boolean" dir="in">
3984 <desc>@c true to indicate success and @c false otherwise.
3985 </desc>
3986 </param>
3987 </method>
3988
3989 <method name="adoptSavedState">
3990 <desc>
3991 Gets called by IConsole::adoptSavedState.
3992 <result name="VBOX_E_FILE_ERROR">
3993 Invalid saved state file path.
3994 </result>
3995 </desc>
3996 <param name="savedStateFile" type="wstring" dir="in">
3997 <desc>Path to the saved state file to adopt.</desc>
3998 </param>
3999 </method>
4000
4001 <method name="beginTakingSnapshot">
4002 <desc>
4003 Called from the VM process to request from the server to perform the
4004 server-side actions of creating a snapshot (creating differencing images
4005 and the snapshot object).
4006
4007 <result name="VBOX_E_FILE_ERROR">
4008 Settings file not accessible.
4009 </result>
4010 <result name="VBOX_E_XML_ERROR">
4011 Could not parse the settings file.
4012 </result>
4013 </desc>
4014 <param name="initiator" type="IConsole" dir="in">
4015 <desc>The console object that initiated this call.</desc>
4016 </param>
4017 <param name="name" type="wstring" dir="in">
4018 <desc>Snapshot name.</desc>
4019 </param>
4020 <param name="description" type="wstring" dir="in">
4021 <desc>Snapshot description.</desc>
4022 </param>
4023 <param name="consoleProgress" type="IProgress" dir="in">
4024 <desc>
4025 Progress object created by the VM process tracking the
4026 snapshot's progress. This has the following sub-operations:
4027 <ul>
4028 <li>setting up (weight 1);</li>
4029 <li>one for each medium attachment that needs a differencing image (weight 1 each);</li>
4030 <li>another one to copy the VM state (if offline with saved state, weight is VM memory size in MB);</li>
4031 <li>another one to save the VM state (if online, weight is VM memory size in MB);</li>
4032 <li>finishing up (weight 1)</li>
4033 </ul>
4034 </desc>
4035 </param>
4036 <param name="fTakingSnapshotOnline" type="boolean" dir="in">
4037 <desc>
4038 Whether this is an online snapshot (i.e. the machine is running).
4039 </desc>
4040 </param>
4041 <param name="stateFilePath" type="wstring" dir="out">
4042 <desc>
4043 File path the VM process must save the execution state to.
4044 </desc>
4045 </param>
4046 </method>
4047
4048 <method name="endTakingSnapshot">
4049 <desc>
4050 Called by the VM process to inform the server that the snapshot
4051 previously requested by #beginTakingSnapshot is either
4052 successfully taken or there was a failure.
4053 </desc>
4054
4055 <param name="success" type="boolean" dir="in">
4056 <desc>@c true to indicate success and @c false otherwise</desc>
4057 </param>
4058 </method>
4059
4060 <method name="deleteSnapshot">
4061 <desc>
4062 Gets called by IConsole::deleteSnapshot.
4063 <result name="VBOX_E_INVALID_OBJECT_STATE">
4064 Snapshot has more than one child snapshot.
4065 </result>
4066 </desc>
4067 <param name="initiator" type="IConsole" dir="in">
4068 <desc>The console object that initiated this call.</desc>
4069 </param>
4070 <param name="id" type="uuid" mod="string" dir="in">
4071 <desc>UUID of the snapshot to discard.</desc>
4072 </param>
4073 <param name="machineState" type="MachineState" dir="out">
4074 <desc>New machine state after this operation is started.</desc>
4075 </param>
4076 <param name="progress" type="IProgress" dir="return">
4077 <desc>Progress object to track the operation completion.</desc>
4078 </param>
4079 </method>
4080
4081 <method name="restoreSnapshot">
4082 <desc>
4083 Gets called by IConsole::RestoreSnapshot.
4084 </desc>
4085 <param name="initiator" type="IConsole" dir="in">
4086 <desc>The console object that initiated this call.</desc>
4087 </param>
4088 <param name="snapshot" type="ISnapshot" dir="in">
4089 <desc>The snapshot to restore the VM state from.</desc>
4090 </param>
4091 <param name="machineState" type="MachineState" dir="out">
4092 <desc>New machine state after this operation is started.</desc>
4093 </param>
4094 <param name="progress" type="IProgress" dir="return">
4095 <desc>Progress object to track the operation completion.</desc>
4096 </param>
4097 </method>
4098
4099 <method name="pullGuestProperties">
4100 <desc>
4101 Get the list of the guest properties matching a set of patterns along
4102 with their values, time stamps and flags and give responsibility for
4103 managing properties to the console.
4104 </desc>
4105 <param name="name" type="wstring" dir="out" safearray="yes">
4106 <desc>
4107 The names of the properties returned.
4108 </desc>
4109 </param>
4110 <param name="value" type="wstring" dir="out" safearray="yes">
4111 <desc>
4112 The values of the properties returned. The array entries match the
4113 corresponding entries in the @a name array.
4114 </desc>
4115 </param>
4116 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
4117 <desc>
4118 The time stamps of the properties returned. The array entries match
4119 the corresponding entries in the @a name array.
4120 </desc>
4121 </param>
4122 <param name="flags" type="wstring" dir="out" safearray="yes">
4123 <desc>
4124 The flags of the properties returned. The array entries match the
4125 corresponding entries in the @a name array.
4126 </desc>
4127 </param>
4128 </method>
4129
4130 <method name="pushGuestProperties">
4131 <desc>
4132 Set the list of the guest properties matching a set of patterns along
4133 with their values, time stamps and flags and return responsibility for
4134 managing properties to IMachine.
4135 </desc>
4136 <param name="name" type="wstring" dir="in" safearray="yes">
4137 <desc>
4138 The names of the properties.
4139 </desc>
4140 </param>
4141 <param name="value" type="wstring" dir="in" safearray="yes">
4142 <desc>
4143 The values of the properties. The array entries match the
4144 corresponding entries in the @a name array.
4145 </desc>
4146 </param>
4147 <param name="timestamp" type="unsigned long long" dir="in" safearray="yes">
4148 <desc>
4149 The time stamps of the properties. The array entries match
4150 the corresponding entries in the @a name array.
4151 </desc>
4152 </param>
4153 <param name="flags" type="wstring" dir="in" safearray="yes">
4154 <desc>
4155 The flags of the properties. The array entries match the
4156 corresponding entries in the @a name array.
4157 </desc>
4158 </param>
4159 </method>
4160 <method name="pushGuestProperty">
4161 <desc>
4162 Update a single guest property in IMachine.
4163 </desc>
4164 <param name="name" type="wstring" dir="in">
4165 <desc>
4166 The name of the property to be updated.
4167 </desc>
4168 </param>
4169 <param name="value" type="wstring" dir="in">
4170 <desc>
4171 The value of the property.
4172 </desc>
4173 </param>
4174 <param name="timestamp" type="unsigned long long" dir="in">
4175 <desc>
4176 The timestamp of the property.
4177 </desc>
4178 </param>
4179 <param name="flags" type="wstring" dir="in">
4180 <desc>
4181 The flags of the property.
4182 </desc>
4183 </param>
4184 </method>
4185
4186 <method name="lockMedia">
4187 <desc>
4188 Locks all media attached to the machine for writing and parents of
4189 attached differencing media (if any) for reading. This operation is
4190 atomic so that if it fails no media is actually locked.
4191
4192 This method is intended to be called when the machine is in Starting or
4193 Restoring state. The locked media will be automatically unlocked when
4194 the machine is powered off or crashed.
4195 </desc>
4196 </method>
4197 <method name="unlockMedia">
4198 <desc>
4199 Unlocks all media previously locked using
4200 <link to="IInternalMachineControl::lockMedia"/>.
4201
4202 This method is intended to be used with teleportation so that it is
4203 possible to teleport between processes on the same machine.
4204 </desc>
4205 </method>
4206 </interface>
4207
4208 <interface
4209 name="IBIOSSettings" extends="$unknown"
4210 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
4211 wsmap="managed"
4212 >
4213 <desc>
4214 The IBIOSSettings interface represents BIOS settings of the virtual
4215 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
4216 </desc>
4217 <attribute name="logoFadeIn" type="boolean">
4218 <desc>Fade in flag for BIOS logo animation.</desc>
4219 </attribute>
4220
4221 <attribute name="logoFadeOut" type="boolean">
4222 <desc>Fade out flag for BIOS logo animation.</desc>
4223 </attribute>
4224
4225 <attribute name="logoDisplayTime" type="unsigned long">
4226 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
4227 </attribute>
4228
4229 <attribute name="logoImagePath" type="wstring">
4230 <desc>
4231 Local file system path for external BIOS splash image. Empty string
4232 means the default image is shown on boot.
4233 </desc>
4234 </attribute>
4235
4236 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
4237 <desc>Mode of the BIOS boot device menu.</desc>
4238 </attribute>
4239
4240 <attribute name="ACPIEnabled" type="boolean">
4241 <desc>ACPI support flag.</desc>
4242 </attribute>
4243
4244 <attribute name="IOAPICEnabled" type="boolean">
4245 <desc>
4246 IO APIC support flag. If set, VirtualBox will provide an IO APIC
4247 and support IRQs above 15.
4248 </desc>
4249 </attribute>
4250
4251 <attribute name="timeOffset" type="long long">
4252 <desc>
4253 Offset in milliseconds from the host system time. This allows for
4254 guests running with a different system date/time than the host.
4255 It is equivalent to setting the system date/time in the BIOS except
4256 it is not an absolute value but a relative one. Guest Additions
4257 time synchronization honors this offset.
4258 </desc>
4259 </attribute>
4260
4261 <attribute name="PXEDebugEnabled" type="boolean">
4262 <desc>
4263 PXE debug logging flag. If set, VirtualBox will write extensive
4264 PXE trace information to the release log.
4265 </desc>
4266 </attribute>
4267
4268 </interface>
4269
4270 <interface
4271 name="IMachine" extends="$unknown"
4272 uuid="07862b34-c068-4667-be7d-1d722f496f20"
4273 wsmap="managed"
4274 >
4275 <desc>
4276 The IMachine interface represents a virtual machine, or guest, created
4277 in VirtualBox.
4278
4279 This interface is used in two contexts. First of all, a collection of
4280 objects implementing this interface is stored in the
4281 <link to="IVirtualBox::machines"/> attribute which lists all the virtual
4282 machines that are currently registered with this VirtualBox
4283 installation. Also, once a session has been opened for the given virtual
4284 machine (e.g. the virtual machine is running), the machine object
4285 associated with the open session can be queried from the session object;
4286 see <link to="ISession"/> for details.
4287
4288 The main role of this interface is to expose the settings of the virtual
4289 machine and provide methods to change various aspects of the virtual
4290 machine's configuration. For machine objects stored in the
4291 <link to="IVirtualBox::machines"/> collection, all attributes are
4292 read-only unless explicitly stated otherwise in individual attribute
4293 and method descriptions. In order to change a machine setting, a session
4294 for this machine must be opened using one of
4295 <link to="IVirtualBox::openSession"/>,
4296 <link to="IVirtualBox::openRemoteSession"/> or
4297 <link to="IVirtualBox::openExistingSession"/> methods. After the
4298 session has been successfully opened, a mutable machine object needs to
4299 be queried from the session object and then the desired settings changes
4300 can be applied to the returned object using IMachine attributes and
4301 methods. See the <link to="ISession"/> interface description for more
4302 information about sessions.
4303
4304 Note that IMachine does not provide methods to control virtual machine
4305 execution (such as start the machine, or power it down) -- these methods
4306 are grouped in a separate interface called <link to="IConsole" />.
4307
4308 <see>ISession, IConsole</see>
4309 </desc>
4310
4311 <attribute name="parent" type="IVirtualBox" readonly="yes">
4312 <desc>Associated parent object.</desc>
4313 </attribute>
4314
4315 <attribute name="accessible" type="boolean" readonly="yes">
4316 <desc>
4317 Whether this virtual machine is currently accessible or not.
4318
4319 A machine is always deemed accessible unless it is registered <i>and</i>
4320 its settings file cannot be read or parsed (either because the file itself
4321 is unavailable or has invalid XML contents).
4322
4323 Every time this property is read, the accessibility state of
4324 this machine is re-evaluated. If the returned value is @c false,
4325 the <link to="#accessError"/> property may be used to get the
4326 detailed error information describing the reason of
4327 inaccessibility, including XML error messages.
4328
4329 When the machine is inaccessible, only the following properties
4330 can be used on it:
4331 <ul>
4332 <li><link to="#parent"/></li>
4333 <li><link to="#id"/></li>
4334 <li><link to="#settingsFilePath"/></li>
4335 <li><link to="#accessible"/></li>
4336 <li><link to="#accessError"/></li>
4337 </ul>
4338
4339 An attempt to access any other property or method will return
4340 an error.
4341
4342 The only possible action you can perform on an inaccessible
4343 machine is to unregister it using the
4344 <link to="IVirtualBox::unregisterMachine"/> call (or, to check
4345 for the accessibility state once more by querying this
4346 property).
4347
4348 <note>
4349 In the current implementation, once this property returns
4350 @c true, the machine will never become inaccessible
4351 later, even if its settings file cannot be successfully
4352 read/written any more (at least, until the VirtualBox
4353 server is restarted). This limitation may be removed in
4354 future releases.
4355 </note>
4356 </desc>
4357 </attribute>
4358
4359 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
4360 <desc>
4361 Error information describing the reason of machine
4362 inaccessibility.
4363
4364 Reading this property is only valid after the last call to
4365 <link to="#accessible"/> returned @c false (i.e. the
4366 machine is currently unaccessible). Otherwise, a @c null
4367 IVirtualBoxErrorInfo object will be returned.
4368 </desc>
4369 </attribute>
4370
4371 <attribute name="name" type="wstring">
4372 <desc>
4373 Name of the virtual machine.
4374
4375 Besides being used for human-readable identification purposes
4376 everywhere in VirtualBox, the virtual machine name is also used
4377 as a name of the machine's settings file and as a name of the
4378 subdirectory this settings file resides in. Thus, every time you
4379 change the value of this property, the settings file will be
4380 renamed once you call <link to="#saveSettings"/> to confirm the
4381 change. The containing subdirectory will be also renamed, but
4382 only if it has exactly the same name as the settings file
4383 itself prior to changing this property (for backward compatibility
4384 with previous API releases). The above implies the following
4385 limitations:
4386 <ul>
4387 <li>The machine name cannot be empty.</li>
4388 <li>The machine name can contain only characters that are valid
4389 file name characters according to the rules of the file
4390 system used to store VirtualBox configuration.</li>
4391 <li>You cannot have two or more machines with the same name
4392 if they use the same subdirectory for storing the machine
4393 settings files.</li>
4394 <li>You cannot change the name of the machine if it is running,
4395 or if any file in the directory containing the settings file
4396 is being used by another running machine or by any other
4397 process in the host operating system at a time when
4398 <link to="#saveSettings"/> is called.
4399 </li>
4400 </ul>
4401 If any of the above limitations are hit, <link to="#saveSettings"/>
4402 will return an appropriate error message explaining the exact
4403 reason and the changes you made to this machine will not be
4404 saved.
4405 <note>
4406 For "legacy" machines created using the
4407 <link to="IVirtualBox::createLegacyMachine"/> call,
4408 the above naming limitations do not apply because the
4409 machine name does not affect the settings file name.
4410 The settings file name remains the same as it was specified
4411 during machine creation and never changes.
4412 </note>
4413 </desc>
4414 </attribute>
4415
4416 <attribute name="description" type="wstring">
4417 <desc>
4418 Description of the virtual machine.
4419
4420 The description attribute can contain any text and is
4421 typically used to describe the hardware and software
4422 configuration of the virtual machine in detail (i.e. network
4423 settings, versions of the installed software and so on).
4424 </desc>
4425 </attribute>
4426
4427 <attribute name="id" type="uuid" mod="string" readonly="yes">
4428 <desc>UUID of the virtual machine.</desc>
4429 </attribute>
4430
4431 <attribute name="OSTypeId" type="wstring">
4432 <desc>
4433 User-defined identifier of the Guest OS type.
4434 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
4435 an IGuestOSType object representing details about the given
4436 Guest OS type.
4437 <note>
4438 This value may differ from the value returned by
4439 <link to="IGuest::OSTypeId"/> if Guest Additions are
4440 installed to the guest OS.
4441 </note>
4442 </desc>
4443 </attribute>
4444
4445 <attribute name="HardwareVersion" type="wstring">
4446 <desc>Hardware version identifier. Internal use only for now.</desc>
4447 </attribute>
4448
4449 <attribute name="hardwareUUID" type="uuid" mod="string">
4450 <desc>
4451 The UUID presented to the guest via memory tables, hardware and guest
4452 properties. For most VMs this is the same as the @a id, but for VMs
4453 which have been cloned or teleported it may be the same as the source
4454 VM. This latter is because the guest shouldn't notice that it was
4455 cloned or teleported.
4456 </desc>
4457 </attribute>
4458
4459 <attribute name="CPUCount" type="unsigned long">
4460 <desc>Number of virtual CPUs in the VM.</desc>
4461 </attribute>
4462
4463 <attribute name="CPUHotPlugEnabled" type="boolean">
4464 <desc>
4465 This setting determines whether VirtualBox allows CPU
4466 hotplugging for this machine.</desc>
4467 </attribute>
4468
4469 <attribute name="memorySize" type="unsigned long">
4470 <desc>System memory size in megabytes.</desc>
4471 </attribute>
4472
4473 <attribute name="memoryBalloonSize" type="unsigned long">
4474 <desc>Initial memory balloon size in megabytes.</desc>
4475 </attribute>
4476
4477 <attribute name="statisticsUpdateInterval" type="unsigned long">
4478 <desc>Initial interval to update guest statistics in seconds.</desc>
4479 </attribute>
4480
4481 <attribute name="VRAMSize" type="unsigned long">
4482 <desc>Video memory size in megabytes.</desc>
4483 </attribute>
4484
4485 <attribute name="accelerate3DEnabled" type="boolean" default="false">
4486 <desc>
4487 This setting determines whether VirtualBox allows this machine to make
4488 use of the 3D graphics support available on the host.</desc>
4489 </attribute>
4490
4491 <attribute name="accelerate2DVideoEnabled" type="boolean" default="false">
4492 <desc>
4493 This setting determines whether VirtualBox allows this machine to make
4494 use of the 2D video acceleration support available on the host.</desc>
4495 </attribute>
4496
4497 <attribute name="monitorCount" type="unsigned long">
4498 <desc>
4499 Number of virtual monitors.
4500 <note>
4501 Only effective on Windows XP and later guests with
4502 Guest Additions installed.
4503 </note>
4504 </desc>
4505 </attribute>
4506
4507 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
4508 <desc>Object containing all BIOS settings.</desc>
4509 </attribute>
4510
4511 <attribute name="firmwareType" type="FirmwareType">
4512 <desc>Type of firmware (such as legacy BIOS or EFI), used for initial
4513 bootstrap in this VM.</desc>
4514 </attribute>
4515
4516 <attribute name="pointingHidType" type="PointingHidType">
4517 <desc>Type of pointing HID (such as mouse or tablet) used in this VM.
4518 The default is typically "PS2Mouse" but can vary depending on the
4519 requirements of the guest operating system.</desc>
4520 </attribute>
4521
4522 <attribute name="keyboardHidType" type="KeyboardHidType">
4523 <desc>Type of keyboard HID used in this VM.
4524 The default is typically "PS2Keyboard" but can vary depending on the
4525 requirements of the guest operating system.</desc>
4526 </attribute>
4527
4528 <attribute name="hpetEnabled" type="boolean">
4529 <desc>This attribute controls if High Precision Event Timer (HPET) is
4530 enabled in this VM. Use this property if you want to provide guests
4531 with additional time source, or if guest requires HPET to function correctly.
4532 Default is false.</desc>
4533 </attribute>
4534
4535 <attribute name="snapshotFolder" type="wstring">
4536 <desc>
4537 Full path to the directory used to store snapshot data
4538 (differencing media and saved state files) of this machine.
4539
4540 The initial value of this property is
4541 <tt>&lt;</tt><link to="#settingsFilePath">
4542 path_to_settings_file</link><tt>&gt;/&lt;</tt>
4543 <link to="#id">machine_uuid</link>
4544 <tt>&gt;</tt>.
4545
4546 Currently, it is an error to try to change this property on
4547 a machine that has snapshots (because this would require to
4548 move possibly large files to a different location).
4549 A separate method will be available for this purpose later.
4550
4551 <note>
4552 Setting this property to @c null or to an empty string will restore
4553 the initial value.
4554 </note>
4555 <note>
4556 When setting this property, the specified path can be
4557 absolute (full path) or relative to the directory where the
4558 <link to="#settingsFilePath">machine settings file</link>
4559 is located. When reading this property, a full path is
4560 always returned.
4561 </note>
4562 <note>
4563 The specified path may not exist, it will be created
4564 when necessary.
4565 </note>
4566 </desc>
4567 </attribute>
4568
4569 <attribute name="VRDPServer" type="IVRDPServer" readonly="yes">
4570 <desc>VRDP server object.</desc>
4571 </attribute>
4572
4573 <attribute name="mediumAttachments" type="IMediumAttachment" readonly="yes" safearray="yes">
4574 <desc>Array of media attached to this machine.</desc>
4575 </attribute>
4576
4577 <attribute name="USBController" type="IUSBController" readonly="yes">
4578 <desc>
4579 Associated USB controller object.
4580
4581 <note>
4582 If USB functionality is not available in the given edition of
4583 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4584 </note>
4585 </desc>
4586 </attribute>
4587
4588 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
4589 <desc>Associated audio adapter, always present.</desc>
4590 </attribute>
4591
4592 <attribute name="storageControllers" type="IStorageController" readonly="yes" safearray="yes">
4593 <desc>Array of storage controllers attached to this machine.</desc>
4594 </attribute>
4595
4596 <attribute name="settingsFilePath" type="wstring" readonly="yes">
4597 <desc>
4598 Full name of the file containing machine settings data.
4599 </desc>
4600 </attribute>
4601
4602 <attribute name="settingsModified" type="boolean" readonly="yes">
4603 <desc>
4604 Whether the settings of this machine have been modified
4605 (but neither yet saved nor discarded).
4606 <note>
4607 Reading this property is only valid on instances returned
4608 by <link to="ISession::machine"/> and on new machines
4609 created by <link to="IVirtualBox::createMachine"/> or opened
4610 by <link to="IVirtualBox::openMachine"/> but not
4611 yet registered, or on unregistered machines after calling
4612 <link to="IVirtualBox::unregisterMachine"/>. For all other
4613 cases, the settings can never be modified.
4614 </note>
4615 <note>
4616 For newly created unregistered machines, the value of this
4617 property is always @c true until <link to="#saveSettings"/>
4618 is called (no matter if any machine settings have been
4619 changed after the creation or not). For opened machines
4620 the value is set to @c false (and then follows to normal rules).
4621 </note>
4622 </desc>
4623 </attribute>
4624
4625 <attribute name="sessionState" type="SessionState" readonly="yes">
4626 <desc>Current session state for this machine.</desc>
4627 </attribute>
4628
4629 <attribute name="sessionType" type="wstring" readonly="yes">
4630 <desc>
4631 Type of the session. If <link to="#sessionState"/> is
4632 SessionSpawning or SessionOpen, this attribute contains the
4633 same value as passed to the
4634 <link to="IVirtualBox::openRemoteSession"/> method in the
4635 @a type parameter. If the session was opened directly using
4636 <link to="IVirtualBox::openSession"/>, or if
4637 <link to="#sessionState"/> is SessionClosed, the value of this
4638 attribute is an empty string.
4639 </desc>
4640 </attribute>
4641
4642 <attribute name="sessionPid" type="unsigned long" readonly="yes">
4643 <desc>
4644 Identifier of the session process. This attribute contains the
4645 platform-dependent identifier of the process that has opened a
4646 direct session for this machine using the
4647 <link to="IVirtualBox::openSession"/> call. The returned value
4648 is only valid if <link to="#sessionState"/> is SessionOpen or
4649 SessionClosing (i.e. a session is currently open or being
4650 closed) by the time this property is read.
4651 </desc>
4652 </attribute>
4653
4654 <attribute name="state" type="MachineState" readonly="yes">
4655 <desc>Current execution state of this machine.</desc>
4656 </attribute>
4657
4658 <attribute name="lastStateChange" type="long long" readonly="yes">
4659 <desc>
4660 Time stamp of the last execution state change,
4661 in milliseconds since 1970-01-01 UTC.
4662 </desc>
4663 </attribute>
4664
4665 <attribute name="stateFilePath" type="wstring" readonly="yes">
4666 <desc>
4667 Full path to the file that stores the execution state of
4668 the machine when it is in the <link to="MachineState_Saved"/> state.
4669 <note>
4670 When the machine is not in the Saved state, this attribute is
4671 an empty string.
4672 </note>
4673 </desc>
4674 </attribute>
4675
4676 <attribute name="logFolder" type="wstring" readonly="yes">
4677 <desc>
4678 Full path to the folder that stores a set of rotated log files
4679 recorded during machine execution. The most recent log file is
4680 named <tt>VBox.log</tt>, the previous log file is
4681 named <tt>VBox.log.1</tt> and so on (up to <tt>VBox.log.3</tt>
4682 in the current version).
4683 </desc>
4684 </attribute>
4685
4686 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
4687 <desc>
4688 Current snapshot of this machine. This is @c null if the machine
4689 currently has no snapshots. If it is not @c null, then it was
4690 set by one of <link to="Console::takeSnapshot" />,
4691 <link to="Console::deleteSnapshot" />
4692 or <link to="Console::restoreSnapshot" />, depending on which
4693 was called last. See <link to="ISnapshot"/> for details.
4694 </desc>
4695 </attribute>
4696
4697 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
4698 <desc>
4699 Number of snapshots taken on this machine. Zero means the
4700 machine doesn't have any snapshots.
4701 </desc>
4702 </attribute>
4703
4704 <attribute name="currentStateModified" type="boolean" readonly="yes">
4705 <desc>
4706 Returns @c true if the current state of the machine is not
4707 identical to the state stored in the current snapshot.
4708
4709 The current state is identical to the current snapshot only
4710 directly after one of the following calls are made:
4711
4712 <ul>
4713 <li><link to="IConsole::restoreSnapshot"/>
4714 </li>
4715 <li><link to="IConsole::takeSnapshot"/> (issued on a
4716 "powered off" or "saved" machine, for which
4717 <link to="#settingsModified"/> returns @c false)
4718 </li>
4719 <li><link to="IMachine::setCurrentSnapshot"/>
4720 </li>
4721 </ul>
4722
4723 The current state remains identical until one of the following
4724 happens:
4725 <ul>
4726 <li>settings of the machine are changed</li>
4727 <li>the saved state is discarded</li>
4728 <li>the current snapshot is discarded</li>
4729 <li>an attempt to execute the machine is made</li>
4730 </ul>
4731
4732 <note>
4733 For machines that don't have snapshots, this property is
4734 always @c false.
4735 </note>
4736 </desc>
4737 </attribute>
4738
4739 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
4740 <desc>
4741 Collection of shared folders for this machine (permanent shared
4742 folders). These folders are shared automatically at machine startup
4743 and available only to the guest OS installed within this machine.
4744
4745 New shared folders are added to the collection using
4746 <link to="#createSharedFolder"/>. Existing shared folders can be
4747 removed using <link to="#removeSharedFolder"/>.
4748 </desc>
4749 </attribute>
4750
4751 <attribute name="clipboardMode" type="ClipboardMode">
4752 <desc>
4753 Synchronization mode between the host OS clipboard
4754 and the guest OS clipboard.
4755 </desc>
4756 </attribute>
4757
4758 <attribute name="guestPropertyNotificationPatterns" type="wstring">
4759 <desc>
4760 A comma-separated list of simple glob patterns. Changes to guest
4761 properties whose name matches one of the patterns will generate an
4762 <link to="IVirtualBoxCallback::onGuestPropertyChange"/> signal.
4763 </desc>
4764 </attribute>
4765
4766 <attribute name="teleporterEnabled" type="boolean">
4767 <desc>
4768 When set to @a true, the virtual machine becomes a target teleporter
4769 the next time it is powered on. This can only set to @a true when the
4770 VM is in the @a PoweredOff or @a Aborted state.
4771
4772 <!-- This property is automatically set to @a false when the VM is powered
4773 on. (bird: This doesn't work yet ) -->
4774 </desc>
4775 </attribute>
4776
4777 <attribute name="teleporterPort" type="unsigned long">
4778 <desc>
4779 The TCP port the target teleporter will listen for incoming
4780 teleportations on.
4781
4782 0 means the port is automatically selected upon power on. The actual
4783 value can be read from this property while the machine is waiting for
4784 incoming teleportations.
4785 </desc>
4786 </attribute>
4787
4788 <attribute name="teleporterAddress" type="wstring">
4789 <desc>
4790 The address the target teleporter will listen on. If set to an empty
4791 string, it will listen on all addresses.
4792 </desc>
4793 </attribute>
4794
4795 <attribute name="teleporterPassword" type="wstring">
4796 <desc>
4797 The password the to check for on the target teleporter. This is just a
4798 very basic measure to prevent simple hacks and operators accidentally
4799 beaming a virtual machine to the wrong place.
4800 </desc>
4801 </attribute>
4802
4803 <attribute name="RTCUseUTC" type="boolean">
4804 <desc>
4805 When set to @a true, the RTC device of the virtual machine will run
4806 in UTC time, otherwise in local time. Especially Unix guests prefer
4807 the time in UTC.
4808 </desc>
4809 </attribute>
4810
4811 <attribute name="ioMgr" type="IoMgrType">
4812 <desc>
4813 Selects the I/O manager to use for the virtual machine.
4814 </desc>
4815 </attribute>
4816
4817 <attribute name="ioBackend" type="IoBackendType">
4818 <desc>
4819 Selects the I/O backend to use for the virtual machine.
4820 </desc>
4821 </attribute>
4822
4823 <attribute name="ioCacheEnabled" type="boolean">
4824 <desc>
4825 When set to @a true, the builtin I/O cache of the virtual machine
4826 will be enabled.
4827 </desc>
4828 </attribute>
4829
4830 <attribute name="ioCacheSize" type="unsigned long">
4831 <desc>
4832 Maximum size of the I/O cache in MB.
4833 </desc>
4834 </attribute>
4835
4836 <attribute name="ioBandwidthMax" type="unsigned long">
4837 <desc>
4838 The maximum number of MB the VM is allowed to transfer per second.
4839 0 means unlimited bandwidth.
4840 </desc>
4841 </attribute>
4842
4843 <method name="setBootOrder">
4844 <desc>
4845 Puts the given device to the specified position in
4846 the boot order.
4847
4848 To indicate that no device is associated with the given position,
4849 <link to="DeviceType_Null"/> should be used.
4850
4851 @todo setHardDiskBootOrder(), setNetworkBootOrder()
4852
4853 <result name="E_INVALIDARG">
4854 Boot @a position out of range.
4855 </result>
4856 <result name="E_NOTIMPL">
4857 Booting from USB @a device currently not supported.
4858 </result>
4859
4860 </desc>
4861 <param name="position" type="unsigned long" dir="in">
4862 <desc>
4863 Position in the boot order (@c 1 to the total number of
4864 devices the machine can boot from, as returned by
4865 <link to="ISystemProperties::maxBootPosition"/>).
4866 </desc>
4867 </param>
4868 <param name="device" type="DeviceType" dir="in">
4869 <desc>
4870 The type of the device used to boot at the given position.
4871 </desc>
4872 </param>
4873 </method>
4874
4875 <method name="getBootOrder" const="yes">
4876 <desc>
4877 Returns the device type that occupies the specified
4878 position in the boot order.
4879
4880 @todo [remove?]
4881 If the machine can have more than one device of the returned type
4882 (such as hard disks), then a separate method should be used to
4883 retrieve the individual device that occupies the given position.
4884
4885 If here are no devices at the given position, then
4886 <link to="DeviceType_Null"/> is returned.
4887
4888 @todo getHardDiskBootOrder(), getNetworkBootOrder()
4889
4890 <result name="E_INVALIDARG">
4891 Boot @a position out of range.
4892 </result>
4893
4894 </desc>
4895 <param name="position" type="unsigned long" dir="in">
4896 <desc>
4897 Position in the boot order (@c 1 to the total number of
4898 devices the machine can boot from, as returned by
4899 <link to="ISystemProperties::maxBootPosition"/>).
4900 </desc>
4901 </param>
4902 <param name="device" type="DeviceType" dir="return">
4903 <desc>
4904 Device at the given position.
4905 </desc>
4906 </param>
4907 </method>
4908
4909 <method name="attachDevice">
4910 <desc>
4911 Attaches a device and optionally mounts a medium to the given storage
4912 controller (<link to="IStorageController" />, identified by @a name),
4913 at the indicated port and device.
4914
4915 This method is intended for managing storage devices in general (it works
4916 for both fixed and removable media). For storage devices supporting removable
4917 media (such as DVDs and floppies), you can also use <link to="IMedium::mountMedium"/>
4918 for changing the media while the machine is running.
4919
4920 For the IDE bus, the @a controllerPort parameter can be either
4921 @c 0 or @c 1, to specify the primary or secondary IDE controller,
4922 respectively. For each of these, @a device can then be either @c 0 or @c 1,
4923 to specify the master or the slave device, respectively. (In the
4924 default configuration of virtual machines, the secondary master is
4925 used for a CD/DVD drive.)
4926
4927 For an SATA controller, @a controllerPort must be a number ranging
4928 from @c 0 to @c 29. For a SCSI controller, @a controllerPort must
4929 be a number ranging from @c 0 to @c 15.
4930
4931 For both SCSI and SATA, the @a device parameter is unused and must
4932 be @c 0.
4933
4934 For fixed media such as hard disks, the given medium identifier cannot
4935 be a zero UUID. It may be a zero UUID for removable media such as DVDs
4936 and floppies.
4937
4938 After calling this returns successfully, a new instance of
4939 <link to="IMediumAttachment"/> will appear in the machine's list of medium
4940 attachments (<link to="IMachine::mediumAttachments"/>).
4941
4942 The specified device slot must not have a device attached to it,
4943 or this method will fail.
4944
4945 See <link to="IMedium"/> and <link to="IMediumAttachment"/> for more
4946 information about attaching media.
4947
4948 <note>
4949 You cannot attach a device to a running machine. Also, you cannot
4950 attach a device to a newly created machine until this machine's
4951 settings are saved to disk using <link to="#saveSettings"/>.
4952 </note>
4953 <note>
4954 If the medium is being attached indirectly, a new differencing medium
4955 will implicitly be created for it and attached instead. If the
4956 changes made to the machine settings (including this indirect
4957 attachment) are later cancelled using <link to="#discardSettings"/>,
4958 this implicitly created differencing medium will implicitly
4959 be deleted.
4960 </note>
4961
4962 <result name="E_INVALIDARG">
4963 SATA device, SATA port, IDE port or IDE slot out of range.
4964 </result>
4965 <result name="VBOX_E_INVALID_OBJECT_STATE">
4966 Attempt to attach medium to an unregistered virtual machine.
4967 </result>
4968 <result name="VBOX_E_INVALID_VM_STATE">
4969 Invalid machine state.
4970 </result>
4971 <result name="VBOX_E_OBJECT_IN_USE">
4972 Hard disk already attached to this or another virtual machine.
4973 </result>
4974
4975 </desc>
4976 <param name="name" type="wstring" dir="in">
4977 <desc>Name of the storage controller to attach the device to.</desc>
4978 </param>
4979 <param name="controllerPort" type="long" dir="in">
4980 <desc>Port to attach the device to.</desc>
4981 </param>
4982 <param name="device" type="long" dir="in">
4983 <desc>Device slot in the given port to attach the device to.</desc>
4984 </param>
4985 <param name="type" type="DeviceType" dir="in">
4986 <desc>Device type of the attached device.</desc>
4987 </param>
4988 <param name="id" type="uuid" mod="string" dir="in">
4989 <desc>UUID of the medium to mount. Zero UUID means do not mount any
4990 medium.</desc>
4991 </param>
4992 </method>
4993
4994 <method name="detachDevice">
4995 <desc>
4996 Detaches the device attached to a device slot of the specified bus.
4997
4998 Detaching the device from the virtual machine is deferred. This means
4999 that the medium remains associated with the machine when this method
5000 returns and gets actually de-associated only after a successful
5001 <link to="#saveSettings"/> call. See <link to="IMedium"/>
5002 for more detailed information about attaching media.
5003
5004 <note>
5005 You cannot detach a device from a running machine.
5006 </note>
5007 <note>
5008 Detaching differencing media implicitly created by <link
5009 to="#attachDevice"/> for the indirect attachment using this
5010 method will <b>not</b> implicitly delete them. The
5011 <link to="IMedium::deleteStorage"/> operation should be
5012 explicitly performed by the caller after the medium is successfully
5013 detached and the settings are saved with
5014 <link to="#saveSettings"/>, if it is the desired action.
5015 </note>
5016
5017 <result name="VBOX_E_INVALID_VM_STATE">
5018 Attempt to detach medium from a running virtual machine.
5019 </result>
5020 <result name="VBOX_E_OBJECT_NOT_FOUND">
5021 No medium attached to given slot/bus.
5022 </result>
5023 <result name="VBOX_E_NOT_SUPPORTED">
5024 Medium format does not support storage deletion.
5025 </result>
5026
5027 </desc>
5028 <param name="name" type="wstring" dir="in">
5029 <desc>Name of the storage controller to detach the medium from.</desc>
5030 </param>
5031 <param name="controllerPort" type="long" dir="in">
5032 <desc>Port number to detach the medium from.</desc>
5033 </param>
5034 <param name="device" type="long" dir="in">
5035 <desc>Device slot number to detach the medium from.</desc>
5036 </param>
5037 </method>
5038
5039 <method name="passthroughDevice">
5040 <desc>
5041 Sets the passthrough mode of an existing DVD device. Changing the
5042 setting while the VM is running is forbidden. The setting is only used
5043 if at VM start the device is configured as a host DVD drive, in all
5044 other cases it is ignored. The device must already exist; see
5045 <link to="IMachine::attachDevice"/> for how to attach a new device.
5046
5047 The @a controllerPort and @a device parameters specify the device slot and
5048 have have the same meaning as with <link to="IMachine::attachDevice" />.
5049
5050 <result name="E_INVALIDARG">
5051 SATA device, SATA port, IDE port or IDE slot out of range.
5052 </result>
5053 <result name="VBOX_E_INVALID_OBJECT_STATE">
5054 Attempt to modify an unregistered virtual machine.
5055 </result>
5056 <result name="VBOX_E_INVALID_VM_STATE">
5057 Invalid machine state.
5058 </result>
5059
5060 </desc>
5061 <param name="name" type="wstring" dir="in">
5062 <desc>Name of the storage controller.</desc>
5063 </param>
5064 <param name="controllerPort" type="long" dir="in">
5065 <desc>Storage controller port.</desc>
5066 </param>
5067 <param name="device" type="long" dir="in">
5068 <desc>Device slot in the given port.</desc>
5069 </param>
5070 <param name="passthrough" type="boolean" dir="in">
5071 <desc>New value for the passthrough setting.</desc>
5072 </param>
5073 </method>
5074
5075 <method name="mountMedium">
5076 <desc>
5077 Mounts a medium (<link to="IMedium" />, identified
5078 by the given UUID @a id) to the given storage controller
5079 (<link to="IStorageController" />, identified by @a name),
5080 at the indicated port and device. The device must already exist;
5081 see <link to="IMachine::attachDevice"/> for how to attach a new device.
5082
5083 This method is intended only for managing removable media, where the
5084 device is fixed but media is changeable at runtime (such as DVDs
5085 and floppies). It cannot be used for fixed media such as hard disks.
5086
5087 The @a controllerPort and @a device parameters specify the device slot and
5088 have have the same meaning as with <link to="IMachine::attachDevice" />.
5089
5090 The specified device slot can have a medium mounted, which will be
5091 unmounted first. Specifying a zero UUID (or an empty string) for
5092 @a medium does just an unmount.
5093
5094 See <link to="IMedium"/> for more detailed information about
5095 attaching media.
5096
5097 <result name="E_INVALIDARG">
5098 SATA device, SATA port, IDE port or IDE slot out of range.
5099 </result>
5100 <result name="VBOX_E_INVALID_OBJECT_STATE">
5101 Attempt to attach medium to an unregistered virtual machine.
5102 </result>
5103 <result name="VBOX_E_INVALID_VM_STATE">
5104 Invalid machine state.
5105 </result>
5106 <result name="VBOX_E_OBJECT_IN_USE">
5107 Medium already attached to this or another virtual machine.
5108 </result>
5109
5110 </desc>
5111 <param name="name" type="wstring" dir="in">
5112 <desc>Name of the storage controller to attach the medium to.</desc>
5113 </param>
5114 <param name="controllerPort" type="long" dir="in">
5115 <desc>Port to attach the medium to.</desc>
5116 </param>
5117 <param name="device" type="long" dir="in">
5118 <desc>Device slot in the given port to attach the medium to.</desc>
5119 </param>
5120 <param name="medium" type="uuid" mod="string" dir="in">
5121 <desc>UUID of the medium to attach. A zero UUID means unmount the
5122 currently mounted medium.</desc>
5123 </param>
5124 <param name="force" type="boolean" dir="in">
5125 <desc>Allows to force unmount/mount of a medium which is locked by
5126 theDevice slot in the given port to attach the medium to.</desc>
5127 </param>
5128 </method>
5129
5130 <method name="getMedium" const="yes">
5131 <desc>
5132 Returns the virtual medium attached to a device slot of the specified
5133 bus.
5134
5135 Note that if the medium was indirectly attached by
5136 <link to="#mountMedium"/> to the given device slot then this
5137 method will return not the same object as passed to the
5138 <link to="#mountMedium"/> call. See <link to="IMedium"/> for
5139 more detailed information about mounting a medium.
5140
5141 <result name="VBOX_E_OBJECT_NOT_FOUND">
5142 No medium attached to given slot/bus.
5143 </result>
5144
5145 </desc>
5146 <param name="name" type="wstring" dir="in">
5147 <desc>Name of the storage controller the medium is attached to.</desc>
5148 </param>
5149 <param name="controllerPort" type="long" dir="in">
5150 <desc>Port to query.</desc>
5151 </param>
5152 <param name="device" type="long" dir="in">
5153 <desc>Device slot in the given port to query.</desc>
5154 </param>
5155 <param name="medium" type="IMedium" dir="return">
5156 <desc>Attached medium object.</desc>
5157 </param>
5158 </method>
5159
5160 <method name="getMediumAttachmentsOfController" const="yes">
5161 <desc>
5162 Returns an array of medium attachments which are attached to the
5163 the controller with the given name.
5164
5165 <result name="VBOX_E_OBJECT_NOT_FOUND">
5166 A storage controller with given name doesn't exist.
5167 </result>
5168 </desc>
5169 <param name="name" type="wstring" dir="in"/>
5170 <param name="mediumAttachments" type="IMediumAttachment" safearray="yes" dir="return"/>
5171 </method>
5172
5173 <method name="getMediumAttachment" const="yes">
5174 <desc>
5175 Returns a medium attachment which corresponds to the controller with
5176 the given name, on the given port and device slot.
5177
5178 <result name="VBOX_E_OBJECT_NOT_FOUND">
5179 No attachment exists for the given controller/port/device combination.
5180 </result>
5181 </desc>
5182 <param name="name" type="wstring" dir="in"/>
5183 <param name="controllerPort" type="long" dir="in"/>
5184 <param name="device" type="long" dir="in"/>
5185 <param name="attachment" type="IMediumAttachment" dir="return"/>
5186 </method>
5187
5188 <method name="getNetworkAdapter" const="yes">
5189 <desc>
5190 Returns the network adapter associated with the given slot.
5191 Slots are numbered sequentially, starting with zero. The total
5192 number of adapters per machine is defined by the
5193 <link to="ISystemProperties::networkAdapterCount"/> property,
5194 so the maximum slot number is one less than that property's value.
5195
5196 <result name="E_INVALIDARG">
5197 Invalid @a slot number.
5198 </result>
5199
5200 </desc>
5201 <param name="slot" type="unsigned long" dir="in"/>
5202 <param name="adapter" type="INetworkAdapter" dir="return"/>
5203 </method>
5204
5205 <method name="addStorageController">
5206 <desc>
5207 Adds a new storage controller (SCSI or SATA controller) to the
5208 machine and returns it as an instance of
5209 <link to="IStorageController" />.
5210
5211 @a name identifies the controller for subsequent calls such as
5212 <link to="#getStorageControllerByName" />,
5213 <link to="#getStorageControllerByInstance" />,
5214 <link to="#removeStorageController" />,
5215 <link to="#attachDevice" /> or <link to="#mountMedium" />.
5216
5217 After the controller has been added, you can set its exact
5218 type by setting the <link to="IStorageController::controllerType" />.
5219
5220 <result name="VBOX_E_OBJECT_IN_USE">
5221 A storage controller with given name exists already.
5222 </result>
5223 <result name="E_INVALIDARG">
5224 Invalid @a controllerType.
5225 </result>
5226 </desc>
5227 <param name="name" type="wstring" dir="in"/>
5228 <param name="connectionType" type="StorageBus" dir="in"/>
5229 <param name="controller" type="IStorageController" dir="return"/>
5230 </method>
5231
5232 <method name="getStorageControllerByName" const="yes">
5233 <desc>
5234 Returns a storage controller with the given name.
5235
5236 <result name="VBOX_E_OBJECT_NOT_FOUND">
5237 A storage controller with given name doesn't exist.
5238 </result>
5239 </desc>
5240 <param name="name" type="wstring" dir="in"/>
5241 <param name="storageController" type="IStorageController" dir="return"/>
5242 </method>
5243
5244 <method name="getStorageControllerByInstance" const="yes">
5245 <desc>
5246 Returns a storage controller with the given instance number.
5247
5248 <result name="VBOX_E_OBJECT_NOT_FOUND">
5249 A storage controller with given instance number doesn't exist.
5250 </result>
5251 </desc>
5252 <param name="instance" type="unsigned long" dir="in"/>
5253 <param name="storageController" type="IStorageController" dir="return"/>
5254 </method>
5255
5256 <method name="removeStorageController">
5257 <desc>
5258 Removes a storage controller from the machine.
5259
5260 <result name="VBOX_E_OBJECT_NOT_FOUND">
5261 A storage controller with given name doesn't exist.
5262 </result>
5263 </desc>
5264 <param name="name" type="wstring" dir="in"/>
5265 </method>
5266
5267 <method name="getSerialPort" const="yes">
5268 <desc>
5269 Returns the serial port associated with the given slot.
5270 Slots are numbered sequentially, starting with zero. The total
5271 number of serial ports per machine is defined by the
5272 <link to="ISystemProperties::serialPortCount"/> property,
5273 so the maximum slot number is one less than that property's value.
5274
5275 <result name="E_INVALIDARG">
5276 Invalid @a slot number.
5277 </result>
5278
5279 </desc>
5280 <param name="slot" type="unsigned long" dir="in"/>
5281 <param name="port" type="ISerialPort" dir="return"/>
5282 </method>
5283
5284 <method name="getParallelPort" const="yes">
5285 <desc>
5286 Returns the parallel port associated with the given slot.
5287 Slots are numbered sequentially, starting with zero. The total
5288 number of parallel ports per machine is defined by the
5289 <link to="ISystemProperties::parallelPortCount"/> property,
5290 so the maximum slot number is one less than that property's value.
5291
5292 <result name="E_INVALIDARG">
5293 Invalid @a slot number.
5294 </result>
5295
5296 </desc>
5297 <param name="slot" type="unsigned long" dir="in"/>
5298 <param name="port" type="IParallelPort" dir="return"/>
5299 </method>
5300
5301 <method name="getExtraDataKeys">
5302 <desc>
5303 Returns an array representing the machine-specific extra data keys
5304 which currently have values defined.
5305 </desc>
5306 <param name="value" type="wstring" dir="return" safearray="yes">
5307 <desc>Array of extra data keys.</desc>
5308 </param>
5309 </method>
5310
5311 <method name="getExtraData">
5312 <desc>
5313 Returns associated machine-specific extra data.
5314
5315 If the requested data @a key does not exist, this function will
5316 succeed and return an empty string in the @a value argument.
5317
5318 <result name="VBOX_E_FILE_ERROR">
5319 Settings file not accessible.
5320 </result>
5321 <result name="VBOX_E_XML_ERROR">
5322 Could not parse the settings file.
5323 </result>
5324
5325 </desc>
5326 <param name="key" type="wstring" dir="in">
5327 <desc>Name of the data key to get.</desc>
5328 </param>
5329 <param name="value" type="wstring" dir="return">
5330 <desc>Value of the requested data key.</desc>
5331 </param>
5332 </method>
5333
5334 <method name="setExtraData">
5335 <desc>
5336 Sets associated machine-specific extra data.
5337
5338 If you pass @c null or an empty string as a key @a value, the given
5339 @a key will be deleted.
5340
5341 <note>
5342 Before performing the actual data change, this method will ask all
5343 registered callbacks using the
5344 <link to="IVirtualBoxCallback::onExtraDataCanChange"/>
5345 notification for a permission. If one of the callbacks refuses the
5346 new value, the change will not be performed.
5347 </note>
5348 <note>
5349 On success, the
5350 <link to="IVirtualBoxCallback::onExtraDataChange"/> notification
5351 is called to inform all registered callbacks about a successful data
5352 change.
5353 </note>
5354 <note>
5355 This method can be called outside the machine session and therefore
5356 it's a caller's responsibility to handle possible race conditions
5357 when several clients change the same key at the same time.
5358 </note>
5359
5360 <result name="VBOX_E_FILE_ERROR">
5361 Settings file not accessible.
5362 </result>
5363 <result name="VBOX_E_XML_ERROR">
5364 Could not parse the settings file.
5365 </result>
5366
5367 </desc>
5368 <param name="key" type="wstring" dir="in">
5369 <desc>Name of the data key to set.</desc>
5370 </param>
5371 <param name="value" type="wstring" dir="in">
5372 <desc>Value to assign to the key.</desc>
5373 </param>
5374 </method>
5375
5376 <method name="getCPUProperty" const="yes">
5377 <desc>
5378 Returns the virtual CPU boolean value of the specified property.
5379
5380 <result name="E_INVALIDARG">
5381 Invalid property.
5382 </result>
5383
5384 </desc>
5385 <param name="property" type="CPUPropertyType" dir="in">
5386 <desc>
5387 Property type to query.
5388 </desc>
5389 </param>
5390 <param name="value" type="boolean" dir="return">
5391 <desc>
5392 Property value.
5393 </desc>
5394 </param>
5395 </method>
5396
5397 <method name="setCPUProperty">
5398 <desc>
5399 Sets the virtual CPU boolean value of the specified property.
5400
5401 <result name="E_INVALIDARG">
5402 Invalid property.
5403 </result>
5404
5405 </desc>
5406 <param name="property" type="CPUPropertyType" dir="in">
5407 <desc>
5408 Property type to query.
5409 </desc>
5410 </param>
5411 <param name="value" type="boolean" dir="in">
5412 <desc>
5413 Property value.
5414 </desc>
5415 </param>
5416 </method>
5417
5418 <method name="getCPUIDLeaf" const="yes">
5419 <desc>
5420 Returns the virtual CPU cpuid information for the specified leaf.
5421
5422 Currently supported index values for cpuid:
5423 Standard CPUID leafs: 0 - 0xA
5424 Extended CPUID leafs: 0x80000000 - 0x8000000A
5425
5426 See the Intel and AMD programmer's manuals for detailed information
5427 about the cpuid instruction and its leafs.
5428 <result name="E_INVALIDARG">
5429 Invalid id.
5430 </result>
5431
5432 </desc>
5433 <param name="id" type="unsigned long" dir="in">
5434 <desc>
5435 CPUID leaf index.
5436 </desc>
5437 </param>
5438 <param name="valEax" type="unsigned long" dir="out">
5439 <desc>
5440 CPUID leaf value for register eax.
5441 </desc>
5442 </param>
5443 <param name="valEbx" type="unsigned long" dir="out">
5444 <desc>
5445 CPUID leaf value for register ebx.
5446 </desc>
5447 </param>
5448 <param name="valEcx" type="unsigned long" dir="out">
5449 <desc>
5450 CPUID leaf value for register ecx.
5451 </desc>
5452 </param>
5453 <param name="valEdx" type="unsigned long" dir="out">
5454 <desc>
5455 CPUID leaf value for register edx.
5456 </desc>
5457 </param>
5458 </method>
5459
5460 <method name="setCPUIDLeaf" const="yes">
5461 <desc>
5462 Sets the virtual CPU cpuid information for the specified leaf. Note that these values
5463 are not passed unmodified. VirtualBox clears features that it doesn't support.
5464
5465 Currently supported index values for cpuid:
5466 Standard CPUID leafs: 0 - 0xA
5467 Extended CPUID leafs: 0x80000000 - 0x8000000A
5468
5469 See the Intel and AMD programmer's manuals for detailed information
5470 about the cpuid instruction and its leafs.
5471
5472 Do not use this method unless you know exactly what you're doing. Misuse can lead to
5473 random crashes inside VMs.
5474 <result name="E_INVALIDARG">
5475 Invalid id.
5476 </result>
5477
5478 </desc>
5479 <param name="id" type="unsigned long" dir="in">
5480 <desc>
5481 CPUID leaf index.
5482 </desc>
5483 </param>
5484 <param name="valEax" type="unsigned long" dir="in">
5485 <desc>
5486 CPUID leaf value for register eax.
5487 </desc>
5488 </param>
5489 <param name="valEbx" type="unsigned long" dir="in">
5490 <desc>
5491 CPUID leaf value for register ebx.
5492 </desc>
5493 </param>
5494 <param name="valEcx" type="unsigned long" dir="in">
5495 <desc>
5496 CPUID leaf value for register ecx.
5497 </desc>
5498 </param>
5499 <param name="valEdx" type="unsigned long" dir="in">
5500 <desc>
5501 CPUID leaf value for register edx.
5502 </desc>
5503 </param>
5504 </method>
5505
5506 <method name="removeCPUIDLeaf" const="yes">
5507 <desc>
5508 Removes the virtual CPU cpuid leaf for the specified index
5509
5510 <result name="E_INVALIDARG">
5511 Invalid id.
5512 </result>
5513
5514 </desc>
5515 <param name="id" type="unsigned long" dir="in">
5516 <desc>
5517 CPUID leaf index.
5518 </desc>
5519 </param>
5520 </method>
5521
5522 <method name="removeAllCPUIDLeaves" const="yes">
5523 <desc>
5524 Removes all the virtual CPU cpuid leaves
5525 </desc>
5526 </method>
5527
5528 <method name="getHWVirtExProperty" const="yes">
5529 <desc>
5530 Returns the value of the specified hardware virtualization boolean property.
5531
5532 <result name="E_INVALIDARG">
5533 Invalid property.
5534 </result>
5535
5536 </desc>
5537 <param name="property" type="HWVirtExPropertyType" dir="in">
5538 <desc>
5539 Property type to query.
5540 </desc>
5541 </param>
5542 <param name="value" type="boolean" dir="return">
5543 <desc>
5544 Property value.
5545 </desc>
5546 </param>
5547 </method>
5548
5549 <method name="setHWVirtExProperty">
5550 <desc>
5551 Sets a new value for the specified hardware virtualization boolean property.
5552
5553 <result name="E_INVALIDARG">
5554 Invalid property.
5555 </result>
5556
5557 </desc>
5558 <param name="property" type="HWVirtExPropertyType" dir="in">
5559 <desc>
5560 Property type to set.
5561 </desc>
5562 </param>
5563 <param name="value" type="boolean" dir="in">
5564 <desc>
5565 New property value.
5566 </desc>
5567 </param>
5568 </method>
5569
5570 <method name="saveSettings">
5571 <desc>
5572 Saves any changes to machine settings made since the session
5573 has been opened or a new machine has been created, or since the
5574 last call to <link to="#saveSettings"/> or <link to="#discardSettings"/>.
5575 For registered machines, new settings become visible to all
5576 other VirtualBox clients after successful invocation of this
5577 method.
5578 <note>
5579 The method sends <link to="IVirtualBoxCallback::onMachineDataChange"/>
5580 notification event after the configuration has been successfully
5581 saved (only for registered machines).
5582 </note>
5583 <note>
5584 Calling this method is only valid on instances returned
5585 by <link to="ISession::machine"/> and on new machines
5586 created by <link to="IVirtualBox::createMachine"/> but not
5587 yet registered, or on unregistered machines after calling
5588 <link to="IVirtualBox::unregisterMachine"/>.
5589 </note>
5590
5591 <result name="VBOX_E_FILE_ERROR">
5592 Settings file not accessible.
5593 </result>
5594 <result name="VBOX_E_XML_ERROR">
5595 Could not parse the settings file.
5596 </result>
5597 <result name="E_ACCESSDENIED">
5598 Modification request refused.
5599 </result>
5600
5601 </desc>
5602 </method>
5603
5604 <method name="discardSettings">
5605 <desc>
5606 Discards any changes to the machine settings made since the session
5607 has been opened or since the last call to <link to="#saveSettings"/>
5608 or <link to="#discardSettings"/>.
5609 <note>
5610 Calling this method is only valid on instances returned
5611 by <link to="ISession::machine"/> and on new machines
5612 created by <link to="IVirtualBox::createMachine"/> or
5613 opened by <link to="IVirtualBox::openMachine"/> but not
5614 yet registered, or on unregistered machines after calling
5615 <link to="IVirtualBox::unregisterMachine"/>.
5616 </note>
5617
5618 <result name="VBOX_E_INVALID_VM_STATE">
5619 Virtual machine is not mutable.
5620 </result>
5621
5622 </desc>
5623 </method>
5624
5625 <method name="deleteSettings">
5626 <desc>
5627 Deletes the settings file of this machine from disk.
5628 The machine must not be registered in order for this operation
5629 to succeed.
5630 <note>
5631 <link to="#settingsModified"/> will return @c true after this
5632 method successfully returns.
5633 </note>
5634 <note>
5635 Calling this method is only valid on instances returned
5636 by <link to="ISession::machine"/> and on new machines
5637 created by <link to="IVirtualBox::createMachine"/> or
5638 opened by <link to="IVirtualBox::openMachine"/> but not
5639 yet registered, or on unregistered machines after calling
5640 <link to="IVirtualBox::unregisterMachine"/>.
5641 </note>
5642 <note>
5643 The deleted machine settings file can be restored (saved again)
5644 by calling <link to="#saveSettings"/>.
5645 </note>
5646
5647 <result name="VBOX_E_INVALID_VM_STATE">
5648 Cannot delete settings of a registered machine or
5649 machine not mutable.
5650 </result>
5651 <result name="VBOX_E_IPRT_ERROR">
5652 Could not delete the settings file.
5653 </result>
5654
5655 </desc>
5656 </method>
5657
5658 <method name="export">
5659 <desc>Exports the machine to an OVF appliance. See <link to="IAppliance" /> for the
5660 steps required to export VirtualBox machines to OVF.
5661 </desc>
5662
5663 <param name="aAppliance" type="IAppliance" dir="in">
5664 <desc>Appliance to export this machine to.</desc>
5665 </param>
5666 <param name="aDescription" type="IVirtualSystemDescription" dir="return">
5667 <desc>VirtualSystemDescription object which is created for this machine.</desc>
5668 </param>
5669 </method >
5670
5671 <method name="getSnapshot">
5672 <desc>
5673 Returns a snapshot of this machine with the given UUID.
5674 A @c null UUID can be used to obtain the first snapshot
5675 taken on this machine. This is useful if you want to traverse
5676 the whole tree of snapshots starting from the root.
5677
5678 <result name="VBOX_E_OBJECT_NOT_FOUND">
5679 Virtual machine has no snapshots or snapshot not found.
5680 </result>
5681
5682 </desc>
5683 <param name="id" type="uuid" mod="string" dir="in">
5684 <desc>UUID of the snapshot to get</desc>
5685 </param>
5686 <param name="snapshot" type="ISnapshot" dir="return">
5687 <desc>Snapshot object with the given UUID.</desc>
5688 </param>
5689 </method>
5690
5691 <method name="findSnapshot">
5692 <desc>
5693 Returns a snapshot of this machine with the given name.
5694
5695 <result name="VBOX_E_OBJECT_NOT_FOUND">
5696 Virtual machine has no snapshots or snapshot not found.
5697 </result>
5698
5699 </desc>
5700 <param name="name" type="wstring" dir="in">
5701 <desc>Name of the snapshot to find</desc>
5702 </param>
5703 <param name="snapshot" type="ISnapshot" dir="return">
5704 <desc>Snapshot object with the given name.</desc>
5705 </param>
5706 </method>
5707
5708 <method name="setCurrentSnapshot">
5709 <desc>
5710 Sets the current snapshot of this machine.
5711 <note>
5712 In the current implementation, this operation is not
5713 implemented.
5714 </note>
5715 </desc>
5716 <param name="id" type="uuid" mod="string" dir="in">
5717 <desc>UUID of the snapshot to set as the current snapshot.</desc>
5718 </param>
5719 </method>
5720
5721 <method name="createSharedFolder">
5722 <desc>
5723 Creates a new permanent shared folder by associating the given logical
5724 name with the given host path, adds it to the collection of shared
5725 folders and starts sharing it. Refer to the description of
5726 <link to="ISharedFolder"/> to read more about logical names.
5727
5728 <result name="VBOX_E_OBJECT_IN_USE">
5729 Shared folder already exists.
5730 </result>
5731 <result name="VBOX_E_FILE_ERROR">
5732 Shared folder @a hostPath not accessible.
5733 </result>
5734
5735 </desc>
5736 <param name="name" type="wstring" dir="in">
5737 <desc>Unique logical name of the shared folder.</desc>
5738 </param>
5739 <param name="hostPath" type="wstring" dir="in">
5740 <desc>Full path to the shared folder in the host file system.</desc>
5741 </param>
5742 <param name="writable" type="boolean" dir="in">
5743 <desc>Whether the share is writable or readonly</desc>
5744 </param>
5745 </method>
5746
5747 <method name="removeSharedFolder">
5748 <desc>
5749 Removes the permanent shared folder with the given name previously
5750 created by <link to="#createSharedFolder"/> from the collection of
5751 shared folders and stops sharing it.
5752
5753 <result name="VBOX_E_INVALID_VM_STATE">
5754 Virtual machine is not mutable.
5755 </result>
5756 <result name="VBOX_E_OBJECT_NOT_FOUND">
5757 Shared folder @a name does not exist.
5758 </result>
5759
5760 </desc>
5761 <param name="name" type="wstring" dir="in">
5762 <desc>Logical name of the shared folder to remove.</desc>
5763 </param>
5764 </method>
5765
5766 <method name="canShowConsoleWindow">
5767 <desc>
5768 Returns @c true if the VM console process can activate the
5769 console window and bring it to foreground on the desktop of
5770 the host PC.
5771 <note>
5772 This method will fail if a session for this machine is not
5773 currently open.
5774 </note>
5775
5776 <result name="VBOX_E_INVALID_VM_STATE">
5777 Machine session is not open.
5778 </result>
5779
5780 </desc>
5781 <param name="canShow" type="boolean" dir="return">
5782 <desc>
5783 @c true if the console window can be shown and @c false otherwise.
5784 </desc>
5785 </param>
5786 </method>
5787
5788 <method name="showConsoleWindow">
5789 <desc>
5790 Activates the console window and brings it to foreground on
5791 the desktop of the host PC. Many modern window managers on
5792 many platforms implement some sort of focus stealing
5793 prevention logic, so that it may be impossible to activate
5794 a window without the help of the currently active
5795 application. In this case, this method will return a non-zero
5796 identifier that represents the top-level window of the VM
5797 console process. The caller, if it represents a currently
5798 active process, is responsible to use this identifier (in a
5799 platform-dependent manner) to perform actual window
5800 activation.
5801 <note>
5802 This method will fail if a session for this machine is not
5803 currently open.
5804 </note>
5805
5806 <result name="VBOX_E_INVALID_VM_STATE">
5807 Machine session is not open.
5808 </result>
5809
5810 </desc>
5811 <param name="winId" type="unsigned long long" dir="return">
5812 <desc>
5813 Platform-dependent identifier of the top-level VM console
5814 window, or zero if this method has performed all actions
5815 necessary to implement the <i>show window</i> semantics for
5816 the given platform and/or VirtualBox front-end.
5817 </desc>
5818 </param>
5819 </method>
5820
5821 <method name="getGuestProperty">
5822 <desc>
5823 Reads an entry from the machine's guest property store.
5824
5825 <result name="VBOX_E_INVALID_VM_STATE">
5826 Machine session is not open.
5827 </result>
5828
5829 </desc>
5830 <param name="name" type="wstring" dir="in">
5831 <desc>
5832 The name of the property to read.
5833 </desc>
5834 </param>
5835 <param name="value" type="wstring" dir="out">
5836 <desc>
5837 The value of the property. If the property does not exist then this
5838 will be empty.
5839 </desc>
5840 </param>
5841 <param name="timestamp" type="unsigned long long" dir="out">
5842 <desc>
5843 The time at which the property was last modified, as seen by the
5844 server process.
5845 </desc>
5846 </param>
5847 <param name="flags" type="wstring" dir="out">
5848 <desc>
5849 Additional property parameters, passed as a comma-separated list of
5850 "name=value" type entries.
5851 </desc>
5852 </param>
5853 </method>
5854
5855 <method name="getGuestPropertyValue">
5856 <desc>
5857 Reads a value from the machine's guest property store.
5858
5859 <result name="VBOX_E_INVALID_VM_STATE">
5860 Machine session is not open.
5861 </result>
5862
5863 </desc>
5864 <param name="property" type="wstring" dir="in">
5865 <desc>
5866 The name of the property to read.
5867 </desc>
5868 </param>
5869 <param name="value" type="wstring" dir="return">
5870 <desc>
5871 The value of the property. If the property does not exist then this
5872 will be empty.
5873 </desc>
5874 </param>
5875 </method>
5876
5877 <method name="getGuestPropertyTimestamp">
5878 <desc>
5879 Reads a property timestamp from the machine's guest property store.
5880
5881 <result name="VBOX_E_INVALID_VM_STATE">
5882 Machine session is not open.
5883 </result>
5884
5885 </desc>
5886 <param name="property" type="wstring" dir="in">
5887 <desc>
5888 The name of the property to read.
5889 </desc>
5890 </param>
5891 <param name="value" type="unsigned long long" dir="return">
5892 <desc>
5893 The timestamp. If the property does not exist then this will be
5894 empty.
5895 </desc>
5896 </param>
5897 </method>
5898
5899 <method name="setGuestProperty">
5900 <desc>
5901 Sets, changes or deletes an entry in the machine's guest property
5902 store.
5903
5904 <result name="E_ACCESSDENIED">
5905 Property cannot be changed.
5906 </result>
5907 <result name="E_INVALIDARG">
5908 Invalid @a flags.
5909 </result>
5910 <result name="VBOX_E_INVALID_VM_STATE">
5911 Virtual machine is not mutable or session not open.
5912 </result>
5913 <result name="VBOX_E_INVALID_OBJECT_STATE">
5914 Cannot set transient property when machine not running.
5915 </result>
5916
5917 </desc>
5918 <param name="property" type="wstring" dir="in">
5919 <desc>
5920 The name of the property to set, change or delete.
5921 </desc>
5922 </param>
5923 <param name="value" type="wstring" dir="in">
5924 <desc>
5925 The new value of the property to set, change or delete. If the
5926 property does not yet exist and value is non-empty, it will be
5927 created. If the value is @c null or empty, the property will be
5928 deleted if it exists.
5929 </desc>
5930 </param>
5931 <param name="flags" type="wstring" dir="in">
5932 <desc>
5933 Additional property parameters, passed as a comma-separated list of
5934 "name=value" type entries.
5935 </desc>
5936 </param>
5937 </method>
5938
5939 <method name="setGuestPropertyValue">
5940 <desc>
5941 Sets, changes or deletes a value in the machine's guest property
5942 store. The flags field will be left unchanged or created empty for a
5943 new property.
5944
5945 <result name="E_ACCESSDENIED">
5946 Property cannot be changed.
5947 </result>
5948 <result name="VBOX_E_INVALID_VM_STATE">
5949 Virtual machine is not mutable or session not open.
5950 </result>
5951 <result name="VBOX_E_INVALID_OBJECT_STATE">
5952 Cannot set transient property when machine not running.
5953 </result>
5954 </desc>
5955
5956 <param name="property" type="wstring" dir="in">
5957 <desc>
5958 The name of the property to set, change or delete.
5959 </desc>
5960 </param>
5961 <param name="value" type="wstring" dir="in">
5962 <desc>
5963 The new value of the property to set, change or delete. If the
5964 property does not yet exist and value is non-empty, it will be
5965 created. If the value is @c null or empty, the property will be
5966 deleted if it exists.
5967 </desc>
5968 </param>
5969 </method>
5970
5971 <method name="enumerateGuestProperties">
5972 <desc>
5973 Return a list of the guest properties matching a set of patterns along
5974 with their values, time stamps and flags.
5975 </desc>
5976 <param name="patterns" type="wstring" dir="in">
5977 <desc>
5978 The patterns to match the properties against, separated by '|'
5979 characters. If this is empty or @c null, all properties will match.
5980 </desc>
5981 </param>
5982 <param name="name" type="wstring" dir="out" safearray="yes">
5983 <desc>
5984 The names of the properties returned.
5985 </desc>
5986 </param>
5987 <param name="value" type="wstring" dir="out" safearray="yes">
5988 <desc>
5989 The values of the properties returned. The array entries match the
5990 corresponding entries in the @a name array.
5991 </desc>
5992 </param>
5993 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
5994 <desc>
5995 The time stamps of the properties returned. The array entries match
5996 the corresponding entries in the @a name array.
5997 </desc>
5998 </param>
5999 <param name="flags" type="wstring" dir="out" safearray="yes">
6000 <desc>
6001 The flags of the properties returned. The array entries match the
6002 corresponding entries in the @a name array.
6003 </desc>
6004 </param>
6005 </method>
6006
6007 <method name="querySavedThumbnailSize">
6008 <desc>
6009 Returns size in bytes and dimensions in pixels of a saved thumbnail bitmap from saved state.
6010 </desc>
6011 <param name="size" type="unsigned long" dir="out">
6012 <desc>
6013 Size of buffer required to store the bitmap.
6014 </desc>
6015 </param>
6016 <param name="width" type="unsigned long" dir="out">
6017 <desc>
6018 Bitmap width.
6019 </desc>
6020 </param>
6021 <param name="height" type="unsigned long" dir="out">
6022 <desc>
6023 Bitmap height.
6024 </desc>
6025 </param>
6026 </method>
6027
6028 <method name="readSavedThumbnailToArray">
6029 <desc>
6030 Thumbnail is retrieved to an array of bytes in uncompressed 32-bit BGRA or RGBA format.
6031 </desc>
6032 <param name="BGR" type="boolean" dir="in">
6033 <desc>
6034 How to order bytes in the pixel. A pixel consists of 4 bytes. If this parameter is true, then
6035 bytes order is: B, G, R, 0xFF. If this parameter is false, then bytes order is: R, G, B, 0xFF.
6036 </desc>
6037 </param>
6038 <param name="width" type="unsigned long" dir="out">
6039 <desc>
6040 Bitmap width.
6041 </desc>
6042 </param>
6043 <param name="height" type="unsigned long" dir="out">
6044 <desc>
6045 Bitmap height.
6046 </desc>
6047 </param>
6048 <param name="data" type="octet" dir="return" safearray="yes">
6049 <desc>
6050 Array with resulting bitmap data.
6051 </desc>
6052 </param>
6053 </method>
6054
6055 <method name="querySavedScreenshotPNGSize">
6056 <desc>
6057 Returns size in bytes and dimensions of a saved PNG image of screenshot from saved state.
6058 </desc>
6059 <param name="size" type="unsigned long" dir="out">
6060 <desc>
6061 Size of buffer required to store the PNG binary data.
6062 </desc>
6063 </param>
6064 <param name="width" type="unsigned long" dir="out">
6065 <desc>
6066 Image width.
6067 </desc>
6068 </param>
6069 <param name="height" type="unsigned long" dir="out">
6070 <desc>
6071 Image height.
6072 </desc>
6073 </param>
6074 </method>
6075
6076 <method name="readSavedScreenshotPNGToArray">
6077 <desc>
6078 Screenshot in PNG format is retrieved to an array of bytes.
6079 </desc>
6080 <param name="width" type="unsigned long" dir="out">
6081 <desc>
6082 Image width.
6083 </desc>
6084 </param>
6085 <param name="height" type="unsigned long" dir="out">
6086 <desc>
6087 Image height.
6088 </desc>
6089 </param>
6090 <param name="data" type="octet" dir="return" safearray="yes">
6091 <desc>
6092 Array with resulting PNG data.
6093 </desc>
6094 </param>
6095 </method>
6096
6097 <method name="hotPlugCPU">
6098 <desc>
6099 Plugs a CPU into the machine.
6100 </desc>
6101 <param name="cpu" type="unsigned long" dir="in">
6102 <desc>
6103 The CPU id to insert.
6104 </desc>
6105 </param>
6106 </method>
6107
6108 <method name="hotUnplugCPU">
6109 <desc>
6110 Removes a CPU from the machine.
6111 </desc>
6112 <param name="cpu" type="unsigned long" dir="in">
6113 <desc>
6114 The CPU id to remove.
6115 </desc>
6116 </param>
6117 </method>
6118
6119 <method name="getCPUStatus">
6120 <desc>
6121 Returns the current status of the given CPU.
6122 </desc>
6123 <param name="cpu" type="unsigned long" dir="in">
6124 <desc>
6125 The CPU id to check for.
6126 </desc>
6127 </param>
6128 <param name="attached" type="boolean" dir="return">
6129 <desc>
6130 Status of the CPU.
6131 </desc>
6132 </param>
6133 </method>
6134
6135 <method name="readLog">
6136 <desc>
6137 Reads the VM log file. The chunk size is limited, so even if you
6138 ask for a big piece there might be less data returned.
6139 </desc>
6140 <param name="idx" type="unsigned long" dir="in">
6141 <desc>
6142 Which log file to read. 0=current log file.
6143 </desc>
6144 </param>
6145 <param name="offset" type="unsigned long long" dir="in">
6146 <desc>
6147 Offset in the log file.
6148 </desc>
6149 </param>
6150 <param name="size" type="unsigned long long" dir="in">
6151 <desc>
6152 Chunk size to read in the log file.
6153 </desc>
6154 </param>
6155 <param name="data" type="octet" dir="return" safearray="yes">
6156 <desc>
6157 Data read from the log file. A data size of 0 means end of file
6158 if the requested chunk size was not 0.
6159 </desc>
6160 </param>
6161 </method>
6162 </interface>
6163
6164 <!--
6165 // IConsole
6166 /////////////////////////////////////////////////////////////////////////
6167 -->
6168
6169 <interface
6170 name="IConsoleCallback" extends="$unknown"
6171 uuid="60703f8d-81e4-4b45-a147-dcfd07692b19"
6172 wsmap="suppress"
6173 >
6174
6175 <desc>
6176 This interface is used by a client of the Main API that need to
6177 be notified of events. For example, a graphical user interface
6178 can use this to learn about machine state changes so they can
6179 update the list of virtual machines without having to rely
6180 on polling.
6181
6182 Whenever relevant events occur in VirtualBox, the callbacks in
6183 objects of this interface are called. In order for this to be
6184 useful, a client needs to create its own subclass that implements
6185 this interface in which the methods for the relevant callbacks
6186 are overridden. An instance of this subclass interface can then
6187 be passed to <link to="IConsole::registerCallback" />.
6188 </desc>
6189
6190 <method name="onMousePointerShapeChange">
6191 <desc>
6192 Notification when the guest mouse pointer shape has
6193 changed. The new shape data is given.
6194 </desc>
6195 <param name="visible" type="boolean" dir="in">
6196 <desc>
6197 Flag whether the pointer is visible.
6198 </desc>
6199 </param>
6200 <param name="alpha" type="boolean" dir="in">
6201 <desc>
6202 Flag whether the pointer has an alpha channel.
6203 </desc>
6204 </param>
6205 <param name="xHot" type="unsigned long" dir="in">
6206 <desc>
6207 The pointer hot spot x coordinate.
6208 </desc>
6209 </param>
6210 <param name="yHot" type="unsigned long" dir="in">
6211 <desc>
6212 The pointer hot spot y coordinate.
6213 </desc>
6214 </param>
6215 <param name="width" type="unsigned long" dir="in">
6216 <desc>
6217 Width of the pointer shape in pixels.
6218 </desc>
6219 </param>
6220 <param name="height" type="unsigned long" dir="in">
6221 <desc>
6222 Height of the pointer shape in pixels.
6223 </desc>
6224 </param>
6225 <param name="shape" type="octet" mod="ptr" dir="in">
6226 <desc>
6227 Address of the shape buffer.
6228
6229 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
6230 followed by a 32-bpp XOR (color) mask.
6231
6232 For pointers without alpha channel the XOR mask pixels are 32
6233 bit values: (lsb)BGR0(msb). For pointers with alpha channel
6234 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
6235
6236 An AND mask is used for pointers with alpha channel, so if the
6237 callback does not support alpha, the pointer could be
6238 displayed as a normal color pointer.
6239
6240 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
6241 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
6242 height</tt>. The padding bits at the end of each scanline are
6243 undefined.
6244
6245 The XOR mask follows the AND mask on the next 4-byte aligned
6246 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
6247 Bytes in the gap between the AND and the XOR mask are undefined.
6248 The XOR mask scanlines have no gap between them and the size of
6249 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
6250
6251 <note>
6252 If @a shape is 0, only the pointer visibility is changed.
6253 </note>
6254 </desc>
6255 </param>
6256 </method>
6257
6258 <method name="onMouseCapabilityChange">
6259 <desc>
6260 Notification when the mouse capabilities reported by the
6261 guest have changed. The new capabilities are passed.
6262 </desc>
6263 <param name="supportsAbsolute" type="boolean" dir="in"/>
6264 <param name="supportsRelative" type="boolean" dir="in"/>
6265 <param name="needsHostCursor" type="boolean" dir="in"/>
6266 </method>
6267
6268 <method name="onKeyboardLedsChange">
6269 <desc>
6270 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
6271 to alter the state of the keyboard LEDs.
6272 </desc>
6273 <param name="numLock" type="boolean" dir="in"/>
6274 <param name="capsLock" type="boolean" dir="in"/>
6275 <param name="scrollLock" type="boolean" dir="in"/>
6276 </method>
6277
6278 <method name="onStateChange">
6279 <desc>
6280 Notification when the execution state of the machine has changed.
6281 The new state will be given.
6282 </desc>
6283 <param name="state" type="MachineState" dir="in"/>
6284 </method>
6285
6286 <method name="onAdditionsStateChange">
6287 <desc>
6288 Notification when a Guest Additions property changes.
6289 Interested callees should query IGuest attributes to
6290 find out what has changed.
6291 </desc>
6292 </method>
6293
6294 <method name="onNetworkAdapterChange">
6295 <desc>
6296 Notification when a property of one of the
6297 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
6298 changes. Interested callees should use INetworkAdapter methods and
6299 attributes to find out what has changed.
6300 </desc>
6301 <param name="networkAdapter" type="INetworkAdapter" dir="in">
6302 <desc>Network adapter that is subject to change.</desc>
6303 </param>
6304 </method>
6305
6306 <method name="onSerialPortChange">
6307 <desc>
6308 Notification when a property of one of the
6309 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
6310 Interested callees should use ISerialPort methods and attributes
6311 to find out what has changed.
6312 </desc>
6313 <param name="serialPort" type="ISerialPort" dir="in">
6314 <desc>Serial port that is subject to change.</desc>
6315 </param>
6316 </method>
6317
6318 <method name="onParallelPortChange">
6319 <desc>
6320 Notification when a property of one of the
6321 virtual <link to="IMachine::getParallelPort">parallel ports</link>
6322 changes. Interested callees should use ISerialPort methods and
6323 attributes to find out what has changed.
6324 </desc>
6325 <param name="parallelPort" type="IParallelPort" dir="in">
6326 <desc>Parallel port that is subject to change.</desc>
6327 </param>
6328 </method>
6329
6330 <method name="onStorageControllerChange">
6331 <desc>
6332 Notification when a property of one of the
6333 virtual <link to="IMachine::storageControllers">storage controllers</link>
6334 changes. Interested callees should query the corresponding collections
6335 to find out what has changed.
6336 </desc>
6337 </method>
6338
6339 <method name="onMediumChange">
6340 <desc>
6341 Notification when a
6342 <link to="IMachine::mediumAttachments">medium attachment</link>
6343 changes.
6344 </desc>
6345 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
6346 <desc>Medium attachment that is subject to change.</desc>
6347 </param>
6348 </method>
6349
6350 <method name="onCPUChange">
6351 <desc>
6352 Notification when a CPU changes.
6353 </desc>
6354 <param name="cpu" type="unsigned long" dir="in">
6355 <desc>The CPU which changed</desc>
6356 </param>
6357 <param name="add" type="boolean" dir="in">
6358 <desc>Flag whether the CPU was added or removed</desc>
6359 </param>
6360 </method>
6361
6362 <method name="onVRDPServerChange">
6363 <desc>
6364 Notification when a property of the
6365 <link to="IMachine::VRDPServer">VRDP server</link> changes.
6366 Interested callees should use IVRDPServer methods and attributes to
6367 find out what has changed.
6368 </desc>
6369 </method>
6370
6371 <method name="onRemoteDisplayInfoChange">
6372 <desc>
6373 Notification when the status of the VRDP server changes. Interested callees
6374 should use <link to="IConsole::RemoteDisplayInfo">IRemoteDisplayInfo</link>
6375 attributes to find out what is the current status.
6376 </desc>
6377 </method>
6378
6379 <method name="onUSBControllerChange">
6380 <desc>
6381 Notification when a property of the virtual
6382 <link to="IMachine::USBController">USB controller</link> changes.
6383 Interested callees should use IUSBController methods and attributes to
6384 find out what has changed.
6385 </desc>
6386 </method>
6387
6388 <method name="onUSBDeviceStateChange">
6389 <desc>
6390 Notification when a USB device is attached to or detached from
6391 the virtual USB controller.
6392
6393 This notification is sent as a result of the indirect
6394 request to attach the device because it matches one of the
6395 machine USB filters, or as a result of the direct request
6396 issued by <link to="IConsole::attachUSBDevice"/> or
6397 <link to="IConsole::detachUSBDevice"/>.
6398
6399 This notification is sent in case of both a succeeded and a
6400 failed request completion. When the request succeeds, the
6401 @a error parameter is @c null, and the given device has been
6402 already added to (when @a attached is @c true) or removed from
6403 (when @a attached is @c false) the collection represented by
6404 <link to="IConsole::USBDevices"/>. On failure, the collection
6405 doesn't change and the @a error parameter represents the error
6406 message describing the failure.
6407
6408 </desc>
6409 <param name="device" type="IUSBDevice" dir="in">
6410 <desc>Device that is subject to state change.</desc>
6411 </param>
6412 <param name="attached" type="boolean" dir="in">
6413 <desc>
6414 @c true if the device was attached and @c false otherwise.
6415 </desc>
6416 </param>
6417 <param name="error" type="IVirtualBoxErrorInfo" dir="in">
6418 <desc>
6419 @c null on success or an error message object on failure.
6420 </desc>
6421 </param>
6422 </method>
6423
6424 <method name="onSharedFolderChange">
6425 <desc>
6426 Notification when a shared folder is added or removed.
6427 The @a scope argument defines one of three scopes:
6428 <link to="IVirtualBox::sharedFolders">global shared folders</link>
6429 (<link to="Scope_Global">Global</link>),
6430 <link to="IMachine::sharedFolders">permanent shared folders</link> of
6431 the machine (<link to="Scope_Machine">Machine</link>) or <link
6432 to="IConsole::sharedFolders">transient shared folders</link> of the
6433 machine (<link to="Scope_Session">Session</link>). Interested callees
6434 should use query the corresponding collections to find out what has
6435 changed.
6436 </desc>
6437 <param name="scope" type="Scope" dir="in">
6438 <desc>Scope of the notification.</desc>
6439 </param>
6440 </method>
6441
6442 <method name="onRuntimeError">
6443 <desc>
6444 Notification when an error happens during the virtual
6445 machine execution.
6446
6447 There are three kinds of runtime errors:
6448 <ul>
6449 <li><i>fatal</i></li>
6450 <li><i>non-fatal with retry</i></li>
6451 <li><i>non-fatal warnings</i></li>
6452 </ul>
6453
6454 <b>Fatal</b> errors are indicated by the @a fatal parameter set
6455 to @c true. In case of fatal errors, the virtual machine
6456 execution is always paused before calling this notification, and
6457 the notification handler is supposed either to immediately save
6458 the virtual machine state using <link to="IConsole::saveState"/>
6459 or power it off using <link to="IConsole::powerDown"/>.
6460 Resuming the execution can lead to unpredictable results.
6461
6462 <b>Non-fatal</b> errors and warnings are indicated by the
6463 @a fatal parameter set to @c false. If the virtual machine
6464 is in the Paused state by the time the error notification is
6465 received, it means that the user can <i>try to resume</i> the machine
6466 execution after attempting to solve the problem that caused the
6467 error. In this case, the notification handler is supposed
6468 to show an appropriate message to the user (depending on the
6469 value of the @a id parameter) that offers several actions such
6470 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
6471 wants to retry, the notification handler should continue
6472 the machine execution using the <link to="IConsole::resume"/>
6473 call. If the machine execution is not Paused during this
6474 notification, then it means this notification is a <i>warning</i>
6475 (for example, about a fatal condition that can happen very soon);
6476 no immediate action is required from the user, the machine
6477 continues its normal execution.
6478
6479 Note that in either case the notification handler
6480 <b>must not</b> perform any action directly on a thread
6481 where this notification is called. Everything it is allowed to
6482 do is to post a message to another thread that will then talk
6483 to the user and take the corresponding action.
6484
6485 Currently, the following error identifiers are known:
6486 <ul>
6487 <li><tt>"HostMemoryLow"</tt></li>
6488 <li><tt>"HostAudioNotResponding"</tt></li>
6489 <li><tt>"VDIStorageFull"</tt></li>
6490 <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
6491 </ul>
6492
6493 <note>
6494 This notification is not designed to be implemented by
6495 more than one callback at a time. If you have multiple
6496 IConsoleCallback instances registered on the given
6497 IConsole object, make sure you simply do nothing but
6498 return @c S_OK from all but one of them that does actual
6499 user notification and performs necessary actions.
6500 </note>
6501
6502 </desc>
6503 <param name="fatal" type="boolean" dir="in">
6504 <desc>Whether the error is fatal or not</desc>
6505 </param>
6506 <param name="id" type="wstring" dir="in">
6507 <desc>Error identifier</desc>
6508 </param>
6509 <param name="message" type="wstring" dir="in">
6510 <desc>Optional error message</desc>
6511 </param>
6512 </method>
6513
6514 <method name="onCanShowWindow">
6515 <desc>
6516 Notification when a call to
6517 <link to="IMachine::canShowConsoleWindow"/> is made by a
6518 front-end to check if a subsequent call to
6519 <link to="IMachine::showConsoleWindow"/> can succeed.
6520
6521 The callee should give an answer appropriate to the current
6522 machine state in the @a canShow argument. This answer must
6523 remain valid at least until the next
6524 <link to="IConsole::state">machine state</link> change.
6525
6526 <note>
6527 This notification is not designed to be implemented by
6528 more than one callback at a time. If you have multiple
6529 IConsoleCallback instances registered on the given
6530 IConsole object, make sure you simply do nothing but
6531 return @c true and @c S_OK from all but one of them that
6532 actually manages console window activation.
6533 </note>
6534 </desc>
6535 <param name="canShow" type="boolean" dir="return">
6536 <desc>
6537 @c true if the console window can be shown and @c false otherwise.
6538 </desc>
6539 </param>
6540 </method>
6541
6542 <method name="onShowWindow">
6543 <desc>
6544 Notification when a call to
6545 <link to="IMachine::showConsoleWindow"/>
6546 requests the console window to be activated and brought to
6547 foreground on the desktop of the host PC.
6548
6549 This notification should cause the VM console process to
6550 perform the requested action as described above. If it is
6551 impossible to do it at a time of this notification, this
6552 method should return a failure.
6553
6554 Note that many modern window managers on many platforms
6555 implement some sort of focus stealing prevention logic, so
6556 that it may be impossible to activate a window without the
6557 help of the currently active application (which is supposedly
6558 an initiator of this notification). In this case, this method
6559 must return a non-zero identifier that represents the
6560 top-level window of the VM console process. The caller, if it
6561 represents a currently active process, is responsible to use
6562 this identifier (in a platform-dependent manner) to perform
6563 actual window activation.
6564
6565 This method must set @a winId to zero if it has performed all
6566 actions necessary to complete the request and the console
6567 window is now active and in foreground, to indicate that no
6568 further action is required on the caller's side.
6569
6570 <note>
6571 This notification is not designed to be implemented by
6572 more than one callback at a time. If you have multiple
6573 IConsoleCallback instances registered on the given
6574 IConsole object, make sure you simply do nothing but
6575 return @c S_OK from all but one of them that actually
6576 manages console window activation.
6577 </note>
6578 </desc>
6579 <param name="winId" type="unsigned long long" dir="return">
6580 <desc>
6581 Platform-dependent identifier of the top-level VM console
6582 window, or zero if this method has performed all actions
6583 necessary to implement the <i>show window</i> semantics for
6584 the given platform and/or this VirtualBox front-end.
6585 </desc>
6586 </param>
6587 </method>
6588
6589 </interface>
6590
6591 <interface
6592 name="IRemoteDisplayInfo" extends="$unknown"
6593 uuid="b3741084-806f-4c3b-8c42-ebad1a81e45a"
6594 wsmap="struct"
6595 >
6596 <desc>
6597 Contains information about the remote display (VRDP) capabilities and status.
6598 This is used in the <link to="IConsole::remoteDisplayInfo" /> attribute.
6599 </desc>
6600
6601 <attribute name="active" type="boolean" readonly="yes">
6602 <desc>
6603 Whether the remote display connection is active.
6604 </desc>
6605 </attribute>
6606
6607 <attribute name="port" type="long" readonly="yes">
6608 <desc>
6609 VRDP server port number. If this property is equal to <tt>0</tt>, then
6610 the VRDP server failed to start, usually because there are no free TCP
6611 ports to bind to. If this property is equal to <tt>-1</tt>, then the VRDP
6612 server has not yet been started.
6613 </desc>
6614 </attribute>
6615
6616 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
6617 <desc>
6618 How many times a client connected.
6619 </desc>
6620 </attribute>
6621
6622 <attribute name="beginTime" type="long long" readonly="yes">
6623 <desc>
6624 When the last connection was established, in milliseconds since 1970-01-01 UTC.
6625 </desc>
6626 </attribute>
6627
6628 <attribute name="endTime" type="long long" readonly="yes">
6629 <desc>
6630 When the last connection was terminated or the current time, if
6631 connection is still active, in milliseconds since 1970-01-01 UTC.
6632 </desc>
6633 </attribute>
6634
6635 <attribute name="bytesSent" type="unsigned long long" readonly="yes">
6636 <desc>
6637 How many bytes were sent in last or current, if still active, connection.
6638 </desc>
6639 </attribute>
6640
6641 <attribute name="bytesSentTotal" type="unsigned long long" readonly="yes">
6642 <desc>
6643 How many bytes were sent in all connections.
6644 </desc>
6645 </attribute>
6646
6647 <attribute name="bytesReceived" type="unsigned long long" readonly="yes">
6648 <desc>
6649 How many bytes were received in last or current, if still active, connection.
6650 </desc>
6651 </attribute>
6652
6653 <attribute name="bytesReceivedTotal" type="unsigned long long" readonly="yes">
6654 <desc>
6655 How many bytes were received in all connections.
6656 </desc>
6657 </attribute>
6658
6659 <attribute name="user" type="wstring" readonly="yes">
6660 <desc>
6661 Login user name supplied by the client.
6662 </desc>
6663 </attribute>
6664
6665 <attribute name="domain" type="wstring" readonly="yes">
6666 <desc>
6667 Login domain name supplied by the client.
6668 </desc>
6669 </attribute>
6670
6671 <attribute name="clientName" type="wstring" readonly="yes">
6672 <desc>
6673 The client name supplied by the client.
6674 </desc>
6675 </attribute>
6676
6677 <attribute name="clientIP" type="wstring" readonly="yes">
6678 <desc>
6679 The IP address of the client.
6680 </desc>
6681 </attribute>
6682
6683 <attribute name="clientVersion" type="unsigned long" readonly="yes">
6684 <desc>
6685 The client software version number.
6686 </desc>
6687 </attribute>
6688
6689 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
6690 <desc>
6691 Public key exchange method used when connection was established.
6692 Values: 0 - RDP4 public key exchange scheme.
6693 1 - X509 certificates were sent to client.
6694 </desc>
6695 </attribute>
6696
6697 </interface>
6698
6699 <interface
6700 name="IConsole" extends="$unknown"
6701 uuid="6375231a-c17c-464b-92cb-ae9e128d71c3"
6702 wsmap="managed"
6703 >
6704 <desc>
6705 The IConsole interface represents an interface to control virtual
6706 machine execution.
6707
6708 The console object that implements the IConsole interface is obtained
6709 from a session object after the session for the given machine has been
6710 opened using one of <link to="IVirtualBox::openSession"/>,
6711 <link to="IVirtualBox::openRemoteSession"/> or
6712 <link to="IVirtualBox::openExistingSession"/> methods.
6713
6714 Methods of the IConsole interface allow the caller to query the current
6715 virtual machine execution state, pause the machine or power it down, save
6716 the machine state or take a snapshot, attach and detach removable media
6717 and so on.
6718
6719 <see>ISession</see>
6720 </desc>
6721
6722 <attribute name="machine" type="IMachine" readonly="yes">
6723 <desc>
6724 Machine object this console is sessioned with.
6725 <note>
6726 This is a convenience property, it has the same value as
6727 <link to="ISession::machine"/> of the corresponding session
6728 object.
6729 </note>
6730 </desc>
6731 </attribute>
6732
6733 <attribute name="state" type="MachineState" readonly="yes">
6734 <desc>
6735 Current execution state of the machine.
6736 <note>
6737 This property always returns the same value as the corresponding
6738 property of the IMachine object this console is sessioned with.
6739 For the process that owns (executes) the VM, this is the
6740 preferable way of querying the VM state, because no IPC
6741 calls are made.
6742 </note>
6743 </desc>
6744 </attribute>
6745
6746 <attribute name="guest" type="IGuest" readonly="yes">
6747 <desc>Guest object.</desc>
6748 </attribute>
6749
6750 <attribute name="keyboard" type="IKeyboard" readonly="yes">
6751 <desc>
6752 Virtual keyboard object.
6753 <note>
6754 If the machine is not running, any attempt to use
6755 the returned object will result in an error.
6756 </note>
6757 </desc>
6758 </attribute>
6759
6760 <attribute name="mouse" type="IMouse" readonly="yes">
6761 <desc>
6762 Virtual mouse object.
6763 <note>
6764 If the machine is not running, any attempt to use
6765 the returned object will result in an error.
6766 </note>
6767 </desc>
6768 </attribute>
6769
6770 <attribute name="display" type="IDisplay" readonly="yes">
6771 <desc>Virtual display object.
6772 <note>
6773 If the machine is not running, any attempt to use
6774 the returned object will result in an error.
6775 </note>
6776 </desc>
6777 </attribute>
6778
6779 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
6780 <desc>Debugging interface.</desc>
6781 </attribute>
6782
6783 <attribute name="USBDevices" type="IUSBDevice" readonly="yes" safearray="yes">
6784 <desc>
6785 Collection of USB devices currently attached to the virtual
6786 USB controller.
6787 <note>
6788 The collection is empty if the machine is not running.
6789 </note>
6790 </desc>
6791 </attribute>
6792
6793 <attribute name="remoteUSBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
6794 <desc>
6795 List of USB devices currently attached to the remote VRDP client.
6796 Once a new device is physically attached to the remote host computer,
6797 it appears in this list and remains there until detached.
6798 </desc>
6799 </attribute>
6800
6801 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
6802 <desc>
6803 Collection of shared folders for the current session. These folders
6804 are called transient shared folders because they are available to the
6805 guest OS running inside the associated virtual machine only for the
6806 duration of the session (as opposed to
6807 <link to="IMachine::sharedFolders"/> which represent permanent shared
6808 folders). When the session is closed (e.g. the machine is powered down),
6809 these folders are automatically discarded.
6810
6811 New shared folders are added to the collection using
6812 <link to="#createSharedFolder"/>. Existing shared folders can be
6813 removed using <link to="#removeSharedFolder"/>.
6814 </desc>
6815 </attribute>
6816
6817 <attribute name="remoteDisplayInfo" type="IRemoteDisplayInfo" readonly="yes">
6818 <desc>
6819 Interface that provides information on Remote Display (VRDP) connection.
6820 </desc>
6821 </attribute>
6822
6823 <method name="powerUp">
6824 <desc>
6825 Starts the virtual machine execution using the current machine
6826 state (that is, its current execution state, current settings and
6827 current storage devices).
6828
6829 If the machine is powered off or aborted, the execution will
6830 start from the beginning (as if the real hardware were just
6831 powered on).
6832
6833 If the machine is in the <link to="MachineState_Saved"/> state,
6834 it will continue its execution the point where the state has
6835 been saved.
6836
6837 <note>
6838 Unless you are trying to write a new VirtualBox front-end that
6839 performs direct machine execution (like the VirtualBox or VBoxSDL
6840 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
6841 session opened by <link to="IVirtualBox::openSession"/> and use this
6842 session only to change virtual machine settings. If you simply want to
6843 start virtual machine execution using one of the existing front-ends
6844 (for example the VirtualBox GUI or headless server), simply use
6845 <link to="IVirtualBox::openRemoteSession"/>; these front-ends will
6846 power up the machine automatically for you.
6847 </note>
6848
6849 <see>#saveState</see>
6850 <result name="VBOX_E_INVALID_VM_STATE">
6851 Virtual machine already running.
6852 </result>
6853 <result name="VBOX_E_HOST_ERROR">
6854 Host interface does not exist or name not set.
6855 </result>
6856 <result name="VBOX_E_FILE_ERROR">
6857 Invalid saved state file.
6858 </result>
6859 </desc>
6860 <param name="progress" type="IProgress" dir="return">
6861 <desc>Progress object to track the operation completion.</desc>
6862 </param>
6863 </method>
6864
6865 <method name="powerUpPaused">
6866 <desc>
6867 Identical to powerUp except that the VM will enter the
6868 <link to="MachineState_Paused"/> state, instead of
6869 <link to="MachineState_Running"/>.
6870
6871 <see>#powerUp</see>
6872 <result name="VBOX_E_INVALID_VM_STATE">
6873 Virtual machine already running.
6874 </result>
6875 <result name="VBOX_E_HOST_ERROR">
6876 Host interface does not exist or name not set.
6877 </result>
6878 <result name="VBOX_E_FILE_ERROR">
6879 Invalid saved state file.
6880 </result>
6881 </desc>
6882 <param name="progress" type="IProgress" dir="return">
6883 <desc>Progress object to track the operation completion.</desc>
6884 </param>
6885 </method>
6886
6887 <method name="powerDown">
6888 <desc>
6889 Initiates the power down procedure to stop the virtual machine
6890 execution.
6891
6892 The completion of the power down procedure is tracked using the returned
6893 IProgress object. After the operation is complete, the machine will go
6894 to the PoweredOff state.
6895 <result name="VBOX_E_INVALID_VM_STATE">
6896 Virtual machine must be Running, Paused or Stuck to be powered down.
6897 </result>
6898 </desc>
6899 <param name="progress" type="IProgress" dir="return">
6900 <desc>Progress object to track the operation completion.</desc>
6901 </param>
6902 </method>
6903
6904 <method name="reset">
6905 <desc>Resets the virtual machine.
6906 <result name="VBOX_E_INVALID_VM_STATE">
6907 Virtual machine not in Running state.
6908 </result>
6909 <result name="VBOX_E_VM_ERROR">
6910 Virtual machine error in reset operation.
6911 </result>
6912 </desc>
6913 </method>
6914
6915 <method name="pause">
6916 <desc>Pauses the virtual machine execution.
6917 <result name="VBOX_E_INVALID_VM_STATE">
6918 Virtual machine not in Running state.
6919 </result>
6920 <result name="VBOX_E_VM_ERROR">
6921 Virtual machine error in suspend operation.
6922 </result>
6923 </desc>
6924 </method>
6925
6926 <method name="resume">
6927 <desc>Resumes the virtual machine execution.
6928 <result name="VBOX_E_INVALID_VM_STATE">
6929 Virtual machine not in Paused state.
6930 </result>
6931 <result name="VBOX_E_VM_ERROR">
6932 Virtual machine error in resume operation.
6933 </result>
6934 </desc>
6935 </method>
6936
6937 <method name="powerButton">
6938 <desc>Sends the ACPI power button event to the guest.
6939 <result name="VBOX_E_INVALID_VM_STATE">
6940 Virtual machine not in Running state.
6941 </result>
6942 <result name="VBOX_E_PDM_ERROR">
6943 Controlled power off failed.
6944 </result>
6945 </desc>
6946 </method>
6947
6948 <method name="sleepButton">
6949 <desc>Sends the ACPI sleep button event to the guest.
6950 <result name="VBOX_E_INVALID_VM_STATE">
6951 Virtual machine not in Running state.
6952 </result>
6953 <result name="VBOX_E_PDM_ERROR">
6954 Sending sleep button event failed.
6955 </result>
6956 </desc>
6957 </method>
6958
6959 <method name="getPowerButtonHandled">
6960 <desc>Checks if the last power button event was handled by guest.
6961 <result name="VBOX_E_PDM_ERROR">
6962 Checking if the event was handled by the guest OS failed.
6963 </result>
6964 </desc>
6965 <param name="handled" type="boolean" dir="return"/>
6966 </method>
6967
6968 <method name="getGuestEnteredACPIMode">
6969 <desc>Checks if the guest entered the ACPI mode G0 (working) or
6970 G1 (sleeping). If this method returns @c false, the guest will
6971 most likely not respond to external ACPI events.
6972 <result name="VBOX_E_INVALID_VM_STATE">
6973 Virtual machine not in Running state.
6974 </result>
6975 </desc>
6976 <param name="entered" type="boolean" dir="return"/>
6977 </method>
6978
6979 <method name="saveState">
6980 <desc>
6981 Saves the current execution state of a running virtual machine
6982 and stops its execution.
6983
6984 After this operation completes, the machine will go to the
6985 Saved state. Next time it is powered up, this state will
6986 be restored and the machine will continue its execution from
6987 the place where it was saved.
6988
6989 This operation differs from taking a snapshot to the effect
6990 that it doesn't create new differencing media. Also, once
6991 the machine is powered up from the state saved using this method,
6992 the saved state is deleted, so it will be impossible to return
6993 to this state later.
6994
6995 <note>
6996 On success, this method implicitly calls
6997 <link to="IMachine::saveSettings"/> to save all current machine
6998 settings (including runtime changes to the DVD medium, etc.).
6999 Together with the impossibility to change any VM settings when it is
7000 in the Saved state, this guarantees adequate hardware
7001 configuration of the machine when it is restored from the saved
7002 state file.
7003 </note>
7004
7005 <note>
7006 The machine must be in the Running or Paused state, otherwise
7007 the operation will fail.
7008 </note>
7009 <result name="VBOX_E_INVALID_VM_STATE">
7010 Virtual machine state neither Running nor Paused.
7011 </result>
7012 <result name="VBOX_E_FILE_ERROR">
7013 Failed to create directory for saved state file.
7014 </result>
7015
7016 <see><link to="#takeSnapshot"/></see>
7017 </desc>
7018 <param name="progress" type="IProgress" dir="return">
7019 <desc>Progress object to track the operation completion.</desc>
7020 </param>
7021 </method>
7022
7023 <method name="adoptSavedState">
7024 <desc>
7025 Associates the given saved state file to the virtual machine.
7026
7027 On success, the machine will go to the Saved state. Next time it is
7028 powered up, it will be restored from the adopted saved state and
7029 continue execution from the place where the saved state file was
7030 created.
7031
7032 The specified saved state file path may be absolute or relative to the
7033 folder the VM normally saves the state to (usually,
7034 <link to="IMachine::snapshotFolder"/>).
7035
7036 <note>
7037 It's a caller's responsibility to make sure the given saved state
7038 file is compatible with the settings of this virtual machine that
7039 represent its virtual hardware (memory size, storage disk configuration
7040 etc.). If there is a mismatch, the behavior of the virtual machine
7041 is undefined.
7042 </note>
7043 <result name="VBOX_E_INVALID_VM_STATE">
7044 Virtual machine state neither PoweredOff nor Aborted.
7045 </result>
7046 </desc>
7047 <param name="savedStateFile" type="wstring" dir="in">
7048 <desc>Path to the saved state file to adopt.</desc>
7049 </param>
7050 </method>
7051
7052 <method name="forgetSavedState">
7053 <desc>
7054 Forgets the saved state of the virtual machine previously created
7055 by <link to="#saveState"/>. Next time the machine is powered up, a
7056 clean boot will occur. If @a remove is @c true the saved state file
7057 is deleted.
7058 <note>
7059 This operation is equivalent to resetting or powering off
7060 the machine without doing a proper shutdown in the guest OS.
7061 </note>
7062 <result name="VBOX_E_INVALID_VM_STATE">
7063 Virtual machine not in state Saved.
7064 </result>
7065 </desc>
7066 <param name="remove" type="boolean" dir="in">
7067 <desc>If @c true remove the saved state file.</desc>
7068 </param>
7069 </method>
7070
7071 <method name="getDeviceActivity">
7072 <desc>
7073 Gets the current activity type of a given device or device group.
7074 <result name="E_INVALIDARG">
7075 Invalid device type.
7076 </result>
7077 </desc>
7078 <param name="type" type="DeviceType" dir="in"/>
7079 <param name="activity" type="DeviceActivity" dir="return"/>
7080 </method>
7081
7082 <method name="attachUSBDevice">
7083 <desc>
7084 Attaches a host USB device with the given UUID to the
7085 USB controller of the virtual machine.
7086
7087 The device needs to be in one of the following states:
7088 <link to="USBDeviceState_Busy"/>,
7089 <link to="USBDeviceState_Available"/> or
7090 <link to="USBDeviceState_Held"/>,
7091 otherwise an error is immediately returned.
7092
7093 When the device state is
7094 <link to="USBDeviceState_Busy">Busy</link>, an error may also
7095 be returned if the host computer refuses to release it for some reason.
7096
7097 <see>IUSBController::deviceFilters, USBDeviceState</see>
7098 <result name="VBOX_E_INVALID_VM_STATE">
7099 Virtual machine state neither Running nor Paused.
7100 </result>
7101 <result name="VBOX_E_PDM_ERROR">
7102 Virtual machine does not have a USB controller.
7103 </result>
7104 </desc>
7105 <param name="id" type="uuid" mod="string" dir="in">
7106 <desc>UUID of the host USB device to attach.</desc>
7107 </param>
7108 </method>
7109
7110 <method name="detachUSBDevice">
7111 <desc>
7112 Detaches an USB device with the given UUID from the USB controller
7113 of the virtual machine.
7114
7115 After this method succeeds, the VirtualBox server re-initiates
7116 all USB filters as if the device were just physically attached
7117 to the host, but filters of this machine are ignored to avoid
7118 a possible automatic re-attachment.
7119
7120 <see>IUSBController::deviceFilters, USBDeviceState</see>
7121
7122 <result name="VBOX_E_PDM_ERROR">
7123 Virtual machine does not have a USB controller.
7124 </result>
7125 <result name="E_INVALIDARG">
7126 USB device not attached to this virtual machine.
7127 </result>
7128 </desc>
7129 <param name="id" type="uuid" mod="string" dir="in">
7130 <desc>UUID of the USB device to detach.</desc>
7131 </param>
7132 <param name="device" type="IUSBDevice" dir="return">
7133 <desc>Detached USB device.</desc>
7134 </param>
7135 </method>
7136
7137 <method name="findUSBDeviceByAddress">
7138 <desc>
7139 Searches for a USB device with the given host address.
7140
7141 <result name="VBOX_E_OBJECT_NOT_FOUND">
7142 Given @c name does not correspond to any USB device.
7143 </result>
7144
7145 <see>IUSBDevice::address</see>
7146 </desc>
7147 <param name="name" type="wstring" dir="in">
7148 <desc>
7149 Address of the USB device (as assigned by the host) to
7150 search for.
7151 </desc>
7152 </param>
7153 <param name="device" type="IUSBDevice" dir="return">
7154 <desc>Found USB device object.</desc>
7155 </param>
7156 </method>
7157
7158 <method name="findUSBDeviceById">
7159 <desc>
7160 Searches for a USB device with the given UUID.
7161
7162 <result name="VBOX_E_OBJECT_NOT_FOUND">
7163 Given @c id does not correspond to any USB device.
7164 </result>
7165
7166 <see>IUSBDevice::id</see>
7167 </desc>
7168 <param name="id" type="uuid" mod="string" dir="in">
7169 <desc>UUID of the USB device to search for.</desc>
7170 </param>
7171 <param name="device" type="IUSBDevice" dir="return">
7172 <desc>Found USB device object.</desc>
7173 </param>
7174 </method>
7175
7176 <method name="createSharedFolder">
7177 <desc>
7178 Creates a transient new shared folder by associating the given logical
7179 name with the given host path, adds it to the collection of shared
7180 folders and starts sharing it. Refer to the description of
7181 <link to="ISharedFolder"/> to read more about logical names.
7182
7183 <result name="VBOX_E_INVALID_VM_STATE">
7184 Virtual machine in Saved state or currently changing state.
7185 </result>
7186 <result name="VBOX_E_FILE_ERROR">
7187 Shared folder already exists or not accessible.
7188 </result>
7189 </desc>
7190 <param name="name" type="wstring" dir="in">
7191 <desc>Unique logical name of the shared folder.</desc>
7192 </param>
7193 <param name="hostPath" type="wstring" dir="in">
7194 <desc>Full path to the shared folder in the host file system.</desc>
7195 </param>
7196 <param name="writable" type="boolean" dir="in">
7197 <desc>Whether the share is writable or readonly</desc>
7198 </param>
7199 </method>
7200
7201 <method name="removeSharedFolder">
7202 <desc>
7203 Removes a transient shared folder with the given name previously
7204 created by <link to="#createSharedFolder"/> from the collection of
7205 shared folders and stops sharing it.
7206 <result name="VBOX_E_INVALID_VM_STATE">
7207 Virtual machine in Saved state or currently changing state.
7208 </result>
7209 <result name="VBOX_E_FILE_ERROR">
7210 Shared folder does not exists.
7211 </result>
7212 </desc>
7213 <param name="name" type="wstring" dir="in">
7214 <desc>Logical name of the shared folder to remove.</desc>
7215 </param>
7216 </method>
7217
7218 <method name="takeSnapshot">
7219 <desc>
7220 Saves the current execution state
7221 and all settings of the machine and creates differencing images
7222 for all normal (non-independent) media.
7223 See <link to="ISnapshot" /> for an introduction to snapshots.
7224
7225 This method can be called for a PoweredOff, Saved (see
7226 <link to="#saveState"/>), Running or
7227 Paused virtual machine. When the machine is PoweredOff, an
7228 offline snapshot is created. When the machine is Running a live
7229 snapshot is created, and an online snapshot is is created when Paused.
7230
7231 The taken snapshot is always based on the
7232 <link to="IMachine::currentSnapshot">current snapshot</link>
7233 of the associated virtual machine and becomes a new current snapshot.
7234
7235 <note>
7236 This method implicitly calls <link to="IMachine::saveSettings"/> to
7237 save all current machine settings before taking an offline snapshot.
7238 </note>
7239
7240 <result name="VBOX_E_INVALID_VM_STATE">
7241 Virtual machine currently changing state.
7242 </result>
7243 </desc>
7244 <param name="name" type="wstring" dir="in">
7245 <desc>Short name for the snapshot.</desc>
7246 </param>
7247 <param name="description" type="wstring" dir="in">
7248 <desc>Optional description of the snapshot.</desc>
7249 </param>
7250 <param name="progress" type="IProgress" dir="return">
7251 <desc>Progress object to track the operation completion.</desc>
7252 </param>
7253 </method>
7254
7255 <method name="deleteSnapshot">
7256 <desc>
7257 Starts deleting the specified snapshot asynchronously.
7258 See <link to="ISnapshot" /> for an introduction to snapshots.
7259
7260 The execution state and settings of the associated machine stored in
7261 the snapshot will be deleted. The contents of all differencing media of
7262 this snapshot will be merged with the contents of their dependent child
7263 media to keep the medium chain valid (in other words, all changes
7264 represented by media being discarded will be propagated to their child
7265 medium). After that, this snapshot's differencing medium will be
7266 deleted. The parent of this snapshot will become a new parent for all
7267 its child snapshots.
7268
7269 If the deleted snapshot is the current one, its parent snapshot will
7270 become a new current snapshot. The current machine state is not directly
7271 affected in this case, except that currently attached differencing
7272 media based on media of the discarded snapshot will be also merged as
7273 described above.
7274
7275 If the deleted snapshot is the first or current snapshot, then the
7276 respective IMachine attributes will be adjusted. Deleting the current
7277 snapshot will also implicitly call <link to="IMachine::saveSettings"/>
7278 to make all current machine settings permanent.
7279
7280 Deleting a snapshot has the following preconditions:
7281
7282 <ul>
7283 <li>Child media of all normal media of the discarded snapshot
7284 must be accessible (see <link to="IMedium::state"/>) for this
7285 operation to succeed. In particular, this means that all virtual
7286 machines, whose media are directly or indirectly based on the
7287 media of discarded snapshot, must be powered off.</li>
7288
7289 <li>You cannot delete the snapshot if a medium attached to it has
7290 more than once child medium (differencing images) because otherwise
7291 merging would be impossible. This might be the case if there is
7292 more than one child snapshot or differencing images were created
7293 for other reason (e.g. implicitly because of multiple machine
7294 attachments).</li>
7295 </ul>
7296
7297
7298 The virtual machine's <link to="IMachine::state">state</link> is changed to "DeletingSnapshot"
7299 while this operation is in progress.
7300
7301 <note>
7302 Merging medium contents can be very time and disk space
7303 consuming, if these media are big in size and have many
7304 children. However, if the snapshot being discarded is the last
7305 (head) snapshot on the branch, the operation will be rather
7306 quick.
7307 </note>
7308 <result name="VBOX_E_INVALID_VM_STATE">
7309 Virtual machine is running.
7310 </result>
7311 </desc>
7312 <param name="id" type="uuid" mod="string" dir="in">
7313 <desc>UUID of the snapshot to discard.</desc>
7314 </param>
7315 <param name="progress" type="IProgress" dir="return">
7316 <desc>Progress object to track the operation completion.</desc>
7317 </param>
7318 </method>
7319
7320 <method name="restoreSnapshot">
7321 <desc>
7322 Starts resetting the machine's current state to the state contained
7323 in the given snapshot, asynchronously. All current settings of the
7324 machine will be reset and changes stored in differencing media
7325 will be lost.
7326 See <link to="ISnapshot" /> for an introduction to snapshots.
7327
7328 After this operation is successfully completed, new empty differencing
7329 media are created for all normal media of the machine.
7330
7331 If the given snapshot is an online snapshot, the machine will go to
7332 the <link to="MachineState_Saved"> saved state</link>, so that the
7333 next time it is powered on, the execution state will be restored
7334 from the state of the snapshot.
7335
7336 <note>
7337 The machine must not be running, otherwise the operation will fail.
7338 </note>
7339
7340 <note>
7341 If the machine state is <link to="MachineState_Saved">Saved</link>
7342 prior to this operation, the saved state file will be implicitly
7343 discarded (as if <link to="IConsole::forgetSavedState"/> were
7344 called).
7345 </note>
7346
7347 <result name="VBOX_E_INVALID_VM_STATE">
7348 Virtual machine is running.
7349 </result>
7350 </desc>
7351 <param name="snapshot" type="ISnapshot" dir="in">
7352 <desc>The snapshot to restore the VM state from.</desc>
7353 </param>
7354 <param name="progress" type="IProgress" dir="return">
7355 <desc>Progress object to track the operation completion.</desc>
7356 </param>
7357 </method>
7358
7359 <method name="teleport">
7360 <desc>
7361 Teleport the VM to a different host machine or process.
7362
7363 TODO explain the details.
7364
7365 <result name="VBOX_E_INVALID_VM_STATE">
7366 Virtual machine not running or paused.
7367 </result>
7368 </desc>
7369 <param name="hostname" type="wstring" dir="in">
7370 <desc>The name or IP of the host to teleport to.</desc>
7371 </param>
7372 <param name="tcpport" type="unsigned long" dir="in">
7373 <desc>The TCP port to connect to (1..65535).</desc>
7374 </param>
7375 <param name="password" type="wstring" dir="in">
7376 <desc>The password.</desc>
7377 </param>
7378 <param name="maxDowntime" type="unsigned long" dir="in">
7379 <desc>
7380 The maximum allowed downtime given as milliseconds. 0 is not a valid
7381 value. Recommended value: 250 ms.
7382
7383 The higher the value is, the greater the chance for a successful
7384 teleportation. A small value may easily result in the teleportation
7385 process taking hours and eventually fail.
7386
7387 <note>
7388 The current implementation treats this a guideline, not as an
7389 absolute rule.
7390 </note>
7391 </desc>
7392 </param>
7393 <param name="progress" type="IProgress" dir="return">
7394 <desc>Progress object to track the operation completion.</desc>
7395 </param>
7396 </method>
7397
7398 <method name="registerCallback">
7399 <desc>
7400 Registers a new console callback on this instance. The methods of the
7401 callback interface will be called by this instance when the appropriate
7402 event occurs.
7403 </desc>
7404 <param name="callback" type="IConsoleCallback" dir="in"/>
7405 </method>
7406
7407 <method name="unregisterCallback">
7408 <desc>
7409 Unregisters the console callback previously registered using
7410 <link to="#registerCallback"/>.
7411 <result name="E_INVALIDARG">
7412 Given @a callback handler is not registered.
7413 </result>
7414 </desc>
7415 <param name="callback" type="IConsoleCallback" dir="in"/>
7416 </method>
7417 </interface>
7418
7419 <!--
7420 // IHost
7421 /////////////////////////////////////////////////////////////////////////
7422 -->
7423
7424 <enum
7425 name="HostNetworkInterfaceMediumType"
7426 uuid="1aa54aaf-2497-45a2-bfb1-8eb225e93d5b"
7427 >
7428 <desc>
7429 Type of encapsulation. Ethernet encapsulation includes both wired and
7430 wireless Ethernet connections.
7431 <see>IHostNetworkInterface</see>
7432 </desc>
7433
7434 <const name="Unknown" value="0">
7435 <desc>
7436 The type of interface cannot be determined.
7437 </desc>
7438 </const>
7439 <const name="Ethernet" value="1">
7440 <desc>
7441 Ethernet frame encapsulation.
7442 </desc>
7443 </const>
7444 <const name="PPP" value="2">
7445 <desc>
7446 Point-to-point protocol encapsulation.
7447 </desc>
7448 </const>
7449 <const name="SLIP" value="3">
7450 <desc>
7451 Serial line IP encapsulation.
7452 </desc>
7453 </const>
7454 </enum>
7455
7456 <enum
7457 name="HostNetworkInterfaceStatus"
7458 uuid="CC474A69-2710-434B-8D99-C38E5D5A6F41"
7459 >
7460 <desc>
7461 Current status of the interface.
7462 <see>IHostNetworkInterface</see>
7463 </desc>
7464
7465 <const name="Unknown" value="0">
7466 <desc>
7467 The state of interface cannot be determined.
7468 </desc>
7469 </const>
7470 <const name="Up" value="1">
7471 <desc>
7472 The interface is fully operational.
7473 </desc>
7474 </const>
7475 <const name="Down" value="2">
7476 <desc>
7477 The interface is not functioning.
7478 </desc>
7479 </const>
7480 </enum>
7481
7482 <enum
7483 name="HostNetworkInterfaceType"
7484 uuid="67431b00-9946-48a2-bc02-b25c5919f4f3"
7485 >
7486 <desc>
7487 Network interface type.
7488 </desc>
7489 <const name="Bridged" value="1"/>
7490 <const name="HostOnly" value="2"/>
7491 </enum>
7492
7493 <interface
7494 name="IHostNetworkInterface" extends="$unknown"
7495 uuid="ce6fae58-7642-4102-b5db-c9005c2320a8"
7496 wsmap="managed"
7497 >
7498 <desc>
7499 Represents one of host's network interfaces. IP V6 address and network
7500 mask are strings of 32 hexdecimal digits grouped by four. Groups are
7501 separated by colons.
7502 For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
7503 </desc>
7504 <attribute name="name" type="wstring" readonly="yes">
7505 <desc>Returns the host network interface name.</desc>
7506 </attribute>
7507
7508 <attribute name="id" type="uuid" mod="string" readonly="yes">
7509 <desc>Returns the interface UUID.</desc>
7510 </attribute>
7511
7512 <attribute name="networkName" type="wstring" readonly="yes">
7513 <desc>Returns the name of a virtual network the interface gets attached to.</desc>
7514 </attribute>
7515
7516 <attribute name="dhcpEnabled" type="boolean" readonly="yes">
7517 <desc>Specifies whether the DHCP is enabled for the interface.</desc>
7518 </attribute>
7519
7520 <attribute name="IPAddress" type="wstring" readonly="yes">
7521 <desc>Returns the IP V4 address of the interface.</desc>
7522 </attribute>
7523
7524 <attribute name="networkMask" type="wstring" readonly="yes">
7525 <desc>Returns the network mask of the interface.</desc>
7526 </attribute>
7527
7528 <attribute name="IPV6Supported" type="boolean" readonly="yes">
7529 <desc>Specifies whether the IP V6 is supported/enabled for the interface.</desc>
7530 </attribute>
7531
7532 <attribute name="IPV6Address" type="wstring" readonly="yes">
7533 <desc>Returns the IP V6 address of the interface.</desc>
7534 </attribute>
7535
7536 <attribute name="IPV6NetworkMaskPrefixLength" type="unsigned long" readonly="yes">
7537 <desc>Returns the length IP V6 network mask prefix of the interface.</desc>
7538 </attribute>
7539
7540 <attribute name="hardwareAddress" type="wstring" readonly="yes">
7541 <desc>Returns the hardware address. For Ethernet it is MAC address.</desc>
7542 </attribute>
7543
7544 <attribute name="mediumType" type="HostNetworkInterfaceMediumType" readonly="yes">
7545 <desc>Type of protocol encapsulation used.</desc>
7546 </attribute>
7547
7548 <attribute name="status" type="HostNetworkInterfaceStatus" readonly="yes">
7549 <desc>Status of the interface.</desc>
7550 </attribute>
7551
7552 <attribute name="interfaceType" type="HostNetworkInterfaceType" readonly="yes">
7553 <desc>specifies the host interface type.</desc>
7554 </attribute>
7555
7556 <method name="enableStaticIpConfig">
7557 <desc>sets and enables the static IP V4 configuration for the given interface.</desc>
7558 <param name="IPAddress" type="wstring" dir="in">
7559 <desc>
7560 IP address.
7561 </desc>
7562 </param>
7563 <param name="networkMask" type="wstring" dir="in">
7564 <desc>
7565 network mask.
7566 </desc>
7567 </param>
7568 </method>
7569
7570 <method name="enableStaticIpConfigV6">
7571 <desc>sets and enables the static IP V6 configuration for the given interface.</desc>
7572 <param name="IPV6Address" type="wstring" dir="in">
7573 <desc>
7574 IP address.
7575 </desc>
7576 </param>
7577 <param name="IPV6NetworkMaskPrefixLength" type="unsigned long" dir="in">
7578 <desc>
7579 network mask.
7580 </desc>
7581 </param>
7582 </method>
7583
7584 <method name="enableDynamicIpConfig">
7585 <desc>enables the dynamic IP configuration.</desc>
7586 </method>
7587
7588 <method name="dhcpRediscover">
7589 <desc>refreshes the IP configuration for dhcp-enabled interface.</desc>
7590 </method>
7591
7592 </interface>
7593
7594 <interface
7595 name="IHost" extends="$unknown"
7596 uuid="e380cbfc-ae65-4fa6-899e-45ded6b3132a"
7597 wsmap="managed"
7598 >
7599 <desc>
7600 The IHost interface represents the physical machine that this VirtualBox
7601 installation runs on.
7602
7603 An object implementing this interface is returned by the
7604 <link to="IVirtualBox::host" /> attribute. This interface contains
7605 read-only information about the host's physical hardware (such as what
7606 processors and disks are available, what the host operating system is,
7607 and so on) and also allows for manipulating some of the host's hardware,
7608 such as global USB device filters and host interface networking.
7609
7610 </desc>
7611 <attribute name="DVDDrives" type="IMedium" readonly="yes" safearray="yes">
7612 <desc>List of DVD drives available on the host.</desc>
7613 </attribute>
7614
7615 <attribute name="floppyDrives" type="IMedium" readonly="yes" safearray="yes">
7616 <desc>List of floppy drives available on the host.</desc>
7617 </attribute>
7618
7619 <attribute name="USBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
7620 <desc>
7621 List of USB devices currently attached to the host.
7622 Once a new device is physically attached to the host computer,
7623 it appears in this list and remains there until detached.
7624
7625 <note>
7626 If USB functionality is not available in the given edition of
7627 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7628 </note>
7629 </desc>
7630 </attribute>
7631
7632 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilter" readonly="yes" safearray="yes">
7633 <desc>
7634 List of USB device filters in action.
7635 When a new device is physically attached to the host computer,
7636 filters from this list are applied to it (in order they are stored
7637 in the list). The first matched filter will determine the
7638 <link to="IHostUSBDeviceFilter::action">action</link>
7639 performed on the device.
7640
7641 Unless the device is ignored by these filters, filters of all
7642 currently running virtual machines
7643 (<link to="IUSBController::deviceFilters"/>) are applied to it.
7644
7645 <note>
7646 If USB functionality is not available in the given edition of
7647 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7648 </note>
7649
7650 <see>IHostUSBDeviceFilter, USBDeviceState</see>
7651 </desc>
7652 </attribute>
7653
7654 <attribute name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" readonly="yes">
7655 <desc>List of host network interfaces currently defined on the host.</desc>
7656 </attribute>
7657
7658 <attribute name="processorCount" type="unsigned long" readonly="yes">
7659 <desc>Number of (logical) CPUs installed in the host system.</desc>
7660 </attribute>
7661
7662 <attribute name="processorOnlineCount" type="unsigned long" readonly="yes">
7663 <desc>Number of (logical) CPUs online in the host system.</desc>
7664 </attribute>
7665
7666 <method name="getProcessorSpeed">
7667 <desc>Query the (approximate) maximum speed of a specified host CPU in
7668 Megahertz.
7669 </desc>
7670 <param name="cpuId" type="unsigned long" dir="in">
7671 <desc>
7672 Identifier of the CPU.
7673 </desc>
7674 </param>
7675 <param name="speed" type="unsigned long" dir="return">
7676 <desc>
7677 Speed value. 0 is returned if value is not known or @a cpuId is
7678 invalid.
7679 </desc>
7680 </param>
7681 </method>
7682
7683 <method name="getProcessorFeature">
7684 <desc>Query whether a CPU feature is supported or not.</desc>
7685 <param name="feature" type="ProcessorFeature" dir="in">
7686 <desc>
7687 CPU Feature identifier.
7688 </desc>
7689 </param>
7690 <param name="supported" type="boolean" dir="return">
7691 <desc>
7692 Feature is supported or not.
7693 </desc>
7694 </param>
7695 </method>
7696
7697 <method name="getProcessorDescription">
7698 <desc>Query the model string of a specified host CPU.
7699 </desc>
7700 <param name="cpuId" type="unsigned long" dir="in">
7701 <desc>
7702 Identifier of the CPU.
7703 <note>
7704 The current implementation might not necessarily return the
7705 description for this exact CPU.
7706 </note>
7707 </desc>
7708 </param>
7709 <param name="description" type="wstring" dir="return">
7710 <desc>
7711 Model string. An empty string is returned if value is not known or
7712 @a cpuId is invalid.
7713 </desc>
7714 </param>
7715 </method>
7716
7717 <method name="getProcessorCPUIDLeaf">
7718 <desc>
7719 Returns the CPU cpuid information for the specified leaf.
7720 </desc>
7721 <param name="cpuId" type="unsigned long" dir="in">
7722 <desc>
7723 Identifier of the CPU. The CPU most be online.
7724 <note>
7725 The current implementation might not necessarily return the
7726 description for this exact CPU.
7727 </note>
7728 </desc>
7729 </param>
7730 <param name="leaf" type="unsigned long" dir="in">
7731 <desc>
7732 CPUID leaf index (eax).
7733 </desc>
7734 </param>
7735 <param name="subLeaf" type="unsigned long" dir="in">
7736 <desc>
7737 CPUID leaf sub index (ecx). This currently only applies to cache
7738 information on Intel CPUs. Use 0 if retriving values for
7739 <link to="IMachine::setCPUIDLeaf"/>.
7740 </desc>
7741 </param>
7742 <param name="valEax" type="unsigned long" dir="out">
7743 <desc>
7744 CPUID leaf value for register eax.
7745 </desc>
7746 </param>
7747 <param name="valEbx" type="unsigned long" dir="out">
7748 <desc>
7749 CPUID leaf value for register ebx.
7750 </desc>
7751 </param>
7752 <param name="valEcx" type="unsigned long" dir="out">
7753 <desc>
7754 CPUID leaf value for register ecx.
7755 </desc>
7756 </param>
7757 <param name="valEdx" type="unsigned long" dir="out">
7758 <desc>
7759 CPUID leaf value for register edx.
7760 </desc>
7761 </param>
7762 </method>
7763
7764 <attribute name="memorySize" type="unsigned long" readonly="yes">
7765 <desc>Amount of system memory in megabytes installed in the host system.</desc>
7766 </attribute>
7767
7768 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
7769 <desc>Available system memory in the host system.</desc>
7770 </attribute>
7771
7772 <attribute name="operatingSystem" type="wstring" readonly="yes">
7773 <desc>Name of the host system's operating system.</desc>
7774 </attribute>
7775
7776 <attribute name="OSVersion" type="wstring" readonly="yes">
7777 <desc>Host operating system's version string.</desc>
7778 </attribute>
7779
7780 <attribute name="UTCTime" type="long long" readonly="yes">
7781 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
7782 </attribute>
7783
7784 <attribute name="Acceleration3DAvailable" type="boolean" readonly="yes">
7785 <desc>Returns @c true when the host supports 3D hardware acceleration.</desc>
7786 </attribute>
7787
7788 <method name="createHostOnlyNetworkInterface">
7789 <desc>
7790 Creates a new adapter for Host Only Networking.
7791 <result name="E_INVALIDARG">
7792 Host network interface @a name already exists.
7793 </result>
7794 </desc>
7795 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
7796 <desc>
7797 Created host interface object.
7798 </desc>
7799 </param>
7800 <param name="progress" type="IProgress" dir="return">
7801 <desc>
7802 Progress object to track the operation completion.
7803 </desc>
7804 </param>
7805 </method>
7806
7807 <method name="removeHostOnlyNetworkInterface">
7808 <desc>
7809 Removes the given Host Only Networking interface.
7810 <result name="VBOX_E_OBJECT_NOT_FOUND">
7811 No host network interface matching @a id found.
7812 </result>
7813 </desc>
7814 <param name="id" type="uuid" mod="string" dir="in">
7815 <desc>
7816 Adapter GUID.
7817 </desc>
7818 </param>
7819 <param name="progress" type="IProgress" dir="return">
7820 <desc>
7821 Progress object to track the operation completion.
7822 </desc>
7823 </param>
7824 </method>
7825
7826 <method name="createUSBDeviceFilter">
7827 <desc>
7828 Creates a new USB device filter. All attributes except
7829 the filter name are set to empty (any match),
7830 <i>active</i> is @c false (the filter is not active).
7831
7832 The created filter can be added to the list of filters using
7833 <link to="#insertUSBDeviceFilter"/>.
7834
7835 <see>#USBDeviceFilters</see>
7836 </desc>
7837 <param name="name" type="wstring" dir="in">
7838 <desc>
7839 Filter name. See <link to="IHostUSBDeviceFilter::name"/>
7840 for more info.
7841 </desc>
7842 </param>
7843 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
7844 <desc>Created filter object.</desc>
7845 </param>
7846 </method>
7847
7848 <method name="insertUSBDeviceFilter">
7849 <desc>
7850 Inserts the given USB device to the specified position
7851 in the list of filters.
7852
7853 Positions are numbered starting from @c 0. If the specified
7854 position is equal to or greater than the number of elements in
7855 the list, the filter is added at the end of the collection.
7856
7857 <note>
7858 Duplicates are not allowed, so an attempt to insert a
7859 filter already in the list is an error.
7860 </note>
7861 <note>
7862 If USB functionality is not available in the given edition of
7863 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7864 </note>
7865
7866 <see>#USBDeviceFilters</see>
7867
7868 <result name="VBOX_E_INVALID_OBJECT_STATE">
7869 USB device filter is not created within this VirtualBox instance.
7870 </result>
7871 <result name="E_INVALIDARG">
7872 USB device filter already in list.
7873 </result>
7874
7875 </desc>
7876 <param name="position" type="unsigned long" dir="in">
7877 <desc>Position to insert the filter to.</desc>
7878 </param>
7879 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
7880 <desc>USB device filter to insert.</desc>
7881 </param>
7882 </method>
7883
7884 <method name="removeUSBDeviceFilter">
7885 <desc>
7886 Removes a USB device filter from the specified position in the
7887 list of filters.
7888
7889 Positions are numbered starting from @c 0. Specifying a
7890 position equal to or greater than the number of elements in
7891 the list will produce an error.
7892
7893 <note>
7894 If USB functionality is not available in the given edition of
7895 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7896 </note>
7897
7898 <see>#USBDeviceFilters</see>
7899
7900 <result name="E_INVALIDARG">
7901 USB device filter list empty or invalid @a position.
7902 </result>
7903
7904 </desc>
7905 <param name="position" type="unsigned long" dir="in">
7906 <desc>Position to remove the filter from.</desc>
7907 </param>
7908 </method>
7909
7910 <method name="findHostDVDDrive">
7911 <desc>
7912 Searches for a host DVD drive with the given @c name.
7913
7914 <result name="VBOX_E_OBJECT_NOT_FOUND">
7915 Given @c name does not correspond to any host drive.
7916 </result>
7917
7918 </desc>
7919 <param name="name" type="wstring" dir="in">
7920 <desc>Name of the host drive to search for</desc>
7921 </param>
7922 <param name="drive" type="IMedium" dir="return">
7923 <desc>Found host drive object</desc>
7924 </param>
7925 </method>
7926
7927 <method name="findHostFloppyDrive">
7928 <desc>
7929 Searches for a host floppy drive with the given @c name.
7930
7931 <result name="VBOX_E_OBJECT_NOT_FOUND">
7932 Given @c name does not correspond to any host floppy drive.
7933 </result>
7934
7935 </desc>
7936 <param name="name" type="wstring" dir="in">
7937 <desc>Name of the host floppy drive to search for</desc>
7938 </param>
7939 <param name="drive" type="IMedium" dir="return">
7940 <desc>Found host floppy drive object</desc>
7941 </param>
7942 </method>
7943
7944 <method name="findHostNetworkInterfaceByName">
7945 <desc>
7946 Searches through all host network interfaces for an interface with
7947 the given @c name.
7948 <note>
7949 The method returns an error if the given @c name does not
7950 correspond to any host network interface.
7951 </note>
7952 </desc>
7953 <param name="name" type="wstring" dir="in">
7954 <desc>Name of the host network interface to search for.</desc>
7955 </param>
7956 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7957 <desc>Found host network interface object.</desc>
7958 </param>
7959 </method>
7960 <method name="findHostNetworkInterfaceById">
7961 <desc>
7962 Searches through all host network interfaces for an interface with
7963 the given GUID.
7964 <note>
7965 The method returns an error if the given GUID does not
7966 correspond to any host network interface.
7967 </note>
7968 </desc>
7969 <param name="id" type="uuid" mod="string" dir="in">
7970 <desc>GUID of the host network interface to search for.</desc>
7971 </param>
7972 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7973 <desc>Found host network interface object.</desc>
7974 </param>
7975 </method>
7976 <method name="findHostNetworkInterfacesOfType">
7977 <desc>
7978 Searches through all host network interfaces and returns a list of interfaces of the specified type
7979 </desc>
7980 <param name="type" type="HostNetworkInterfaceType" dir="in">
7981 <desc>type of the host network interfaces to search for.</desc>
7982 </param>
7983 <param name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" dir="return">
7984 <desc>Found host network interface objects.</desc>
7985 </param>
7986 </method>
7987
7988 <method name="findUSBDeviceById">
7989 <desc>
7990 Searches for a USB device with the given UUID.
7991
7992 <result name="VBOX_E_OBJECT_NOT_FOUND">
7993 Given @c id does not correspond to any USB device.
7994 </result>
7995
7996 <see>IHostUSBDevice::id</see>
7997 </desc>
7998 <param name="id" type="uuid" mod="string" dir="in">
7999 <desc>UUID of the USB device to search for.</desc>
8000 </param>
8001 <param name="device" type="IHostUSBDevice" dir="return">
8002 <desc>Found USB device object.</desc>
8003 </param>
8004 </method>
8005
8006 <method name="findUSBDeviceByAddress">
8007 <desc>
8008 Searches for a USB device with the given host address.
8009
8010 <result name="VBOX_E_OBJECT_NOT_FOUND">
8011 Given @c name does not correspond to any USB device.
8012 </result>
8013
8014 <see>IHostUSBDevice::address</see>
8015 </desc>
8016 <param name="name" type="wstring" dir="in">
8017 <desc>
8018 Address of the USB device (as assigned by the host) to
8019 search for.
8020 </desc>
8021 </param>
8022 <param name="device" type="IHostUSBDevice" dir="return">
8023 <desc>Found USB device object.</desc>
8024 </param>
8025 </method>
8026
8027 </interface>
8028
8029 <!--
8030 // ISystemProperties
8031 /////////////////////////////////////////////////////////////////////////
8032 -->
8033
8034 <interface
8035 name="ISystemProperties"
8036 extends="$unknown"
8037 uuid="fca0d89c-d2ce-45c1-a7b9-e6e7d8501eb1"
8038 wsmap="managed"
8039 >
8040 <desc>
8041 The ISystemProperties interface represents global properties of the given
8042 VirtualBox installation.
8043
8044 These properties define limits and default values for various attributes
8045 and parameters. Most of the properties are read-only, but some can be
8046 changed by a user.
8047 </desc>
8048
8049 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
8050 <desc>Minimum guest system memory in Megabytes.</desc>
8051 </attribute>
8052
8053 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
8054 <desc>Maximum guest system memory in Megabytes.</desc>
8055 </attribute>
8056
8057 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
8058 <desc>Minimum guest video memory in Megabytes.</desc>
8059 </attribute>
8060
8061 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
8062 <desc>Maximum guest video memory in Megabytes.</desc>
8063 </attribute>
8064
8065 <attribute name="minGuestCPUCount" type="unsigned long" readonly="yes">
8066 <desc>Minimum CPU count.</desc>
8067 </attribute>
8068
8069 <attribute name="maxGuestCPUCount" type="unsigned long" readonly="yes">
8070 <desc>Maximum CPU count.</desc>
8071 </attribute>
8072
8073 <attribute name="maxGuestMonitors" type="unsigned long" readonly="yes">
8074 <desc>Maximum of monitors which could be connected.</desc>
8075 </attribute>
8076
8077 <attribute name="maxVDISize" type="unsigned long long" readonly="yes">
8078 <desc>Maximum size of a virtual disk image in Megabytes.</desc>
8079 </attribute>
8080
8081 <attribute name="networkAdapterCount" type="unsigned long" readonly="yes">
8082 <desc>
8083 Number of network adapters associated with every
8084 <link to="IMachine"/> instance.
8085 </desc>
8086 </attribute>
8087
8088 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
8089 <desc>
8090 Number of serial ports associated with every
8091 <link to="IMachine"/> instance.
8092 </desc>
8093 </attribute>
8094
8095 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
8096 <desc>
8097 Number of parallel ports associated with every
8098 <link to="IMachine"/> instance.
8099 </desc>
8100 </attribute>
8101
8102 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
8103 <desc>
8104 Maximum device position in the boot order. This value corresponds
8105 to the total number of devices a machine can boot from, to make it
8106 possible to include all possible devices to the boot list.
8107 <see><link to="IMachine::setBootOrder"/></see>
8108 </desc>
8109 </attribute>
8110
8111 <attribute name="defaultMachineFolder" type="wstring">
8112 <desc>
8113 Full path to the default directory used to create new or open
8114 existing machines when a settings file name contains no
8115 path.
8116
8117 The initial value of this property is
8118 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
8119 VirtualBox_home</link><tt>&gt;/Machines</tt>.
8120
8121 <note>
8122 Setting this property to @c null or an empty string will restore the
8123 initial value.
8124 </note>
8125 <note>
8126 When settings this property, the specified path can be
8127 absolute (full path) or relative
8128 to the <link to="IVirtualBox::homeFolder">
8129 VirtualBox home directory</link>.
8130 When reading this property, a full path is
8131 always returned.
8132 </note>
8133 <note>
8134 The specified path may not exist, it will be created
8135 when necessary.
8136 </note>
8137
8138 <see>
8139 <link to="IVirtualBox::createMachine"/>,
8140 <link to="IVirtualBox::openMachine"/>
8141 </see>
8142 </desc>
8143 </attribute>
8144
8145 <attribute name="defaultHardDiskFolder" type="wstring">
8146 <desc>
8147 Full path to the default directory used to create new or open existing
8148 virtual disks.
8149
8150 This path is used when the storage unit of a hard disk is a regular file
8151 in the host's file system and only a file name that contains no path is
8152 given.
8153
8154 The initial value of this property is
8155 <tt>&lt;</tt>
8156 <link to="IVirtualBox::homeFolder">VirtualBox_home</link>
8157 <tt>&gt;/HardDisks</tt>.
8158
8159 <note>
8160 Setting this property to @c null or empty string will restore the
8161 initial value.
8162 </note>
8163 <note>
8164 When settings this property, the specified path can be relative
8165 to the
8166 <link to="IVirtualBox::homeFolder">VirtualBox home directory</link> or
8167 absolute. When reading this property, a full path is
8168 always returned.
8169 </note>
8170 <note>
8171 The specified path may not exist, it will be created
8172 when necessary.
8173 </note>
8174
8175 <see>
8176 IMedium,
8177 <link to="IVirtualBox::createHardDisk"/>,
8178 <link to="IVirtualBox::openHardDisk"/>,
8179 <link to="IMedium::location"/>
8180 </see>
8181 </desc>
8182 </attribute>
8183
8184 <attribute name="mediumFormats" type="IMediumFormat" safearray="yes" readonly="yes">
8185 <desc>
8186 List of all medium storage formats supported by this VirtualBox
8187 installation.
8188
8189 Keep in mind that the medium format identifier
8190 (<link to="IMediumFormat::id"/>) used in other API calls like
8191 <link to="IVirtualBox::createHardDisk"/> to refer to a particular
8192 medium format is a case-insensitive string. This means that, for
8193 example, all of the following strings:
8194 <pre>
8195 "VDI"
8196 "vdi"
8197 "VdI"</pre>
8198 refer to the same medium format.
8199
8200 Note that the virtual medium framework is backend-based, therefore
8201 the list of supported formats depends on what backends are currently
8202 installed.
8203
8204 <see>
8205 <link to="IMediumFormat"/>,
8206 </see>
8207 </desc>
8208 </attribute>
8209
8210 <attribute name="defaultHardDiskFormat" type="wstring">
8211 <desc>
8212 Identifier of the default medium format used by VirtualBox.
8213
8214 The medium format set by this attribute is used by VirtualBox
8215 when the medium format was not specified explicitly. One example is
8216 <link to="IVirtualBox::createHardDisk"/> with the empty
8217 format argument. A more complex example is implicit creation of
8218 differencing media when taking a snapshot of a virtual machine:
8219 this operation will try to use a format of the parent medium first
8220 and if this format does not support differencing media the default
8221 format specified by this argument will be used.
8222
8223 The list of supported medium formats may be obtained by the
8224 <link to="#mediaFormats"/> call. Note that the default medium
8225 format must have a capability to create differencing media;
8226 otherwise operations that create media implicitly may fail
8227 unexpectedly.
8228
8229 The initial value of this property is <tt>"VDI"</tt> in the current
8230 version of the VirtualBox product, but may change in the future.
8231
8232 <note>
8233 Setting this property to @c null or empty string will restore the
8234 initial value.
8235 </note>
8236
8237 <see>
8238 <link to="#mediaFormats"/>,
8239 <link to="IMediumFormat::id"/>,
8240 <link to="IVirtualBox::createHardDisk"/>
8241 </see>
8242 </desc>
8243 </attribute>
8244
8245 <attribute name="remoteDisplayAuthLibrary" type="wstring">
8246 <desc>
8247 Library that provides authentication for VRDP clients. The library
8248 is used if a virtual machine's authentication type is set to "external"
8249 in the VM RemoteDisplay configuration.
8250
8251 The system library extension (".DLL" or ".so") must be omitted.
8252 A full path can be specified; if not, then the library must reside on the
8253 system's default library path.
8254
8255 The default value of this property is <tt>"VRDPAuth"</tt>. There is a library
8256 of that name in one of the default VirtualBox library directories.
8257
8258 For details about VirtualBox authentication libraries and how to implement
8259 them, please refer to the VirtualBox manual.
8260
8261 <note>
8262 Setting this property to @c null or empty string will restore the
8263 initial value.
8264 </note>
8265 </desc>
8266 </attribute>
8267
8268 <attribute name="webServiceAuthLibrary" type="wstring">
8269 <desc>
8270 Library that provides authentication for webservice clients. The library
8271 is used if a virtual machine's authentication type is set to "external"
8272 in the VM RemoteDisplay configuration and will be called from
8273 within the <link to="IWebsessionManager::logon" /> implementation.
8274
8275 As opposed to <link to="ISystemProperties::remoteDisplayAuthLibrary" />,
8276 there is no per-VM setting for this, as the webservice is a global
8277 resource (if it is running). Only for this setting (for the webservice),
8278 setting this value to a literal <tt>"null"</tt> string disables authentication,
8279 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
8280 no matter what user name and password are supplied.
8281
8282 The initial value of this property is <tt>"VRDPAuth"</tt>,
8283 meaning that the webservice will use the same authentication
8284 library that is used by default for VBoxVRDP (again, see
8285 <link to="ISystemProperties::remoteDisplayAuthLibrary" />).
8286 The format and calling convention of authentication libraries
8287 is the same for the webservice as it is for VBoxVRDP.
8288
8289 <note>
8290 Setting this property to @c null or empty string will restore the
8291 initial value.
8292 </note>
8293 </desc>
8294 </attribute>
8295
8296 <attribute name="LogHistoryCount" type="unsigned long">
8297 <desc>
8298 This value specifies how many old release log files are kept.
8299 </desc>
8300 </attribute>
8301
8302 <attribute name="defaultAudioDriver" type="AudioDriverType" readonly="yes">
8303 <desc>This value hold the default audio driver for the current
8304 system.</desc>
8305 </attribute>
8306
8307 <method name="getMaxDevicesPerPortForStorageBus">
8308 <desc>Returns the maximum number of devices which can be attached to a port
8309 for the given storage bus.</desc>
8310
8311 <param name="bus" type="StorageBus" dir="in">
8312 <desc>The storage bus type to get the value for.</desc>
8313 </param>
8314
8315 <param name="maxDevicesPerPort" type="unsigned long" dir="return">
8316 <desc>The maximum number of devices which can eb attached to the port for the given
8317 storage bus.</desc>
8318 </param>
8319 </method>
8320
8321 <method name="getMinPortCountForStorageBus">
8322 <desc>Returns the minimum number of ports the given storage bus supports.</desc>
8323
8324 <param name="bus" type="StorageBus" dir="in">
8325 <desc>The storage bus type to get the value for.</desc>
8326 </param>
8327
8328 <param name="minPortCount" type="unsigned long" dir="return">
8329 <desc>The minimum number of ports for the given storage bus.</desc>
8330 </param>
8331 </method>
8332
8333 <method name="getMaxPortCountForStorageBus">
8334 <desc>Returns the maximum number of ports the given storage bus supports.</desc>
8335
8336 <param name="bus" type="StorageBus" dir="in">
8337 <desc>The storage bus type to get the value for.</desc>
8338 </param>
8339
8340 <param name="maxPortCount" type="unsigned long" dir="return">
8341 <desc>The maximum number of ports for the given storage bus.</desc>
8342 </param>
8343 </method>
8344
8345 <method name="getMaxInstancesOfStorageBus">
8346 <desc>Returns the maximum number of storage bus instances which
8347 can be configured for each VM. This corresponds to the number of
8348 storage controllers one can have.</desc>
8349
8350 <param name="bus" type="StorageBus" dir="in">
8351 <desc>The storage bus type to get the value for.</desc>
8352 </param>
8353
8354 <param name="maxInstances" type="unsigned long" dir="return">
8355 <desc>The maximum number of instances for the given storage bus.</desc>
8356 </param>
8357 </method>
8358
8359 <method name="getDeviceTypesForStorageBus">
8360 <desc>Returns list of all the supported device types
8361 (<link to="DeviceType"/>) for the given type of storage
8362 bus.</desc>
8363
8364 <param name="bus" type="StorageBus" dir="in">
8365 <desc>The storage bus type to get the value for.</desc>
8366 </param>
8367
8368 <param name="deviceTypes" type="DeviceType" safearray="yes" dir="return">
8369 <desc>The list of all supported device types for the given storage bus.</desc>
8370 </param>
8371 </method>
8372 </interface>
8373
8374 <!--
8375 // IGuest
8376 /////////////////////////////////////////////////////////////////////////
8377 -->
8378
8379 <interface
8380 name="IGuestOSType" extends="$unknown"
8381 uuid="c738a1de-3616-48d1-9ac5-8efd21e2560d"
8382 wsmap="struct"
8383 >
8384 <desc>
8385 </desc>
8386
8387 <attribute name="familyId" type="wstring" readonly="yes">
8388 <desc>Guest OS family identifier string.</desc>
8389 </attribute>
8390
8391 <attribute name="familyDescription" type="wstring" readonly="yes">
8392 <desc>Human readable description of the guest OS family.</desc>
8393 </attribute>
8394
8395 <attribute name="id" type="wstring" readonly="yes">
8396 <desc>Guest OS identifier string.</desc>
8397 </attribute>
8398
8399 <attribute name="description" type="wstring" readonly="yes">
8400 <desc>Human readable description of the guest OS.</desc>
8401 </attribute>
8402
8403 <attribute name="is64Bit" type="boolean" readonly="yes">
8404 <desc>Returns @c true if the given OS is 64-bit</desc>
8405 </attribute>
8406
8407 <attribute name="recommendedIOAPIC" type="boolean" readonly="yes">
8408 <desc>Returns @c true if IO APIC recommended for this OS type.</desc>
8409 </attribute>
8410
8411 <attribute name="recommendedVirtEx" type="boolean" readonly="yes">
8412 <desc>Returns @c true if VT-x or AMD-V recommended for this OS type.</desc>
8413 </attribute>
8414
8415 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
8416 <desc>Recommended RAM size in Megabytes.</desc>
8417 </attribute>
8418
8419 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
8420 <desc>Recommended video RAM size in Megabytes.</desc>
8421 </attribute>
8422
8423 <attribute name="recommendedHDD" type="unsigned long" readonly="yes">
8424 <desc>Recommended hard disk size in Megabytes.</desc>
8425 </attribute>
8426
8427 <attribute name="adapterType" type="NetworkAdapterType" readonly="yes">
8428 <desc>Returns recommended network adapter for this OS type.</desc>
8429 </attribute>
8430
8431 <attribute name="recommendedPae" type="boolean" readonly="yes">
8432 <desc>Returns @c true if using PAE is recommended for this OS type.</desc>
8433 </attribute>
8434
8435 <attribute name="recommendedStorageController" type="StorageControllerType" readonly="yes">
8436 <desc>Recommended storage controller type.</desc>
8437 </attribute>
8438
8439 <attribute name="recommendedFirmware" type="FirmwareType" readonly="yes">
8440 <desc>Recommended firmware type.</desc>
8441 </attribute>
8442
8443 <attribute name="recommendedUsbHid" type="boolean" readonly="yes">
8444 <desc>Returns @c true if using USB Human Interface Devices, such as keyboard and mouse recommended.</desc>
8445 </attribute>
8446
8447 <attribute name="recommendedHpet" type="boolean" readonly="yes">
8448 <desc>Returns @c true if using HPET is recommended for this OS type.</desc>
8449 </attribute>
8450
8451 <attribute name="recommendedUsbTablet" type="boolean" readonly="yes">
8452 <desc>Returns @c true if using USB Tablet recommended (only relevant if using USB HIDs).</desc>
8453 </attribute>
8454
8455 </interface>
8456
8457 <interface
8458 name="IGuest" extends="$unknown"
8459 uuid="9576d333-deb9-4c65-0f06-6a1eb6a833e7"
8460 wsmap="managed"
8461 >
8462 <desc>
8463 The IGuest interface represents information about the operating system
8464 running inside the virtual machine. Used in
8465 <link to="IConsole::guest"/>.
8466
8467 IGuest provides information about the guest operating system, whether
8468 Guest Additions are installed and other OS-specific virtual machine
8469 properties.
8470 </desc>
8471
8472 <attribute name="OSTypeId" type="wstring" readonly="yes">
8473 <desc>
8474 Identifier of the Guest OS type as reported by the Guest
8475 Additions.
8476 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
8477 an IGuestOSType object representing details about the given
8478 Guest OS type.
8479 <note>
8480 If Guest Additions are not installed, this value will be
8481 the same as <link to="IMachine::OSTypeId"/>.
8482 </note>
8483 </desc>
8484 </attribute>
8485
8486 <attribute name="additionsActive" type="boolean" readonly="yes">
8487 <desc>
8488 Flag whether the Guest Additions are installed and active
8489 in which case their version will be returned by the
8490 <link to="#additionsVersion"/> property.
8491 </desc>
8492 </attribute>
8493
8494 <attribute name="additionsVersion" type="wstring" readonly="yes">
8495 <desc>
8496 Version of the Guest Additions (3 decimal numbers separated
8497 by dots) or empty when the Additions are not installed. The
8498 Additions may also report a version but yet not be active as
8499 the version might be refused by VirtualBox (incompatible) or
8500 other failures occurred.
8501 </desc>
8502 </attribute>
8503
8504 <attribute name="supportsSeamless" type="boolean" readonly="yes">
8505 <desc>
8506 Flag whether seamless guest display rendering (seamless desktop
8507 integration) is supported.
8508 </desc>
8509 </attribute>
8510
8511 <attribute name="supportsGraphics" type="boolean" readonly="yes">
8512 <desc>
8513 Flag whether the guest is in graphics mode. If it is not, then
8514 seamless rendering will not work, resize hints are not immediately
8515 acted on and guest display resizes are probably not initiated by
8516 the guest additions.
8517 </desc>
8518 </attribute>
8519
8520 <attribute name="memoryBalloonSize" type="unsigned long">
8521 <desc>Guest system memory balloon size in megabytes.</desc>
8522 </attribute>
8523
8524 <attribute name="statisticsUpdateInterval" type="unsigned long">
8525 <desc>Interval to update guest statistics in seconds.</desc>
8526 </attribute>
8527
8528 <method name="setCredentials">
8529 <desc>
8530 Store login credentials that can be queried by guest operating
8531 systems with Additions installed. The credentials are transient
8532 to the session and the guest may also choose to erase them. Note
8533 that the caller cannot determine whether the guest operating system
8534 has queried or made use of the credentials.
8535
8536 <result name="VBOX_E_VM_ERROR">
8537 VMM device is not available.
8538 </result>
8539
8540 </desc>
8541 <param name="userName" type="wstring" dir="in">
8542 <desc>User name string, can be empty</desc>
8543 </param>
8544 <param name="password" type="wstring" dir="in">
8545 <desc>Password string, can be empty</desc>
8546 </param>
8547 <param name="domain" type="wstring" dir="in">
8548 <desc>Domain name (guest logon scheme specific), can be empty</desc>
8549 </param>
8550 <param name="allowInteractiveLogon" type="boolean" dir="in">
8551 <desc>
8552 Flag whether the guest should alternatively allow the user to
8553 interactively specify different credentials. This flag might
8554 not be supported by all versions of the Additions.
8555 </desc>
8556 </param>
8557 </method>
8558
8559 <method name="getStatistic">
8560 <desc>
8561 Query specified guest statistics as reported by the VirtualBox Additions.
8562 </desc>
8563 <param name="cpuId" type="unsigned long" dir="in">
8564 <desc>Virtual CPU id; not relevant for all statistic types</desc>
8565 </param>
8566 <param name="statistic" type="GuestStatisticType" dir="in">
8567 <desc>Statistic type.</desc>
8568 </param>
8569 <param name="statVal" type="unsigned long" dir="return">
8570 <desc>Statistics value</desc>
8571 </param>
8572 </method>
8573
8574 <method name="executeProgram">
8575 <desc>
8576 Executes an existing program inside the guest VM.
8577
8578 <result name="E_NOTIMPL">
8579 Not implemented yet.
8580 </result>
8581
8582 </desc>
8583 <param name="execName" type="wstring" dir="in">
8584 <desc>Foobar</desc>
8585 </param>
8586 <param name="flags" type="unsigned long" dir="in">
8587 <desc>Foobar</desc>
8588 </param>
8589 <param name="arguments" type="wstring" safearray="yes" dir="in">
8590 <desc>Foobar</desc>
8591 </param>
8592 <param name="environment" type="wstring" safearray="yes" dir="in">
8593 <desc>Foobar</desc>
8594 </param>
8595 <param name="stdIn" type="wstring" dir="in">
8596 <desc>Foobar</desc>
8597 </param>
8598 <param name="stdOut" type="wstring" dir="in">
8599 <desc>Foobar</desc>
8600 </param>
8601 <param name="stdErr" type="wstring" dir="in">
8602 <desc>Foobar</desc>
8603 </param>
8604 <param name="userName" type="wstring" dir="in">
8605 <desc>Foobar</desc>
8606 </param>
8607 <param name="password" type="wstring" dir="in">
8608 <desc>Foobar</desc>
8609 </param>
8610 <param name="timeoutMS" type="unsigned long" dir="in">
8611 <desc>Foobar</desc>
8612 </param>
8613 <param name="pid" type="unsigned long" dir="return">
8614 <desc>Foobar</desc>
8615 </param>
8616 </method>
8617
8618 </interface>
8619
8620
8621 <!--
8622 // IProgress
8623 /////////////////////////////////////////////////////////////////////////
8624 -->
8625
8626 <interface
8627 name="IProgress" extends="$unknown"
8628 uuid="856aa038-853f-42e2-acf7-6e7b02dbe294"
8629 wsmap="managed"
8630 >
8631 <desc>
8632 The IProgress interface is used to track and control
8633 asynchronous tasks within VirtualBox.
8634
8635 An instance of this is returned every time VirtualBox starts
8636 an asynchronous task (in other words, a separate thread) which
8637 continues to run after a method call returns. For example,
8638 <link to="IConsole::saveState" />, which saves the state of
8639 a running virtual machine, can take a long time to complete.
8640 To be able to display a progress bar, a user interface such as
8641 the VirtualBox graphical user interface can use the IProgress
8642 object returned by that method.
8643
8644 Note that IProgress is a "read-only" interface in the sense
8645 that only the VirtualBox internals behind the Main API can
8646 create and manipulate progress objects, whereas client code
8647 can only use the IProgress object to monitor a task's
8648 progress and, if <link to="#cancelable" /> is @c true,
8649 cancel the task by calling <link to="#cancel" />.
8650
8651 A task represented by IProgress consists of either one or
8652 several sub-operations that run sequentially, one by one (see
8653 <link to="#operation" /> and <link to="#operationCount" />).
8654 Every operation is identified by a number (starting from 0)
8655 and has a separate description.
8656
8657 You can find the individual percentage of completion of the current
8658 operation in <link to="#operationPercent" /> and the
8659 percentage of completion of the task as a whole
8660 in <link to="#percent" />.
8661
8662 Similarly, you can wait for the completion of a particular
8663 operation via <link to="#waitForOperationCompletion" /> or
8664 for the completion of the whole task via
8665 <link to="#waitForCompletion" />.
8666 </desc>
8667
8668 <attribute name="id" type="uuid" mod="string" readonly="yes">
8669 <desc>ID of the task.</desc>
8670 </attribute>
8671
8672 <attribute name="description" type="wstring" readonly="yes">
8673 <desc>Description of the task.</desc>
8674 </attribute>
8675
8676 <attribute name="initiator" type="$unknown" readonly="yes">
8677 <desc>Initiator of the task.</desc>
8678 </attribute>
8679
8680 <attribute name="cancelable" type="boolean" readonly="yes">
8681 <desc>Whether the task can be interrupted.</desc>
8682 </attribute>
8683
8684 <attribute name="percent" type="unsigned long" readonly="yes">
8685 <desc>
8686 Current progress value of the task as a whole, in percent.
8687 This value depends on how many operations are already complete.
8688 Returns 100 if <link to="#completed" /> is @c true.
8689 </desc>
8690 </attribute>
8691
8692 <attribute name="timeRemaining" type="long" readonly="yes">
8693 <desc>
8694 Estimated remaining time until the task completes, in
8695 seconds. Returns 0 once the task has completed; returns -1
8696 if the remaining time cannot be computed, in particular if
8697 the current progress is 0.
8698
8699 Even if a value is returned, the estimate will be unreliable
8700 for low progress values. It will become more reliable as the
8701 task progresses; it is not recommended to display an ETA
8702 before at least 20% of a task have completed.
8703 </desc>
8704 </attribute>
8705
8706 <attribute name="completed" type="boolean" readonly="yes">
8707 <desc>Whether the task has been completed.</desc>
8708 </attribute>
8709
8710 <attribute name="canceled" type="boolean" readonly="yes">
8711 <desc>Whether the task has been canceled.</desc>
8712 </attribute>
8713
8714 <attribute name="resultCode" type="long" readonly="yes">
8715 <desc>
8716 Result code of the progress task.
8717 Valid only if <link to="#completed"/> is @c true.
8718 </desc>
8719 </attribute>
8720
8721 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
8722 <desc>
8723 Extended information about the unsuccessful result of the
8724 progress operation. May be @c null if no extended information
8725 is available.
8726 Valid only if <link to="#completed"/> is @c true and
8727 <link to="#resultCode"/> indicates a failure.
8728 </desc>
8729 </attribute>
8730
8731 <attribute name="operationCount" type="unsigned long" readonly="yes">
8732 <desc>
8733 Number of sub-operations this task is divided into.
8734 Every task consists of at least one suboperation.
8735 </desc>
8736 </attribute>
8737
8738 <attribute name="operation" type="unsigned long" readonly="yes">
8739 <desc>Number of the sub-operation being currently executed.</desc>
8740 </attribute>
8741
8742 <attribute name="operationDescription" type="wstring" readonly="yes">
8743 <desc>
8744 Description of the sub-operation being currently executed.
8745 </desc>
8746 </attribute>
8747
8748 <attribute name="operationPercent" type="unsigned long" readonly="yes">
8749 <desc>Progress value of the current sub-operation only, in percent.</desc>
8750 </attribute>
8751
8752 <attribute name="timeout" type="unsigned long">
8753 <desc>
8754 When non-zero, this specifies the number of milliseconds after which
8755 the operation will automatically be canceled. This can only be set on
8756 cancelable objects.
8757 </desc>
8758 </attribute>
8759
8760 <method name="setCurrentOperationProgress">
8761 <desc>Internal method, not to be called externally.</desc>
8762 <param name="percent" type="unsigned long" dir="in" />
8763 </method>
8764 <method name="setNextOperation">
8765 <desc>Internal method, not to be called externally.</desc>
8766 <param name="nextOperationDescription" type="wstring" dir="in" />
8767 <param name="nextOperationsWeight" type="unsigned long" dir="in" />
8768 </method>
8769
8770 <method name="waitForCompletion">
8771 <desc>
8772 Waits until the task is done (including all sub-operations)
8773 with a given timeout in milliseconds; specify -1 for an indefinite wait.
8774
8775 <result name="VBOX_E_IPRT_ERROR">
8776 Failed to wait for task completion.
8777 </result>
8778 </desc>
8779
8780 <param name="timeout" type="long" dir="in">
8781 <desc>
8782 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8783 </desc>
8784 </param>
8785 </method>
8786
8787 <method name="waitForOperationCompletion">
8788 <desc>
8789 Waits until the given operation is done with a given timeout in
8790 milliseconds; specify -1 for an indefinite wait.
8791
8792 <result name="VBOX_E_IPRT_ERROR">
8793 Failed to wait for operation completion.
8794 </result>
8795
8796 </desc>
8797 <param name="operation" type="unsigned long" dir="in">
8798 <desc>
8799 Number of the operation to wait for.
8800 Must be less than <link to="#operationCount"/>.
8801 </desc>
8802 </param>
8803 <param name="timeout" type="long" dir="in">
8804 <desc>
8805 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8806 </desc>
8807 </param>
8808 </method>
8809
8810 <method name="cancel">
8811 <desc>
8812 Cancels the task.
8813 <note>
8814 If <link to="#cancelable"/> is @c false, then this method will fail.
8815 </note>
8816
8817 <result name="VBOX_E_INVALID_OBJECT_STATE">
8818 Operation cannot be canceled.
8819 </result>
8820
8821 </desc>
8822 </method>
8823
8824 </interface>
8825
8826
8827 <!--
8828 // ISnapshot
8829 /////////////////////////////////////////////////////////////////////////
8830 -->
8831
8832 <interface
8833 name="ISnapshot" extends="$unknown"
8834 uuid="1a2d0551-58a4-4107-857e-ef414fc42ffc"
8835 wsmap="managed"
8836 >
8837 <desc>
8838 The ISnapshot interface represents a snapshot of the virtual
8839 machine.
8840
8841 Together with the differencing media that are created
8842 when a snapshot is taken, a machine can be brought back to
8843 the exact state it was in when the snapshot was taken.
8844
8845 The ISnapshot interface has no methods, only attributes; snapshots
8846 are controlled through methods of the <link to="IConsole" /> interface
8847 which also manage the media associated with the snapshot.
8848 The following operations exist:
8849
8850 <ul>
8851 <li><link to="IConsole::takeSnapshot"/>: creates a new snapshot
8852 by creating new, empty differencing images for the machine's
8853 media and saving the VM settings and (if the VM is running)
8854 the current VM state in the snapshot.
8855
8856 The differencing images will then receive all data written to
8857 the machine's media, while their parent (base) images
8858 remain unmodified after the snapshot has been taken (see
8859 <link to="IMedium" /> for details about differencing images).
8860 This simplifies restoring a machine to the state of a snapshot:
8861 only the differencing images need to be deleted.
8862
8863 The current machine state is not changed by taking a snapshot.
8864 If the machine is running, it will resume execution after the
8865 snapshot has been taken.
8866 </li>
8867
8868 <li><link to="IConsole::restoreSnapshot"/>: this goes back to
8869 a previous snapshot. This resets the machine's state to that of
8870 the previous snapshot by deleting the differencing image of each
8871 of the machine's media and setting the machine's settings
8872 and state to the state that was saved in the snapshot (if any).
8873
8874 This destroys the machine's current state.
8875 </li>
8876
8877 <li><link to="IConsole::deleteSnapshot"/>: deletes a snapshot
8878 without affecting the current machine state.
8879
8880 This does not change the machine, but instead frees the resources
8881 allocated when the snapshot was taken: the settings and machine state
8882 is deleted (if any), and the snapshot's differencing image for each
8883 of the machine's media gets merged with its parent image.
8884
8885 Neither the current machine state nor other snapshots are affected
8886 by this operation, except that parent media will be modified
8887 to contain the disk data associated with the snapshot being deleted.
8888 </li>
8889 </ul>
8890
8891 Each snapshot contains the settings of the virtual machine (hardware
8892 configuration etc.). In addition, if the machine was running when the
8893 snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>),
8894 the current VM state is saved in the snapshot (similarly to what happens
8895 when a VM's state is saved). The snapshot is then said to
8896 be <i>online</i> because when restoring it, the VM will be running.
8897
8898 If the machine is saved (<link to="MachineState_Saved"/>), the snapshot
8899 receives a copy of the execution state file (<link to="IMachine::stateFilePath"/>).
8900
8901 Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/>
8902 or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>;
8903 it then contains a so-called "zero execution state", representing a
8904 machine that is powered off.
8905
8906 <h3>Snapshot branches and the "current" snapshot</h3>
8907
8908 Snapshots can be chained, whereby every next snapshot is based on the
8909 previous one. This chaining is related to medium branching
8910 (see the <link to="IMedium"/> description) in that every time
8911 a new snapshot is created, a new differencing medium is implicitly
8912 created for all normal media attached to the machine.
8913
8914 Each virtual machine has a "current snapshot", identified by
8915 <link to="IMachine::currentSnapshot"/>. Presently, this is always set
8916 to the last snapshot in the chain. In a future version of VirtualBox,
8917 it will be possible to reset a machine's current state to that of an
8918 earlier snapshot without discarding the current state so that it will be
8919 possible to create alternative snapshot paths in a snapshot tree.
8920
8921 In the current implementation, multiple snapshot branches within one
8922 virtual machine are not allowed. Every machine has a single branch,
8923 and <link to="IConsole::takeSnapshot"/> operation adds a new
8924 snapshot to the top of that branch.
8925 </desc>
8926
8927 <attribute name="id" type="uuid" mod="string" readonly="yes">
8928 <desc>UUID of the snapshot.</desc>
8929 </attribute>
8930
8931 <attribute name="name" type="wstring">
8932 <desc>Short name of the snapshot.</desc>
8933 </attribute>
8934
8935 <attribute name="description" type="wstring">
8936 <desc>Optional description of the snapshot.</desc>
8937 </attribute>
8938
8939 <attribute name="timeStamp" type="long long" readonly="yes">
8940 <desc>
8941 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
8942 </desc>
8943 </attribute>
8944
8945 <attribute name="online" type="boolean" readonly="yes">
8946 <desc>
8947 @c true if this snapshot is an online snapshot and @c false otherwise.
8948
8949 When this attribute is @c true, the
8950 <link to="IMachine::stateFilePath"/> attribute of the
8951 <link to="#machine"/> object associated with this snapshot
8952 will point to the saved state file. Otherwise, it will be
8953 an empty string.
8954 </desc>
8955 </attribute>
8956
8957 <attribute name="machine" type="IMachine" readonly="yes">
8958 <desc>
8959 Virtual machine this snapshot is taken on. This object
8960 stores all settings the machine had when taking this snapshot.
8961 <note>
8962 The returned machine object is immutable, i.e. no
8963 any settings can be changed.
8964 </note>
8965 </desc>
8966 </attribute>
8967
8968 <attribute name="parent" type="ISnapshot" readonly="yes">
8969 <desc>
8970 Parent snapshot (a snapshot this one is based on), or
8971 @c null if the snapshot has no parent (i.e. is the first snapshot).
8972 </desc>
8973 </attribute>
8974
8975 <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes">
8976 <desc>
8977 Child snapshots (all snapshots having this one as a parent).
8978 </desc>
8979 </attribute>
8980
8981 </interface>
8982
8983
8984 <!--
8985 // IMedium
8986 /////////////////////////////////////////////////////////////////////////
8987 -->
8988
8989 <enum
8990 name="MediumState"
8991 uuid="ef41e980-e012-43cd-9dea-479d4ef14d13"
8992 >
8993 <desc>
8994 Virtual medium state.
8995 <see>IMedium</see>
8996 </desc>
8997
8998 <const name="NotCreated" value="0">
8999 <desc>
9000 Associated medium storage does not exist (either was not created yet or
9001 was deleted).
9002 </desc>
9003 </const>
9004 <const name="Created" value="1">
9005 <desc>
9006 Associated storage exists and accessible; this gets set if the
9007 accessibility check performed by <link to="IMedium::refreshState" />
9008 was successful.
9009 </desc>
9010 </const>
9011 <const name="LockedRead" value="2">
9012 <desc>
9013 Medium is locked for reading (see <link to="IMedium::lockRead"/>),
9014 no data modification is possible.
9015 </desc>
9016 </const>
9017 <const name="LockedWrite" value="3">
9018 <desc>
9019 Medium is locked for writing (see <link to="IMedium::lockWrite"/>),
9020 no concurrent data reading or modification is possible.
9021 </desc>
9022 </const>
9023 <const name="Inaccessible" value="4">
9024 <desc>
9025 Medium accessiblity check (see <link to="IMedium::refreshState" />) has
9026 not yet been performed, or else, associated medium storage is not
9027 accessible. In the first case, <link to="IMedium::lastAccessError"/>
9028 is empty, in the second case, it describes the error that occured.
9029 </desc>
9030 </const>
9031 <const name="Creating" value="5">
9032 <desc>
9033 Associated medium storage is being created.
9034 </desc>
9035 </const>
9036 <const name="Deleting" value="6">
9037 <desc>
9038 Associated medium storage is being deleted.
9039 </desc>
9040 </const>
9041 </enum>
9042
9043 <enum
9044 name="MediumType"
9045 uuid="11f6f7a5-0327-409a-9d42-7db6a0cec578"
9046 >
9047 <desc>
9048 Virtual medium type.
9049 <see>IMedium</see>
9050 </desc>
9051
9052 <const name="Normal" value="0">
9053 <desc>
9054 Normal medium (attached directly or indirectly, preserved
9055 when taking snapshots).
9056 </desc>
9057 </const>
9058 <const name="Immutable" value="1">
9059 <desc>
9060 Immutable medium (attached indirectly, changes are wiped out
9061 the next time the virtual machine is started).
9062 </desc>
9063 </const>
9064 <const name="Writethrough" value="2">
9065 <desc>
9066 Write through medium (attached directly, ignored when
9067 taking snapshots).
9068 </desc>
9069 </const>
9070 </enum>
9071
9072 <enum
9073 name="MediumVariant"
9074 uuid="584ea502-143b-4ab0-ad14-d1028fdf0316"
9075 >
9076 <desc>
9077 Virtual medium image variant. More than one flag may be set.
9078 <see>IMedium</see>
9079 </desc>
9080
9081 <const name="Standard" value="0">
9082 <desc>
9083 No particular variant requested, results in using the backend default.
9084 </desc>
9085 </const>
9086 <const name="VmdkSplit2G" value="0x01">
9087 <desc>
9088 VMDK image split in chunks of less than 2GByte.
9089 </desc>
9090 </const>
9091 <const name="VmdkStreamOptimized" value="0x04">
9092 <desc>
9093 VMDK streamOptimized image. Special import/export format which is
9094 read-only/append-only.
9095 </desc>
9096 </const>
9097 <const name="VmdkESX" value="0x08">
9098 <desc>
9099 VMDK format variant used on ESX products.
9100 </desc>
9101 </const>
9102 <const name="Fixed" value="0x10000">
9103 <desc>
9104 Fixed image. Only allowed for base images.
9105 </desc>
9106 </const>
9107 <const name="Diff" value="0x20000">
9108 <desc>
9109 Fixed image. Only allowed for base images.
9110 </desc>
9111 </const>
9112 </enum>
9113
9114 <interface
9115 name="IMediumAttachment" extends="$unknown"
9116 uuid="e58eb3eb-8627-428b-bdf8-34487c848de5"
9117 wsmap="struct"
9118 >
9119 <desc>
9120 The IMediumAttachment interface represents the attachment
9121 of a storage medium to a virtual machine. Each machine contains
9122 an array of its medium attachments in <link to="IMachine::mediumAttachments"/>.
9123
9124 Each medium attachment specifies a storage controller as well as a port
9125 and device number. Fixed media (hard disks) will always also specify
9126 an instance of IMedium in <link to="#medium" />, referring to the hard disk
9127 medium. For removeable media, the IMedia instance is optional; it can be
9128 @c null if no media is mounted (see <link to="IMachine::mountMedium" />).
9129 </desc>
9130
9131 <attribute name="medium" type="IMedium" readonly="yes">
9132 <desc>Medium object associated with this attachment; it
9133 can be @c null for removable devices.</desc>
9134 </attribute>
9135
9136 <attribute name="controller" type="wstring" readonly="yes">
9137 <desc>Name of the storage controller of this attachment; this
9138 refers to one of the controllers in <link to="IMachine::storageControllers" />
9139 by name.</desc>
9140 </attribute>
9141
9142 <attribute name="port" type="long" readonly="yes">
9143 <desc>Port number of this attachment.</desc>
9144 </attribute>
9145
9146 <attribute name="device" type="long" readonly="yes">
9147 <desc>Device slot number of this attachment.</desc>
9148 </attribute>
9149
9150 <attribute name="type" type="DeviceType" readonly="yes">
9151 <desc>Device type of this attachment.</desc>
9152 </attribute>
9153
9154 <attribute name="passthrough" type="boolean" readonly="yes">
9155 <desc>Pass I/O requests through to a device on the host.</desc>
9156 </attribute>
9157
9158 </interface>
9159
9160 <interface
9161 name="IMedium" extends="$unknown"
9162 uuid="aa8167ba-df72-4738-b740-9b84377ba9f1"
9163 wsmap="managed"
9164 >
9165 <desc>
9166 The IMedium interface represents virtual storage for a machine's
9167 hard disks, CD/DVD or floppy drives. It will typically represent
9168 a disk image on the host, for example a VDI or VMDK file representing
9169 a virtual hard disk, or an ISO or RAW file representing virtual
9170 removable media, but can also point to a network location (e.g.
9171 for iSCSI targets).
9172
9173 Instances of IMedium are connected to virtual machines by way of
9174 medium attachments (see <link to="IMediumAttachment" />), which link
9175 the storage medium to a particular device slot of a storage controller
9176 of the virtual machine.
9177 In the VirtualBox API, virtual storage is therefore always represented
9178 by the following chain of object links:
9179
9180 <ul>
9181 <li><link to="IMachine::storageControllers"/> contains an array of
9182 storage controllers (IDE, SATA, SCSI or a floppy controller;
9183 these are instances of <link to="IStorageController"/>).</li>
9184 <li><link to="IMachine::mediumAttachments"/> contains an array of
9185 medium attachments (instances of <link to="IMediumAttachment"/>),
9186 each containing a storage controller from the above array, a
9187 port/device specification, and an instance of IMedium representing
9188 the medium storage (image file).
9189
9190 For removable media, the storage medium is optional; a medium
9191 attachment with no medium represents a CD/DVD or floppy drive
9192 with no medium inserted. By contrast, hard disk attachments
9193 will always have an IMedium object attached.</li>
9194 <li>Each IMedium in turn points to a storage unit (such as a file
9195 on the host computer or a network resource) that holds actual
9196 data. This location is represented by the <link to="#location"/>
9197 attribute.</li>
9198 </ul>
9199
9200 Existing media are opened using the following methods, depending on the
9201 media type:
9202 <ul>
9203 <li><link to="IVirtualBox::openHardDisk"/></li>
9204 <li><link to="IVirtualBox::openDVDImage"/></li>
9205 <li><link to="IVirtualBox::openFloppyImage"/></li>
9206 </ul>
9207
9208 New hard disk media can be created with the VirtualBox API using the
9209 <link to="IVirtualBox::createHardDisk"/> method.
9210
9211 CD/DVD and floppy images (ISO and RAW files) are usually created outside
9212 VirtualBox, e.g. by storing a copy of the real medium of the corresponding
9213 type in a regular file.
9214
9215 Only for CD/DVDs and floppies, an IMedium instance can also represent a host
9216 drive; in that case the <link to="#id" /> attribute contains the UUID of
9217 one of the drives in <link to="IHost::DVDDrives" /> or <link to="IHost::floppyDrives" />.
9218
9219 <h3>Known media</h3>
9220
9221 When an existing medium is opened for the first time, it is automatically
9222 remembered by the given VirtualBox installation or, in other words, becomes
9223 a <i>known medium</i>. Known media are stored in the media
9224 registry transparently maintained by VirtualBox and stored in settings
9225 files so that this registry is preserved when VirtualBox is not running.
9226
9227 Newly created virtual media are remembered only when the associated
9228 storage unit is actually created.
9229
9230 All known media can be enumerated using
9231 <link to="IVirtualBox::hardDisks"/>,
9232 <link to="IVirtualBox::DVDImages"/> and
9233 <link to="IVirtualBox::floppyImages"/> attributes. Individual media can be
9234 quickly found by UUID using <link to="IVirtualBox::getHardDisk"/>
9235 and similar methods or by location using
9236 <link to="IVirtualBox::findHardDisk"/> and similar methods.
9237
9238 Only known media can be attached to virtual machines.
9239
9240 Removing known media from the media registry is performed when the given
9241 medium is closed using the <link to="#close"/> method or when its
9242 associated storage unit is deleted.
9243
9244 <h3>Accessibility checks</h3>
9245
9246 VirtualBox defers media accessibility checks until the <link to="#refreshState" />
9247 method is called explicitly on a medium. This is done to make the VirtualBox object
9248 ready for serving requests as fast as possible and let the end-user
9249 application decide if it needs to check media accessibility right away or not.
9250
9251 As a result, when VirtualBox starts up (e.g. the VirtualBox
9252 object gets created for the first time), all known media are in the
9253 "Inaccessible" state, but the value of the <link to="#lastAccessError"/>
9254 attribute is an empty string because no actual accessibility check has
9255 been made yet.
9256
9257 After calling <link to="#refreshState" />, a medium is considered
9258 <i>accessible</i> if its storage unit can be read. In that case, the
9259 <link to="#state"/> attribute has a value of "Created". If the storage
9260 unit cannot be read (for example, because it is located on a disconnected
9261 network resource, or was accidentally deleted outside VirtualBox),
9262 the medium is considered <i>inaccessible</i>, which is indicated by the
9263 "Inaccessible" state. The exact reason why the medium is inaccessible can be
9264 obtained by reading the <link to="#lastAccessError"/> attribute.
9265
9266 <h3>Medium types</h3>
9267
9268 There are three types of medium behavior (see <link to="MediumType" />):
9269 "normal", "immutable" and "writethrough", represented by the
9270 <link to="#type"/> attribute. The type of the medium defines how the
9271 medium is attached to a virtual machine and what happens when a
9272 <link to="ISnapshot">snapshot</link> of the virtual machine with the
9273 attached medium is taken. At the moment DVD and floppy media are always
9274 of type "writethrough".
9275
9276 All media can be also divided in two groups: <i>base</i> media and
9277 <i>differencing</i> media. A base medium contains all sectors of the
9278 medium data in its own storage and therefore can be used independently.
9279 In contrast, a differencing mediun is a "delta" to some other medium and
9280 contains only those sectors which differ from that other medium, which is
9281 then called a <i>parent</i>. The differencing medium is said to be
9282 <i>linked to</i> that parent. The parent may be itself a differencing
9283 medium, thus forming a chain of linked media. The last element in that
9284 chain must always be a base medium. Note that several differencing
9285 media may be linked to the same parent medium.
9286
9287 Differencing media can be distinguished from base media by querying the
9288 <link to="#parent"/> attribute: base media do not have parents they would
9289 depend on, so the value of this attribute is always @c null for them.
9290 Using this attribute, it is possible to walk up the medium tree (from the
9291 child medium to its parent). It is also possible to walk down the tree
9292 using the <link to="#children"/> attribute.
9293
9294 Note that the type of all differencing media is "Normal"; all other
9295 values are meaningless for them. Base media may be of any type.
9296
9297 <h3>Creating hard disks</h3>
9298
9299 New base hard disks are created using
9300 <link to="IVirtualBox::createHardDisk"/>. Existing hard disks are
9301 opened using <link to="IVirtualBox::openHardDisk"/>. Differencing hard
9302 disks are usually implicitly created by VirtualBox when needed but may
9303 also be created explicitly using <link to="#createDiffStorage"/>.
9304
9305 After the hard disk is successfully created (including the storage unit)
9306 or opened, it becomes a known hard disk (remembered in the internal media
9307 registry). Known hard disks can be attached to a virtual machine, accessed
9308 through <link to="IVirtualBox::getHardDisk"/> and
9309 <link to="IVirtualBox::findHardDisk"/> methods or enumerated using the
9310 <link to="IVirtualBox::hardDisks"/> array (only for base hard disks).
9311
9312 The following methods, besides <link to="IMedium::close"/>,
9313 automatically remove the hard disk from the media registry:
9314 <ul>
9315 <li><link to="#deleteStorage"/></li>
9316 <li><link to="#mergeTo"/></li>
9317 </ul>
9318
9319 If the storage unit of the hard disk is a regular file in the host's
9320 file system then the rules stated in the description of the
9321 <link to="IMedium::location"/> attribute apply when setting its value. In
9322 addition, a plain file name without any path may be given, in which case
9323 the <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
9324 folder</link> will be prepended to it.
9325
9326 <h4>Automatic composition of the file name part</h4>
9327
9328 Another extension to the <link to="IMedium::location"/> attribute is that
9329 there is a possibility to cause VirtualBox to compose a unique value for
9330 the file name part of the location using the UUID of the hard disk. This
9331 applies only to hard disks in <link to="MediumState_NotCreated"/> state,
9332 e.g. before the storage unit is created, and works as follows. You set the
9333 value of the <link to="IMedium::location"/> attribute to a location
9334 specification which only contains the path specification but not the file
9335 name part and ends with either a forward slash or a backslash character.
9336 In response, VirtualBox will generate a new UUID for the hard disk and
9337 compose the file name using the following pattern:
9338 <pre>
9339 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
9340 </pre>
9341 where <tt>&lt;path&gt;</tt> is the supplied path specification,
9342 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
9343 is the default extension for the storage format of this hard disk. After
9344 that, you may call any of the methods that create a new hard disk storage
9345 unit and they will use the generated UUID and file name.
9346
9347 <h3>Attaching Hard Disks</h3>
9348
9349 Hard disks are attached to virtual machines using the
9350 <link to="IMachine::attachDevice"/> method and detached using the
9351 <link to="IMachine::detachDevice"/> method. Depending on their
9352 <link to="#type"/>, hard disks are attached either
9353 <i>directly</i> or <i>indirectly</i>.
9354
9355 When a hard disk is being attached directly, it is associated with the
9356 virtual machine and used for hard disk operations when the machine is
9357 running. When a hard disk is being attached indirectly, a new differencing
9358 hard disk linked to it is implicitly created and this differencing hard
9359 disk is associated with the machine and used for hard disk operations.
9360 This also means that if <link to="IMachine::attachDevice"/> performs
9361 a direct attachment then the same hard disk will be returned in response
9362 to the subsequent <link to="IMachine::getMedium"/> call; however if
9363 an indirect attachment is performed then
9364 <link to="IMachine::getMedium"/> will return the implicitly created
9365 differencing hard disk, not the original one passed to <link
9366 to="IMachine::attachDevice"/>. In detail:
9367
9368 <ul>
9369 <li><b>Normal base</b> hard disks that do not have children (i.e.
9370 differencing hard disks linked to them) and that are not already
9371 attached to virtual machines in snapshots are attached <b>directly</b>.
9372 Otherwise, they are attached <b>indirectly</b> because having
9373 dependent children or being part of the snapshot makes it impossible
9374 to modify hard disk contents without breaking the integrity of the
9375 dependent party. The <link to="#readOnly"/> attribute allows to
9376 quickly determine the kind of the attachment for the given hard
9377 disk. Note that if a normal base hard disk is to be indirectly
9378 attached to a virtual machine with snapshots then a special
9379 procedure called <i>smart attachment</i> is performed (see below).</li>
9380 <li><b>Normal differencing</b> hard disks are like normal base hard disks:
9381 they are attached <b>directly</b> if they do not have children and are
9382 not attached to virtual machines in snapshots, and <b>indirectly</b>
9383 otherwise. Note that the smart attachment procedure is never performed
9384 for differencing hard disks.</li>
9385 <li><b>Immutable</b> hard disks are always attached <b>indirectly</b> because
9386 they are designed to be non-writable. If an immutable hard disk is
9387 attached to a virtual machine with snapshots then a special
9388 procedure called smart attachment is performed (see below).</li>
9389 <li><b>Writethrough</b> hard disks are always attached <b>directly</b>,
9390 also as designed. This also means that writethrough hard disks cannot
9391 have other hard disks linked to them at all.</li>
9392 </ul>
9393
9394 Note that the same hard disk, regardless of its type, may be attached to
9395 more than one virtual machine at a time. In this case, the machine that is
9396 started first gains exclusive access to the hard disk and attempts to
9397 start other machines having this hard disk attached will fail until the
9398 first machine is powered down.
9399
9400 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
9401 that the given hard disk remains associated with the given machine after a
9402 successful <link to="IMachine::detachDevice"/> call until
9403 <link to="IMachine::saveSettings"/> is called to save all changes to
9404 machine settings to disk. This deferring is necessary to guarantee that
9405 the hard disk configuration may be restored at any time by a call to
9406 <link to="IMachine::discardSettings"/> before the settings
9407 are saved (committed).
9408
9409 Note that if <link to="IMachine::discardSettings"/> is called after
9410 indirectly attaching some hard disks to the machine but before a call to
9411 <link to="IMachine::saveSettings"/> is made, it will implicitly delete
9412 all differencing hard disks implicitly created by
9413 <link to="IMachine::attachDevice"/> for these indirect attachments.
9414 Such implicitly created hard disks will also be immediately deleted when
9415 detached explicitly using the <link to="IMachine::detachDevice"/>
9416 call if it is made before <link to="IMachine::saveSettings"/>. This
9417 implicit deletion is safe because newly created differencing hard
9418 disks do not contain any user data.
9419
9420 However, keep in mind that detaching differencing hard disks that were
9421 implicitly created by <link to="IMachine::attachDevice"/>
9422 before the last <link to="IMachine::saveSettings"/> call will
9423 <b>not</b> implicitly delete them as they may already contain some data
9424 (for example, as a result of virtual machine execution). If these hard
9425 disks are no more necessary, the caller can always delete them explicitly
9426 using <link to="#deleteStorage"/> after they are actually de-associated
9427 from this machine by the <link to="IMachine::saveSettings"/> call.
9428
9429 <h3>Smart Attachment</h3>
9430
9431 When normal base or immutable hard disks are indirectly attached to a
9432 virtual machine then some additional steps are performed to make sure the
9433 virtual machine will have the most recent "view" of the hard disk being
9434 attached. These steps include walking through the machine's snapshots
9435 starting from the current one and going through ancestors up to the first
9436 snapshot. Hard disks attached to the virtual machine in all
9437 of the encountered snapshots are checked whether they are descendants of
9438 the given normal base or immutable hard disk. The first found child (which
9439 is the differencing hard disk) will be used instead of the normal base or
9440 immutable hard disk as a parent for creating a new differencing hard disk
9441 that will be actually attached to the machine. And only if no descendants
9442 are found or if the virtual machine does not have any snapshots then the
9443 normal base or immutable hard disk will be used itself as a parent for
9444 this differencing hard disk.
9445
9446 It is easier to explain what smart attachment does using the
9447 following example:
9448 <pre>
9449BEFORE attaching B.vdi: AFTER attaching B.vdi:
9450
9451Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
9452 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
9453 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
9454 Snapshot 4 (none) Snapshot 4 (none)
9455 CurState (none) CurState (D3->D2.vdi)
9456
9457 NOT
9458 ...
9459 CurState (D3->B.vdi)
9460 </pre>
9461 The first column is the virtual machine configuration before the base hard
9462 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
9463 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
9464 mean that the hard disk that is actually attached to the machine is a
9465 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
9466 another hard disk, <tt>B.vdi</tt>.
9467
9468 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
9469 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
9470 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
9471 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
9472 it cannot be attached directly and needs an indirect attachment (i.e.
9473 implicit creation of a new differencing hard disk). Due to the smart
9474 attachment procedure, the new differencing hard disk
9475 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
9476 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
9477 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
9478 machine.
9479
9480 Note that if there is more than one descendant hard disk of the given base
9481 hard disk found in a snapshot, and there is an exact device, channel and
9482 bus match, then this exact match will be used. Otherwise, the youngest
9483 descendant will be picked up.
9484
9485 There is one more important aspect of the smart attachment procedure which
9486 is not related to snapshots at all. Before walking through the snapshots
9487 as described above, the backup copy of the current list of hard disk
9488 attachment is searched for descendants. This backup copy is created when
9489 the hard disk configuration is changed for the first time after the last
9490 <link to="IMachine::saveSettings"/> call and used by
9491 <link to="IMachine::discardSettings"/> to undo the recent hard disk
9492 changes. When such a descendant is found in this backup copy, it will be
9493 simply re-attached back, without creating a new differencing hard disk for
9494 it. This optimization is necessary to make it possible to re-attach the
9495 base or immutable hard disk to a different bus, channel or device slot
9496 without losing the contents of the differencing hard disk actually
9497 attached to the machine in place of it.
9498 </desc>
9499
9500 <attribute name="id" type="uuid" mod="string" readonly="yes">
9501 <desc>
9502 UUID of the medium. For a newly created medium, this value is a randomly
9503 generated UUID.
9504
9505 <note>
9506 For media in one of MediumState_NotCreated, MediumState_Creating or
9507 MediumState_Deleting states, the value of this property is undefined
9508 and will most likely be an empty UUID.
9509 </note>
9510 </desc>
9511 </attribute>
9512
9513 <attribute name="description" type="wstring">
9514 <desc>
9515 Optional description of the medium. For a newly created medium the value
9516 of this attribute is an empty string.
9517
9518 Medium types that don't support this attribute will return E_NOTIMPL in
9519 attempt to get or set this attribute's value.
9520
9521 <note>
9522 For some storage types, reading this attribute may return an outdated
9523 (last known) value when <link to="#state"/> is <link
9524 to="MediumState_Inaccessible"/> or <link
9525 to="MediumState_LockedWrite"/> because the value of this attribute is
9526 stored within the storage unit itself. Also note that changing the
9527 attribute value is not possible in such case, as well as when the
9528 medium is the <link to="MediumState_LockedRead"/> state.
9529 </note>
9530 </desc>
9531 </attribute>
9532
9533 <attribute name="state" type="MediumState" readonly="yes">
9534 <desc>
9535 Returns the current medium state, which is the last state set by
9536 the accessibility check performed by <link to="#refreshState"/>.
9537 If that method has not yet been called on the medium, the state
9538 is "Inaccessible"; as opposed to truly inaccessible media, the
9539 value of <link to="#lastAccessError"/> will be an empty string in
9540 that case.
9541
9542 <note>As of version 3.1, this no longer performs an accessibility check
9543 automatically; call <link to="#refreshState"/> for that.
9544 </note>
9545 </desc>
9546 </attribute>
9547
9548 <attribute name="location" type="wstring">
9549 <desc>
9550 Location of the storage unit holding medium data.
9551
9552 The format of the location string is medium type specific. For medium
9553 types using regular files in a host's file system, the location
9554 string is the full file name.
9555
9556 Some medium types may support changing the storage unit location by
9557 simply changing the value of this property. If this operation is not
9558 supported, the implementation will return E_NOTIMPL in attempt to set
9559 this attribute's value.
9560
9561 When setting a value of the location attribute which is a regular file
9562 in the host's file system, the given file name may be either relative to
9563 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
9564 absolute. Note that if the given location specification does not contain
9565 the file extension part then a proper default extension will be
9566 automatically appended by the implementation depending on the medium type.
9567 </desc>
9568 </attribute>
9569
9570 <attribute name="name" type="wstring" readonly="yes">
9571 <desc>
9572 Name of the storage unit holding medium data.
9573
9574 The returned string is a short version of the <link to="#location"/>
9575 attribute that is suitable for representing the medium in situations
9576 where the full location specification is too long (such as lists
9577 and comboboxes in GUI frontends). This string is also used by frontends
9578 to sort the media list alphabetically when needed.
9579
9580 For example, for locations that are regular files in the host's file
9581 system, the value of this attribute is just the file name (+ extension),
9582 without the path specification.
9583
9584 Note that as opposed to the <link to="#location"/> attribute, the name
9585 attribute will not necessary be unique for a list of media of the
9586 given type and format.
9587 </desc>
9588 </attribute>
9589
9590 <attribute name="deviceType" type="DeviceType" readonly="yes">
9591 <desc>Kind of device (DVD/Floppy/HardDisk) which is applicable to this
9592 medium.</desc>
9593 </attribute>
9594
9595 <attribute name="hostDrive" type="boolean" readonly="yes">
9596 <desc>True if this corresponds to a drive on the host.</desc>
9597 </attribute>
9598
9599 <attribute name="size" type="unsigned long long" readonly="yes">
9600 <desc>
9601 Physical size of the storage unit used to hold medium data (in bytes).
9602
9603 <note>
9604 For media whose <link to="#state"/> is <link
9605 to="MediumState_Inaccessible"/>, the value of this property is the
9606 last known size. For <link to="MediumState_NotCreated"/> media,
9607 the returned value is zero.
9608 </note>
9609 </desc>
9610 </attribute>
9611
9612 <attribute name="format" type="wstring" readonly="yes">
9613 <desc>
9614 Storage format of this medium.
9615
9616 The value of this attribute is a string that specifies a backend used
9617 to store medium data. The storage format is defined when you create a
9618 new medium or automatically detected when you open an existing medium,
9619 and cannot be changed later.
9620
9621 The list of all storage formats supported by this VirtualBox
9622 installation can be obtained using
9623 <link to="ISystemProperties::mediumFormats"/>.
9624 </desc>
9625 </attribute>
9626
9627 <attribute name="type" type="MediumType">
9628 <desc>
9629 Type (role) of this medium.
9630
9631 The following constraints apply when changing the value of this
9632 attribute:
9633 <ul>
9634 <li>If a medium is attached to a virtual machine (either in the
9635 current state or in one of the snapshots), its type cannot be
9636 changed.
9637 </li>
9638 <li>As long as the medium has children, its type cannot be set
9639 to <link to="MediumType_Writethrough"/>.
9640 </li>
9641 <li>The type of all differencing media is
9642 <link to="MediumType_Normal"/> and cannot be changed.
9643 </li>
9644 </ul>
9645
9646 The type of a newly created or opened medium is set to
9647 <link to="MediumType_Normal"/>, except for DVD and floppy media,
9648 which have a type of <link to="MediumType_Writethrough"/>.
9649 </desc>
9650 </attribute>
9651
9652 <attribute name="parent" type="IMedium" readonly="yes">
9653 <desc>
9654 Parent of this medium (the medium this medium is directly based
9655 on).
9656
9657 Only differencing media have parents. For base (non-differencing)
9658 media, @c null is returned.
9659 </desc>
9660 </attribute>
9661
9662 <attribute name="children" type="IMedium" safearray="yes" readonly="yes">
9663 <desc>
9664 Children of this medium (all differencing media directly based
9665 on this medium). A @c null array is returned if this medium
9666 does not have any children.
9667 </desc>
9668 </attribute>
9669
9670 <attribute name="base" type="IMedium" readonly="yes">
9671 <desc>
9672 Base medium of this medium.
9673
9674 If this is a differencing medium, its base medium is the medium
9675 the given medium branch starts from. For all other types of media, this
9676 property returns the medium object itself (i.e. the same object this
9677 property is read on).
9678 </desc>
9679 </attribute>
9680
9681 <attribute name="readOnly" type="boolean" readonly="yes">
9682 <desc>
9683 Returns @c true if this medium is read-only and @c false otherwise.
9684
9685 A medium is considered to be read-only when its contents cannot be
9686 modified without breaking the integrity of other parties that depend on
9687 this medium such as its child media or snapshots of virtual machines
9688 where this medium is attached to these machines. If there are no
9689 children and no such snapshots then there is no dependency and the
9690 medium is not read-only.
9691
9692 The value of this attribute can be used to determine the kind of the
9693 attachment that will take place when attaching this medium to a
9694 virtual machine. If the value is @c false then the medium will
9695 be attached directly. If the value is @c true then the medium
9696 will be attached indirectly by creating a new differencing child
9697 medium for that. See the interface description for more information.
9698
9699 Note that all <link to="MediumType_Immutable">Immutable</link> media
9700 are always read-only while all
9701 <link to="MediumType_Writethrough">Writethrough</link> media are
9702 always not.
9703
9704 <note>
9705 The read-only condition represented by this attribute is related to
9706 the medium type and usage, not to the current
9707 <link to="IMedium::state">medium state</link> and not to the read-only
9708 state of the storage unit.
9709 </note>
9710 </desc>
9711 </attribute>
9712
9713 <attribute name="logicalSize" type="unsigned long long" readonly="yes">
9714 <desc>
9715 Logical size of this medium (in megabytes), as reported to the
9716 guest OS running inside the virtual machine this medium is
9717 attached to. The logical size is defined when the medium is created
9718 and cannot be changed later.
9719
9720 <note>
9721 Reading this property on a differencing medium will return the size
9722 of its <link to="#base"/> medium.
9723 </note>
9724 <note>
9725 For media whose state is <link to="#state"/> is <link
9726 to="MediumState_Inaccessible"/>, the value of this property is the
9727 last known logical size. For <link to="MediumaState_NotCreated"/>
9728 media, the returned value is zero.
9729 </note>
9730 </desc>
9731 </attribute>
9732
9733 <attribute name="autoReset" type="boolean">
9734 <desc>
9735 Whether this differencing medium will be automatically reset each
9736 time a virtual machine it is attached to is powered up. This
9737 attribute is automatically set to @c true for the last
9738 differencing image of an "immutable" medium (see
9739 <link to="MediumType" />).
9740
9741 See <link to="#reset"/> for more information about resetting
9742 differencing media.
9743
9744 <note>
9745 Reading this property on a base (non-differencing) medium will
9746 always @c false. Changing the value of this property in this
9747 case is not supported.
9748 </note>
9749
9750 <result name="VBOX_E_NOT_SUPPORTED">
9751 This is not a differencing medium (when changing the attribute
9752 value).
9753 </result>
9754 </desc>
9755 </attribute>
9756
9757 <attribute name="lastAccessError" type="wstring" readonly="yes">
9758 <desc>
9759 Text message that represents the result of the last accessibility
9760 check performed by <link to="#refreshState"/>.
9761
9762 An empty string is returned if the last accessibility check
9763 was successful or has not yet been called. As a result, if
9764 <link to="#state" /> is "Inaccessible" and this attribute is empty,
9765 then <link to="#refreshState"/> has yet to be called; this is the
9766 default value of media after VirtualBox initialization.
9767 A non-empty string indicates a failure and should normally describe
9768 a reason of the failure (for example, a file read error).
9769 </desc>
9770 </attribute>
9771
9772 <attribute name="machineIds" type="uuid" mod="string" safearray="yes" readonly="yes">
9773 <desc>
9774 Array of UUIDs of all machines this medium is attached to.
9775
9776 A @c null array is returned if this medium is not attached to any
9777 machine or to any machine's snapshot.
9778
9779 <note>
9780 The returned array will include a machine even if this medium is not
9781 attached to that machine in the current state but attached to it in
9782 one of the machine's snapshots. See <link to="#getSnapshotIds"/> for
9783 details.
9784 </note>
9785 </desc>
9786 </attribute>
9787
9788 <method name="refreshState">
9789 <desc>
9790 If the current medium state (see <link to="MediumState"/>) is one of
9791 "Created", "Inaccessible" or "LockedRead", then this performs an
9792 accessibility check on the medium and sets the value of the <link to="#state"/>
9793 attribute accordingly; that value is also returned for convenience.
9794
9795 For all other state values, this does not perform a refresh but returns
9796 the state only.
9797
9798 The refresh, if performed, may take a long time (several seconds or even
9799 minutes, depending on the storage unit location and format) because it performs an
9800 accessibility check of the storage unit. This check may cause a significant
9801 delay if the storage unit of the given medium is, for example, a file located
9802 on a network share which is not currently accessible due to connectivity
9803 problems. In that case, the call will not return until a timeout
9804 interval defined by the host OS for this operation expires. For this reason,
9805 it is recommended to never read this attribute on the main UI thread to avoid
9806 making the UI unresponsive.
9807
9808 If the last known state of the medium is "Created" and the accessibility
9809 check fails, then the state would be set to "Inaccessible", and
9810 <link to="#lastAccessError"/> may be used to get more details about the
9811 failure. If the state of the medium is "LockedRead", then it remains the
9812 same, and a non-empty value of <link to="#lastAccessError"/> will
9813 indicate a failed accessibility check in this case.
9814
9815 Note that not all medium states are applicable to all medium types.
9816 </desc>
9817 <param name="state" type="MediumState" dir="return">
9818 <desc>
9819 New medium state.
9820 </desc>
9821 </param>
9822 </method>
9823
9824 <method name="getSnapshotIds">
9825 <desc>
9826 Returns an array of UUIDs of all snapshots of the given machine where
9827 this medium is attached to.
9828
9829 If the medium is attached to the machine in the current state, then the
9830 first element in the array will always be the ID of the queried machine
9831 (i.e. the value equal to the @c machineId argument), followed by
9832 snapshot IDs (if any).
9833
9834 If the medium is not attached to the machine in the current state, then
9835 the array will contain only snapshot IDs.
9836
9837 The returned array may be @c null if this medium is not attached
9838 to the given machine at all, neither in the current state nor in one of
9839 the snapshots.
9840 </desc>
9841 <param name="machineId" type="uuid" mod="string" dir="in">
9842 <desc>
9843 UUID of the machine to query.
9844 </desc>
9845 </param>
9846 <param name="snapshotIds" type="uuid" mod="string" safearray="yes" dir="return">
9847 <desc>
9848 Array of snapshot UUIDs of the given machine using this medium.
9849 </desc>
9850 </param>
9851 </method>
9852
9853 <method name="lockRead">
9854 <desc>
9855 Locks this medium for reading.
9856
9857 A read lock is shared: many clients can simultaneously lock the
9858 same medium for reading unless it is already locked for writing (see
9859 <link to="#lockWrite"/>) in which case an error is returned.
9860
9861 When the medium is locked for reading, it cannot be modified
9862 from within VirtualBox. This means that any method that changes
9863 the properties of this medium or contents of the storage unit
9864 will return an error (unless explicitly stated otherwise). That
9865 includes an attempt to start a virtual machine that wants to
9866 write to the the medium.
9867
9868 When the virtual machine is started up, it locks for reading all
9869 media it uses in read-only mode. If some medium cannot be locked
9870 for reading, the startup procedure will fail.
9871 A medium is typically locked for reading while it is used by a running
9872 virtual machine but has a depending differencing image that receives
9873 the actual write operations. This way one base medium can have
9874 multiple child differencing images which can be written to
9875 simultaneously. Read-only media such as DVD and floppy images are
9876 also locked for reading only (so they can be in use by multiple
9877 machines simultaneously).
9878
9879 A medium is also locked for reading when it is the source of a
9880 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
9881
9882 The medium locked for reading must be unlocked using the <link
9883 to="#unlockRead"/> method. Calls to <link to="#lockRead"/>
9884 can be nested and must be followed by the same number of paired
9885 <link to="#unlockRead"/> calls.
9886
9887 This method sets the medium state (see <link to="#state"/>) to
9888 "LockedRead" on success. The medium's previous state must be
9889 one of "Created", "Inaccessible" or "LockedRead".
9890
9891 Locking an inaccessible medium is not an error; this method performs
9892 a logical lock that prevents modifications of this medium through
9893 the VirtualBox API, not a physical file-system lock of the underlying
9894 storage unit.
9895
9896 This method returns the current state of the medium
9897 <i>before</i> the operation.
9898
9899 <result name="VBOX_E_INVALID_OBJECT_STATE">
9900 Invalid medium state (e.g. not created, locked, inaccessible,
9901 creating, deleting).
9902 </result>
9903
9904 </desc>
9905 <param name="state" type="MediumState" dir="return">
9906 <desc>
9907 State of the medium after the operation.
9908 </desc>
9909 </param>
9910 </method>
9911
9912 <method name="unlockRead">
9913 <desc>
9914 Cancels the read lock previously set by <link to="#lockRead"/>.
9915
9916 For both success and failure, this method returns the current state
9917 of the medium <i>after</i> the operation.
9918
9919 See <link to="#lockRead"/> for more details.
9920
9921 <result name="VBOX_E_INVALID_OBJECT_STATE">
9922 Medium not locked for reading.
9923 </result>
9924
9925 </desc>
9926 <param name="state" type="MediumState" dir="return">
9927 <desc>
9928 State of the medium after the operation.
9929 </desc>
9930 </param>
9931 </method>
9932
9933 <method name="lockWrite">
9934 <desc>
9935 Locks this medium for writing.
9936
9937 A write lock, as opposed to <link to="#lockRead"/>, is
9938 exclusive: there may be only one client holding a write lock,
9939 and there may be no read locks while the write lock is held.
9940 As a result, read-locking fails if a write lock is held, and
9941 write-locking fails if either a read or another write lock is held.
9942
9943 When a medium is locked for writing, it cannot be modified
9944 from within VirtualBox, and it is not guaranteed that the values
9945 of its properties are up-to-date. Any method that changes the
9946 properties of this medium or contents of the storage unit will
9947 return an error (unless explicitly stated otherwise).
9948
9949 When a virtual machine is started up, it locks for writing all
9950 media it uses to write data to. If any medium could not be locked
9951 for writing, the startup procedure will fail. If a medium has
9952 differencing images, then while the machine is running, only
9953 the last ("leaf") differencing image is locked for writing,
9954 whereas its parents are locked for reading only.
9955
9956 A medium is also locked for writing when it is the target of a
9957 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
9958
9959 The medium locked for writing must be unlocked using the <link
9960 to="#unlockWrite"/> method. Write locks <i>cannot</i> be nested.
9961
9962 This method sets the medium state (see <link to="#state"/>) to
9963 "LockedWrite" on success. The medium's previous state must be
9964 either "Created" or "Inaccessible".
9965
9966 Locking an inaccessible medium is not an error; this method performs
9967 a logical lock that prevents modifications of this medium through
9968 the VirtualBox API, not a physical file-system lock of the underlying
9969 storage unit.
9970
9971 For both, success and failure, this method returns the current
9972 state of the medium <i>before</i> the operation.
9973
9974 <result name="VBOX_E_INVALID_OBJECT_STATE">
9975 Invalid medium state (e.g. not created, locked, inaccessible,
9976 creating, deleting).
9977 </result>
9978
9979 </desc>
9980 <param name="state" type="MediumState" dir="return">
9981 <desc>
9982 State of the medium after the operation.
9983 </desc>
9984 </param>
9985 </method>
9986
9987 <method name="unlockWrite">
9988 <desc>
9989 Cancels the write lock previously set by <link to="#lockWrite"/>.
9990
9991 For both success and failure, this method returns the current
9992 state of the medium <i>after</i> the operation.
9993
9994 See <link to="#lockWrite"/> for more details.
9995
9996 <result name="VBOX_E_INVALID_OBJECT_STATE">
9997 Medium not locked for writing.
9998 </result>
9999
10000 </desc>
10001 <param name="state" type="MediumState" dir="return">
10002 <desc>
10003 State of the medium after the operation.
10004 </desc>
10005 </param>
10006 </method>
10007
10008 <method name="close">
10009 <desc>
10010 Closes this medium.
10011
10012 The medium must not be attached to any known virtual machine
10013 and must not have any known child media, otherwise the
10014 operation will fail.
10015
10016 When the medium is successfully closed, it gets removed from
10017 the list of remembered media, but its storage unit is not
10018 deleted. In particular, this means that this medium can be
10019 later opened again using the <link
10020 to="IVirtualBox::openHardDisk"/> call.
10021
10022 Note that after this method successfully returns, the given medium
10023 object becomes uninitialized. This means that any attempt
10024 to call any of its methods or attributes will fail with the
10025 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
10026
10027 <result name="VBOX_E_INVALID_OBJECT_STATE">
10028 Invalid medium state (other than not created, created or
10029 inaccessible).
10030 </result>
10031 <result name="VBOX_E_OBJECT_IN_USE">
10032 Medium attached to virtual machine.
10033 </result>
10034 <result name="VBOX_E_FILE_ERROR">
10035 Settings file not accessible.
10036 </result>
10037 <result name="VBOX_E_XML_ERROR">
10038 Could not parse the settings file.
10039 </result>
10040
10041 </desc>
10042 </method>
10043
10044 <!-- storage methods -->
10045
10046 <method name="getProperty">
10047 <desc>
10048 Returns the value of the custom medium property with the given name.
10049
10050 The list of all properties supported by the given medium format can
10051 be obtained with <link to="IMediumFormat::describeProperties"/>.
10052
10053 Note that if this method returns an empty string in @a value, the
10054 requested property is supported but currently not assigned any value.
10055
10056 <result name="VBOX_E_OBJECT_NOT_FOUND">
10057 Requested property does not exist (not supported by the format).
10058 </result>
10059 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
10060 </desc>
10061 <param name="name" type="wstring" dir="in">
10062 <desc>Name of the property to get.</desc>
10063 </param>
10064 <param name="value" type="wstring" dir="return">
10065 <desc>Current property value.</desc>
10066 </param>
10067 </method>
10068
10069 <method name="setProperty">
10070 <desc>
10071 Sets the value of the custom medium property with the given name.
10072
10073 The list of all properties supported by the given medium format can
10074 be obtained with <link to="IMediumFormat::describeProperties"/>.
10075
10076 Note that setting the property value to @c null or an empty string is
10077 equivalent to deleting the existing value. A default value (if it is
10078 defined for this property) will be used by the format backend in this
10079 case.
10080
10081 <result name="VBOX_E_OBJECT_NOT_FOUND">
10082 Requested property does not exist (not supported by the format).
10083 </result>
10084 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
10085 </desc>
10086 <param name="name" type="wstring" dir="in">
10087 <desc>Name of the property to set.</desc>
10088 </param>
10089 <param name="value" type="wstring" dir="in">
10090 <desc>Property value to set.</desc>
10091 </param>
10092 </method>
10093
10094 <method name="getProperties">
10095 <desc>
10096 Returns values for a group of properties in one call.
10097
10098 The names of the properties to get are specified using the @a names
10099 argument which is a list of comma-separated property names or
10100 an empty string if all properties are to be returned. Note that currently
10101 the value of this argument is ignored and the method always returns all
10102 existing properties.
10103
10104 The list of all properties supported by the given medium format can
10105 be obtained with <link to="IMediumFormat::describeProperties"/>.
10106
10107 The method returns two arrays, the array of property names corresponding
10108 to the @a names argument and the current values of these properties.
10109 Both arrays have the same number of elements with each elemend at the
10110 given index in the first array corresponds to an element at the same
10111 index in the second array.
10112
10113 Note that for properties that do not have assigned values,
10114 an empty string is returned at the appropriate index in the
10115 @a returnValues array.
10116
10117 </desc>
10118 <param name="names" type="wstring" dir="in">
10119 <desc>
10120 Names of properties to get.
10121 </desc>
10122 </param>
10123 <param name="returnNames" type="wstring" safearray="yes" dir="out">
10124 <desc>Names of returned properties.</desc>
10125 </param>
10126 <param name="returnValues" type="wstring" safearray="yes" dir="return">
10127 <desc>Values of returned properties.</desc>
10128 </param>
10129 </method>
10130
10131 <method name="setProperties">
10132 <desc>
10133 Sets values for a group of properties in one call.
10134
10135 The names of the properties to set are passed in the @a names
10136 array along with the new values for them in the @a values array. Both
10137 arrays have the same number of elements with each elemend at the given
10138 index in the first array corresponding to an element at the same index
10139 in the second array.
10140
10141 If there is at least one property name in @a names that is not valid,
10142 the method will fail before changing the values of any other properties
10143 from the @a names array.
10144
10145 Using this method over <link to="#setProperty"/> is preferred if you
10146 need to set several properties at once since it will result into less
10147 IPC calls.
10148
10149 The list of all properties supported by the given medium format can
10150 be obtained with <link to="IMediumFormat::describeProperties"/>.
10151
10152 Note that setting the property value to @c null or an empty string is
10153 equivalent to deleting the existing value. A default value (if it is
10154 defined for this property) will be used by the format backend in this
10155 case.
10156 </desc>
10157 <param name="names" type="wstring" safearray="yes" dir="in">
10158 <desc>Names of properties to set.</desc>
10159 </param>
10160 <param name="values" type="wstring" safearray="yes" dir="in">
10161 <desc>Values of properties to set.</desc>
10162 </param>
10163 </method>
10164
10165 <!-- storage methods -->
10166
10167 <method name="createBaseStorage">
10168 <desc>
10169 Starts creating a hard disk storage unit (fixed/dynamic, according
10170 to the variant flags) in in the background. The previous storage unit
10171 created for this object, if any, must first be deleted using
10172 <link to="#deleteStorage"/>, otherwise the operation will fail.
10173
10174 Before the operation starts, the medium is placed in
10175 <link to="MediumState_Creating"/> state. If the create operation
10176 fails, the medium will be placed back in <link to="MediumState_NotCreated"/>
10177 state.
10178
10179 After the returned progress object reports that the operation has
10180 successfully completed, the medium state will be set to <link
10181 to="MediumState_Created"/>, the medium will be remembered by this
10182 VirtualBox installation and may be attached to virtual machines.
10183
10184 <result name="VBOX_E_NOT_SUPPORTED">
10185 The variant of storage creation operation is not supported. See <link
10186 to="IMediumFormat::capabilities"/>.
10187 </result>
10188 </desc>
10189 <param name="logicalSize" type="unsigned long long" dir="in">
10190 <desc>Maximum logical size of the medium in megabytes.</desc>
10191 </param>
10192 <param name="variant" type="MediumVariant" dir="in">
10193 <desc>Exact image variant which should be created.</desc>
10194 </param>
10195 <param name="progress" type="IProgress" dir="return">
10196 <desc>Progress object to track the operation completion.</desc>
10197 </param>
10198 </method>
10199
10200 <method name="deleteStorage">
10201 <desc>
10202 Starts deleting the storage unit of this medium.
10203
10204 The medium must not be attached to any known virtual machine and must
10205 not have any known child media, otherwise the operation will fail.
10206 It will also fail if there is no storage unit to delete or if deletion
10207 is already in progress, or if the medium is being in use (locked for
10208 read or for write) or inaccessible. Therefore, the only valid state for
10209 this operation to succeed is <link to="MediumState_Created"/>.
10210
10211 Before the operation starts, the medium is placed in
10212 <link to="MediumState_Deleting"/> state and gets removed from the list
10213 of remembered hard disks (media registry). If the delete operation
10214 fails, the medium will be remembered again and placed back to
10215 <link to="MediumState_Created"/> state.
10216
10217 After the returned progress object reports that the operation is
10218 complete, the medium state will be set to
10219 <link to="MediumState_NotCreated"/> and you will be able to use one of
10220 the storage creation methods to create it again.
10221
10222 <see>#close()</see>
10223
10224 <result name="VBOX_E_OBJECT_IN_USE">
10225 Medium is attached to a virtual machine.
10226 </result>
10227 <result name="VBOX_E_NOT_SUPPORTED">
10228 Storage deletion is not allowed because neither of storage creation
10229 operations are supported. See
10230 <link to="IMediumFormat::capabilities"/>.
10231 </result>
10232
10233 <note>
10234 If the deletion operation fails, it is not guaranteed that the storage
10235 unit still exists. You may check the <link to="IMedium::state"/> value
10236 to answer this question.
10237 </note>
10238 </desc>
10239 <param name="progress" type="IProgress" dir="return">
10240 <desc>Progress object to track the operation completion.</desc>
10241 </param>
10242 </method>
10243
10244 <!-- diff methods -->
10245
10246 <method name="createDiffStorage">
10247 <desc>
10248 Starts creating an empty differencing storage unit based on this
10249 medium in the format and at the location defined by the @a target
10250 argument.
10251
10252 The target medium must be in <link to="MediumState_NotCreated"/>
10253 state (i.e. must not have an existing storage unit). Upon successful
10254 completion, this operation will set the type of the target medium to
10255 <link to="MediumType_Normal"/> and create a storage unit necessary to
10256 represent the differencing medium data in the given format (according
10257 to the storage format of the target object).
10258
10259 After the returned progress object reports that the operation is
10260 successfully complete, the target medium gets remembered by this
10261 VirtualBox installation and may be attached to virtual machines.
10262
10263 <note>
10264 The medium will be set to <link to="MediumState_LockedRead"/>
10265 state for the duration of this operation.
10266 </note>
10267 <result name="VBOX_E_OBJECT_IN_USE">
10268 Medium not in @c NotCreated state.
10269 </result>
10270 </desc>
10271 <param name="target" type="IMedium" dir="in">
10272 <desc>Target medium.</desc>
10273 </param>
10274 <param name="variant" type="MediumVariant" dir="in">
10275 <desc>Exact image variant which should be created.</desc>
10276 </param>
10277 <param name="progress" type="IProgress" dir="return">
10278 <desc>Progress object to track the operation completion.</desc>
10279 </param>
10280 </method>
10281
10282 <method name="mergeTo">
10283 <desc>
10284 Starts merging the contents of this medium and all intermediate
10285 differencing media in the chain to the given target medium.
10286
10287 The target medium must be either a descendant of this medium or
10288 its ancestor (otherwise this method will immediately return a failure).
10289 It follows that there are two logical directions of the merge operation:
10290 from ancestor to descendant (<i>forward merge</i>) and from descendant to
10291 ancestor (<i>backward merge</i>). Let us consider the following medium
10292 chain:
10293
10294 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
10295
10296 Here, calling this method on the <tt>Base</tt> medium object with
10297 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
10298 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
10299 merge. Note that in both cases the contents of the resulting medium
10300 will be the same, the only difference is the medium object that takes
10301 the result of the merge operation. In case of the forward merge in the
10302 above example, the result will be written to <tt>Diff_2</tt>; in case of
10303 the backward merge, the result will be written to <tt>Base</tt>. In
10304 other words, the result of the operation is always stored in the target
10305 medium.
10306
10307 Upon successful operation completion, the storage units of all media in
10308 the chain between this (source) medium and the target medium, including
10309 the source medium itself, will be automatically deleted and the
10310 relevant medium objects (including this medium) will become
10311 uninitialized. This means that any attempt to call any of
10312 their methods or attributes will fail with the
10313 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
10314 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
10315 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> media.
10316 Note that <tt>Diff_2</tt> in this case will become a base medium
10317 itself since it will no longer be based on any other medium.
10318
10319 Considering the above, all of the following conditions must be met in
10320 order for the merge operation to succeed:
10321 <ul>
10322 <li>
10323 Neither this (source) medium nor any intermediate
10324 differencing medium in the chain between it and the target
10325 medium is attached to any virtual machine.
10326 </li>
10327 <li>
10328 Neither the source medium nor the target medium is an
10329 <link to="MediumType_Immutable"/> medium.
10330 </li>
10331 <li>
10332 The part of the medium tree from the source medium to the
10333 target medium is a linear chain, i.e. all medium in this
10334 chain have exactly one child which is the next medium in this
10335 chain. The only exception from this rule is the target medium in
10336 the forward merge operation; it is allowed to have any number of
10337 child media because the merge operation will not change its
10338 logical contents (as it is seen by the guest OS or by children).
10339 </li>
10340 <li>
10341 None of the involved media are in
10342 <link to="MediumState_LockedRead"/> or
10343 <link to="MediumState_LockedWrite"/> state.
10344 </li>
10345 </ul>
10346
10347 <note>
10348 This (source) medium and all intermediates will be placed to <link
10349 to="MediumState_Deleting"/> state and the target medium will be
10350 placed to <link to="MediumState_LockedWrite"/> state and for the
10351 duration of this operation.
10352 </note>
10353 </desc>
10354 <param name="targetId" type="uuid" mod="string" dir="in">
10355 <desc>UUID of the target ancestor or descendant medium.</desc>
10356 </param>
10357 <param name="progress" type="IProgress" dir="return">
10358 <desc>Progress object to track the operation completion.</desc>
10359 </param>
10360 </method>
10361
10362 <!-- clone method -->
10363
10364 <method name="cloneTo">
10365 <desc>
10366 Starts creating a clone of this medium in the format and at the
10367 location defined by the @a target argument.
10368
10369 The target medium must be either in <link to="MediumState_NotCreated"/>
10370 state (i.e. must not have an existing storage unit) or in
10371 <link to="MediumState_Created"/> state (i.e. created and not locked, and
10372 big enough to hold the data or else the copy will be partial). Upon
10373 successful completion, the cloned medium will contain exactly the
10374 same sector data as the medium being cloned, except that in the
10375 first case a new UUID for the clone will be randomly generated, and in
10376 the second case the UUID will remain unchanged.
10377
10378 The @a parent argument defines which medium will be the parent
10379 of the clone. Passing a @c null reference indicates that the clone will
10380 be a base image, i.e. completely independent. It is possible to specify
10381 an arbitrary medium for this parameter, including the parent of the
10382 medium which is being cloned. Even cloning to a child of the source
10383 medium is possible. Note that when cloning to an existing image, the
10384 @a parent irgument is ignored.
10385
10386 After the returned progress object reports that the operation is
10387 successfully complete, the target medium gets remembered by this
10388 VirtualBox installation and may be attached to virtual machines.
10389
10390 <note>
10391 This medium will be placed to <link to="MediumState_LockedRead"/>
10392 state for the duration of this operation.
10393 </note>
10394 <result name="E_NOTIMPL">
10395 The specified cloning variant is not supported at the moment.
10396 </result>
10397 </desc>
10398 <param name="target" type="IMedium" dir="in">
10399 <desc>Target medium.</desc>
10400 </param>
10401 <param name="variant" type="MediumVariant" dir="in">
10402 <desc>Exact image variant which should be created.</desc>
10403 </param>
10404 <param name="parent" type="IMedium" dir="in">
10405 <desc>Parent of the cloned medium.</desc>
10406 </param>
10407 <param name="progress" type="IProgress" dir="return">
10408 <desc>Progress object to track the operation completion.</desc>
10409 </param>
10410 </method>
10411
10412 <!-- other methods -->
10413
10414 <method name="compact">
10415 <desc>
10416 Starts compacting of this medium. This means that the medium is
10417 transformed into a possibly more compact storage representation.
10418 This potentially creates temporary images, which can require a
10419 substantial amount of additional disk space.
10420
10421 This medium will be placed to <link to="MediumState_LockedWrite"/>
10422 state and all its parent media (if any) will be placed to
10423 <link to="MediumState_LockedRead"/> state for the duration of this
10424 operation.
10425
10426 Please note that the results can be either returned straight away,
10427 or later as the result of the background operation via the object
10428 returned via the @a progress parameter.
10429
10430 <result name="VBOX_E_NOT_SUPPORTED">
10431 Medium format does not support compacting (but potentially
10432 needs it).
10433 </result>
10434 </desc>
10435 <param name="progress" type="IProgress" dir="return">
10436 <desc>Progress object to track the operation completion.</desc>
10437 </param>
10438 </method>
10439
10440 <method name="resize">
10441 <desc>
10442 Starts resizing this medium. This means that the nominal size of the
10443 medium is set to the new value. Both increasing and decreasing the
10444 size is possible, and there are no safety checks, since VirtualBox
10445 does not make any assumptions about the medium contents.
10446
10447 Resizing usually needs additional disk space, and possibly also
10448 some temporary disk space. Note that resize does not create a full
10449 temporary copy of the medium, so the additional disk space requirement
10450 is usually much lower than using the clone operation.
10451
10452 This medium will be placed to <link to="MediumState_LockedWrite"/>
10453 state for the duration of this operation.
10454
10455 Please note that the results can be either returned straight away,
10456 or later as the result of the background operation via the object
10457 returned via the @a progress parameter.
10458
10459 <result name="VBOX_E_NOT_SUPPORTED">
10460 Medium format does not support resizing.
10461 </result>
10462 </desc>
10463 <param name="logicalSize" type="unsigned long long" dir="in">
10464 <desc>New nominal capacity of the medium in megabytes.</desc>
10465 </param>
10466 <param name="progress" type="IProgress" dir="return">
10467 <desc>Progress object to track the operation completion.</desc>
10468 </param>
10469 </method>
10470
10471 <method name="reset">
10472 <desc>
10473 Starts erasing the contents of this differencing medium.
10474
10475 This operation will reset the differencing medium to its initial
10476 state when it does not contain any sector data and any read operation is
10477 redirected to its parent medium. This automatically gets called
10478 during VM power-up for every medium whose <link to="#autoReset" />
10479 attribute is @c true.
10480
10481 The medium will be write-locked for the duration of this operation (see
10482 <link to="#lockWrite" />).
10483
10484 <result name="VBOX_E_NOT_SUPPORTED">
10485 This is not a differencing medium.
10486 </result>
10487 <result name="VBOX_E_INVALID_OBJECT_STATE">
10488 Medium is not in <link to="MediumState_Created"/> or
10489 <link to="MediumState_Inaccessible"/> state.
10490 </result>
10491 </desc>
10492 <param name="progress" type="IProgress" dir="return">
10493 <desc>Progress object to track the operation completion.</desc>
10494 </param>
10495 </method>
10496
10497 </interface>
10498
10499
10500 <!--
10501 // IMediumFormat
10502 /////////////////////////////////////////////////////////////////////////
10503 -->
10504
10505 <enum
10506 name="DataType"
10507 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
10508 >
10509 <const name="Int32" value="0"/>
10510 <const name="Int8" value="1"/>
10511 <const name="String" value="2"/>
10512 </enum>
10513
10514 <enum
10515 name="DataFlags"
10516 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
10517 >
10518 <const name="None" value="0x00"/>
10519 <const name="Mandatory" value="0x01"/>
10520 <const name="Expert" value="0x02"/>
10521 <const name="Array" value="0x04"/>
10522 <const name="FlagMask" value="0x07"/>
10523 </enum>
10524
10525 <enum
10526 name="MediumFormatCapabilities"
10527 uuid="70fcf810-99e8-4edc-aee4-7f51d489e657"
10528 >
10529 <desc>
10530 Medium format capability flags.
10531 </desc>
10532
10533 <const name="Uuid" value="0x01">
10534 <desc>
10535 Supports UUIDs as expected by VirtualBox code.
10536 </desc>
10537 </const>
10538
10539 <const name="CreateFixed" value="0x02">
10540 <desc>
10541 Supports creating fixed size images, allocating all space instantly.
10542 </desc>
10543 </const>
10544
10545 <const name="CreateDynamic" value="0x04">
10546 <desc>
10547 Supports creating dynamically growing images, allocating space on
10548 demand.
10549 </desc>
10550 </const>
10551
10552 <const name="CreateSplit2G" value="0x08">
10553 <desc>
10554 Supports creating images split in chunks of a bit less than 2 GBytes.
10555 </desc>
10556 </const>
10557
10558 <const name="Differencing" value="0x10">
10559 <desc>
10560 Supports being used as a format for differencing media (see <link
10561 to="IMedium::createDiffStorage"/>).
10562 </desc>
10563 </const>
10564
10565 <const name="Asynchronous" value="0x20">
10566 <desc>
10567 Supports asynchronous I/O operations for at least some configurations.
10568 </desc>
10569 </const>
10570
10571 <const name="File" value="0x40">
10572 <desc>
10573 The format backend operates on files (the <link to="IMedium::location"/>
10574 attribute of the medium specifies a file used to store medium
10575 data; for a list of supported file extensions see
10576 <link to="IMediumFormat::fileExtensions"/>).
10577 </desc>
10578 </const>
10579
10580 <const name="Properties" value="0x80">
10581 <desc>
10582 The format backend uses the property interface to configure the storage
10583 location and properties (the <link to="IMediumFormat::describeProperties"/>
10584 method is used to get access to properties supported by the given medium format).
10585 </desc>
10586 </const>
10587
10588 <const name="CapabilityMask" value="0xFF"/>
10589 </enum>
10590
10591 <interface
10592 name="IMediumFormat" extends="$unknown"
10593 uuid="89f52554-d469-4799-9fad-1705e86a08b1"
10594 wsmap="managed"
10595 >
10596 <desc>
10597 The IMediumFormat interface represents a medium format.
10598
10599 Each medium format has an associated backend which is used to handle
10600 media stored in this format. This interface provides information
10601 about the properties of the associated backend.
10602
10603 Each medium format is identified by a string represented by the
10604 <link to="#id"/> attribute. This string is used in calls like
10605 <link to="IVirtualBox::createHardDisk"/> to specify the desired
10606 format.
10607
10608 The list of all supported medium formats can be obtained using
10609 <link to="ISystemProperties::mediaFormats"/>.
10610
10611 <see>IMedium</see>
10612 </desc>
10613
10614 <attribute name="id" type="wstring" readonly="yes">
10615 <desc>
10616 Identifier of this format.
10617
10618 The format identifier is a non-@c null non-empty ASCII string. Note that
10619 this string is case-insensitive. This means that, for example, all of
10620 the following strings:
10621 <pre>
10622 "VDI"
10623 "vdi"
10624 "VdI"</pre>
10625 refer to the same medium format.
10626
10627 This string is used in methods of other interfaces where it is necessary
10628 to specify a medium format, such as
10629 <link to="IVirtualBox::createHardDisk"/>.
10630 </desc>
10631 </attribute>
10632
10633 <attribute name="name" type="wstring" readonly="yes">
10634 <desc>
10635 Human readable description of this format.
10636
10637 Mainly for use in file open dialogs.
10638 </desc>
10639 </attribute>
10640
10641 <attribute name="fileExtensions" type="wstring" safearray="yes" readonly="yes">
10642 <desc>
10643 Array of strings containing the supported file extensions.
10644
10645 The first extension in the array is the extension preferred by the
10646 backend. It is recommended to use this extension when specifying a
10647 location of the storage unit for a new medium.
10648
10649 Note that some backends do not work on files, so this array may be
10650 empty.
10651
10652 <see>IMediumFormat::capabilities</see>
10653 </desc>
10654 </attribute>
10655
10656 <attribute name="capabilities" type="unsigned long" readonly="yes">
10657 <desc>
10658 Capabilities of the format as a set of bit flags.
10659
10660 For the meaning of individual capability flags see
10661 <link to="MediumFormatCapabilities"/>.
10662 </desc>
10663 </attribute>
10664
10665 <method name="describeProperties">
10666 <desc>
10667 Returns several arrays describing the properties supported by this
10668 format.
10669
10670 An element with the given index in each array describes one
10671 property. Thus, the number of elements in each returned array is the
10672 same and corresponds to the number of supported properties.
10673
10674 The returned arrays are filled in only if the
10675 <link to="MediumFormatCapabilities_Properties"/> flag is set.
10676 All arguments must be non-@c null.
10677
10678 <see>DataType</see>
10679 <see>DataFlags</see>
10680 </desc>
10681
10682 <param name="names" type="wstring" safearray="yes" dir="out">
10683 <desc>Array of property names.</desc>
10684 </param>
10685 <param name="description" type="wstring" safearray="yes" dir="out">
10686 <desc>Array of property descriptions.</desc>
10687 </param>
10688 <param name="types" type="DataType" safearray="yes" dir="out">
10689 <desc>Array of property types.</desc>
10690 </param>
10691 <param name="flags" type="unsigned long" safearray="yes" dir="out">
10692 <desc>Array of property flags.</desc>
10693 </param>
10694 <param name="defaults" type="wstring" safearray="yes" dir="out">
10695 <desc>Array of default property values.</desc>
10696 </param>
10697 </method>
10698
10699 </interface>
10700
10701
10702 <!--
10703 // IKeyboard
10704 /////////////////////////////////////////////////////////////////////////
10705 -->
10706
10707 <interface
10708 name="IKeyboard" extends="$unknown"
10709 uuid="2d1a531b-4c6e-49cc-8af6-5c857b78b5d7"
10710 wsmap="managed"
10711 >
10712 <desc>
10713 The IKeyboard interface represents the virtual machine's keyboard. Used
10714 in <link to="IConsole::keyboard"/>.
10715
10716 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
10717 to the virtual machine.
10718
10719 </desc>
10720 <method name="putScancode">
10721 <desc>Sends a scancode to the keyboard.
10722
10723 <result name="VBOX_E_IPRT_ERROR">
10724 Could not send scan code to virtual keyboard.
10725 </result>
10726
10727 </desc>
10728 <param name="scancode" type="long" dir="in"/>
10729 </method>
10730
10731 <method name="putScancodes">
10732 <desc>Sends an array of scancodes to the keyboard.
10733
10734 <result name="VBOX_E_IPRT_ERROR">
10735 Could not send all scan codes to virtual keyboard.
10736 </result>
10737
10738 </desc>
10739 <param name="scancodes" type="long" dir="in" safearray="yes"/>
10740 <param name="codesStored" type="unsigned long" dir="return"/>
10741 </method>
10742
10743 <method name="putCAD">
10744 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
10745 function is nothing special, it is just a convenience function
10746 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
10747
10748 <result name="VBOX_E_IPRT_ERROR">
10749 Could not send all scan codes to virtual keyboard.
10750 </result>
10751
10752 </desc>
10753 </method>
10754
10755 </interface>
10756
10757
10758 <!--
10759 // IMouse
10760 /////////////////////////////////////////////////////////////////////////
10761 -->
10762
10763 <enum
10764 name="MouseButtonState"
10765 uuid="9ee094b8-b28a-4d56-a166-973cb588d7f8"
10766 >
10767 <desc>
10768 Mouse button state.
10769 </desc>
10770
10771 <const name="LeftButton" value="0x01"/>
10772 <const name="RightButton" value="0x02"/>
10773 <const name="MiddleButton" value="0x04"/>
10774 <const name="WheelUp" value="0x08"/>
10775 <const name="WheelDown" value="0x10"/>
10776 <const name="XButton1" value="0x20"/>
10777 <const name="XButton2" value="0x40"/>
10778 <const name="MouseStateMask" value="0x7F"/>
10779 </enum>
10780
10781 <interface
10782 name="IMouse" extends="$unknown"
10783 uuid="7c0f2eae-f92d-498c-b802-e1a3763774dc"
10784 wsmap="managed"
10785 >
10786 <desc>
10787 The IMouse interface represents the virtual machine's mouse. Used in
10788 <link to="IConsole::mouse"/>.
10789
10790 Through this interface, the virtual machine's virtual mouse can be
10791 controlled.
10792 </desc>
10793
10794 <attribute name="absoluteSupported" type="boolean" readonly="yes">
10795 <desc>
10796 Whether the guest OS supports absolute mouse pointer positioning
10797 or not.
10798 <note>
10799 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10800 callback to be instantly informed about changes of this attribute
10801 during virtual machine execution.
10802 </note>
10803 <see><link to="#putMouseEventAbsolute"/></see>
10804 </desc>
10805 </attribute>
10806
10807 <attribute name="relativeSupported" type="boolean" readonly="yes">
10808 <desc>
10809 Whether the guest OS supports relative mouse pointer positioning
10810 or not.
10811 <note>
10812 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10813 callback to be instantly informed about changes of this attribute
10814 during virtual machine execution.
10815 </note>
10816 <see><link to="#putMouseEvent"/></see>
10817 </desc>
10818 </attribute>
10819
10820 <attribute name="needsHostCursor" type="boolean" readonly="yes">
10821 <desc>
10822 Whether the guest OS can currently switch to drawing it's own mouse
10823 cursor on demand.
10824 <note>
10825 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10826 callback to be instantly informed about changes of this attribute
10827 during virtual machine execution.
10828 </note>
10829 <see><link to="#putMouseEvent"/></see>
10830 </desc>
10831 </attribute>
10832
10833 <method name="putMouseEvent">
10834 <desc>
10835 Initiates a mouse event using relative pointer movements
10836 along x and y axis.
10837
10838 <result name="E_ACCESSDENIED">
10839 Console not powered up.
10840 </result>
10841 <result name="VBOX_E_IPRT_ERROR">
10842 Could not send mouse event to virtual mouse.
10843 </result>
10844
10845 </desc>
10846
10847 <param name="dx" type="long" dir="in">
10848 <desc>
10849 Amount of pixels the mouse should move to the right.
10850 Negative values move the mouse to the left.
10851 </desc>
10852 </param>
10853 <param name="dy" type="long" dir="in">
10854 <desc>
10855 Amount of pixels the mouse should move downwards.
10856 Negative values move the mouse upwards.
10857 </desc>
10858 </param>
10859 <param name="dz" type="long" dir="in">
10860 <desc>
10861 Amount of mouse wheel moves.
10862 Positive values describe clockwise wheel rotations,
10863 negative values describe counterclockwise rotations.
10864 </desc>
10865 </param>
10866 <param name="dw" type="long" dir="in">
10867 <desc>
10868 Amount of horizontal mouse wheel moves.
10869 Positive values describe a movement to the left,
10870 negative values describe a movement to the right.
10871 </desc>
10872 </param>
10873 <param name="buttonState" type="long" dir="in">
10874 <desc>
10875 The current state of mouse buttons. Every bit represents
10876 a mouse button as follows:
10877 <table>
10878 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10879 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
10880 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
10881 </table>
10882 A value of <tt>1</tt> means the corresponding button is pressed.
10883 otherwise it is released.
10884 </desc>
10885 </param>
10886 </method>
10887
10888 <method name="putMouseEventAbsolute">
10889 <desc>
10890 Positions the mouse pointer using absolute x and y coordinates.
10891 These coordinates are expressed in pixels and
10892 start from <tt>[1,1]</tt> which corresponds to the top left
10893 corner of the virtual display.
10894
10895 <result name="E_ACCESSDENIED">
10896 Console not powered up.
10897 </result>
10898 <result name="VBOX_E_IPRT_ERROR">
10899 Could not send mouse event to virtual mouse.
10900 </result>
10901
10902 <note>
10903 This method will have effect only if absolute mouse
10904 positioning is supported by the guest OS.
10905 </note>
10906
10907 <see><link to="#absoluteSupported"/></see>
10908 </desc>
10909
10910 <param name="x" type="long" dir="in">
10911 <desc>
10912 X coordinate of the pointer in pixels, starting from @c 1.
10913 </desc>
10914 </param>
10915 <param name="y" type="long" dir="in">
10916 <desc>
10917 Y coordinate of the pointer in pixels, starting from @c 1.
10918 </desc>
10919 </param>
10920 <param name="dz" type="long" dir="in">
10921 <desc>
10922 Amount of mouse wheel moves.
10923 Positive values describe clockwise wheel rotations,
10924 negative values describe counterclockwise rotations.
10925 </desc>
10926 </param>
10927 <param name="dw" type="long" dir="in">
10928 <desc>
10929 Amount of horizontal mouse wheel moves.
10930 Positive values describe a movement to the left,
10931 negative values describe a movement to the right.
10932 </desc>
10933 </param>
10934 <param name="buttonState" type="long" dir="in">
10935 <desc>
10936 The current state of mouse buttons. Every bit represents
10937 a mouse button as follows:
10938 <table>
10939 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10940 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
10941 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
10942 </table>
10943 A value of @c 1 means the corresponding button is pressed.
10944 otherwise it is released.
10945 </desc>
10946 </param>
10947 </method>
10948
10949 </interface>
10950
10951 <!--
10952 // IDisplay
10953 /////////////////////////////////////////////////////////////////////////
10954 -->
10955
10956 <enum
10957 name="FramebufferPixelFormat"
10958 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
10959 >
10960 <desc>
10961 Format of the video memory buffer. Constants represented by this enum can
10962 be used to test for particular values of <link
10963 to="IFramebuffer::pixelFormat"/>. See also <link
10964 to="IFramebuffer::requestResize"/>.
10965
10966 See also www.fourcc.org for more information about FOURCC pixel formats.
10967 </desc>
10968
10969 <const name="Opaque" value="0">
10970 <desc>
10971 Unknown buffer format (the user may not assume any particular format of
10972 the buffer).
10973 </desc>
10974 </const>
10975 <const name="FOURCC_RGB" value="0x32424752">
10976 <desc>
10977 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
10978 bit layout).
10979 </desc>
10980 </const>
10981 </enum>
10982
10983 <interface
10984 name="IFramebuffer" extends="$unknown"
10985 uuid="b7ed347a-5765-40a0-ae1c-f543eb4ddeaf"
10986 wsmap="suppress"
10987 >
10988 <attribute name="address" type="octet" mod="ptr" readonly="yes">
10989 <desc>Address of the start byte of the frame buffer.</desc>
10990 </attribute>
10991
10992 <attribute name="width" type="unsigned long" readonly="yes">
10993 <desc>Frame buffer width, in pixels.</desc>
10994 </attribute>
10995
10996 <attribute name="height" type="unsigned long" readonly="yes">
10997 <desc>Frame buffer height, in pixels.</desc>
10998 </attribute>
10999
11000 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
11001 <desc>
11002 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
11003 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
11004 are: 8, 15, 16, 24 and 32.
11005 </desc>
11006 </attribute>
11007
11008 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
11009 <desc>
11010 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
11011 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
11012 size of the scan line must be aligned to 32 bits.
11013 </desc>
11014 </attribute>
11015
11016 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
11017 <desc>
11018 Frame buffer pixel format. It's either one of the values defined by <link
11019 to="FramebufferPixelFormat"/> or a raw FOURCC code.
11020 <note>
11021 This attribute must never return <link
11022 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
11023 <link to="#address"/> points to must be always known.
11024 </note>
11025 </desc>
11026 </attribute>
11027
11028 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
11029 <desc>
11030 Defines whether this frame buffer uses the virtual video card's memory
11031 buffer (guest VRAM) directly or not. See <link
11032 to="IFramebuffer::requestResize"/> for more information.
11033 </desc>
11034 </attribute>
11035
11036 <attribute name="heightReduction" type="unsigned long" readonly="yes">
11037 <desc>
11038 Hint from the frame buffer about how much of the standard
11039 screen height it wants to use for itself. This information is
11040 exposed to the guest through the VESA BIOS and VMMDev interface
11041 so that it can use it for determining its video mode table. It
11042 is not guaranteed that the guest respects the value.
11043 </desc>
11044 </attribute>
11045
11046 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
11047 <desc>
11048 An alpha-blended overlay which is superposed over the frame buffer.
11049 The initial purpose is to allow the display of icons providing
11050 information about the VM state, including disk activity, in front
11051 ends which do not have other means of doing that. The overlay is
11052 designed to controlled exclusively by IDisplay. It has no locking
11053 of its own, and any changes made to it are not guaranteed to be
11054 visible until the affected portion of IFramebuffer is updated. The
11055 overlay can be created lazily the first time it is requested. This
11056 attribute can also return @c null to signal that the overlay is not
11057 implemented.
11058 </desc>
11059 </attribute>
11060
11061 <attribute name="winId" type="unsigned long long" readonly="yes">
11062 <desc>
11063 Platform-dependent identifier of the window where context of this
11064 frame buffer is drawn, or zero if there's no such window.
11065 </desc>
11066 </attribute>
11067
11068 <method name="lock">
11069 <desc>
11070 Locks the frame buffer.
11071 Gets called by the IDisplay object where this frame buffer is
11072 bound to.
11073 </desc>
11074 </method>
11075
11076 <method name="unlock">
11077 <desc>
11078 Unlocks the frame buffer.
11079 Gets called by the IDisplay object where this frame buffer is
11080 bound to.
11081 </desc>
11082 </method>
11083
11084 <method name="notifyUpdate">
11085 <desc>
11086 Informs about an update.
11087 Gets called by the display object where this buffer is
11088 registered.
11089 </desc>
11090 <param name="x" type="unsigned long" dir="in"/>
11091 <param name="y" type="unsigned long" dir="in"/>
11092 <param name="width" type="unsigned long" dir="in"/>
11093 <param name="height" type="unsigned long" dir="in"/>
11094 </method>
11095
11096 <method name="requestResize">
11097 <desc>
11098 Requests a size and pixel format change.
11099
11100 There are two modes of working with the video buffer of the virtual
11101 machine. The <i>indirect</i> mode implies that the IFramebuffer
11102 implementation allocates a memory buffer for the requested display mode
11103 and provides it to the virtual machine. In <i>direct</i> mode, the
11104 IFramebuffer implementation uses the memory buffer allocated and owned
11105 by the virtual machine. This buffer represents the video memory of the
11106 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
11107 usually faster because the implementation gets a raw pointer to the
11108 guest VRAM buffer which it can directly use for visualizing the contents
11109 of the virtual display, as opposed to the indirect mode where the
11110 contents of guest VRAM are copied to the memory buffer provided by
11111 the implementation every time a display update occurs.
11112
11113 It is important to note that the direct mode is really fast only when
11114 the implementation uses the given guest VRAM buffer directly, for
11115 example, by blitting it to the window representing the virtual machine's
11116 display, which saves at least one copy operation comparing to the
11117 indirect mode. However, using the guest VRAM buffer directly is not
11118 always possible: the format and the color depth of this buffer may be
11119 not supported by the target window, or it may be unknown (opaque) as in
11120 case of text or non-linear multi-plane VGA video modes. In this case,
11121 the indirect mode (that is always available) should be used as a
11122 fallback: when the guest VRAM contents are copied to the
11123 implementation-provided memory buffer, color and format conversion is
11124 done automatically by the underlying code.
11125
11126 The @a pixelFormat parameter defines whether the direct mode is
11127 available or not. If @a pixelFormat is <link
11128 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
11129 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and
11130 @a bytesPerLine parameters must be ignored and the implementation must use
11131 the indirect mode (where it provides its own buffer in one of the
11132 supported formats). In all other cases, @a pixelFormat together with
11133 @a bitsPerPixel and @a bytesPerLine define the format of the video memory
11134 buffer pointed to by the @a VRAM parameter and the implementation is
11135 free to choose which mode to use. To indicate that this frame buffer uses
11136 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
11137 attribute must return @c true and <link to="#address"/> must
11138 return exactly the same address that is passed in the @a VRAM parameter
11139 of this method; otherwise it is assumed that the indirect strategy is
11140 chosen.
11141
11142 The @a width and @a height parameters represent the size of the
11143 requested display mode in both modes. In case of indirect mode, the
11144 provided memory buffer should be big enough to store data of the given
11145 display mode. In case of direct mode, it is guaranteed that the given
11146 @a VRAM buffer contains enough space to represent the display mode of the
11147 given size. Note that this frame buffer's <link to="#width"/> and <link
11148 to="#height"/> attributes must return exactly the same values as
11149 passed to this method after the resize is completed (see below).
11150
11151 The @a finished output parameter determines if the implementation has
11152 finished resizing the frame buffer or not. If, for some reason, the
11153 resize cannot be finished immediately during this call, @a finished
11154 must be set to @c false, and the implementation must call
11155 <link to="IDisplay::resizeCompleted"/> after it has returned from
11156 this method as soon as possible. If @a finished is @c false, the
11157 machine will not call any frame buffer methods until
11158 <link to="IDisplay::resizeCompleted"/> is called.
11159
11160 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
11161 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
11162 this frame buffer must return exactly the same values as specified in the
11163 parameters of this method, after the resize is completed. If the
11164 indirect mode is chosen, these attributes must return values describing
11165 the format of the implementation's own memory buffer <link
11166 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
11167 value must always correlate with <link to="#pixelFormat"/>. Note that
11168 the <link to="#pixelFormat"/> attribute must never return <link
11169 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
11170
11171 <note>
11172 This method is called by the IDisplay object under the
11173 <link to="#lock"/> provided by this IFramebuffer
11174 implementation. If this method returns @c false in @a finished, then
11175 this lock is not released until
11176 <link to="IDisplay::resizeCompleted"/> is called.
11177 </note>
11178 </desc>
11179 <param name="screenId" type="unsigned long" dir="in">
11180 <desc>
11181 Logical screen number. Must be used in the corresponding call to
11182 <link to="IDisplay::resizeCompleted"/> if this call is made.
11183 </desc>
11184 </param>
11185 <param name="pixelFormat" type="unsigned long" dir="in">
11186 <desc>
11187 Pixel format of the memory buffer pointed to by @a VRAM.
11188 See also <link to="FramebufferPixelFormat"/>.
11189 </desc>
11190 </param>
11191 <param name="VRAM" type="octet" mod="ptr" dir="in">
11192 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
11193 </param>
11194 <param name="bitsPerPixel" type="unsigned long" dir="in">
11195 <desc>Color depth, bits per pixel.</desc>
11196 </param>
11197 <param name="bytesPerLine" type="unsigned long" dir="in">
11198 <desc>Size of one scan line, in bytes.</desc>
11199 </param>
11200 <param name="width" type="unsigned long" dir="in">
11201 <desc>Width of the guest display, in pixels.</desc>
11202 </param>
11203 <param name="height" type="unsigned long" dir="in">
11204 <desc>Height of the guest display, in pixels.</desc>
11205 </param>
11206 <param name="finished" type="boolean" dir="return">
11207 <desc>
11208 Can the VM start using the new frame buffer immediately
11209 after this method returns or it should wait for
11210 <link to="IDisplay::resizeCompleted"/>.
11211 </desc>
11212 </param>
11213 </method>
11214
11215 <method name="videoModeSupported">
11216 <desc>
11217 Returns whether the frame buffer implementation is willing to
11218 support a given video mode. In case it is not able to render
11219 the video mode (or for some reason not willing), it should
11220 return @c false. Usually this method is called when the guest
11221 asks the VMM device whether a given video mode is supported
11222 so the information returned is directly exposed to the guest.
11223 It is important that this method returns very quickly.
11224 </desc>
11225 <param name="width" type="unsigned long" dir="in"/>
11226 <param name="height" type="unsigned long" dir="in"/>
11227 <param name="bpp" type="unsigned long" dir="in"/>
11228 <param name="supported" type="boolean" dir="return"/>
11229 </method>
11230
11231 <method name="getVisibleRegion">
11232 <desc>
11233 Returns the visible region of this frame buffer.
11234
11235 If the @a rectangles parameter is @c null then the value of the
11236 @a count parameter is ignored and the number of elements necessary to
11237 describe the current visible region is returned in @a countCopied.
11238
11239 If @a rectangles is not @c null but @a count is less
11240 than the required number of elements to store region data, the method
11241 will report a failure. If @a count is equal or greater than the
11242 required number of elements, then the actual number of elements copied
11243 to the provided array will be returned in @a countCopied.
11244
11245 <note>
11246 The address of the provided array must be in the process space of
11247 this IFramebuffer object.
11248 </note>
11249 <note>
11250 Method not yet implemented.
11251 </note>
11252 </desc>
11253 <param name="rectangles" type="octet" mod="ptr" dir="in">
11254 <desc>Pointer to the @c RTRECT array to receive region data.</desc>
11255 </param>
11256 <param name="count" type="unsigned long" dir="in">
11257 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
11258 </param>
11259 <param name="countCopied" type="unsigned long" dir="return">
11260 <desc>Number of elements copied to the @a rectangles array.</desc>
11261 </param>
11262 </method>
11263
11264 <method name="setVisibleRegion">
11265 <desc>
11266 Suggests a new visible region to this frame buffer. This region
11267 represents the area of the VM display which is a union of regions of
11268 all top-level windows of the guest operating system running inside the
11269 VM (if the Guest Additions for this system support this
11270 functionality). This information may be used by the frontends to
11271 implement the seamless desktop integration feature.
11272
11273 <note>
11274 The address of the provided array must be in the process space of
11275 this IFramebuffer object.
11276 </note>
11277 <note>
11278 The IFramebuffer implementation must make a copy of the provided
11279 array of rectangles.
11280 </note>
11281 <note>
11282 Method not yet implemented.
11283 </note>
11284 </desc>
11285 <param name="rectangles" type="octet" mod="ptr" dir="in">
11286 <desc>Pointer to the @c RTRECT array.</desc>
11287 </param>
11288 <param name="count" type="unsigned long" dir="in">
11289 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
11290 </param>
11291 </method>
11292
11293 <method name="processVHWACommand">
11294 <desc>
11295 Posts a Video HW Acceleration Command to the frame buffer for processing.
11296 The commands used for 2D video acceleration (DDraw surface creation/destroying, blitting, scaling, color covnersion, overlaying, etc.)
11297 are posted from quest to the host to be processed by the host hardware.
11298
11299 <note>
11300 The address of the provided command must be in the process space of
11301 this IFramebuffer object.
11302 </note>
11303 </desc>
11304
11305 <param name="command" type="octet" mod="ptr" dir="in">
11306 <desc>Pointer to VBOXVHWACMD containing the command to execute.</desc>
11307 </param>
11308 </method>
11309
11310 </interface>
11311
11312 <interface
11313 name="IFramebufferOverlay" extends="IFramebuffer"
11314 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
11315 wsmap="suppress"
11316 >
11317 <desc>
11318 The IFramebufferOverlay interface represents an alpha blended overlay
11319 for displaying status icons above an IFramebuffer. It is always created
11320 not visible, so that it must be explicitly shown. It only covers a
11321 portion of the IFramebuffer, determined by its width, height and
11322 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
11323 that order) format, and may be written to directly. Do re-read the
11324 width though, after setting it, as it may be adjusted (increased) to
11325 make it more suitable for the front end.
11326 </desc>
11327 <attribute name="x" type="unsigned long" readonly="yes">
11328 <desc>X position of the overlay, relative to the frame buffer.</desc>
11329 </attribute>
11330
11331 <attribute name="y" type="unsigned long" readonly="yes">
11332 <desc>Y position of the overlay, relative to the frame buffer.</desc>
11333 </attribute>
11334
11335 <attribute name="visible" type="boolean" readonly="no">
11336 <desc>
11337 Whether the overlay is currently visible.
11338 </desc>
11339 </attribute>
11340
11341 <attribute name="alpha" type="unsigned long" readonly="no">
11342 <desc>
11343 The global alpha value for the overlay. This may or may not be
11344 supported by a given front end.
11345 </desc>
11346 </attribute>
11347
11348 <method name="move">
11349 <desc>
11350 Changes the overlay's position relative to the IFramebuffer.
11351 </desc>
11352 <param name="x" type="unsigned long" dir="in"/>
11353 <param name="y" type="unsigned long" dir="in"/>
11354 </method>
11355
11356 </interface>
11357
11358 <interface
11359 name="IDisplay" extends="$unknown"
11360 uuid="e2a38ebc-d854-4a3e-bc2e-fdf5ac4a0000"
11361 wsmap="managed"
11362 >
11363 <desc>
11364 The IDisplay interface represents the virtual machine's display.
11365
11366 The object implementing this interface is contained in each
11367 <link to="IConsole::display"/> attribute and represents the visual
11368 output of the virtual machine.
11369
11370 The virtual display supports pluggable output targets represented by the
11371 IFramebuffer interface. Examples of the output target are a window on
11372 the host computer or an RDP session's display on a remote computer.
11373 </desc>
11374 <attribute name="width" type="unsigned long" readonly="yes">
11375 <desc>Current display width.</desc>
11376 </attribute>
11377
11378 <attribute name="height" type="unsigned long" readonly="yes">
11379 <desc>Current display height.</desc>
11380 </attribute>
11381
11382 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
11383 <desc>
11384 Current guest display color depth. Note that this may differ
11385 from <link to="IFramebuffer::bitsPerPixel"/>.
11386 </desc>
11387 </attribute>
11388
11389 <method name="setFramebuffer">
11390 <desc>
11391 Sets the framebuffer for given screen.
11392 </desc>
11393 <param name="screenId" type="unsigned long" dir="in"/>
11394 <param name="framebuffer" type="IFramebuffer" dir="in"/>
11395 </method>
11396
11397 <method name="getFramebuffer">
11398 <desc>
11399 Queries the framebuffer for given screen.
11400 </desc>
11401 <param name="screenId" type="unsigned long" dir="in"/>
11402 <param name="framebuffer" type="IFramebuffer" dir="out"/>
11403 <param name="xOrigin" type="long" dir="out"/>
11404 <param name="yOrigin" type="long" dir="out"/>
11405 </method>
11406
11407 <method name="setVideoModeHint">
11408 <desc>
11409 Asks VirtualBox to request the given video mode from
11410 the guest. This is just a hint and it cannot be guaranteed
11411 that the requested resolution will be used. Guest Additions
11412 are required for the request to be seen by guests. The caller
11413 should issue the request and wait for a resolution change and
11414 after a timeout retry.
11415
11416 Specifying @c 0 for either @a width, @a height or @a bitsPerPixel
11417 parameters means that the corresponding values should be taken from the
11418 current video mode (i.e. left unchanged).
11419
11420 If the guest OS supports multi-monitor configuration then the @a display
11421 parameter specifies the number of the guest display to send the hint to:
11422 @c 0 is the primary display, @c 1 is the first secondary and
11423 so on. If the multi-monitor configuration is not supported, @a display
11424 must be @c 0.
11425
11426 <result name="E_INVALIDARG">
11427 The @a display is not associated with any monitor.
11428 </result>
11429
11430 </desc>
11431 <param name="width" type="unsigned long" dir="in"/>
11432 <param name="height" type="unsigned long" dir="in"/>
11433 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
11434 <param name="display" type="unsigned long" dir="in"/>
11435 </method>
11436
11437 <method name="setSeamlessMode">
11438 <desc>
11439 Enables or disables seamless guest display rendering (seamless desktop
11440 integration) mode.
11441 <note>
11442 Calling this method has no effect if <link
11443 to="IGuest::supportsSeamless"/> returns @c false.
11444 </note>
11445 </desc>
11446 <param name="enabled" type="boolean" dir="in"/>
11447 </method>
11448
11449 <method name="takeScreenShot">
11450 <desc>
11451 Takes a screen shot of the requested size and copies it to the
11452 32-bpp buffer allocated by the caller and pointed to by @a address.
11453 A pixel consists of 4 bytes in order: B, G, R, 0.
11454
11455 <note>This API can be used only by the COM/XPCOM C++ API as it
11456 requires pointer support. Use <link to="#takeScreenShotSlow" />
11457 with other language bindings.
11458 </note>
11459
11460 <result name="E_NOTIMPL">
11461 Feature not implemented.
11462 </result>
11463 <result name="VBOX_E_IPRT_ERROR">
11464 Could not take a screenshot.
11465 </result>
11466
11467 </desc>
11468 <param name="address" type="octet" mod="ptr" dir="in"/>
11469 <param name="width" type="unsigned long" dir="in"/>
11470 <param name="height" type="unsigned long" dir="in"/>
11471 </method>
11472
11473 <method name="takeScreenShotSlow">
11474 <desc>
11475 Takes a guest screen shot of the requested size and returns it as
11476 an array of bytes in uncompressed 32-bit RGBA format.
11477 A pixel consists of 4 bytes in order: R, G, B, 0xFF.
11478
11479 This API is slow, but could be the only option to get guest screenshot
11480 for scriptable languages not allowed to manipulate with addresses
11481 directly.
11482
11483 <result name="E_NOTIMPL">
11484 Feature not implemented.
11485 </result>
11486 <result name="VBOX_E_IPRT_ERROR">
11487 Could not take a screenshot.
11488 </result>
11489 </desc>
11490 <param name="width" type="unsigned long" dir="in">
11491 <desc>
11492 Desired image width.
11493 </desc>
11494 </param>
11495 <param name="height" type="unsigned long" dir="in">
11496 <desc>
11497 Desired image height.
11498 </desc>
11499 </param>
11500 <param name="screenData" type="octet" dir="return" safearray="yes">
11501 <desc>
11502 Array with resulting screen data.
11503 </desc>
11504 </param>
11505 </method>
11506
11507 <method name="drawToScreen">
11508 <desc>
11509 Draws a 32-bpp image of the specified size from the given buffer
11510 to the given point on the VM display.
11511
11512 <result name="E_NOTIMPL">
11513 Feature not implemented.
11514 </result>
11515 <result name="VBOX_E_IPRT_ERROR">
11516 Could not draw to screen.
11517 </result>
11518
11519 </desc>
11520 <param name="address" type="octet" mod="ptr" dir="in"/>
11521 <param name="x" type="unsigned long" dir="in"/>
11522 <param name="y" type="unsigned long" dir="in"/>
11523 <param name="width" type="unsigned long" dir="in"/>
11524 <param name="height" type="unsigned long" dir="in"/>
11525 </method>
11526
11527 <method name="invalidateAndUpdate">
11528 <desc>
11529 Does a full invalidation of the VM display and instructs the VM
11530 to update it.
11531
11532 <result name="VBOX_E_IPRT_ERROR">
11533 Could not invalidate and update screen.
11534 </result>
11535
11536 </desc>
11537 </method>
11538
11539 <method name="resizeCompleted">
11540 <desc>
11541 Signals that a framebuffer has completed the resize operation.
11542
11543 <result name="VBOX_E_NOT_SUPPORTED">
11544 Operation only valid for external frame buffers.
11545 </result>
11546
11547 </desc>
11548 <param name="screenId" type="unsigned long" dir="in"/>
11549 </method>
11550
11551 <method name="updateCompleted">
11552 <desc>
11553 Signals that a framebuffer has completed the update operation.
11554
11555 <result name="VBOX_E_NOT_SUPPORTED">
11556 Operation only valid for external frame buffers.
11557 </result>
11558
11559 </desc>
11560 </method>
11561
11562 <method name="completeVHWACommand">
11563 <desc>
11564 Signals that the Video HW Acceleration command has completed.
11565 </desc>
11566
11567 <param name="command" type="octet" mod="ptr" dir="in">
11568 <desc>Pointer to VBOXVHWACMD containing the completed command.</desc>
11569 </param>
11570 </method>
11571
11572 </interface>
11573
11574 <!--
11575 // INetworkAdapter
11576 /////////////////////////////////////////////////////////////////////////
11577 -->
11578
11579 <enum
11580 name="NetworkAttachmentType"
11581 uuid="44bce1ee-99f7-4e8e-89fc-80597fd9eeaf"
11582 >
11583 <desc>
11584 Network attachment type.
11585 </desc>
11586
11587 <const name="Null" value="0">
11588 <desc>Null value, also means "not attached".</desc>
11589 </const>
11590 <const name="NAT" value="1"/>
11591 <const name="Bridged" value="2"/>
11592 <const name="Internal" value="3"/>
11593 <const name="HostOnly" value="4"/>
11594 </enum>
11595
11596 <enum
11597 name="NetworkAdapterType"
11598 uuid="3c2281e4-d952-4e87-8c7d-24379cb6a81c"
11599 >
11600 <desc>
11601 Network adapter type.
11602 </desc>
11603
11604 <const name="Null" value="0">
11605 <desc>Null value (never used by the API).</desc>
11606 </const>
11607 <const name="Am79C970A" value="1">
11608 <desc>AMD PCNet-PCI II network card (Am79C970A).</desc>
11609 </const>
11610 <const name="Am79C973" value="2">
11611 <desc>AMD PCNet-FAST III network card (Am79C973).</desc>
11612 </const>
11613 <const name="I82540EM" value="3">
11614 <desc>Intel PRO/1000 MT Desktop network card (82540EM).</desc>
11615 </const>
11616 <const name="I82543GC" value="4">
11617 <desc>Intel PRO/1000 T Server network card (82543GC).</desc>
11618 </const>
11619 <const name="I82545EM" value="5">
11620 <desc>Intel PRO/1000 MT Server network card (82545EM).</desc>
11621 </const>
11622 <const name="Virtio" value="6">
11623 <desc>Virtio network device.</desc>
11624 </const>
11625 </enum>
11626
11627 <interface
11628 name="INetworkAdapter" extends="$unknown"
11629 uuid="65607a27-2b73-4d43-b4cc-0ba2c817fbde"
11630 wsmap="managed"
11631 >
11632 <desc>
11633 Represents a virtual network adapter that is attached to a virtual machine.
11634 Each virtual machine has a fixed number of network adapter slots with one
11635 instance of this attached to each of them. Call
11636 <link to="IMachine::getNetworkAdapter" /> to get the network adapter that
11637 is attached to a given slot in a given machine.
11638
11639 Each network adapter can be in one of five attachment modes, which are
11640 represented by the <link to="NetworkAttachmentType" /> enumeration;
11641 see the <link to="#attachmentType" /> attribute.
11642 </desc>
11643
11644 <attribute name="adapterType" type="NetworkAdapterType">
11645 <desc>
11646 Type of the virtual network adapter. Depending on this value,
11647 VirtualBox will provide a different virtual network hardware
11648 to the guest.
11649 </desc>
11650 </attribute>
11651
11652 <attribute name="slot" type="unsigned long" readonly="yes">
11653 <desc>
11654 Slot number this adapter is plugged into. Corresponds to
11655 the value you pass to <link to="IMachine::getNetworkAdapter"/>
11656 to obtain this instance.
11657 </desc>
11658 </attribute>
11659
11660 <attribute name="enabled" type="boolean">
11661 <desc>
11662 Flag whether the network adapter is present in the
11663 guest system. If disabled, the virtual guest hardware will
11664 not contain this network adapter. Can only be changed when
11665 the VM is not running.
11666 </desc>
11667 </attribute>
11668
11669 <attribute name="MACAddress" type="wstring">
11670 <desc>
11671 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
11672 it to @c null or an empty string, VirtualBox will generate a unique MAC address.
11673 </desc>
11674 </attribute>
11675
11676 <attribute name="attachmentType" type="NetworkAttachmentType" readonly="yes"/>
11677
11678 <attribute name="hostInterface" type="wstring">
11679 <desc>
11680 Name of the host network interface the VM is attached to.
11681 </desc>
11682 </attribute>
11683
11684 <attribute name="internalNetwork" type="wstring">
11685 <desc>
11686 Name of the internal network the VM is attached to.
11687 </desc>
11688 </attribute>
11689
11690 <attribute name="NATNetwork" type="wstring">
11691 <desc>
11692 Name of the NAT network the VM is attached to.
11693 </desc>
11694 </attribute>
11695
11696 <attribute name="cableConnected" type="boolean">
11697 <desc>
11698 Flag whether the adapter reports the cable as connected or not.
11699 It can be used to report offline situations to a VM.
11700 </desc>
11701 </attribute>
11702
11703 <attribute name="lineSpeed" type="unsigned long">
11704 <desc>
11705 Line speed reported by custom drivers, in units of 1 kbps.
11706 </desc>
11707 </attribute>
11708
11709 <attribute name="traceEnabled" type="boolean">
11710 <desc>
11711 Flag whether network traffic from/to the network card should be traced.
11712 Can only be toggled when the VM is turned off.
11713 </desc>
11714 </attribute>
11715
11716 <attribute name="traceFile" type="wstring">
11717 <desc>
11718 Filename where a network trace will be stored. If not set, VBox-pid.pcap
11719 will be used.
11720 </desc>
11721 </attribute>
11722
11723 <method name="attachToNAT">
11724 <desc>
11725 Attach the network adapter to the Network Address Translation (NAT) interface.
11726 </desc>
11727 </method>
11728
11729 <method name="attachToBridgedInterface">
11730 <desc>
11731 Attach the network adapter to a bridged host interface.
11732 </desc>
11733 </method>
11734
11735 <method name="attachToInternalNetwork">
11736 <desc>
11737 Attach the network adapter to an internal network.
11738 </desc>
11739 </method>
11740
11741 <method name="attachToHostOnlyInterface">
11742 <desc>
11743 Attach the network adapter to the host-only network.
11744 </desc>
11745 </method>
11746
11747 <method name="detach">
11748 <desc>
11749 Detach the network adapter
11750 </desc>
11751 </method>
11752 </interface>
11753
11754
11755 <!--
11756 // ISerialPort
11757 /////////////////////////////////////////////////////////////////////////
11758 -->
11759
11760 <enum
11761 name="PortMode"
11762 uuid="533b5fe3-0185-4197-86a7-17e37dd39d76"
11763 >
11764 <desc>
11765 The PortMode enumeration represents possible communication modes for
11766 the virtual serial port device.
11767 </desc>
11768
11769 <const name="Disconnected" value="0">
11770 <desc>Virtual device is not attached to any real host device.</desc>
11771 </const>
11772 <const name="HostPipe" value="1">
11773 <desc>Virtual device is attached to a host pipe.</desc>
11774 </const>
11775 <const name="HostDevice" value="2">
11776 <desc>Virtual device is attached to a host device.</desc>
11777 </const>
11778 <const name="RawFile" value="3">
11779 <desc>Virtual device is attached to a raw file.</desc>
11780 </const>
11781 </enum>
11782
11783 <interface
11784 name="ISerialPort" extends="$unknown"
11785 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
11786 wsmap="managed"
11787 >
11788
11789 <desc>
11790 The ISerialPort interface represents the virtual serial port device.
11791
11792 The virtual serial port device acts like an ordinary serial port
11793 inside the virtual machine. This device communicates to the real
11794 serial port hardware in one of two modes: host pipe or host device.
11795
11796 In host pipe mode, the #path attribute specifies the path to the pipe on
11797 the host computer that represents a serial port. The #server attribute
11798 determines if this pipe is created by the virtual machine process at
11799 machine startup or it must already exist before starting machine
11800 execution.
11801
11802 In host device mode, the #path attribute specifies the name of the
11803 serial port device on the host computer.
11804
11805 There is also a third communication mode: the disconnected mode. In this
11806 mode, the guest OS running inside the virtual machine will be able to
11807 detect the serial port, but all port write operations will be discarded
11808 and all port read operations will return no data.
11809
11810 <see>IMachine::getSerialPort</see>
11811 </desc>
11812
11813 <attribute name="slot" type="unsigned long" readonly="yes">
11814 <desc>
11815 Slot number this serial port is plugged into. Corresponds to
11816 the value you pass to <link to="IMachine::getSerialPort"/>
11817 to obtain this instance.
11818 </desc>
11819 </attribute>
11820
11821 <attribute name="enabled" type="boolean">
11822 <desc>
11823 Flag whether the serial port is enabled. If disabled,
11824 the serial port will not be reported to the guest OS.
11825 </desc>
11826 </attribute>
11827
11828 <attribute name="IOBase" type="unsigned long">
11829 <desc>Base I/O address of the serial port.</desc>
11830 </attribute>
11831
11832 <attribute name="IRQ" type="unsigned long">
11833 <desc>IRQ number of the serial port.</desc>
11834 </attribute>
11835
11836 <attribute name="hostMode" type="PortMode">
11837 <desc>
11838 How is this port connected to the host.
11839 <note>
11840 Changing this attribute may fail if the conditions for
11841 <link to="#path"/> are not met.
11842 </note>
11843 </desc>
11844 </attribute>
11845
11846 <attribute name="server" type="boolean">
11847 <desc>
11848 Flag whether this serial port acts as a server (creates a new pipe on
11849 the host) or as a client (uses the existing pipe). This attribute is
11850 used only when <link to="#hostMode"/> is PortMode_HostPipe.
11851 </desc>
11852 </attribute>
11853
11854 <attribute name="path" type="wstring">
11855 <desc>
11856 Path to the serial port's pipe on the host when <link to="ISerialPort::hostMode"/> is
11857 PortMode_HostPipe, or the host serial device name when
11858 <link to="ISerialPort::hostMode"/> is PortMode_HostDevice. For both
11859 cases, setting a @c null or empty string as the attribute's value
11860 is an error. Otherwise, the value of this property is ignored.
11861 </desc>
11862 </attribute>
11863
11864 </interface>
11865
11866 <!--
11867 // IParallelPort
11868 /////////////////////////////////////////////////////////////////////////
11869 -->
11870
11871 <interface
11872 name="IParallelPort" extends="$unknown"
11873 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
11874 wsmap="managed"
11875 >
11876
11877 <desc>
11878 The IParallelPort interface represents the virtual parallel port device.
11879
11880 The virtual parallel port device acts like an ordinary parallel port
11881 inside the virtual machine. This device communicates to the real
11882 parallel port hardware using the name of the parallel device on the host
11883 computer specified in the #path attribute.
11884
11885 Each virtual parallel port device is assigned a base I/O address and an
11886 IRQ number that will be reported to the guest operating system and used
11887 to operate the given parallel port from within the virtual machine.
11888
11889 <see>IMachine::getParallelPort</see>
11890 </desc>
11891
11892 <attribute name="slot" type="unsigned long" readonly="yes">
11893 <desc>
11894 Slot number this parallel port is plugged into. Corresponds to
11895 the value you pass to <link to="IMachine::getParallelPort"/>
11896 to obtain this instance.
11897 </desc>
11898 </attribute>
11899
11900 <attribute name="enabled" type="boolean">
11901 <desc>
11902 Flag whether the parallel port is enabled. If disabled,
11903 the parallel port will not be reported to the guest OS.
11904 </desc>
11905 </attribute>
11906
11907 <attribute name="IOBase" type="unsigned long">
11908 <desc>Base I/O address of the parallel port.</desc>
11909 </attribute>
11910
11911 <attribute name="IRQ" type="unsigned long">
11912 <desc>IRQ number of the parallel port.</desc>
11913 </attribute>
11914
11915 <attribute name="path" type="wstring">
11916 <desc>
11917 Host parallel device name. If this parallel port is enabled, setting a
11918 @c null or an empty string as this attribute's value will result into
11919 an error.
11920 </desc>
11921 </attribute>
11922
11923 </interface>
11924
11925
11926 <!--
11927 // IMachineDebugger
11928 /////////////////////////////////////////////////////////////////////////
11929 -->
11930
11931 <interface
11932 name="IMachineDebugger" extends="$unknown"
11933 uuid="b0b2a2dd-0627-4502-91c2-ddc5e77609e0"
11934 wsmap="suppress"
11935 >
11936 <method name="resetStats">
11937 <desc>
11938 Reset VM statistics.
11939 </desc>
11940 <param name="pattern" type="wstring" dir="in">
11941 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11942 </param>
11943 </method>
11944
11945 <method name="dumpStats">
11946 <desc>
11947 Dumps VM statistics.
11948 </desc>
11949 <param name="pattern" type="wstring" dir="in">
11950 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11951 </param>
11952 </method>
11953
11954 <method name="getStats">
11955 <desc>
11956 Get the VM statistics in a XMLish format.
11957 </desc>
11958 <param name="pattern" type="wstring" dir="in">
11959 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11960 </param>
11961 <param name="withDescriptions" type="boolean" dir="in">
11962 <desc>Whether to include the descriptions.</desc>
11963 </param>
11964 <param name="stats" type="wstring" dir="out">
11965 <desc>The XML document containing the statistics.</desc>
11966 </param>
11967 </method>
11968
11969 <method name="injectNMI">
11970 <desc>
11971 Inject an NMI into a running VT-x/AMD-V VM.
11972 </desc>
11973 </method>
11974
11975 <attribute name="singlestep" type="boolean">
11976 <desc>Switch for enabling singlestepping.</desc>
11977 </attribute>
11978
11979 <attribute name="recompileUser" type="boolean">
11980 <desc>Switch for forcing code recompilation for user mode code.</desc>
11981 </attribute>
11982
11983 <attribute name="recompileSupervisor" type="boolean">
11984 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
11985 </attribute>
11986
11987 <attribute name="PATMEnabled" type="boolean">
11988 <desc>Switch for enabling and disabling the PATM component.</desc>
11989 </attribute>
11990
11991 <attribute name="CSAMEnabled" type="boolean">
11992 <desc>Switch for enabling and disabling the CSAM component.</desc>
11993 </attribute>
11994
11995 <attribute name="logEnabled" type="boolean">
11996 <desc>Switch for enabling and disabling logging.</desc>
11997 </attribute>
11998
11999 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
12000 <desc>
12001 Flag indicating whether the VM is currently making use of CPU hardware
12002 virtualization extensions.
12003 </desc>
12004 </attribute>
12005
12006 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
12007 <desc>
12008 Flag indicating whether the VM is currently making use of the nested paging
12009 CPU hardware virtualization extension.
12010 </desc>
12011 </attribute>
12012
12013 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
12014 <desc>
12015 Flag indicating whether the VM is currently making use of the VPID
12016 VT-x extension.
12017 </desc>
12018 </attribute>
12019
12020 <attribute name="PAEEnabled" type="boolean" readonly="yes">
12021 <desc>
12022 Flag indicating whether the VM is currently making use of the Physical
12023 Address Extension CPU feature.
12024 </desc>
12025 </attribute>
12026
12027 <attribute name="virtualTimeRate" type="unsigned long">
12028 <desc>
12029 The rate at which the virtual time runs expressed as a percentage.
12030 The accepted range is 2% to 20000%.
12031 </desc>
12032 </attribute>
12033
12034 <!-- @todo method for setting log flags, groups and destination! -->
12035
12036 <attribute name="VM" type="unsigned long long" readonly="yes">
12037 <desc>
12038 Gets the VM handle. This is only for internal use while
12039 we carve the details of this interface.
12040 </desc>
12041 </attribute>
12042
12043 </interface>
12044
12045 <!--
12046 // IUSBController
12047 /////////////////////////////////////////////////////////////////////////
12048 -->
12049
12050 <interface
12051 name="IUSBController" extends="$unknown"
12052 uuid="6fdcccc5-abd3-4fec-9387-2ad3914fc4a8"
12053 wsmap="managed"
12054 >
12055 <attribute name="enabled" type="boolean">
12056 <desc>
12057 Flag whether the USB controller is present in the
12058 guest system. If disabled, the virtual guest hardware will
12059 not contain any USB controller. Can only be changed when
12060 the VM is powered off.
12061 </desc>
12062 </attribute>
12063
12064 <attribute name="enabledEhci" type="boolean">
12065 <desc>
12066 Flag whether the USB EHCI controller is present in the
12067 guest system. If disabled, the virtual guest hardware will
12068 not contain a USB EHCI controller. Can only be changed when
12069 the VM is powered off.
12070 </desc>
12071 </attribute>
12072
12073 <attribute name="proxyAvailable" type="boolean" readonly="yes">
12074 <desc>
12075 Flag whether there is an USB proxy available.
12076 </desc>
12077 </attribute>
12078
12079 <attribute name="USBStandard" type="unsigned short" readonly="yes">
12080 <desc>
12081 USB standard version which the controller implements.
12082 This is a BCD which means that the major version is in the
12083 high byte and minor version is in the low byte.
12084 </desc>
12085 </attribute>
12086
12087 <attribute name="deviceFilters" type="IUSBDeviceFilter" readonly="yes" safearray="yes">
12088 <desc>
12089 List of USB device filters associated with the machine.
12090
12091 If the machine is currently running, these filters are activated
12092 every time a new (supported) USB device is attached to the host
12093 computer that was not ignored by global filters
12094 (<link to="IHost::USBDeviceFilters"/>).
12095
12096 These filters are also activated when the machine is powered up.
12097 They are run against a list of all currently available USB
12098 devices (in states
12099 <link to="USBDeviceState_Available"/>,
12100 <link to="USBDeviceState_Busy"/>,
12101 <link to="USBDeviceState_Held"/>) that were not previously
12102 ignored by global filters.
12103
12104 If at least one filter matches the USB device in question, this
12105 device is automatically captured (attached to) the virtual USB
12106 controller of this machine.
12107
12108 <see>IUSBDeviceFilter, ::IUSBController</see>
12109 </desc>
12110 </attribute>
12111
12112 <method name="createDeviceFilter">
12113 <desc>
12114 Creates a new USB device filter. All attributes except
12115 the filter name are set to empty (any match),
12116 <i>active</i> is @c false (the filter is not active).
12117
12118 The created filter can then be added to the list of filters using
12119 <link to="#insertDeviceFilter"/>.
12120
12121 <result name="VBOX_E_INVALID_VM_STATE">
12122 The virtual machine is not mutable.
12123 </result>
12124
12125 <see>#deviceFilters</see>
12126 </desc>
12127 <param name="name" type="wstring" dir="in">
12128 <desc>
12129 Filter name. See <link to="IUSBDeviceFilter::name"/>
12130 for more info.
12131 </desc>
12132 </param>
12133 <param name="filter" type="IUSBDeviceFilter" dir="return">
12134 <desc>Created filter object.</desc>
12135 </param>
12136 </method>
12137
12138 <method name="insertDeviceFilter">
12139 <desc>
12140 Inserts the given USB device to the specified position
12141 in the list of filters.
12142
12143 Positions are numbered starting from <tt>0</tt>. If the specified
12144 position is equal to or greater than the number of elements in
12145 the list, the filter is added to the end of the collection.
12146
12147 <note>
12148 Duplicates are not allowed, so an attempt to insert a
12149 filter that is already in the collection, will return an
12150 error.
12151 </note>
12152
12153 <result name="VBOX_E_INVALID_VM_STATE">
12154 Virtual machine is not mutable.
12155 </result>
12156 <result name="E_INVALIDARG">
12157 USB device filter not created within this VirtualBox instance.
12158 </result>
12159 <result name="VBOX_E_INVALID_OBJECT_STATE">
12160 USB device filter already in list.
12161 </result>
12162
12163 <see>#deviceFilters</see>
12164 </desc>
12165 <param name="position" type="unsigned long" dir="in">
12166 <desc>Position to insert the filter to.</desc>
12167 </param>
12168 <param name="filter" type="IUSBDeviceFilter" dir="in">
12169 <desc>USB device filter to insert.</desc>
12170 </param>
12171 </method>
12172
12173 <method name="removeDeviceFilter">
12174 <desc>
12175 Removes a USB device filter from the specified position in the
12176 list of filters.
12177
12178 Positions are numbered starting from <tt>0</tt>. Specifying a
12179 position equal to or greater than the number of elements in
12180 the list will produce an error.
12181
12182 <see>#deviceFilters</see>
12183
12184 <result name="VBOX_E_INVALID_VM_STATE">
12185 Virtual machine is not mutable.
12186 </result>
12187 <result name="E_INVALIDARG">
12188 USB device filter list empty or invalid @a position.
12189 </result>
12190
12191 </desc>
12192 <param name="position" type="unsigned long" dir="in">
12193 <desc>Position to remove the filter from.</desc>
12194 </param>
12195 <param name="filter" type="IUSBDeviceFilter" dir="return">
12196 <desc>Removed USB device filter.</desc>
12197 </param>
12198 </method>
12199
12200 </interface>
12201
12202
12203 <!--
12204 // IUSBDevice
12205 /////////////////////////////////////////////////////////////////////////
12206 -->
12207
12208 <interface
12209 name="IUSBDevice" extends="$unknown"
12210 uuid="f8967b0b-4483-400f-92b5-8b675d98a85b"
12211 wsmap="managed"
12212 >
12213 <desc>
12214 The IUSBDevice interface represents a virtual USB device attached to the
12215 virtual machine.
12216
12217 A collection of objects implementing this interface is stored in the
12218 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
12219 attached to a running virtual machine's USB controller.
12220 </desc>
12221
12222 <attribute name="id" type="uuid" mod="string" readonly="yes">
12223 <desc>
12224 Unique USB device ID. This ID is built from #vendorId,
12225 #productId, #revision and #serialNumber.
12226 </desc>
12227 </attribute>
12228
12229 <attribute name="vendorId" type="unsigned short" readonly="yes">
12230 <desc>Vendor ID.</desc>
12231 </attribute>
12232
12233 <attribute name="productId" type="unsigned short" readonly="yes">
12234 <desc>Product ID.</desc>
12235 </attribute>
12236
12237 <attribute name="revision" type="unsigned short" readonly="yes">
12238 <desc>
12239 Product revision number. This is a packed BCD represented as
12240 unsigned short. The high byte is the integer part and the low
12241 byte is the decimal.
12242 </desc>
12243 </attribute>
12244
12245 <attribute name="manufacturer" type="wstring" readonly="yes">
12246 <desc>Manufacturer string.</desc>
12247 </attribute>
12248
12249 <attribute name="product" type="wstring" readonly="yes">
12250 <desc>Product string.</desc>
12251 </attribute>
12252
12253 <attribute name="serialNumber" type="wstring" readonly="yes">
12254 <desc>Serial number string.</desc>
12255 </attribute>
12256
12257 <attribute name="address" type="wstring" readonly="yes">
12258 <desc>Host specific address of the device.</desc>
12259 </attribute>
12260
12261 <attribute name="port" type="unsigned short" readonly="yes">
12262 <desc>
12263 Host USB port number the device is physically
12264 connected to.
12265 </desc>
12266 </attribute>
12267
12268 <attribute name="version" type="unsigned short" readonly="yes">
12269 <desc>
12270 The major USB version of the device - 1 or 2.
12271 </desc>
12272 </attribute>
12273
12274 <attribute name="portVersion" type="unsigned short" readonly="yes">
12275 <desc>
12276 The major USB version of the host USB port the device is
12277 physically connected to - 1 or 2. For devices not connected to
12278 anything this will have the same value as the version attribute.
12279 </desc>
12280 </attribute>
12281
12282 <attribute name="remote" type="boolean" readonly="yes">
12283 <desc>
12284 Whether the device is physically connected to a remote VRDP
12285 client or to a local host machine.
12286 </desc>
12287 </attribute>
12288
12289 </interface>
12290
12291
12292 <!--
12293 // IUSBDeviceFilter
12294 /////////////////////////////////////////////////////////////////////////
12295 -->
12296
12297 <interface
12298 name="IUSBDeviceFilter" extends="$unknown"
12299 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
12300 wsmap="managed"
12301 >
12302 <desc>
12303 The IUSBDeviceFilter interface represents an USB device filter used
12304 to perform actions on a group of USB devices.
12305
12306 This type of filters is used by running virtual machines to
12307 automatically capture selected USB devices once they are physically
12308 attached to the host computer.
12309
12310 A USB device is matched to the given device filter if and only if all
12311 attributes of the device match the corresponding attributes of the
12312 filter (that is, attributes are joined together using the logical AND
12313 operation). On the other hand, all together, filters in the list of
12314 filters carry the semantics of the logical OR operation. So if it is
12315 desirable to create a match like "this vendor id OR this product id",
12316 one needs to create two filters and specify "any match" (see below)
12317 for unused attributes.
12318
12319 All filter attributes used for matching are strings. Each string
12320 is an expression representing a set of values of the corresponding
12321 device attribute, that will match the given filter. Currently, the
12322 following filtering expressions are supported:
12323
12324 <ul>
12325 <li><i>Interval filters</i>. Used to specify valid intervals for
12326 integer device attributes (Vendor ID, Product ID and Revision).
12327 The format of the string is:
12328
12329 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
12330
12331 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
12332 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
12333 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
12334 is omitted before a dash (<tt>-</tt>), the minimum possible integer
12335 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
12336 possible integer is assumed.
12337 </li>
12338 <li><i>Boolean filters</i>. Used to specify acceptable values for
12339 boolean device attributes. The format of the string is:
12340
12341 <tt>true|false|yes|no|0|1</tt>
12342
12343 </li>
12344 <li><i>Exact match</i>. Used to specify a single value for the given
12345 device attribute. Any string that doesn't start with <tt>int:</tt>
12346 represents the exact match. String device attributes are compared to
12347 this string including case of symbols. Integer attributes are first
12348 converted to a string (see individual filter attributes) and then
12349 compared ignoring case.
12350
12351 </li>
12352 <li><i>Any match</i>. Any value of the corresponding device attribute
12353 will match the given filter. An empty or @c null string is
12354 used to construct this type of filtering expressions.
12355
12356 </li>
12357 </ul>
12358
12359 <note>
12360 On the Windows host platform, interval filters are not currently
12361 available. Also all string filter attributes
12362 (<link to="#manufacturer"/>, <link to="#product"/>,
12363 <link to="#serialNumber"/>) are ignored, so they behave as
12364 <i>any match</i> no matter what string expression is specified.
12365 </note>
12366
12367 <see>IUSBController::deviceFilters, IHostUSBDeviceFilter</see>
12368 </desc>
12369
12370 <attribute name="name" type="wstring">
12371 <desc>
12372 Visible name for this filter.
12373 This name is used to visually distinguish one filter from another,
12374 so it can neither be @c null nor an empty string.
12375 </desc>
12376 </attribute>
12377
12378 <attribute name="active" type="boolean">
12379 <desc>Whether this filter active or has been temporarily disabled.</desc>
12380 </attribute>
12381
12382 <attribute name="vendorId" type="wstring">
12383 <desc>
12384 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
12385 The string representation for the <i>exact matching</i>
12386 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
12387 (including leading zeroes).
12388 </desc>
12389 </attribute>
12390
12391 <attribute name="productId" type="wstring">
12392 <desc>
12393 <link to="IUSBDevice::productId">Product ID</link> filter.
12394 The string representation for the <i>exact matching</i>
12395 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
12396 (including leading zeroes).
12397 </desc>
12398 </attribute>
12399
12400 <attribute name="revision" type="wstring">
12401 <desc>
12402 <link to="IUSBDevice::productId">Product revision number</link>
12403 filter. The string representation for the <i>exact matching</i>
12404 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
12405 of the integer part of the revision, and <tt>F</tt> is the
12406 decimal digit of its fractional part (including leading and
12407 trailing zeros).
12408 Note that for interval filters, it's best to use the hexadecimal
12409 form, because the revision is stored as a 16 bit packed BCD value;
12410 so the expression <tt>int:0x0100-0x0199</tt> will match any
12411 revision from <tt>1.0</tt> to <tt>1.99</tt>.
12412 </desc>
12413 </attribute>
12414
12415 <attribute name="manufacturer" type="wstring">
12416 <desc>
12417 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
12418 </desc>
12419 </attribute>
12420
12421 <attribute name="product" type="wstring">
12422 <desc>
12423 <link to="IUSBDevice::product">Product</link> filter.
12424 </desc>
12425 </attribute>
12426
12427 <attribute name="serialNumber" type="wstring">
12428 <desc>
12429 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
12430 </desc>
12431 </attribute>
12432
12433 <attribute name="port" type="wstring">
12434 <desc>
12435 <link to="IUSBDevice::port">Host USB port</link> filter.
12436 </desc>
12437 </attribute>
12438
12439 <attribute name="remote" type="wstring">
12440 <desc>
12441 <link to="IUSBDevice::remote">Remote state</link> filter.
12442 <note>
12443 This filter makes sense only for machine USB filters,
12444 i.e. it is ignored by IHostUSBDeviceFilter objects.
12445 </note>
12446 </desc>
12447 </attribute>
12448
12449 <attribute name="maskedInterfaces" type="unsigned long">
12450 <desc>
12451 This is an advanced option for hiding one or more USB interfaces
12452 from the guest. The value is a bit mask where the bits that are set
12453 means the corresponding USB interface should be hidden, masked off
12454 if you like.
12455 This feature only works on Linux hosts.
12456 </desc>
12457 </attribute>
12458
12459 </interface>
12460
12461
12462 <!--
12463 // IHostUSBDevice
12464 /////////////////////////////////////////////////////////////////////////
12465 -->
12466
12467 <enum
12468 name="USBDeviceState"
12469 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
12470 >
12471 <desc>
12472 USB device state. This enumeration represents all possible states
12473 of the USB device physically attached to the host computer regarding
12474 its state on the host computer and availability to guest computers
12475 (all currently running virtual machines).
12476
12477 Once a supported USB device is attached to the host, global USB
12478 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
12479 either ignore the device, or put it to USBDeviceState_Held state, or do
12480 nothing. Unless the device is ignored by global filters, filters of all
12481 currently running guests (<link to="IUSBController::deviceFilters"/>) are
12482 activated that can put it to USBDeviceState_Captured state.
12483
12484 If the device was ignored by global filters, or didn't match
12485 any filters at all (including guest ones), it is handled by the host
12486 in a normal way. In this case, the device state is determined by
12487 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
12488 or USBDeviceState_Available, depending on the current device usage.
12489
12490 Besides auto-capturing based on filters, the device can be manually
12491 captured by guests (<link to="IConsole::attachUSBDevice"/>) if its
12492 state is USBDeviceState_Busy, USBDeviceState_Available or
12493 USBDeviceState_Held.
12494
12495 <note>
12496 Due to differences in USB stack implementations in Linux and Win32,
12497 states USBDeviceState_Busy and USBDeviceState_vailable are applicable
12498 only to the Linux version of the product. This also means that (<link
12499 to="IConsole::attachUSBDevice"/>) can only succeed on Win32 if the
12500 device state is USBDeviceState_Held.
12501 </note>
12502
12503 <see>IHostUSBDevice, IHostUSBDeviceFilter</see>
12504 </desc>
12505
12506 <const name="NotSupported" value="0">
12507 <desc>
12508 Not supported by the VirtualBox server, not available to guests.
12509 </desc>
12510 </const>
12511 <const name="Unavailable" value="1">
12512 <desc>
12513 Being used by the host computer exclusively,
12514 not available to guests.
12515 </desc>
12516 </const>
12517 <const name="Busy" value="2">
12518 <desc>
12519 Being used by the host computer, potentially available to guests.
12520 </desc>
12521 </const>
12522 <const name="Available" value="3">
12523 <desc>
12524 Not used by the host computer, available to guests (the host computer
12525 can also start using the device at any time).
12526 </desc>
12527 </const>
12528 <const name="Held" value="4">
12529 <desc>
12530 Held by the VirtualBox server (ignored by the host computer),
12531 available to guests.
12532 </desc>
12533 </const>
12534 <const name="Captured" value="5">
12535 <desc>
12536 Captured by one of the guest computers, not available
12537 to anybody else.
12538 </desc>
12539 </const>
12540 </enum>
12541
12542 <interface
12543 name="IHostUSBDevice" extends="IUSBDevice"
12544 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
12545 wsmap="managed"
12546 >
12547 <desc>
12548 The IHostUSBDevice interface represents a physical USB device attached
12549 to the host computer.
12550
12551 Besides properties inherited from IUSBDevice, this interface adds the
12552 <link to="#state"/> property that holds the current state of the USB
12553 device.
12554
12555 <see>IHost::USBDevices, IHost::USBDeviceFilters</see>
12556 </desc>
12557
12558 <attribute name="state" type="USBDeviceState" readonly="yes">
12559 <desc>
12560 Current state of the device.
12561 </desc>
12562 </attribute>
12563
12564 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
12565
12566 </interface>
12567
12568
12569 <!--
12570 // IHostUSBDeviceFilter
12571 /////////////////////////////////////////////////////////////////////////
12572 -->
12573
12574 <enum
12575 name="USBDeviceFilterAction"
12576 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
12577 >
12578 <desc>
12579 Actions for host USB device filters.
12580 <see>IHostUSBDeviceFilter, USBDeviceState</see>
12581 </desc>
12582
12583 <const name="Null" value="0">
12584 <desc>Null value (never used by the API).</desc>
12585 </const>
12586 <const name="Ignore" value="1">
12587 <desc>Ignore the matched USB device.</desc>
12588 </const>
12589 <const name="Hold" value="2">
12590 <desc>Hold the matched USB device.</desc>
12591 </const>
12592 </enum>
12593
12594 <interface
12595 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
12596 uuid="4cc70246-d74a-400f-8222-3900489c0374"
12597 wsmap="managed"
12598 >
12599 <desc>
12600 The IHostUSBDeviceFilter interface represents a global filter for a
12601 physical USB device used by the host computer. Used indirectly in
12602 <link to="IHost::USBDeviceFilters"/>.
12603
12604 Using filters of this type, the host computer determines the initial
12605 state of the USB device after it is physically attached to the
12606 host's USB controller.
12607
12608 <note>
12609 The <link to="#remote"/> attribute is ignored by this type of
12610 filters, because it makes sense only for
12611 <link to="IUSBController::deviceFilters">machine USB filters</link>.
12612 </note>
12613
12614 <see>IHost::USBDeviceFilters</see>
12615 </desc>
12616
12617 <attribute name="action" type="USBDeviceFilterAction">
12618 <desc>
12619 Action performed by the host when an attached USB device
12620 matches this filter.
12621 </desc>
12622 </attribute>
12623
12624 </interface>
12625
12626 <!--
12627 // IAudioAdapter
12628 /////////////////////////////////////////////////////////////////////////
12629 -->
12630
12631 <enum
12632 name="AudioDriverType"
12633 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
12634 >
12635 <desc>
12636 Host audio driver type.
12637 </desc>
12638
12639 <const name="Null" value="0">
12640 <desc>Null value, also means "dummy audio driver".</desc>
12641 </const>
12642 <const name="WinMM" value="1">
12643 <desc>Windows multimedia (Windows hosts only).</desc>
12644 </const>
12645 <const name="OSS" value="2">
12646 <desc>Open Sound System (Linux hosts only).</desc>
12647 </const>
12648 <const name="ALSA" value="3">
12649 <desc>Advanced Linux Sound Architecture (Linux hosts only).</desc>
12650 </const>
12651 <const name="DirectSound" value="4">
12652 <desc>DirectSound (Windows hosts only).</desc>
12653 </const>
12654 <const name="CoreAudio" value="5">
12655 <desc>CoreAudio (Mac hosts only).</desc>
12656 </const>
12657 <const name="MMPM" value="6">
12658 <desc>Reserved for historical reasons.</desc>
12659 </const>
12660 <const name="Pulse" value="7">
12661 <desc>PulseAudio (Linux hosts only).</desc>
12662 </const>
12663 <const name="SolAudio" value="8">
12664 <desc>Solaris audio (Solaris hosts only).</desc>
12665 </const>
12666 </enum>
12667
12668 <enum
12669 name="AudioControllerType"
12670 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
12671 >
12672 <desc>
12673 Virtual audio controller type.
12674 </desc>
12675
12676 <const name="AC97" value="0"/>
12677 <const name="SB16" value="1"/>
12678 </enum>
12679
12680 <interface
12681 name="IAudioAdapter" extends="$unknown"
12682 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
12683 wsmap="managed"
12684 >
12685 <desc>
12686 The IAudioAdapter interface represents the virtual audio adapter of
12687 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
12688 </desc>
12689 <attribute name="enabled" type="boolean">
12690 <desc>
12691 Flag whether the audio adapter is present in the
12692 guest system. If disabled, the virtual guest hardware will
12693 not contain any audio adapter. Can only be changed when
12694 the VM is not running.
12695 </desc>
12696 </attribute>
12697 <attribute name="audioController" type="AudioControllerType">
12698 <desc>
12699 The audio hardware we emulate.
12700 </desc>
12701 </attribute>
12702 <attribute name="audioDriver" type="AudioDriverType">
12703 <desc>
12704 Audio driver the adapter is connected to. This setting
12705 can only be changed when the VM is not running.
12706 </desc>
12707 </attribute>
12708 </interface>
12709
12710 <!--
12711 // IVRDPServer
12712 /////////////////////////////////////////////////////////////////////////
12713 -->
12714
12715 <enum
12716 name="VRDPAuthType"
12717 uuid="3d91887a-b67f-4b33-85bf-2da7ab1ea83a"
12718 >
12719 <desc>
12720 VRDP authentication type.
12721 </desc>
12722
12723 <const name="Null" value="0">
12724 <desc>Null value, also means "no authentication".</desc>
12725 </const>
12726 <const name="External" value="1"/>
12727 <const name="Guest" value="2"/>
12728 </enum>
12729
12730 <interface
12731 name="IVRDPServer" extends="$unknown"
12732 uuid="72e671bc-1712-4052-ad6b-e45e76d9d3e4"
12733 wsmap="managed"
12734 >
12735 <attribute name="enabled" type="boolean">
12736 <desc>VRDP server status.</desc>
12737 </attribute>
12738
12739 <attribute name="ports" type="wstring">
12740 <desc>
12741 VRDP server port numbers. The server will try to bind to one of free ports from the list.
12742 <note>
12743 This is a string of comma separated TCP port numbers or port number ranges.
12744 Example <tt>5000,5010-5012,5015</tt>
12745 </note>
12746 </desc>
12747 </attribute>
12748
12749 <attribute name="netAddress" type="wstring">
12750 <desc>VRDP server address.</desc>
12751 </attribute>
12752
12753 <attribute name="authType" type="VRDPAuthType">
12754 <desc>VRDP authentication method.</desc>
12755 </attribute>
12756
12757 <attribute name="authTimeout" type="unsigned long">
12758 <desc>Timeout for guest authentication. Milliseconds.</desc>
12759 </attribute>
12760
12761 <attribute name="allowMultiConnection" type="boolean">
12762 <desc>
12763 Flag whether multiple simultaneous connections to the VM are permitted.
12764 Note that this will be replaced by a more powerful mechanism in the future.
12765 </desc>
12766 </attribute>
12767
12768 <attribute name="reuseSingleConnection" type="boolean">
12769 <desc>
12770 Flag whether the existing connection must be dropped and a new connection
12771 must be established by the VRDP server, when a new client connects in single
12772 connection mode.
12773 </desc>
12774 </attribute>
12775
12776 </interface>
12777
12778
12779 <!--
12780 // ISharedFolder
12781 /////////////////////////////////////////////////////////////////////////
12782 -->
12783
12784 <interface
12785 name="ISharedFolder" extends="$unknown"
12786 uuid="64637bb2-9e17-471c-b8f3-f8968dd9884e"
12787 wsmap="struct"
12788 >
12789 <desc>
12790 The ISharedFolder interface represents a folder in the host computer's
12791 file system accessible from the guest OS running inside a virtual
12792 machine using an associated logical name.
12793
12794 There are three types of shared folders:
12795 <ul>
12796 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
12797 folders available to all virtual machines.</li>
12798 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
12799 VM-specific shared folders available to the given virtual machine at
12800 startup.</li>
12801 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
12802 VM-specific shared folders created in the session context (for
12803 example, when the virtual machine is running) and automatically
12804 discarded when the session is closed (the VM is powered off).</li>
12805 </ul>
12806
12807 Logical names of shared folders must be unique within the given scope
12808 (global, permanent or transient). However, they do not need to be unique
12809 across scopes. In this case, the definition of the shared folder in a
12810 more specific scope takes precedence over definitions in all other
12811 scopes. The order of precedence is (more specific to more general):
12812 <ol>
12813 <li>Transient definitions</li>
12814 <li>Permanent definitions</li>
12815 <li>Global definitions</li>
12816 </ol>
12817
12818 For example, if MyMachine has a shared folder named
12819 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
12820 transient shared folder named <tt>C_DRIVE</tt> (that points
12821 to <tt>C:\\\\WINDOWS</tt>) will change the definition
12822 of <tt>C_DRIVE</tt> in the guest OS so
12823 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
12824 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
12825 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
12826 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
12827 to <tt>C:\\</tt> if it still exists.
12828
12829 Note that permanent and transient shared folders of different machines
12830 are in different name spaces, so they don't overlap and don't need to
12831 have unique logical names.
12832
12833 <note>
12834 Global shared folders are not implemented in the current version of the
12835 product.
12836 </note>
12837 </desc>
12838
12839 <attribute name="name" type="wstring" readonly="yes">
12840 <desc>Logical name of the shared folder.</desc>
12841 </attribute>
12842
12843 <attribute name="hostPath" type="wstring" readonly="yes">
12844 <desc>Full path to the shared folder in the host file system.</desc>
12845 </attribute>
12846
12847 <attribute name="accessible" type="boolean" readonly="yes">
12848 <desc>
12849 Whether the folder defined by the host path is currently
12850 accessible or not.
12851 For example, the folder can be unaccessible if it is placed
12852 on the network share that is not available by the time
12853 this property is read.
12854 </desc>
12855 </attribute>
12856
12857 <attribute name="writable" type="boolean" readonly="yes">
12858 <desc>
12859 Whether the folder defined by the host path is writable or
12860 not.
12861 </desc>
12862 </attribute>
12863
12864 <attribute name="lastAccessError" type="wstring" readonly="yes">
12865 <desc>
12866 Text message that represents the result of the last accessibility
12867 check.
12868
12869 Accessibility checks are performed each time the <link to="#accessible"/>
12870 attribute is read. An empty string is returned if the last
12871 accessibility check was successful. A non-empty string indicates a
12872 failure and should normally describe a reason of the failure (for
12873 example, a file read error).
12874 </desc>
12875 </attribute>
12876
12877 </interface>
12878
12879 <!--
12880 // ISession
12881 /////////////////////////////////////////////////////////////////////////
12882 -->
12883
12884 <interface
12885 name="IInternalSessionControl" extends="$unknown"
12886 uuid="f9aac6d0-41b3-46b7-bea4-6370b4036de6"
12887 internal="yes"
12888 wsmap="suppress"
12889 >
12890 <method name="getPID">
12891 <desc>PID of the process that has created this Session object.
12892 </desc>
12893 <param name="pid" type="unsigned long" dir="return"/>
12894 </method>
12895
12896 <method name="getRemoteConsole">
12897 <desc>
12898 Returns the console object suitable for remote control.
12899
12900 <result name="VBOX_E_INVALID_VM_STATE">
12901 Session state prevents operation.
12902 </result>
12903 <result name="VBOX_E_INVALID_OBJECT_STATE">
12904 Session type prevents operation.
12905 </result>
12906
12907 </desc>
12908 <param name="console" type="IConsole" dir="return"/>
12909 </method>
12910
12911 <method name="assignMachine">
12912 <desc>
12913 Assigns the machine object associated with this direct-type
12914 session or informs the session that it will be a remote one
12915 (if @a machine == @c null).
12916
12917 <result name="VBOX_E_INVALID_VM_STATE">
12918 Session state prevents operation.
12919 </result>
12920 <result name="VBOX_E_INVALID_OBJECT_STATE">
12921 Session type prevents operation.
12922 </result>
12923
12924 </desc>
12925 <param name="machine" type="IMachine" dir="in"/>
12926 </method>
12927
12928 <method name="assignRemoteMachine">
12929 <desc>
12930 Assigns the machine and the (remote) console object associated with
12931 this remote-type session.
12932
12933 <result name="VBOX_E_INVALID_VM_STATE">
12934 Session state prevents operation.
12935 </result>
12936
12937 </desc>
12938 <param name="machine" type="IMachine" dir="in"/>
12939 <param name="console" type="IConsole" dir="in"/>
12940 </method>
12941
12942 <method name="updateMachineState">
12943 <desc>
12944 Updates the machine state in the VM process.
12945 Must be called only in certain cases
12946 (see the method implementation).
12947
12948 <result name="VBOX_E_INVALID_VM_STATE">
12949 Session state prevents operation.
12950 </result>
12951 <result name="VBOX_E_INVALID_OBJECT_STATE">
12952 Session type prevents operation.
12953 </result>
12954
12955 </desc>
12956 <param name="aMachineState" type="MachineState" dir="in"/>
12957 </method>
12958
12959 <method name="uninitialize">
12960 <desc>
12961 Uninitializes (closes) this session. Used by VirtualBox to close
12962 the corresponding remote session when the direct session dies
12963 or gets closed.
12964
12965 <result name="VBOX_E_INVALID_VM_STATE">
12966 Session state prevents operation.
12967 </result>
12968
12969 </desc>
12970 </method>
12971
12972 <method name="onNetworkAdapterChange">
12973 <desc>
12974 Triggered when settings of a network adapter of the
12975 associated virtual machine have changed.
12976
12977 <result name="VBOX_E_INVALID_VM_STATE">
12978 Session state prevents operation.
12979 </result>
12980 <result name="VBOX_E_INVALID_OBJECT_STATE">
12981 Session type prevents operation.
12982 </result>
12983
12984 </desc>
12985 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
12986 <param name="changeAdapter" type="boolean" dir="in"/>
12987 </method>
12988
12989 <method name="onSerialPortChange">
12990 <desc>
12991 Triggered when settings of a serial port of the
12992 associated virtual machine have changed.
12993
12994 <result name="VBOX_E_INVALID_VM_STATE">
12995 Session state prevents operation.
12996 </result>
12997 <result name="VBOX_E_INVALID_OBJECT_STATE">
12998 Session type prevents operation.
12999 </result>
13000
13001 </desc>
13002 <param name="serialPort" type="ISerialPort" dir="in"/>
13003 </method>
13004
13005 <method name="onParallelPortChange">
13006 <desc>
13007 Triggered when settings of a parallel port of the
13008 associated virtual machine have changed.
13009
13010 <result name="VBOX_E_INVALID_VM_STATE">
13011 Session state prevents operation.
13012 </result>
13013 <result name="VBOX_E_INVALID_OBJECT_STATE">
13014 Session type prevents operation.
13015 </result>
13016
13017 </desc>
13018 <param name="parallelPort" type="IParallelPort" dir="in"/>
13019 </method>
13020
13021 <method name="onStorageControllerChange">
13022 <desc>
13023 Triggered when settings of a storage controller of the
13024 associated virtual machine have changed.
13025
13026 <result name="VBOX_E_INVALID_VM_STATE">
13027 Session state prevents operation.
13028 </result>
13029 <result name="VBOX_E_INVALID_OBJECT_STATE">
13030 Session type prevents operation.
13031 </result>
13032
13033 </desc>
13034 </method>
13035
13036 <method name="onMediumChange">
13037 <desc>
13038 Triggered when attached media of the
13039 associated virtual machine have changed.
13040
13041 <result name="VBOX_E_INVALID_VM_STATE">
13042 Session state prevents operation.
13043 </result>
13044 <result name="VBOX_E_INVALID_OBJECT_STATE">
13045 Session type prevents operation.
13046 </result>
13047
13048 </desc>
13049
13050 <param name="mediumAttachment" type="IMediumAttachment" dir="in"/>
13051 <param name="force" type="boolean" dir="in"/>
13052 </method>
13053
13054 <method name="onCPUChange">
13055 <desc>
13056 Notification when a CPU changes.
13057 </desc>
13058 <param name="cpu" type="unsigned long" dir="in">
13059 <desc>The CPU which changed</desc>
13060 </param>
13061 <param name="add" type="boolean" dir="in">
13062 <desc>Flag whether the CPU was added or removed</desc>
13063 </param>
13064 </method>
13065
13066 <method name="onVRDPServerChange">
13067 <desc>
13068 Triggered when settings of the VRDP server object of the
13069 associated virtual machine have changed.
13070
13071 <result name="VBOX_E_INVALID_VM_STATE">
13072 Session state prevents operation.
13073 </result>
13074 <result name="VBOX_E_INVALID_OBJECT_STATE">
13075 Session type prevents operation.
13076 </result>
13077
13078 </desc>
13079 </method>
13080
13081 <method name="onUSBControllerChange">
13082 <desc>
13083 Triggered when settings of the USB controller object of the
13084 associated virtual machine have changed.
13085
13086 <result name="VBOX_E_INVALID_VM_STATE">
13087 Session state prevents operation.
13088 </result>
13089 <result name="VBOX_E_INVALID_OBJECT_STATE">
13090 Session type prevents operation.
13091 </result>
13092
13093 </desc>
13094 </method>
13095
13096 <method name="onSharedFolderChange">
13097 <desc>
13098 Triggered when a permanent (global or machine) shared folder has been
13099 created or removed.
13100 <note>
13101 We don't pass shared folder parameters in this notification because
13102 the order in which parallel notifications are delivered is not defined,
13103 therefore it could happen that these parameters were outdated by the
13104 time of processing this notification.
13105 </note>
13106
13107 <result name="VBOX_E_INVALID_VM_STATE">
13108 Session state prevents operation.
13109 </result>
13110 <result name="VBOX_E_INVALID_OBJECT_STATE">
13111 Session type prevents operation.
13112 </result>
13113
13114 </desc>
13115 <param name="global" type="boolean" dir="in"/>
13116 </method>
13117
13118 <method name="onUSBDeviceAttach">
13119 <desc>
13120 Triggered when a request to capture a USB device (as a result
13121 of matched USB filters or direct call to
13122 <link to="IConsole::attachUSBDevice"/>) has completed.
13123 A @c null @a error object means success, otherwise it
13124 describes a failure.
13125
13126 <result name="VBOX_E_INVALID_VM_STATE">
13127 Session state prevents operation.
13128 </result>
13129 <result name="VBOX_E_INVALID_OBJECT_STATE">
13130 Session type prevents operation.
13131 </result>
13132
13133 </desc>
13134 <param name="device" type="IUSBDevice" dir="in"/>
13135 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
13136 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
13137 </method>
13138
13139 <method name="onUSBDeviceDetach">
13140 <desc>
13141 Triggered when a request to release the USB device (as a result
13142 of machine termination or direct call to
13143 <link to="IConsole::detachUSBDevice"/>) has completed.
13144 A @c null @a error object means success, otherwise it
13145 describes a failure.
13146
13147 <result name="VBOX_E_INVALID_VM_STATE">
13148 Session state prevents operation.
13149 </result>
13150 <result name="VBOX_E_INVALID_OBJECT_STATE">
13151 Session type prevents operation.
13152 </result>
13153
13154 </desc>
13155 <param name="id" type="uuid" mod="string" dir="in"/>
13156 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
13157 </method>
13158
13159 <method name="onShowWindow">
13160 <desc>
13161 Called by <link to="IMachine::canShowConsoleWindow"/> and by
13162 <link to="IMachine::showConsoleWindow"/> in order to notify
13163 console callbacks
13164 <link to="IConsoleCallback::onCanShowWindow"/>
13165 and <link to="IConsoleCallback::onShowWindow"/>.
13166
13167 <result name="VBOX_E_INVALID_OBJECT_STATE">
13168 Session type prevents operation.
13169 </result>
13170
13171 </desc>
13172 <param name="check" type="boolean" dir="in"/>
13173 <param name="canShow" type="boolean" dir="out"/>
13174 <param name="winId" type="unsigned long long" dir="out"/>
13175 </method>
13176
13177 <method name="accessGuestProperty">
13178 <desc>
13179 Called by <link to="IMachine::getGuestProperty"/> and by
13180 <link to="IMachine::setGuestProperty"/> in order to read and
13181 modify guest properties.
13182
13183 <result name="VBOX_E_INVALID_VM_STATE">
13184 Machine session is not open.
13185 </result>
13186 <result name="VBOX_E_INVALID_OBJECT_STATE">
13187 Session type is not direct.
13188 </result>
13189
13190 </desc>
13191 <param name="name" type="wstring" dir="in"/>
13192 <param name="value" type="wstring" dir="in"/>
13193 <param name="flags" type="wstring" dir="in"/>
13194 <param name="isSetter" type="boolean" dir="in"/>
13195 <param name="retValue" type="wstring" dir="out"/>
13196 <param name="retTimestamp" type="unsigned long long" dir="out"/>
13197 <param name="retFlags" type="wstring" dir="out"/>
13198 </method>
13199
13200 <method name="enumerateGuestProperties">
13201 <desc>
13202 Return a list of the guest properties matching a set of patterns along
13203 with their values, time stamps and flags.
13204
13205 <result name="VBOX_E_INVALID_VM_STATE">
13206 Machine session is not open.
13207 </result>
13208 <result name="VBOX_E_INVALID_OBJECT_STATE">
13209 Session type is not direct.
13210 </result>
13211
13212 </desc>
13213 <param name="patterns" type="wstring" dir="in">
13214 <desc>
13215 The patterns to match the properties against as a comma-separated
13216 string. If this is empty, all properties currently set will be
13217 returned.
13218 </desc>
13219 </param>
13220 <param name="key" type="wstring" dir="out" safearray="yes">
13221 <desc>
13222 The key names of the properties returned.
13223 </desc>
13224 </param>
13225 <param name="value" type="wstring" dir="out" safearray="yes">
13226 <desc>
13227 The values of the properties returned. The array entries match the
13228 corresponding entries in the @a key array.
13229 </desc>
13230 </param>
13231 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
13232 <desc>
13233 The time stamps of the properties returned. The array entries match
13234 the corresponding entries in the @a key array.
13235 </desc>
13236 </param>
13237 <param name="flags" type="wstring" dir="out" safearray="yes">
13238 <desc>
13239 The flags of the properties returned. The array entries match the
13240 corresponding entries in the @a key array.
13241 </desc>
13242 </param>
13243 </method>
13244
13245 </interface>
13246
13247 <interface
13248 name="ISession" extends="$dispatched"
13249 uuid="12F4DCDB-12B2-4EC1-B7CD-DDD9F6C5BF4D"
13250 wsmap="managed"
13251 >
13252 <desc>
13253 The ISession interface represents a serialization primitive for virtual
13254 machines.
13255
13256 With VirtualBox, every time one wishes to manipulate a virtual machine
13257 (e.g. change its settings or start execution), a session object is
13258 required. Such an object must be passed to one of the session methods
13259 that open the given session, which then initiates the machine manipulation.
13260
13261 A session serves several purposes: it identifies to the inter-process VirtualBox
13262 code which process is currently working with the virtual machine, and it ensures
13263 that there are no incompatible requests from several processes for the
13264 same virtual machine. Session objects can therefore be thought of as mutex
13265 semaphores that lock virtual machines to prevent conflicting accesses from
13266 several processes.
13267
13268 How sessions objects are used depends on whether you use the Main API
13269 via COM or via the webservice:
13270
13271 <ul>
13272 <li>When using the COM API directly, an object of the Session class from the
13273 VirtualBox type library needs to be created. In regular COM C++ client code,
13274 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
13275 This object will then act as a local session object in further calls to open
13276 a session.
13277 </li>
13278
13279 <li>In the webservice, the session manager (IWebsessionManager) instead creates
13280 one session object automatically when <link to="IWebsessionManager::logon" />
13281 is called. A managed object reference to that session object can be retrieved by
13282 calling <link to="IWebsessionManager::getSessionObject" />. This session object
13283 reference can then be used to open sessions.
13284 </li>
13285 </ul>
13286
13287 Sessions are mainly used in two variations:
13288
13289 <ul>
13290 <li>
13291 To start a virtual machine in a separate process, one would call
13292 <link to="IVirtualBox::openRemoteSession"/>, which requires a session
13293 object as its first parameter. This session then identifies the caller
13294 and lets him control the started machine (for example, pause machine
13295 execution or power it down) as well as be notified about machine
13296 execution state changes.
13297 </li>
13298
13299 <li>To alter machine settings, or to start machine execution within the
13300 current process, one needs to open a direct session for the machine first by
13301 calling <link to="IVirtualBox::openSession"/>. While a direct session
13302 is open within one process, no any other process may open another direct
13303 session for the same machine. This prevents the machine from being changed
13304 by other processes while it is running or while the machine is being configured.
13305 </li>
13306 </ul>
13307
13308 One also can attach to an existing direct session already opened by
13309 another process (for example, in order to send a control request to the
13310 virtual machine such as the pause or the reset request). This is done by
13311 calling <link to="IVirtualBox::openExistingSession"/>.
13312
13313 <note>
13314 Unless you are trying to write a new VirtualBox front-end that
13315 performs direct machine execution (like the VirtualBox or VBoxSDL
13316 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
13317 session opened by <link to="IVirtualBox::openSession"/> and use this
13318 session only to change virtual machine settings. If you simply want to
13319 start virtual machine execution using one of the existing front-ends
13320 (for example the VirtualBox GUI or headless server), simply use
13321 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
13322 will power up the machine automatically for you.
13323 </note>
13324 </desc>
13325
13326 <attribute name="state" type="SessionState" readonly="yes">
13327 <desc>Current state of this session.</desc>
13328 </attribute>
13329
13330 <attribute name="type" type="SessionType" readonly="yes">
13331 <desc>
13332 Type of this session. The value of this attribute is valid only
13333 if the session is currently open (i.e. its #state is
13334 SessionType_SessionOpen), otherwise an error will be returned.
13335 </desc>
13336 </attribute>
13337
13338 <attribute name="machine" type="IMachine" readonly="yes">
13339 <desc>Machine object associated with this session.</desc>
13340 </attribute>
13341
13342 <attribute name="console" type="IConsole" readonly="yes">
13343 <desc>Console object associated with this session.</desc>
13344 </attribute>
13345
13346 <method name="close">
13347 <desc>
13348 Closes a session that was previously opened.
13349
13350 It is recommended that every time an "open session" method (such as
13351 <link to="IVirtualBox::openRemoteSession" /> or
13352 <link to="IVirtualBox::openSession" />) has been called to
13353 manipulate a virtual machine, the caller invoke
13354 ISession::close() when it's done doing so. Since sessions are
13355 serialization primitives much like ordinary mutexes, they are
13356 best used the same way: for each "open" call, there should be
13357 a matching "close" call, even when errors occur.
13358
13359 Otherwise, if a direct session for a machine opened with
13360 <link to="IVirtualBox::openSession"/> is not explicitly closed
13361 when the application terminates, the state of the machine will
13362 be set to <link to="MachineState_Aborted" /> on the server.
13363
13364 Generally, it is recommended to close all open sessions explicitly
13365 before terminating the application (regardless of the reason for
13366 the termination).
13367
13368 <note>
13369 Do not expect the session state (<link to="ISession::state" />
13370 to return to "Closed" immediately after you invoke
13371 ISession::close(), particularly if you have started a remote
13372 session to execute the VM in a new process. The session state will
13373 automatically return to "Closed" once the VM is no longer executing,
13374 which can of course take a very long time.
13375 </note>
13376
13377 <result name="E_UNEXPECTED">
13378 Session is not open.
13379 </result>
13380
13381 </desc>
13382 </method>
13383
13384 </interface>
13385
13386 <!--
13387 // IStorageController
13388 /////////////////////////////////////////////////////////////////////////
13389 -->
13390
13391 <enum
13392 name="StorageBus"
13393 uuid="eee67ab3-668d-4ef5-91e0-7025fe4a0d7a"
13394 >
13395 <desc>
13396 The bus type of the storage controller (IDE, SATA, SCSI or Floppy);
13397 see <link to="IStorageController::bus" />.
13398 </desc>
13399 <const name="Null" value="0">
13400 <desc>@c null value. Never used by the API.</desc>
13401 </const>
13402 <const name="IDE" value="1"/>
13403 <const name="SATA" value="2"/>
13404 <const name="SCSI" value="3"/>
13405 <const name="Floppy" value="4"/>
13406 <const name="SAS" value="5"/>
13407 </enum>
13408
13409 <enum
13410 name="StorageControllerType"
13411 uuid="8a412b8a-f43e-4456-bd37-b474f0879a58"
13412 >
13413 <desc>
13414 The exact variant of storage controller hardware presented
13415 to the guest; see <link to="IStorageController::controllerType" />.
13416 </desc>
13417
13418 <const name="Null" value="0">
13419 <desc>@c null value. Never used by the API.</desc>
13420 </const>
13421 <const name="LsiLogic" value="1">
13422 <desc>A SCSI controller of the LsiLogic variant.</desc>
13423 </const>
13424 <const name="BusLogic" value="2">
13425 <desc>A SCSI controller of the BusLogic variant.</desc>
13426 </const>
13427 <const name="IntelAhci" value="3">
13428 <desc>An Intel AHCI SATA controller; this is the only variant for SATA.</desc>
13429 </const>
13430 <const name="PIIX3" value="4">
13431 <desc>An IDE controller of the PIIX3 variant.</desc>
13432 </const>
13433 <const name="PIIX4" value="5">
13434 <desc>An IDE controller of the PIIX4 variant.</desc>
13435 </const>
13436 <const name="ICH6" value="6">
13437 <desc>An IDE controller of the ICH6 variant.</desc>
13438 </const>
13439 <const name="I82078" value="7">
13440 <desc>A floppy disk controller; this is the only variant for floppy drives.</desc>
13441 </const>
13442 <const name="LsiLogicSas" value="8">
13443 <desc>A variant of the LsiLogic controller using SAS.</desc>
13444 </const>
13445 </enum>
13446
13447 <interface
13448 name="IStorageController" extends="$unknown"
13449 uuid="ce37b7a9-d895-4ee8-b9f8-9579bfc85813"
13450 wsmap="managed"
13451 >
13452 <desc>
13453 Represents a storage controller that is attached to a virtual machine
13454 (<link to="IMachine" />). Just as drives (hard disks, DVDs, FDs) are
13455 attached to storage controllers in a real computer, virtual drives
13456 (represented by <link to="IMediumAttachment" />) are attached to virtual
13457 storage controllers, represented by this interface.
13458
13459 As opposed to physical hardware, VirtualBox has a very generic concept
13460 of a storage controller, and for purposes of the Main API, all virtual
13461 storage is attached to virtual machines via instances of this interface.
13462 There are four types of such virtual storage controllers: IDE, SCSI, SATA
13463 and Floppy (see <link to="#bus" />). Depending on which of these four is
13464 used, certain sub-types may be available and can be selected in
13465 <link to="#controllerType" />.
13466
13467 Depending on these settings, the guest operating system might see
13468 significantly different virtual hardware.
13469 </desc>
13470
13471 <attribute name="name" type="wstring" readonly="yes">
13472 <desc>
13473 Name of the storage controller, as originally specified with
13474 <link to="IMachine::addStorageController" />. This then uniquely
13475 identifies this controller with other method calls such as
13476 <link to="IMachine::attachDevice" /> and <link to="IMachine::mountMedium" />.
13477 </desc>
13478 </attribute>
13479
13480 <attribute name="maxDevicesPerPortCount" type="unsigned long" readonly="yes">
13481 <desc>
13482 Maximum number of devices which can be attached to one port.
13483 </desc>
13484 </attribute>
13485
13486 <attribute name="minPortCount" type="unsigned long" readonly="yes">
13487 <desc>
13488 Minimum number of ports that <link to="IStorageController::portCount"/> can be set to.
13489 </desc>
13490 </attribute>
13491
13492 <attribute name="maxPortCount" type="unsigned long" readonly="yes">
13493 <desc>
13494 Maximum number of ports that <link to="IStorageController::portCount"/> can be set to.
13495 </desc>
13496 </attribute>
13497
13498 <attribute name="instance" type="unsigned long">
13499 <desc>
13500 The instance number of the device in the running VM.
13501 </desc>
13502 </attribute>
13503
13504 <attribute name="portCount" type="unsigned long">
13505 <desc>
13506 The number of currently usable ports on the controller.
13507 The minimum and maximum number of ports for one controller are
13508 stored in <link to="IStorageController::minPortCount"/>
13509 and <link to="IStorageController::maxPortCount"/>.
13510 </desc>
13511 </attribute>
13512
13513 <attribute name="bus" type="StorageBus" readonly="yes">
13514 <desc>
13515 The bus type of the storage controller (IDE, SATA, SCSI or Floppy).
13516 </desc>
13517 </attribute>
13518
13519 <attribute name="controllerType" type="StorageControllerType">
13520 <desc>
13521 The exact variant of storage controller hardware presented
13522 to the guest.
13523 Depending on this value, VirtualBox will provide a different
13524 virtual storage controller hardware to the guest.
13525 For SATA and floppy controllers, only one variant is available,
13526 but for IDE and SCSI, there are several.
13527
13528 For SCSI controllers, the default type is LsiLogic.
13529 </desc>
13530 </attribute>
13531
13532 <method name="getIDEEmulationPort">
13533 <desc>
13534 Gets the corresponding port number which is emulated as an IDE device.
13535 Works only with SATA controllers.
13536
13537 <result name="E_INVALIDARG">
13538 The @a devicePosition is not in the range 0 to 3.
13539 </result>
13540 <result name="E_NOTIMPL">
13541 The storage controller type is not SATAIntelAhci.
13542 </result>
13543
13544 </desc>
13545 <param name="devicePosition" type="long" dir="in"/>
13546 <param name="portNumber" type="long" dir="return"/>
13547 </method>
13548
13549 <method name="setIDEEmulationPort">
13550 <desc>
13551 Sets the port number which is emulated as an IDE device.
13552 Works only with SATA controllers.
13553
13554 <result name="E_INVALIDARG">
13555 The @a devicePosition is not in the range 0 to 3 or the
13556 @a portNumber is not in the range 0 to 29.
13557 </result>
13558 <result name="E_NOTIMPL">
13559 The storage controller type is not SATAIntelAhci.
13560 </result>
13561
13562 </desc>
13563 <param name="devicePosition" type="long" dir="in"/>
13564 <param name="portNumber" type="long" dir="in"/>
13565 </method>
13566
13567 </interface>
13568
13569<if target="wsdl">
13570
13571 <!--
13572 // IManagedObjectRef
13573 /////////////////////////////////////////////////////////////////////////
13574 -->
13575
13576 <interface
13577 name="IManagedObjectRef" extends="$unknown"
13578 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
13579 internal="yes"
13580 wsmap="managed"
13581 wscpp="hardcoded"
13582 >
13583 <desc>
13584 Managed object reference.
13585
13586 Only within the webservice, a managed object reference (which is really
13587 an opaque number) allows a webservice client to address an object
13588 that lives in the address space of the webservice server.
13589
13590 Behind each managed object reference, there is a COM object that lives
13591 in the webservice server's address space. The COM object is not freed
13592 until the managed object reference is released, either by an explicit
13593 call to <link to="IManagedObjectRef::release" /> or by logging off from
13594 the webservice (<link to="IWebsessionManager::logoff" />), which releases
13595 all objects created during the webservice session.
13596
13597 Whenever a method call of the VirtualBox API returns a COM object, the
13598 webservice representation of that method will instead return a
13599 managed object reference, which can then be used to invoke methods
13600 on that object.
13601 </desc>
13602
13603 <method name="getInterfaceName">
13604 <desc>
13605 Returns the name of the interface that this managed object represents,
13606 for example, "IMachine", as a string.
13607 </desc>
13608 <param name="return" type="wstring" dir="return"/>
13609 </method>
13610
13611 <method name="release">
13612 <desc>
13613 Releases this managed object reference and frees the resources that
13614 were allocated for it in the webservice server process. After calling
13615 this method, the identifier of the reference can no longer be used.
13616 </desc>
13617 </method>
13618
13619 </interface>
13620
13621 <!--
13622 // IWebsessionManager
13623 /////////////////////////////////////////////////////////////////////////
13624 -->
13625
13626 <interface
13627 name="IWebsessionManager" extends="$unknown"
13628 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
13629 internal="yes"
13630 wsmap="global"
13631 wscpp="hardcoded"
13632 >
13633 <desc>
13634 Websession manager. This provides essential services
13635 to webservice clients.
13636 </desc>
13637 <method name="logon">
13638 <desc>
13639 Logs a new client onto the webservice and returns a managed object reference to
13640 the IVirtualBox instance, which the client can then use as a basis to further
13641 queries, since all calls to the VirtualBox API are based on the IVirtualBox
13642 interface, in one way or the other.
13643 </desc>
13644 <param name="username" type="wstring" dir="in"/>
13645 <param name="password" type="wstring" dir="in"/>
13646 <param name="return" type="IVirtualBox" dir="return"/>
13647 </method>
13648
13649 <method name="getSessionObject">
13650 <desc>
13651 Returns a managed object reference to the internal ISession object that was created
13652 for this web service session when the client logged on.
13653
13654 <see>ISession</see>
13655 </desc>
13656 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13657 <param name="return" type="ISession" dir="return"/>
13658 </method>
13659
13660 <method name="logoff">
13661 <desc>
13662 Logs off the client who has previously logged on with <link to="IWebsessionManager::logoff" />
13663 and destroys all resources associated with the session (most importantly, all
13664 managed objects created in the server while the session was active).
13665 </desc>
13666 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13667 </method>
13668
13669 </interface>
13670
13671</if>
13672
13673 <!--
13674 // IPerformanceCollector & friends
13675 /////////////////////////////////////////////////////////////////////////
13676 -->
13677
13678 <interface
13679 name="IPerformanceMetric" extends="$unknown"
13680 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
13681 >
13682 <desc>
13683 The IPerformanceMetric interface represents parameters of the given
13684 performance metric.
13685 </desc>
13686
13687 <attribute name="metricName" type="wstring" readonly="yes">
13688 <desc>
13689 Name of the metric.
13690 </desc>
13691 </attribute>
13692
13693 <attribute name="object" type="$unknown" readonly="yes">
13694 <desc>
13695 Object this metric belongs to.
13696 </desc>
13697 </attribute>
13698
13699 <attribute name="description" type="wstring" readonly="yes">
13700 <desc>
13701 Textual description of the metric.
13702 </desc>
13703 </attribute>
13704
13705 <attribute name="period" type="unsigned long" readonly="yes">
13706 <desc>
13707 Time interval between samples, measured in seconds.
13708 </desc>
13709 </attribute>
13710
13711 <attribute name="count" type="unsigned long" readonly="yes">
13712 <desc>
13713 Number of recent samples retained by the performance collector for this
13714 metric.
13715
13716 When the collected sample count exceeds this number, older samples
13717 are discarded.
13718 </desc>
13719 </attribute>
13720
13721 <attribute name="unit" type="wstring" readonly="yes">
13722 <desc>
13723 Unit of measurement.
13724 </desc>
13725 </attribute>
13726
13727 <attribute name="minimumValue" type="long" readonly="yes">
13728 <desc>
13729 Minimum possible value of this metric.
13730 </desc>
13731 </attribute>
13732
13733 <attribute name="maximumValue" type="long" readonly="yes">
13734 <desc>
13735 Maximum possible value of this metric.
13736 </desc>
13737 </attribute>
13738 </interface>
13739
13740 <interface
13741 name="IPerformanceCollector" extends="$unknown"
13742 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
13743 wsmap="managed"
13744 >
13745 <desc>
13746 The IPerformanceCollector interface represents a service that collects and
13747 stores performance metrics data.
13748
13749 Performance metrics are associated with objects of interfaces like IHost and
13750 IMachine. Each object has a distinct set of performance metrics.
13751 The set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
13752
13753 Metric data is collected at the specified intervals and is retained
13754 internally. The interval and the number of retained samples can be set
13755 with <link to="IPerformanceCollector::setupMetrics" />.
13756
13757 Metrics are organized hierarchically, with each level separated by a
13758 slash (/) character. Generally, the scheme for metric names is like this:
13759
13760 <tt>Category/Metric[/SubMetric][:aggregation]</tt>
13761
13762 "Category/Metric" together form the base metric name. A base metric is the
13763 smallest unit for which a sampling interval and the number of retained
13764 samples can be set. Only base metrics can be enabled and disabled. All
13765 sub-metrics are collected when their base metric is collected.
13766 Collected values for any set of sub-metrics can be queried with
13767 <link to="IPerformanceCollector::queryMetricsData" />.
13768
13769 For example "CPU/Load/User:avg"
13770 metric name stands for the "CPU" category, "Load" metric, "User" submetric,
13771 "average" aggregate. An aggregate function is computed over all retained
13772 data. Valid aggregate functions are:
13773
13774 <ul>
13775 <li>avg -- average</li>
13776 <li>min -- minimum</li>
13777 <li>max -- maximum</li>
13778 </ul>
13779
13780 When setting up
13781 metric parameters, querying metric data, enabling or disabling metrics
13782 wildcards can be used in metric names to specify a subset of metrics. For
13783 example, to select all CPU-related metrics use <tt>CPU/*</tt>, all
13784 averages can be queried using <tt>*:avg</tt> and so on. To query metric
13785 values without aggregates <tt>*:</tt> can be used.
13786
13787 The valid names for base metrics are:
13788
13789 <ul>
13790 <li>CPU/Load</li>
13791 <li>CPU/MHz</li>
13792 <li>RAM/Usage</li>
13793 </ul>
13794
13795 The general sequence for collecting and retrieving the metrics is:
13796 <ul>
13797 <li>
13798 Obtain an instance of IPerformanceCollector with
13799 <link to="IVirtualBox::performanceCollector" />
13800 </li>
13801 <li>
13802 Allocate and populate an array with references to objects the metrics
13803 will be collected for. Use references to IHost and IMachine objects.
13804 </li>
13805 <li>
13806 Allocate and populate an array with base metric names the data will be
13807 collected for.
13808 </li>
13809 <li>
13810 Call <link to="IPerformanceCollector::setupMetrics" />. From now on the
13811 metric data will be collected and stored.
13812 </li>
13813 <li>
13814 Wait for the data to get collected.
13815 </li>
13816 <li>
13817 Allocate and populate an array with references to objects the metric
13818 values will be queried for. You can re-use the object array used for
13819 setting base metrics.
13820 </li>
13821 <li>
13822 Allocate and populate an array with metric names the data will be
13823 collected for. Note that metric names differ from base metric names.
13824 </li>
13825 <li>
13826 Call <link to="IPerformanceCollector::queryMetricsData" />. The data that
13827 have been collected so far are returned. Note that the values are still
13828 retained internally and data collection continues.
13829 </li>
13830 </ul>
13831
13832 For an example of usage refer to the following files in VirtualBox SDK:
13833 <ul>
13834 <li>
13835 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
13836 </li>
13837 <li>
13838 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
13839 </li>
13840 </ul>
13841 </desc>
13842
13843 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
13844 <desc>
13845 Array of unique names of metrics.
13846
13847 This array represents all metrics supported by the performance
13848 collector. Individual objects do not necessarily support all of them.
13849 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
13850 list of supported metrics for a particular object.
13851 </desc>
13852 </attribute>
13853
13854 <method name="getMetrics">
13855 <desc>
13856 Returns parameters of specified metrics for a set of objects.
13857 <note>
13858 @c Null metrics array means all metrics. @c Null object array means
13859 all existing objects.
13860 </note>
13861 </desc>
13862 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13863 <desc>
13864 Metric name filter. Currently, only a comma-separated list of metrics
13865 is supported.
13866 </desc>
13867 </param>
13868 <param name="objects" type="$unknown" dir="in" safearray="yes">
13869 <desc>
13870 Set of objects to return metric parameters for.
13871 </desc>
13872 </param>
13873 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
13874 <desc>
13875 Array of returned metric parameters.
13876 </desc>
13877 </param>
13878 </method>
13879
13880 <method name="setupMetrics">
13881 <desc>
13882 Sets parameters of specified base metrics for a set of objects. Returns
13883 an array of <link to="IPerformanceMetric" /> describing the metrics have
13884 been affected.
13885 <note>
13886 @c Null or empty metric name array means all metrics. @c Null or empty
13887 object array means all existing objects. If metric name array contains
13888 a single element and object array contains many, the single metric
13889 name array element is applied to each object array element to form
13890 metric/object pairs.
13891 </note>
13892 </desc>
13893 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13894 <desc>
13895 Metric name filter. Comma-separated list of metrics with wildcard
13896 support.
13897 </desc>
13898 </param>
13899 <param name="objects" type="$unknown" dir="in" safearray="yes">
13900 <desc>
13901 Set of objects to setup metric parameters for.
13902 </desc>
13903 </param>
13904 <param name="period" type="unsigned long" dir="in">
13905 <desc>
13906 Time interval in seconds between two consecutive samples of performance
13907 data.
13908 </desc>
13909 </param>
13910 <param name="count" type="unsigned long" dir="in">
13911 <desc>
13912 Number of samples to retain in performance data history. Older samples
13913 get discarded.
13914 </desc>
13915 </param>
13916 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13917 <desc>
13918 Array of metrics that have been modified by the call to this method.
13919 </desc>
13920 </param>
13921 </method>
13922
13923 <method name="enableMetrics">
13924 <desc>
13925 Turns on collecting specified base metrics. Returns an array of
13926 <link to="IPerformanceMetric" /> describing the metrics have been
13927 affected.
13928 <note>
13929 @c Null or empty metric name array means all metrics. @c Null or empty
13930 object array means all existing objects. If metric name array contains
13931 a single element and object array contains many, the single metric
13932 name array element is applied to each object array element to form
13933 metric/object pairs.
13934 </note>
13935 </desc>
13936 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13937 <desc>
13938 Metric name filter. Comma-separated list of metrics with wildcard
13939 support.
13940 </desc>
13941 </param>
13942 <param name="objects" type="$unknown" dir="in" safearray="yes">
13943 <desc>
13944 Set of objects to enable metrics for.
13945 </desc>
13946 </param>
13947 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13948 <desc>
13949 Array of metrics that have been modified by the call to this method.
13950 </desc>
13951 </param>
13952 </method>
13953
13954 <method name="disableMetrics">
13955 <desc>
13956 Turns off collecting specified base metrics. Returns an array of
13957 <link to="IPerformanceMetric" /> describing the metrics have been
13958 affected.
13959 <note>
13960 @c Null or empty metric name array means all metrics. @c Null or empty
13961 object array means all existing objects. If metric name array contains
13962 a single element and object array contains many, the single metric
13963 name array element is applied to each object array element to form
13964 metric/object pairs.
13965 </note>
13966 </desc>
13967 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13968 <desc>
13969 Metric name filter. Comma-separated list of metrics with wildcard
13970 support.
13971 </desc>
13972 </param>
13973 <param name="objects" type="$unknown" dir="in" safearray="yes">
13974 <desc>
13975 Set of objects to disable metrics for.
13976 </desc>
13977 </param>
13978 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13979 <desc>
13980 Array of metrics that have been modified by the call to this method.
13981 </desc>
13982 </param>
13983 </method>
13984
13985 <method name="queryMetricsData">
13986 <desc>
13987 Queries collected metrics data for a set of objects.
13988
13989 The data itself and related metric information are returned in seven
13990 parallel and one flattened array of arrays. Elements of
13991 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
13992 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
13993 the same index describe one set of values corresponding to a single
13994 metric.
13995
13996 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
13997 start and length of a sub-array is indicated by
13998 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
13999 value for metric <tt>metricNames[i]</tt> is at
14000 <tt>returnData[returnIndices[i]]</tt>.
14001
14002 <note>
14003 @c Null or empty metric name array means all metrics. @c Null or empty
14004 object array means all existing objects. If metric name array contains
14005 a single element and object array contains many, the single metric
14006 name array element is applied to each object array element to form
14007 metric/object pairs.
14008 </note>
14009 <note>
14010 Data collection continues behind the scenes after call to
14011 @c queryMetricsData. The return data can be seen as the snapshot of
14012 the current state at the time of @c queryMetricsData call. The
14013 internally kept metric values are not cleared by the call. This makes
14014 possible querying different subsets of metrics or aggregates with
14015 subsequent calls. If periodic querying is needed it is highly
14016 suggested to query the values with @c interval*count period to avoid
14017 confusion. This way a completely new set of data values will be
14018 provided by each query.
14019 </note>
14020 </desc>
14021 <param name="metricNames" type="wstring" dir="in" safearray="yes">
14022 <desc>
14023 Metric name filter. Comma-separated list of metrics with wildcard
14024 support.
14025 </desc>
14026 </param>
14027 <param name="objects" type="$unknown" dir="in" safearray="yes">
14028 <desc>
14029 Set of objects to query metrics for.
14030 </desc>
14031 </param>
14032 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
14033 <desc>
14034 Names of metrics returned in @c returnData.
14035 </desc>
14036 </param>
14037 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
14038 <desc>
14039 Objects associated with metrics returned in @c returnData.
14040 </desc>
14041 </param>
14042 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
14043 <desc>
14044 Units of measurement for each returned metric.
14045 </desc>
14046 </param>
14047 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
14048 <desc>
14049 Divisor that should be applied to return values in order to get
14050 floating point values. For example:
14051 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
14052 will retrieve the floating point value of i-th sample of the first
14053 metric.
14054 </desc>
14055 </param>
14056 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
14057 <desc>
14058 Sequence numbers of the first elements of value sequences of particular metrics
14059 returned in @c returnData. For aggregate metrics it is the sequence number of
14060 the sample the aggregate started calculation from.
14061 </desc>
14062 </param>
14063 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
14064 <desc>
14065 Indices of the first elements of value sequences of particular metrics
14066 returned in @c returnData.
14067 </desc>
14068 </param>
14069 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
14070 <desc>
14071 Lengths of value sequences of particular metrics.
14072 </desc>
14073 </param>
14074 <param name="returnData" type="long" dir="return" safearray="yes">
14075 <desc>
14076 Flattened array of all metric data containing sequences of values for
14077 each metric.
14078 </desc>
14079 </param>
14080 </method>
14081
14082 </interface>
14083
14084 <module name="VBoxSVC" context="LocalServer">
14085 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
14086 namespace="virtualbox.org">
14087 <interface name="IVirtualBox" default="yes"/>
14088 </class>
14089 </module>
14090
14091 <module name="VBoxC" context="InprocServer" threadingModel="Free">
14092 <class name="Session" uuid="3C02F46D-C9D2-4F11-A384-53F0CF917214"
14093 namespace="virtualbox.org">
14094 <interface name="ISession" default="yes"/>
14095 </class>
14096 <class name="CallbackWrapper" uuid="49EE8561-5563-4715-B18C-A4B1A490DAFE"
14097 namespace="virtualbox.org">
14098 <interface name="ILocalOwner" default="yes"/>
14099 <interface name="IVirtualBoxCallback"/>
14100 <interface name="IConsoleCallback"/>
14101 </class>
14102 </module>
14103
14104</library>
14105
14106</idl>
14107
14108<!-- vim: set shiftwidth=2 tabstop=2 expandtab: -->
Note: See TracBrowser for help on using the repository browser.

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