VirtualBox

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

Last change on this file since 16601 was 16601, checked in by vboxsync, 16 years ago

OVF: change IVirtualSystemDescription::setFinalValues method; remove IVirtualSystemDescription::disableItem; API docs; implement lots of VBoxManage import command line handling

  • Property svn:eol-style set to native
File size: 469.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-2008 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
130#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
131# define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
132 NS_IMPL_THREADSAFE_ADDREF(_class) \
133 NS_IMPL_THREADSAFE_RELEASE(_class) \
134 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI(_class, _interface) \
135 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
136#endif
137
138#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
139# define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
140 NS_IMPL_THREADSAFE_ADDREF(_class) \
141 NS_IMPL_THREADSAFE_RELEASE(_class) \
142 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
143 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
144#endif
145
146#ifndef NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
147# define NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
148 NS_INTERFACE_MAP_BEGIN(_class) \
149 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
150 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
151 NS_IMPL_QUERY_CLASSINFO(_class) \
152 NS_INTERFACE_MAP_END
153#endif
154
155#ifndef NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
156# define NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
157 _i2, _ic2) \
158 NS_INTERFACE_MAP_BEGIN(_class) \
159 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
160 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
161 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
162 NS_IMPL_QUERY_CLASSINFO(_class) \
163 NS_INTERFACE_MAP_END
164#endif
165
166#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
167#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
168
169#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI
170# define NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI(_class, _i1, _ic1) \
171 NS_IMPL_THREADSAFE_ADDREF(_class) \
172 NS_IMPL_THREADSAFE_RELEASE(_class) \
173 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
174 NS_IMPL_CI_INTERFACE_GETTER1(_class, _i1)
175#endif
176
177#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI
178# define NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI(_class, _i1, _ic1, \
179 _i2, _ic2) \
180 NS_IMPL_THREADSAFE_ADDREF(_class) \
181 NS_IMPL_THREADSAFE_RELEASE(_class) \
182 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
183 _i2, _ic2) \
184 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
185#endif
186 </cpp>
187</if>
188
189<library
190 name="VirtualBox"
191 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
192 version="1.3"
193 desc="VirtualBox Type Library"
194 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
195 supportsErrorInfo="yes"
196>
197
198
199 <!--
200 // COM result codes for VirtualBox
201 /////////////////////////////////////////////////////////////////////////
202 -->
203
204 <descGroup id="VirtualBox_COM_result_codes" title="VirtualBox COM result codes">
205 <desc>
206 This section describes all VirtualBox-specific COM result codes that may
207 be returned by methods of VirtualBox COM interfaces in addition to
208 standard COM result codes.
209
210 Note that along with the result code, every VirtualBox method returns
211 extended error information through the IVirtualBoxErrorInfo interface on
212 failure. This interface is a preferred way to present the error to the end
213 user because it contains a human readable description of the error. Raw
214 result codes, both standard and described in this section, are intended to
215 be used by programs to analyze the reason of a failure and select an
216 appropriate course of action without involving the end user (for example,
217 retry the operation later or make a different call).
218
219 The standard COM result codes that may originate from our methods include:
220
221 <table>
222 <tr><td>E_INVALIDARG</td>
223 <td>
224 Returned when the value of the method's argument is not within the range
225 of valid values. This should not be confused with situations when the
226 value is within the range but simply doesn't suit the current object
227 state and there is a possibility that it will be accepted later (in such
228 cases VirtualBox-specific codes are returned, for example,
229 <link to="VBOX_E_OBJECT_NOT_FOUND"/>).
230 </td>
231 </tr>
232 <tr><td>E_POINTER</td>
233 <td>
234 Returned if a memory pointer for the output argument is invalid (for
235 example, <tt>NULL</tt>). Note that when pointers representing input
236 arguments (such as strings) are invalid, E_INVALIDARG is returned.
237 </td>
238 </tr>
239 <tr><td>E_ACCESSDENIED</td>
240 <td>
241 Returned when the called object is not ready. Since the lifetime of a
242 public COM object cannot be fully controlled by the implementation,
243 VirtualBox maintains the readiness state for all objects it creates and
244 returns this code in response to any method call on the object that was
245 deactivated by VirtualBox and is not functioning any more.
246 </td>
247 </tr>
248 <tr><td>E_OUTOFMEMORY</td>
249 <td>
250 Returned when a memory allocation operation fails.
251 </td>
252 </tr>
253 </table>
254 </desc>
255 </descGroup>
256
257 <!--
258 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
259 everything in <result>/<desc> after (and including) the first dot, so express
260 the matter of the error code in the first sentence and keep it short.
261 -->
262
263 <result name="VBOX_E_OBJECT_NOT_FOUND" value="0x80BB0001">
264 <desc>
265 Object corresponding to the supplied arguments does not exist.
266 </desc>
267 </result>
268
269 <result name="VBOX_E_INVALID_VM_STATE" value="0x80BB0002">
270 <desc>
271 Current virtual machine state prevents the operation.
272 </desc>
273 </result>
274
275 <result name="VBOX_E_VM_ERROR" value="0x80BB0003">
276 <desc>
277 Virtual machine error occurred attempting the operation.
278 </desc>
279 </result>
280
281 <result name="VBOX_E_FILE_ERROR" value="0x80BB0004">
282 <desc>
283 File not accessible or erroneous file contents.
284 </desc>
285 </result>
286
287 <result name="VBOX_E_IPRT_ERROR" value="0x80BB0005">
288 <desc>
289 Runtime subsystem error.
290 </desc>
291 </result>
292
293 <result name="VBOX_E_PDM_ERROR" value="0x80BB0006">
294 <desc>
295 Pluggable Device Manager error.
296 </desc>
297 </result>
298
299 <result name="VBOX_E_INVALID_OBJECT_STATE" value="0x80BB0007">
300 <desc>
301 Current object state prohibits operation.
302 </desc>
303 </result>
304
305 <result name="VBOX_E_HOST_ERROR" value="0x80BB0008">
306 <desc>
307 Host operating system related error.
308 </desc>
309 </result>
310
311 <result name="VBOX_E_NOT_SUPPORTED" value="0x80BB0009">
312 <desc>
313 Requested operation is not supported.
314 </desc>
315 </result>
316
317 <result name="VBOX_E_XML_ERROR" value="0x80BB000A">
318 <desc>
319 Invalid XML found.
320 </desc>
321 </result>
322
323 <result name="VBOX_E_INVALID_SESSION_STATE" value="0x80BB000B">
324 <desc>
325 Current session state prohibits operation.
326 </desc>
327 </result>
328
329 <result name="VBOX_E_OBJECT_IN_USE" value="0x80BB000C">
330 <desc>
331 Object being in use prohibits operation.
332 </desc>
333 </result>
334
335 <!--
336 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
337 everything in <result>/<desc> after (and including) the first dot, so express
338 the matter of the error code in the first sentence and keep it short.
339 -->
340
341 <descGroup/>
342
343 <!--
344 // all common enums
345 /////////////////////////////////////////////////////////////////////////
346 -->
347
348 <enum
349 name="TSBool"
350 uuid="523ff64d-842a-4b1a-80e7-c311b028cb3a"
351 >
352 <desc>
353 Boolean variable having a third state, default.
354 </desc>
355
356 <const name="False" value="0"/>
357 <const name="True" value="1"/>
358 <const name="Default" value="2"/>
359 </enum>
360
361 <enum
362 name="MachineState"
363 uuid="73bf04d0-7c4f-4684-9abf-d65a9ad74343"
364 >
365 <desc>
366 Virtual machine execution state.
367
368 This enumeration represents possible values of the <link
369 to="IMachine::state"/> attribute.
370
371 Below is the basic virtual machine state diagram. It shows how the state
372 changes during virtual machine execution. The text in square braces shows
373 a method of the IConsole interface that performs the given state
374 transition.
375
376 <pre>
377 +---------[powerDown()] &lt;- Stuck &lt;--[failure]-+
378 V |
379 +-&gt; PoweredOff --+--&gt;[powerUp()]--&gt; Starting --+ | +-----[resume()]-----+
380 | | | | V |
381 | Aborted -----+ +--&gt; Running --[pause()]--&gt; Paused
382 | | ^ | ^ |
383 | Saved -----------[powerUp()]--&gt; Restoring -+ | | | |
384 | ^ | | | |
385 | | +-----------------------------------------+-|-------------------+ +
386 | | | | |
387 | | +-- Saving &lt;--------[takeSnapshot()]&lt;-------+---------------------+
388 | | | |
389 | +-------- Saving &lt;--------[saveState()]&lt;----------+---------------------+
390 | | |
391 +-------------- Stopping -------[powerDown()]&lt;----------+---------------------+
392 </pre>
393
394 Note that states to the right from PoweredOff, Aborted and Saved in the
395 above diagram are called <i>online VM states</i>. These states
396 represent the virtual machine which is being executed in a dedicated
397 process (usually with a GUI window attached to it where you can see the
398 activity of the virtual machine and interact with it). There are two
399 special pseudo-states, FirstOnline and LastOnline, that can be used in
400 relational expressions to detect if the given machine state is online or
401 not:
402
403 <pre>
404 if (machine.GetState() &gt;= MachineState_FirstOnline &amp;&amp;
405 machine.GetState() &lt;= MachineState_LastOnline)
406 {
407 ...the machine is being executed...
408 }
409 </pre>
410
411 When the virtual machine is in one of the online VM states (that is, being
412 executed), only a few machine settings can be modified. Methods working
413 with such settings contain an explicit note about that. An attempt to
414 change any oter setting or perform a modifying operation during this time
415 will result in the <link to="VBOX_E_INVALID_VM_STATE"/> error.
416
417 All online states except Running, Paused and Stuck are transitional: they
418 represent temporary conditions of the virtual machine that will last as
419 long as the operation that initiated such a condition.
420
421 The Stuck state is a special case. It means that execution of the machine
422 has reached the "Guru Meditation" condition. This condition indicates an
423 internal VMM (virtual machine manager) failure which may happen as a
424 result of either an unhandled low-level virtual hardware exception or one
425 of the recompiler exceptions (such as the <i>too-many-traps</i>
426 condition).
427
428 Note also that any online VM state may transit to the Aborted state. This
429 happens if the process that is executing the virtual machine terminates
430 unexpectedly (for example, crashes). Other than that, the Aborted state is
431 equivalent to PoweredOff.
432
433 There are also a few additional state diagrams that do not deal with
434 virtual machine execution and therefore are shown separately. The states
435 shown on these diagrams are called <i>offline VM states</i> (this includes
436 PoweredOff, Aborted and Saved too).
437
438 The first diagram shows what happens when a lengthy setup operation is
439 being executed (such as <link to="IMachine::attachHardDisk2()"/>).
440
441 <pre>
442 +-----------------------------------(same sate as before the call)------+
443 | |
444 +-&gt; PoweredOff --+ |
445 | | |
446 |-&gt; Aborted -----+--&gt;[lengthy VM configuration call] --&gt; SettingUp -----+
447 | |
448 +-&gt; Saved -------+
449 </pre>
450
451 The next two diagrams demonstrate the process of taking a snapshot of a
452 powered off virtual machine and performing one of the "discard..."
453 operations, respectively.
454
455 <pre>
456 +-----------------------------------(same sate as before the call)------+
457 | |
458 +-&gt; PoweredOff --+ |
459 | +--&gt;[takeSnapshot()] -------------------&gt; Saving ------+
460 +-&gt; Aborted -----+
461
462 +-&gt; PoweredOff --+
463 | |
464 | Aborted -----+--&gt;[discardSnapshot() ]-------------&gt; Discarding --+
465 | | [discardCurrentState()] |
466 +-&gt; Saved -------+ [discardCurrentSnapshotAndState()] |
467 | |
468 +---(Saved if restored from an online snapshot, PoweredOff otherwise)---+
469 </pre>
470
471 Note that the Saving state is present in both the offline state group and
472 online state group. Currently, the only way to determine what group is
473 assumed in a particular case is to remember the previous machine state: if
474 it was Running or Paused, then Saving is an online state, otherwise it is
475 an offline state. This inconsistency may be removed in one of the future
476 versions of VirtualBox by adding a new state.
477
478 <note internal="yes">
479 For whoever decides to touch this enum: In order to keep the
480 comparisons involving FirstOnline and LastOnline pseudo-states valid,
481 the numeric values of these states must be correspondingly updated if
482 needed: for any online VM state, the condition
483 <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
484 <tt>true</tt>. The same relates to transient states for which
485 the condition <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
486 <tt>true</tt>.
487 </note>
488 </desc>
489
490 <const name="Null" value="0">
491 <desc>Null value (nver used by the API).</desc>
492 </const>
493 <const name="PoweredOff" value="1">
494 <desc>
495 The machine is not running.
496 </desc>
497 </const>
498 <const name="Saved" value="2">
499 <desc>
500 The machine is not currently running, but the execution state of the machine
501 has been saved to an external file when it was running.
502 </desc>
503 </const>
504 <const name="Aborted" value="3">
505 <desc>
506 The process running the machine has terminated abnormally.
507 </desc>
508 </const>
509 <const name="Running" value="4">
510 <desc>
511 The machine is currently being executed.
512 <note internal="yes">
513 For whoever decides to touch this enum: In order to keep the
514 comparisons in the old source code valid, this state must immediately
515 precede the Paused state.
516 </note>
517 </desc>
518 </const>
519 <const name="Paused" value="5">
520 <desc>
521 Execution of the machine has been paused.
522 <note internal="yes">
523 For whoever decides to touch this enum: In order to keep the
524 comparisons in the old source code valid, this state must immediately
525 follow the Running state.
526 </note>
527 </desc>
528 </const>
529 <const name="Stuck" value="6">
530 <desc>
531 Execution of the machine has reached the "Guru Meditation"
532 condition.
533 </desc>
534 </const>
535 <const name="Starting" value="7">
536 <desc>
537 Machine is being started after powering it on from a
538 zero execution state.
539 </desc>
540 </const>
541 <const name="Stopping" value="8">
542 <desc>
543 Machine is being normally stopped powering it off, or after the guest OS
544 has initiated a shutdown sequence.
545 </desc>
546 </const>
547 <const name="Saving" value="9">
548 <desc>
549 Machine is saving its execution state to a file or an online
550 snapshot of the machine is being taken.
551 </desc>
552 </const>
553 <const name="Restoring" value="10">
554 <desc>
555 Execution state of the machine is being restored from a file
556 after powering it on from the saved execution state.
557 </desc>
558 </const>
559 <const name="Discarding" value="11">
560 <desc>
561 Snapshot of the machine is being discarded.
562 </desc>
563 </const>
564 <const name="SettingUp" value="12">
565 <desc>
566 Lengthy setup operation is in progress.
567 </desc>
568 </const>
569
570 <const name="FirstOnline" value="4" wsmap="suppress"> <!-- Running -->
571 <desc>
572 Pseudo-state: first online state (for use in relational expressions).
573 </desc>
574 </const>
575 <const name="LastOnline" value="10" wsmap="suppress"> <!-- Restoring -->
576 <desc>
577 Pseudo-state: last online state (for use in relational expressions).
578 </desc>
579 </const>
580
581 <const name="FirstTransient" value="7" wsmap="suppress"> <!-- Starting -->
582 <desc>
583 Pseudo-state: first transient state (for use in relational expressions).
584 </desc>
585 </const>
586 <const name="LastTransient" value="12" wsmap="suppress"> <!-- SettingUp -->
587 <desc>
588 Pseudo-state: last transient state (for use in relational expressions).
589 </desc>
590 </const>
591
592 </enum>
593
594 <enum
595 name="SessionState"
596 uuid="CF2700C0-EA4B-47ae-9725-7810114B94D8"
597 >
598 <desc>
599 Session state. This enumeration represents possible values of
600 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
601 attributes. See individual enumerator descriptions for the meaning for
602 every value.
603 </desc>
604
605 <const name="Null" value="0">
606 <desc>Null value (never used by the API).</desc>
607 </const>
608 <const name="Closed" value="1">
609 <desc>
610 The machine has no open sessions (<link to="IMachine::sessionState"/>);
611 the session is closed (<link to="ISession::state"/>)
612 </desc>
613 </const>
614 <const name="Open" value="2">
615 <desc>
616 The machine has an open direct session (<link to="IMachine::sessionState"/>);
617 the session is open (<link to="ISession::state"/>)
618 </desc>
619 </const>
620 <const name="Spawning" value="3">
621 <desc>
622 A new (direct) session is being opened for the machine
623 as a result of <link to="IVirtualBox::openRemoteSession()"/>
624 call (<link to="IMachine::sessionState"/>);
625 the session is currently being opened
626 as a result of <link to="IVirtualBox::openRemoteSession()"/>
627 call (<link to="ISession::state"/>)
628 </desc>
629 </const>
630 <const name="Closing" value="4">
631 <desc>
632 The direct session is being closed (<link to="IMachine::sessionState"/>);
633 the session is being closed (<link to="ISession::state"/>)
634 </desc>
635 </const>
636 </enum>
637
638 <enum
639 name="SessionType"
640 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
641 >
642 <desc>
643 Session type. This enumeration represents possible values of the
644 <link to="ISession::type"/> attribute.
645 </desc>
646
647 <const name="Null" value="0">
648 <desc>Null value (never used by the API).</desc>
649 </const>
650 <const name="Direct" value="1">
651 <desc>
652 Direct session
653 (opened by <link to="IVirtualBox::openSession()"/>)
654 </desc>
655 </const>
656 <const name="Remote" value="2">
657 <desc>
658 Remote session
659 (opened by <link to="IVirtualBox::openRemoteSession()"/>)
660 </desc>
661 </const>
662 <const name="Existing" value="3">
663 <desc>
664 Existing session
665 (opened by <link to="IVirtualBox::openExistingSession()"/>)
666 </desc>
667 </const>
668 </enum>
669
670 <enum
671 name="DeviceType"
672 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
673 >
674 <desc>
675 Device type.
676 </desc>
677 <const name="Null" value="0">
678 <desc>
679 Null value, may also mean "no device" (not allowed for
680 <link to="IConsole::getDeviceActivity"/>).
681 </desc>
682 </const>
683 <const name="Floppy" value="1">
684 <desc>Floppy device.</desc>
685 </const>
686 <const name="DVD" value="2">
687 <desc>CD/DVD-ROM device.</desc>
688 </const>
689 <const name="HardDisk" value="3">
690 <desc>Hard disk device.</desc>
691 </const>
692 <const name="Network" value="4">
693 <desc>Network device.</desc>
694 </const>
695 <const name="USB" value="5">
696 <desc>USB device.</desc>
697 </const>
698 <const name="SharedFolder" value="6">
699 <desc>Shared folder device.</desc>
700 </const>
701 </enum>
702
703 <enum
704 name="DeviceActivity"
705 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
706 >
707 <desc>
708 Device activity for <link to="IConsole::getDeviceActivity"/>.
709 </desc>
710
711 <const name="Null" value="0"/>
712 <const name="Idle" value="1"/>
713 <const name="Reading" value="2"/>
714 <const name="Writing" value="3"/>
715 </enum>
716
717 <enum
718 name="StorageBus"
719 uuid="715984a5-093c-43bb-aa42-a16ed16828dd"
720 >
721 <desc>Interface bus type for storage devices.</desc>
722
723 <const name="Null" value="0">
724 <desc>Null value (never used by the API).</desc>
725 </const>
726
727 <const name="IDE" value="1"/>
728 <const name="SATA" value="2"/>
729 </enum>
730
731 <enum
732 name="ClipboardMode"
733 uuid="33364716-4008-4701-8f14-be0fa3d62950"
734 >
735 <desc>
736 Host-Guest clipboard interchange mode.
737 </desc>
738
739 <const name="Disabled" value="0"/>
740 <const name="HostToGuest" value="1"/>
741 <const name="GuestToHost" value="2"/>
742 <const name="Bidirectional" value="3"/>
743 </enum>
744
745 <enum
746 name="Scope"
747 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
748 >
749 <desc>
750 Scope of the operation.
751
752 A generic enumeration used in various methods to define the action or
753 argument scope.
754 </desc>
755
756 <const name="Global" value="0"/>
757 <const name="Machine" value="1"/>
758 <const name="Session" value="2"/>
759 </enum>
760
761 <enum
762 name="GuestStatisticType"
763 uuid="aa7c1d71-aafe-47a8-9608-27d2d337cf55"
764 >
765 <desc>
766 Statistics type for <link to="IGuest::getStatistic"/>.
767 </desc>
768
769 <const name="CPULoad_Idle" value="0">
770 <desc>
771 Idle CPU load (0-100%) for last interval.
772 </desc>
773 </const>
774 <const name="CPULoad_Kernel" value="1">
775 <desc>
776 Kernel CPU load (0-100%) for last interval.
777 </desc>
778 </const>
779 <const name="CPULoad_User" value="2">
780 <desc>
781 User CPU load (0-100%) for last interval.
782 </desc>
783 </const>
784 <const name="Threads" value="3">
785 <desc>
786 Total number of threads in the system.
787 </desc>
788 </const>
789 <const name="Processes" value="4">
790 <desc>
791 Total number of processes in the system.
792 </desc>
793 </const>
794 <const name="Handles" value="5">
795 <desc>
796 Total number of handles in the system.
797 </desc>
798 </const>
799 <const name="MemoryLoad" value="6">
800 <desc>
801 Memory load (0-100%).
802 </desc>
803 </const>
804 <const name="PhysMemTotal" value="7">
805 <desc>
806 Total physical memory in megabytes.
807 </desc>
808 </const>
809 <const name="PhysMemAvailable" value="8">
810 <desc>
811 Free physical memory in megabytes.
812 </desc>
813 </const>
814 <const name="PhysMemBalloon" value="9">
815 <desc>
816 Ballooned physical memory in megabytes.
817 </desc>
818 </const>
819 <const name="MemCommitTotal" value="10">
820 <desc>
821 Total amount of memory in the committed state in megabytes.
822 </desc>
823 </const>
824 <const name="MemKernelTotal" value="11">
825 <desc>
826 Total amount of memory used by the guest OS's kernel in megabytes.
827 </desc>
828 </const>
829 <const name="MemKernelPaged" value="12">
830 <desc>
831 Total amount of paged memory used by the guest OS's kernel in megabytes.
832 </desc>
833 </const>
834 <const name="MemKernelNonpaged" value="13">
835 <desc>
836 Total amount of non-paged memory used by the guest OS's kernel in megabytes.
837 </desc>
838 </const>
839 <const name="MemSystemCache" value="14">
840 <desc>
841 Total amount of memory used by the guest OS's system cache in megabytes.
842 </desc>
843 </const>
844 <const name="PageFileSize" value="15">
845 <desc>
846 Pagefile size in megabytes.
847 </desc>
848 </const>
849 <const name="SampleNumber" value="16">
850 <desc>
851 Statistics sample number
852 </desc>
853 </const>
854 <const name="MaxVal" value="17"/>
855 </enum>
856
857 <enum
858 name="BIOSBootMenuMode"
859 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
860 >
861 <desc>
862 BIOS boot menu mode.
863 </desc>
864
865 <const name="Disabled" value="0"/>
866 <const name="MenuOnly" value="1"/>
867 <const name="MessageAndMenu" value="2"/>
868 </enum>
869
870 <enum
871 name="IDEControllerType"
872 uuid="445330e3-202a-4dab-854f-ce22e6cb9715"
873 >
874 <desc>
875 IDE controller type.
876 </desc>
877
878 <const name="Null" value="0">
879 <desc>Null value (never used by the API).</desc>
880 </const>
881 <const name="PIIX3" value="1"/>
882 <const name="PIIX4" value="2"/>
883 </enum>
884
885 <enum
886 name="DriveState"
887 uuid="cb7233b7-c519-42a5-8310-1830953cacbc"
888 >
889 <const name="Null" value="0">
890 <desc>Null value (never used by the API).</desc>
891 </const>
892 <const name="NotMounted" value="1"/>
893 <const name="ImageMounted" value="2"/>
894 <const name="HostDriveCaptured" value="3"/>
895 </enum>
896
897 <enum
898 name="ProcessorFeature"
899 uuid="b8353b35-705d-4796-9967-ebfb7ba54af4"
900 >
901 <desc>
902 CPU features.
903 </desc>
904
905 <const name="HWVirtEx" value="0"/>
906 <const name="PAE" value="1"/>
907 <const name="LongMode" value="2"/>
908 </enum>
909
910
911 <!--
912 // IVirtualBoxErrorInfo
913 /////////////////////////////////////////////////////////////////////////
914 -->
915
916 <interface
917 name="IVirtualBoxErrorInfo" extends="$errorinfo"
918 uuid="e98b5376-8eb4-4eea-812a-3964bf3bb26f"
919 supportsErrorInfo="no"
920 wsmap="suppress"
921 >
922 <desc>
923 The IVirtualBoxErrorInfo interface represents extended error information.
924
925 Extended error information can be set by VirtualBox components after
926 unsuccessful or partially successful method invocation. This information
927 can be retrieved by the calling party as an IVirtualBoxErrorInfo object
928 and then shown to the client in addition to the plain 32-bit result code.
929
930 In MS COM, this interface extends the IErrorInfo interface,
931 in XPCOM, it extends the nsIException interface. In both cases,
932 it provides a set of common attributes to retrieve error
933 information.
934
935 Sometimes invocation of some component's method may involve methods of
936 other components that may also fail (independently of this method's
937 failure), or a series of non-fatal errors may precede a fatal error that
938 causes method failure. In cases like that, it may be desirable to preserve
939 information about all errors happened during method invocation and deliver
940 it to the caller. The <link to="#next"/> attribute is intended
941 specifically for this purpose and allows to represent a chain of errors
942 through a single IVirtualBoxErrorInfo object set after method invocation.
943
944 Note that errors are stored to a chain in the reverse order, i.e. the
945 initial error object you query right after method invocation is the last
946 error set by the callee, the object it points to in the @a next attribute
947 is the previous error and so on, up to the first error (which is the last
948 in the chain).
949 </desc>
950
951 <attribute name="resultCode" type="result" readonly="yes">
952 <desc>
953 Result code of the error.
954 Usually, it will be the same as the result code returned
955 by the method that provided this error information, but not
956 always. For example, on Win32, CoCreateInstance() will most
957 likely return E_NOINTERFACE upon unsuccessful component
958 instantiation attempt, but not the value the component factory
959 returned.
960 <note>
961 In MS COM, there is no equivalent.
962 In XPCOM, it is the same as nsIException::result.
963 </note>
964 </desc>
965 </attribute>
966
967 <attribute name="interfaceID" type="uuid" readonly="yes">
968 <desc>
969 UUID of the interface that defined the error.
970 <note>
971 In MS COM, it is the same as IErrorInfo::GetGUID.
972 In XPCOM, there is no equivalent.
973 </note>
974 </desc>
975 </attribute>
976
977 <attribute name="component" type="wstring" readonly="yes">
978 <desc>
979 Name of the component that generated the error.
980 <note>
981 In MS COM, it is the same as IErrorInfo::GetSource.
982 In XPCOM, there is no equivalent.
983 </note>
984 </desc>
985 </attribute>
986
987 <attribute name="text" type="wstring" readonly="yes">
988 <desc>
989 Text description of the error.
990 <note>
991 In MS COM, it is the same as IErrorInfo::GetDescription.
992 In XPCOM, it is the same as nsIException::message.
993 </note>
994 </desc>
995 </attribute>
996
997 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
998 <desc>
999 Next error object if there is any, or @c null otherwise.
1000 <note>
1001 In MS COM, there is no equivalent.
1002 In XPCOM, it is the same as nsIException::inner.
1003 </note>
1004 </desc>
1005 </attribute>
1006
1007 </interface>
1008
1009
1010 <!--
1011 // IVirtualBox
1012 /////////////////////////////////////////////////////////////////////////
1013 -->
1014
1015 <interface
1016 name="IVirtualBoxCallback" extends="$unknown"
1017 uuid="5516cc08-fb81-47a6-b184-031e7bbd2997"
1018 wsmap="suppress"
1019 >
1020 <method name="onMachineStateChange">
1021 <desc>
1022 The execution state of the given machine has changed.
1023 <see>IMachine::state</see>
1024 </desc>
1025 <param name="machineId" type="uuid" dir="in">
1026 <desc>ID of the machine this event relates to.</desc>
1027 </param>
1028 <param name="state" type="MachineState" dir="in">
1029 <desc>New execution state.</desc>
1030 </param>
1031 </method>
1032
1033 <method name="onMachineDataChange">
1034 <desc>
1035 Any of the settings of the given machine has changed.
1036 </desc>
1037 <param name="machineId" type="uuid" dir="in">
1038 <desc>ID of the machine this event relates to.</desc>
1039 </param>
1040 </method>
1041
1042 <method name="onExtraDataCanChange">
1043 <desc>
1044 Notification when someone tries to change extra data for
1045 either the given machine or (if null) global extra data.
1046 This gives the chance to veto against changes.
1047 </desc>
1048 <param name="machineId" type="uuid" dir="in">
1049 <desc>
1050 ID of the machine this event relates to
1051 (null ID for global extra data change requests).
1052 </desc>
1053 </param>
1054 <param name="key" type="wstring" dir="in">
1055 <desc>
1056 Extra data key for the attempted write.
1057 </desc>
1058 </param>
1059 <param name="value" type="wstring" dir="in">
1060 <desc>
1061 Extra data value for the given key.
1062 </desc>
1063 </param>
1064 <param name="error" type="wstring" dir="out">
1065 <desc>
1066 Optional error message describing the reason of the
1067 veto (ignored if this notification returns @c true).
1068 </desc>
1069 </param>
1070 <param name="allowChange" type="boolean" dir="return">
1071 <desc>
1072 Flag to indicate whether the callee agrees (@c true)
1073 or vetoes against the change (@c false).
1074 </desc>
1075 </param>
1076 </method>
1077
1078 <method name="onExtraDataChange">
1079 <desc>
1080 Notification when machine specific or global extra data
1081 has changed.
1082 </desc>
1083 <param name="machineId" type="uuid" dir="in">
1084 <desc>
1085 ID of the machine this event relates to.
1086 Null for global extra data changes.
1087 </desc>
1088 </param>
1089 <param name="key" type="wstring" dir="in">
1090 <desc>
1091 Extra data key that has changed.
1092 </desc>
1093 </param>
1094 <param name="value" type="wstring" dir="in">
1095 <desc>
1096 Extra data value for the given key.
1097 </desc>
1098 </param>
1099 </method>
1100
1101 <method name="onMediaRegistered">
1102 <desc>
1103 The given media was registered or unregistered
1104 within this VirtualBox installation.
1105
1106 The @a mediaType parameter describes what type of
1107 media the specified @a mediaId refers to. Possible
1108 values are:
1109
1110 <ul>
1111 <li><link to="DeviceType_HardDisk"/>: the media is a hard disk
1112 that, if registered, can be obtained using the
1113 <link to="IVirtualBox::getHardDisk2()"/> call.</li>
1114 <li><link to="DeviceType_DVD"/>: the media is a CD/DVD image
1115 that, if registered, can be obtained using the
1116 <link to="IVirtualBox::getDVDImage()"/> call.</li>
1117 <li><link to="DeviceType_Floppy"/>: the media is a Floppy image
1118 that, if registered, can be obtained using the
1119 <link to="IVirtualBox::getFloppyImage()"/> call.</li>
1120 </ul>
1121
1122 Note that if this is a deregistration notification,
1123 there is no way to access the object representing the
1124 unregistered media. It is supposed that the
1125 application will do required cleanup based on the @a
1126 mediaId value.
1127 </desc>
1128 <param name="mediaId" type="uuid" dir="in">
1129 <desc>ID of the media this event relates to.</desc>
1130 </param>
1131 <param name="mediaType" type="DeviceType" dir="in">
1132 <desc>Type of the media this event relates to.</desc>
1133 </param>
1134 <param name="registered" type="boolean" dir="in">
1135 <desc>
1136 If true, the media was registered, otherwise it was
1137 unregistered.
1138 </desc>
1139 </param>
1140 </method>
1141
1142 <method name="onMachineRegistered">
1143 <desc>
1144 The given machine was registered or unregistered
1145 within this VirtualBox installation.
1146 </desc>
1147 <param name="machineId" type="uuid" dir="in">
1148 <desc>ID of the machine this event relates to.</desc>
1149 </param>
1150 <param name="registered" type="boolean" dir="in">
1151 <desc>
1152 If true, the machine was registered, otherwise it was
1153 unregistered.
1154 </desc>
1155 </param>
1156 </method>
1157
1158 <method name="onSessionStateChange">
1159 <desc>
1160 The state of the session for the given machine was changed.
1161 <see>IMachine::sessionState</see>
1162 </desc>
1163 <param name="machineId" type="uuid" dir="in">
1164 <desc>ID of the machine this event relates to.</desc>
1165 </param>
1166 <param name="state" type="SessionState" dir="in">
1167 <desc>New session state.</desc>
1168 </param>
1169 </method>
1170
1171 <method name="onSnapshotTaken">
1172 <desc>
1173 A new snapshot of the machine has been taken.
1174 <see>ISnapshot</see>
1175 </desc>
1176 <param name="machineId" type="uuid" dir="in">
1177 <desc>ID of the machine this event relates to.</desc>
1178 </param>
1179 <param name="snapshotId" type="uuid" dir="in">
1180 <desc>ID of the new snapshot.</desc>
1181 </param>
1182 </method>
1183
1184 <method name="onSnapshotDiscarded">
1185 <desc>
1186 Snapshot of the given machine has been discarded.
1187
1188 <note>
1189 This notification is delivered <b>after</b> the snapshot
1190 object has been uninitialized on the server (so that any
1191 attempt to call its methods will return an error).
1192 </note>
1193
1194 <see>ISnapshot</see>
1195 </desc>
1196 <param name="machineId" type="uuid" dir="in">
1197 <desc>ID of the machine this event relates to.</desc>
1198 </param>
1199 <param name="snapshotId" type="uuid" dir="in">
1200 <desc>
1201 ID of the discarded snapshot. <tt>null</tt> means the
1202 current machine state has been discarded (restored from
1203 the current snapshot).
1204 </desc>
1205 </param>
1206 </method>
1207
1208 <method name="onSnapshotChange">
1209 <desc>
1210 Snapshot properties (name and/or description) have been changed.
1211 <see>ISnapshot</see>
1212 </desc>
1213 <param name="machineId" type="uuid" dir="in">
1214 <desc>ID of the machine this event relates to.</desc>
1215 </param>
1216 <param name="snapshotId" type="uuid" dir="in">
1217 <desc>ID of the changed snapshot.</desc>
1218 </param>
1219 </method>
1220
1221 <method name="onGuestPropertyChange">
1222 <desc>
1223 Notification when a guest property has changed.
1224 </desc>
1225 <param name="machineId" type="uuid" dir="in">
1226 <desc>
1227 ID of the machine this event relates to.
1228 </desc>
1229 </param>
1230 <param name="name" type="wstring" dir="in">
1231 <desc>
1232 The name of the property that has changed.
1233 </desc>
1234 </param>
1235 <param name="value" type="wstring" dir="in">
1236 <desc>
1237 The new property value.
1238 </desc>
1239 </param>
1240 <param name="flags" type="wstring" dir="in">
1241 <desc>
1242 The new property flags.
1243 </desc>
1244 </param>
1245 </method>
1246
1247 </interface>
1248
1249 <interface
1250 name="IVirtualBox" extends="$dispatched"
1251 uuid="339abca2-f47a-4302-87f5-7bc324e6bbde"
1252 wsmap="managed"
1253 >
1254 <desc>
1255 The IVirtualBox interface represents the main interface exposed by the
1256 product that provides virtual machine management.
1257
1258 An instance of IVirtualBox is required for the product to do anything
1259 useful. Even though the interface does not expose this, internally,
1260 IVirtualBox is implemented as a singleton and actually lives in the
1261 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
1262 IVirtualBox can track the state of all virtual machines on a particular
1263 host, regardless of which frontend started them.
1264
1265 To enumerate all the virtual machines on the host, use the
1266 <link to="IVirtualBox::machines2"/> attribute.
1267 </desc>
1268
1269 <attribute name="version" type="wstring" readonly="yes">
1270 <desc>
1271 A string representing the version number of the product. The
1272 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
1273 last number represents the build number and will frequently change.
1274 </desc>
1275 </attribute>
1276
1277 <attribute name="revision" type="unsigned long" readonly="yes">
1278 <desc>
1279 The internal build revision number of the product.
1280 </desc>
1281 </attribute>
1282
1283 <attribute name="packageType" type="wstring" readonly="yes">
1284 <desc>
1285 A string representing the package type of this product. The
1286 format is OS_ARCH_DIST where OS is either WINDOWS, LINUX,
1287 SOLARIS, DARWIN. ARCH is either 32BITS or 64BITS. DIST
1288 is either GENERIC, UBUNTU_606, UBUNTU_710, or something like
1289 this.
1290 </desc>
1291 </attribute>
1292
1293 <attribute name="homeFolder" type="wstring" readonly="yes">
1294 <desc>
1295 Full path to the directory where the global settings file,
1296 <tt>VirtualBox.xml</tt>, is stored.
1297
1298 In this version of VirtualBox, the value of this property is
1299 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
1300 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
1301 as determined by the host OS), and cannot be changed.
1302
1303 This path is also used as the base to resolve relative paths in
1304 places where relative paths are allowed (unless otherwise
1305 expressly indicated).
1306 </desc>
1307 </attribute>
1308
1309 <attribute name="settingsFilePath" type="wstring" readonly="yes">
1310 <desc>
1311 Full name of the global settings file.
1312 The value of this property corresponds to the value of
1313 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
1314 </desc>
1315 </attribute>
1316
1317 <attribute name="settingsFileVersion" type="wstring" readonly="yes">
1318 <desc>
1319 Current version of the format of the global VirtualBox settings file
1320 (<tt>VirtualBox.xml</tt>).
1321
1322 The version string has the following format:
1323 <pre>
1324 x.y-platform
1325 </pre>
1326 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
1327 versions, and <tt>platform</tt> is the platform identifier.
1328
1329 The current version usually matches the value of the
1330 <link to="#settingsFormatVersion"/> attribute unless the
1331 settings file was created by an older version of VirtualBox and there
1332 was a change of the settings file format since then.
1333
1334 Note that VirtualBox automatically converts settings files from older
1335 versions to the most recent version when reading them (usually at
1336 VirtualBox startup) but it doesn't save the changes back until
1337 you call a method that implicitly saves settings (such as
1338 <link to="#setExtraData()"/>) or call <link to="#saveSettings()"/>
1339 explicitly. Therefore, if the value of this attribute differs from the
1340 value of <link to="#settingsFormatVersion"/>, then it
1341 means that the settings file was converted but the result of the
1342 conversion is not yet saved to disk.
1343
1344 The above feature may be used by interactive front-ends to inform users
1345 about the settings file format change and offer them to explicitly save
1346 all converted settings files (the global and VM-specific ones),
1347 optionally create backup copies of the old settings files before saving,
1348 etc.
1349
1350 <see>settingsFormatVersion, saveSettingsWithBackup()</see>
1351 </desc>
1352 </attribute>
1353
1354 <attribute name="settingsFormatVersion" type="wstring" readonly="yes">
1355 <desc>
1356 Most recent version of the settings file format.
1357
1358 The version string has the following format:
1359 <pre>
1360 x.y-platform
1361 </pre>
1362 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
1363 versions, and <tt>platform</tt> is the platform identifier.
1364
1365 VirtualBox uses this version of the format when saving settings files
1366 (either as a result of method calls that require to save settings or as
1367 a result of an explicit call to <link to="#saveSettings()"/>).
1368
1369 <see>settingsFileVersion</see>
1370 </desc>
1371 </attribute>
1372
1373 <attribute name="host" type="IHost" readonly="yes">
1374 <desc>Associated host object.</desc>
1375 </attribute>
1376
1377 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
1378 <desc>Associated system information object.</desc>
1379 </attribute>
1380
1381 <attribute name="machines2" type="IMachine" readonly="yes" safearray="yes">
1382 <desc>
1383 Array of machine objects registered within this VirtualBox instance.
1384 </desc>
1385 </attribute>
1386
1387 <attribute name="hardDisks2" type="IHardDisk2" readonly="yes" safearray="yes">
1388 <desc>
1389 Array of hard disk objects known to this VirtualBox installation.
1390
1391 This array contains only base (root) hard disks. All differencing
1392 hard disks of the given base hard disk can be enumerated using
1393 <link to="IHardDisk2::children"/>.
1394 </desc>
1395 </attribute>
1396
1397 <attribute name="DVDImages" type="IDVDImage2" readonly="yes" safearray="yes">
1398 <desc>
1399 Array of CD/DVD image objects registered with this VirtualBox instance.
1400 </desc>
1401 </attribute>
1402
1403 <attribute name="floppyImages" type="IFloppyImage2" readonly="yes" safearray="yes">
1404 <desc>
1405 Array of floppy image objects registered with this VirtualBox instance.
1406 </desc>
1407 </attribute>
1408
1409 <attribute name="progressOperations" type="IProgressCollection" readonly="yes"/>
1410
1411 <attribute name="guestOSTypes" type="IGuestOSTypeCollection" readonly="yes"/>
1412
1413 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
1414 <desc>
1415 Collection of global shared folders. Global shared folders are
1416 available to all virtual machines.
1417
1418 New shared folders are added to the collection using
1419 <link to="#createSharedFolder"/>. Existing shared folders can be
1420 removed using <link to="#removeSharedFolder"/>.
1421
1422 <note>
1423 In the current version of the product, global shared folders are not
1424 implemented and therefore this collection is always empty.
1425 </note>
1426 </desc>
1427 </attribute>
1428
1429 <attribute name="performanceCollector" type="IPerformanceCollector" readonly="yes">
1430 <desc>
1431 Associated performance collector object.
1432 </desc>
1433 </attribute>
1434
1435 <method name="createMachine">
1436 <desc>
1437 Creates a new virtual machine.
1438
1439 The new machine is created unregistered, with the initial configuration
1440 set according to the specified guest OS type. A typical sequence of
1441 actions to create a new virtual machine is as follows:
1442
1443 <ol>
1444 <li>
1445 Call this method to have a new machine created. The returned machine
1446 object will be "mutable" allowing to change any machine property.
1447 </li>
1448
1449 <li>
1450 Configure the machine using the appropriate attributes and methods.
1451 </li>
1452
1453 <li>
1454 Call <link to="IMachine::saveSettings()" /> to write the settings
1455 to the machine's XML settings file. The configuration of the newly
1456 created machine will not be saved to disk until this method is
1457 called.
1458 </li>
1459
1460 <li>
1461 Call <link to="#registerMachine()" /> to add the machine to the list
1462 of machines known to VirtualBox.
1463 </li>
1464 </ol>
1465
1466 You should specify valid name for the newly created machine when calling
1467 this method. See the <link to="IMachine::name"/> attribute description
1468 for more details about the machine name.
1469
1470 The specified guest OS type identifier must match an ID of one of known
1471 guest OS types listed in the <link to="IVirtualBox::guestOSTypes"/>
1472 array.
1473
1474 Every machine has a <i>settings file</i> that is used to store
1475 the machine configuration. This file is stored in a directory called the
1476 <i>machine settings subfolder</i>. Both the settings subfolder and file
1477 will have a name that corresponds to the name of the virtual machine.
1478 You can specify where to create the machine setting subfolder using the
1479 @a baseFolder argument. The base folder can be absolute (full path) or
1480 relative to the <link to="IVirtualBox::homeFolder">VirtualBox home
1481 directory</link>.
1482
1483 If @a baseFolder is a null or empty string (which is recommended), the
1484 <link to="ISystemProperties::defaultMachineFolder">default machine
1485 settings folder</link> will be used as a base folder for the created
1486 machine. Otherwise the given base folder will be used. In either case,
1487 the full path to the resulting settings file has the following
1488 structure:
1489 <pre>
1490 &lt;base_folder&gt;/&lt;machine_name&gt;/&lt;machine_name&gt;.xml
1491 </pre>
1492
1493 Note that if the resulting settings file already exists, this method
1494 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1495
1496 Optionally, you may specify an UUID of to assign to the created machine.
1497 However, this is not recommended and you should normally pass an empty
1498 (null) UUID to this method so that a new UUID will be automatically
1499 generated for every created machine.
1500
1501 <note>
1502 There is no way to change the name of the settings file or
1503 subfolder of the created machine directly.
1504 </note>
1505
1506 <result name="VBOX_E_OBJECT_NOT_FOUND">
1507 @a osTypeId is invalid.
1508 </result>
1509 <result name="VBOX_E_FILE_ERROR">
1510 Resulting settings file name is invalid or the settings file already
1511 exists or could not be created due to an I/O error.
1512 </result>
1513 <result name="E_INVALIDARG">
1514 @a name is empty or null.
1515 </result>
1516 </desc>
1517
1518 <param name="name" type="wstring" dir="in">
1519 <desc>Machine name.</desc>
1520 </param>
1521 <param name="osTypeId" type="wstring" dir="in">
1522 <desc>Guest OS Type ID.</desc>
1523 </param>
1524 <param name="baseFolder" type="wstring" dir="in">
1525 <desc>Base machine folder (optional).</desc>
1526 </param>
1527 <param name="id" type="uuid" dir="in">
1528 <desc>Machine UUID (optional).</desc>
1529 </param>
1530 <param name="machine" type="IMachine" dir="return">
1531 <desc>Created machine object.</desc>
1532 </param>
1533 </method>
1534
1535 <method name="createLegacyMachine">
1536 <desc>
1537 Creates a new virtual machine in "legacy" mode, using the specified
1538 settings file to store machine settings.
1539
1540 As opposed to machines created by <link to="#createMachine()"/>,
1541 the settings file of the machine created in "legacy" mode is not
1542 automatically renamed when the machine name is changed -- it will always
1543 remain the same as specified in this method call.
1544
1545 The specified settings file name can be absolute (full path) or relative
1546 to the <link to="IVirtualBox::homeFolder">VirtualBox home
1547 directory</link>. If the file name doesn't contain an extension, the
1548 default extension (.xml) will be appended.
1549
1550 Note that the configuration of the newly created machine is not
1551 saved to disk (and therefore no settings file is created)
1552 until <link to="IMachine::saveSettings()"/> is called. If the
1553 specified settings file already exists, this method
1554 will fail with <link to="VBOX_E_FILE_ERROR"/>..
1555
1556 See <link to="#createMachine()"/> for more information.
1557
1558 @deprecated This method may be removed later. Use <link
1559 to="IVirtualBox::createMachine()"/> instead.
1560
1561 <note>
1562 There is no way to change the name of the settings file
1563 of the machine created in "legacy" mode.
1564 </note>
1565
1566 <result name="VBOX_E_OBJECT_NOT_FOUND">
1567 @a osTypeId is invalid.
1568 </result>
1569 <result name="VBOX_E_FILE_ERROR">
1570 @a settingsFile is invalid or the settings file already exists or
1571 could not be created due to an I/O error.
1572 </result>
1573 <result name="E_INVALIDARG">
1574 @a name or @a settingsFile is empty or null.
1575 </result>
1576 </desc>
1577
1578 <param name="name" type="wstring" dir="in">
1579 <desc>Machine name.</desc>
1580 </param>
1581 <param name="osTypeId" type="wstring" dir="in">
1582 <desc>Machine OS Type ID.</desc>
1583 </param>
1584 <param name="settingsFile" type="wstring" dir="in">
1585 <desc>Name of the machine settings file.</desc>
1586 </param>
1587 <param name="id" type="uuid" dir="in">
1588 <desc>Machine UUID (optional).</desc>
1589 </param>
1590 <param name="machine" type="IMachine" dir="return">
1591 <desc>Created machine object.</desc>
1592 </param>
1593 </method>
1594
1595 <method name="openMachine">
1596 <desc>
1597 Opens a virtual machine from the existing settings file.
1598 The opened machine remains unregistered until you call
1599 <link to="#registerMachine()"/>.
1600
1601 The specified settings file name can be absolute
1602 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1603 VirtualBox home directory</link>. This file must exist
1604 and must be a valid machine settings file whose contents
1605 will be used to construct the machine object.
1606
1607 @deprecated Will be removed soon.
1608 <result name="VBOX_E_FILE_ERROR">
1609 Settings file name invalid, not found or sharing violation.
1610 </result>
1611 </desc>
1612 <param name="settingsFile" type="wstring" dir="in">
1613 <desc>
1614 Name of the machine settings file.
1615 </desc>
1616 </param>
1617 <param name="machine" type="IMachine" dir="return">
1618 <desc>Opened machine object.</desc>
1619 </param>
1620 <note>
1621 <link to="IMachine::settingsModified"/> will return
1622 false for the created machine, until any of machine settings
1623 are changed.
1624 </note>
1625 </method>
1626
1627 <method name="registerMachine">
1628 <desc>
1629
1630 Registers the machine previously created using
1631 <link to="#createMachine()"/> or opened using
1632 <link to="#openMachine()"/> within this VirtualBox installation. After
1633 successful method invocation, the
1634 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1635 to all registered callbacks.
1636
1637 <note>
1638 This method implicitly calls <link to="IMachine::saveSettings"/>
1639 to save all current machine settings before registering it.
1640 </note>
1641
1642 <result name="VBOX_E_OBJECT_NOT_FOUND">
1643 No matching virtual machine found.
1644 </result>
1645 <result name="VBOX_E_INVALID_OBJECT_STATE">
1646 Virtual machine was not created within this VirtualBox instance.
1647 </result>
1648
1649 </desc>
1650 <param name="machine" type="IMachine" dir="in"/>
1651 </method>
1652
1653 <method name="getMachine">
1654 <desc>
1655 Attempts to find a virtual machine given its UUID.
1656 To look up a machine by name, use <link to="IVirtualBox::findMachine" />
1657 instead.
1658
1659 <result name="VBOX_E_OBJECT_NOT_FOUND">
1660 Could not find registered machine matching @a id.
1661 </result>
1662
1663 </desc>
1664 <param name="id" type="uuid" dir="in"/>
1665 <param name="machine" type="IMachine" dir="return"/>
1666 </method>
1667
1668 <method name="findMachine">
1669 <desc>
1670 Attempts to find a virtual machine given its name.
1671 To look up a machine by UUID, use <link to="IVirtualBox::getMachine" />
1672 instead.
1673
1674 <result name="VBOX_E_OBJECT_NOT_FOUND">
1675 Could not find registered machine matching @a name.
1676 </result>
1677
1678 </desc>
1679 <param name="name" type="wstring" dir="in"/>
1680 <param name="machine" type="IMachine" dir="return"/>
1681 </method>
1682
1683 <method name="unregisterMachine">
1684 <desc>
1685
1686 Unregisters the machine previously registered using
1687 <link to="#registerMachine"/>. After successful method invocation, the
1688 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1689 to all registered callbacks.
1690
1691 <note>
1692 The specified machine must not be in the Saved state, have an open
1693 (or a spawning) direct session associated with it, have snapshots or
1694 have hard disks attached.
1695 </note>
1696
1697 <note>
1698 This method implicitly calls <link to="IMachine::saveSettings"/> to
1699 save all current machine settings before unregistering it.
1700 </note>
1701
1702 <note>
1703 If the given machine is inaccessible (see
1704 <link to="IMachine::accessible"/>), it will be unregistered and
1705 fully uninitialized right afterwards. As a result, the returned
1706 machine object will be unusable and an attempt to call
1707 <b>any</b> method will return the "Object not ready" error.
1708 </note>
1709
1710 <result name="VBOX_E_OBJECT_NOT_FOUND">
1711 Could not find registered machine matching @a id.
1712 </result>
1713 <result name="VBOX_E_INVALID_VM_STATE">
1714 Machine is in Saved state.
1715 </result>
1716 <result name="VBOX_E_INVALID_OBJECT_STATE">
1717 Machine has snapshot or open session or hard disk attached.
1718 </result>
1719
1720 </desc>
1721 <param name="id" type="uuid" dir="in">
1722 <desc>UUID of the machine to unregister.</desc>
1723 </param>
1724 <param name="machine" type="IMachine" dir="return">
1725 <desc>Unregistered machine object.</desc>
1726 </param>
1727 </method>
1728
1729 <method name="openAppliance">
1730 <desc>
1731 Attempts to open the given appliance, which must be in Open Virtual Machine Format (OVF).
1732
1733 As prescribed by the OVF standard, VirtualBox supports OVF in two formats:
1734
1735 <ol>
1736 <li>If the OVF is distributed as a set of files, then @a file must be a fully qualified
1737 path name to an existing OVF descriptor file with an <tt>.ovf</tt> file extension. If
1738 this descriptor file references other files, as OVF appliances distributed as a set of
1739 files most likely do, those files must be in the same directory as the descriptor file.</li>
1740
1741 <li>If the OVF is distributed as a single file, it must be in TAR format and have the
1742 <tt>.ova</tt> file extension. This TAR file must then contain at least the OVF descriptor
1743 files and optionally other files.</li>
1744 </ol>
1745
1746 In both cases, VirtualBox will open the OVF descriptor file, parse its contents and create a
1747 new instance of IAppliance representing the OVF file.
1748
1749 This method succeeds if the OVF is syntactically valid and, by itself, without errors. The
1750 returned IAppliance object can then be used to retrieve information about the appliance and
1751 import it into VirtualBox. The mere fact that this method returns successfully does not mean
1752 that VirtualBox supports all features requested by the appliance; see the documentation for
1753 <link to="IAppliance" /> for details.
1754
1755 </desc>
1756 <param name="file" type="wstring" dir="in">
1757 <desc>
1758 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
1759 on whether the appliance is distributed as a set of files or as a single file, respectively).
1760 </desc>
1761 </param>
1762 <param name="machine" type="IAppliance" dir="return">
1763 <desc>New appliance.</desc>
1764 </param>
1765 </method>
1766
1767 <method name="createHardDisk2">
1768 <desc>
1769 Creates a new base hard disk object that will use the given storage
1770 format and location for hard disk data.
1771
1772 Note that the actual storage unit is not created by this method. In
1773 order to do it, and before you are able to attach the created hard disk
1774 to virtual machines, you must call one of the following methods to
1775 allocate a format-specific storage unit at the specified location:
1776 <ul>
1777 <li><link to="IHardDisk2::createDynamicStorage()"/></li>
1778 <li><link to="IHardDisk2::createFixedStorage()"/></li>
1779 <li><link to="IHardDisk2::createDiffStorage()"/></li>
1780 </ul>
1781
1782 Some hard disk attributes, such as <link to="IHardDisk2::id"/>, may
1783 remain uninitialized until the hard disk storage unit is successfully
1784 created by one of the above methods.
1785
1786 After the storage unit is successfully created, the hard disk gets
1787 remembered by this VirtualBox installation and will be accessible
1788 through <link to="#getHardDisk2()"/> and <link to="#findHardDisk2()"/>
1789 methods. Remembered root (base) hard disks are also returned as part of
1790 the <link to="#hardDisks2"/> array. See IHardDisk2 for more details.
1791
1792 The list of all storage formats supported by this VirtualBox
1793 installation can be obtained using
1794 <link to="ISystemProperties::hardDiskFormats"/>. If the @a format
1795 attribute is empty or <tt>null</tt> then the default storage format
1796 specified by <link to="ISystemProperties::defaultHardDiskFormat"/> will
1797 be used for creating a storage unit of the hard disk.
1798
1799 Note that the format of the location string is storage format specific.
1800 See <link to="IMedium::location"/>, IHardDisk2 and
1801 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
1802
1803 <result name="VBOX_E_OBJECT_NOT_FOUND">
1804 @a format identifier is invalid. See
1805 <link to="ISystemProperties::hardDiskFormats"/>.
1806 </result>
1807 <result name="VBOX_E_FILE_ERROR">
1808 @a location is a not valid file name (for file-based formats only).
1809 </result>
1810 <result name="E_INVALIDARG">
1811 @a format is a null or empty string.
1812 </result>
1813 </desc>
1814 <param name="format" type="wstring" dir="in">
1815 <desc>
1816 Identifier of the storage format to use for the new hard disk.
1817 </desc>
1818 </param>
1819 <param name="location" type="wstring" dir="in">
1820 <desc>
1821 Location of the storage unit for the new hard disk.
1822 </desc>
1823 </param>
1824 <param name="hardDisk" type="IHardDisk2" dir="return">
1825 <desc>Created hard disk object.</desc>
1826 </param>
1827 </method>
1828
1829 <method name="openHardDisk2">
1830 <desc>
1831 Opens a hard disk from an existing location.
1832
1833 After the hard disk is successfully opened by this method, it gets
1834 remembered by (known to) this VirtualBox installation and will be
1835 accessible through <link to="#getHardDisk2()"/> and
1836 <link to="#findHardDisk2()"/> methods. Remembered root (base) hard disks
1837 are also returned as part of the <link to="#hardDisks2"/> array and can
1838 be attached to virtual machines. See IHardDisk2 for more details.
1839
1840 If a differencing hard disk is to be opened by this method, the
1841 operation will succeed only if its parent hard disk and all ancestors,
1842 if any, are already known to this VirtualBox installation (for example,
1843 were opened by this method before).
1844
1845 This method tries to guess the storage format of the specified hard disk
1846 by reading hard disk data at the specified location.
1847
1848 Note that the format of the location string is storage format specific.
1849 See <link to="IMedium::location"/>, IHardDisk2 and
1850 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
1851
1852
1853 <result name="VBOX_E_FILE_ERROR">
1854 Invalid hard disk storage file location.
1855 </result>
1856 <result name="VBOX_E_IPRT_ERROR">
1857 Could not get hard disk storage format.
1858 </result>
1859 <result name="E_INVALIDARG">
1860 Invalid hard disk storage format.
1861 </result>
1862
1863 </desc>
1864 <param name="location" type="wstring" dir="in">
1865 <desc>
1866 Location of the storage unit that contains hard disk data in one of
1867 the supported storage formats.
1868 </desc>
1869 </param>
1870 <param name="hardDisk" type="IHardDisk2" dir="return">
1871 <desc>Opened hard disk object.</desc>
1872 </param>
1873 </method>
1874
1875 <method name="getHardDisk2" const="yes">
1876 <desc>
1877 Returns a hard disk with the given UUID.
1878
1879 The hard disk with the given UUID must be known to this VirtualBox
1880 installation, i.e. it must be previously created by
1881 <link to="#createHardDisk2()"/> or opened by <link
1882 to="#openHardDisk2()"/>, or attached to some known virtual machine.
1883
1884 <result name="VBOX_E_OBJECT_NOT_FOUND">
1885 No hard disk object matching @a id found.
1886 </result>
1887
1888 </desc>
1889 <param name="id" type="uuid" dir="in">
1890 <desc>UUID of the hard disk to look for.</desc>
1891 </param>
1892 <param name="hardDisk" type="IHardDisk2" dir="return">
1893 <desc>Found hard disk object.</desc>
1894 </param>
1895 </method>
1896
1897 <method name="findHardDisk2">
1898 <desc>
1899 Returns a hard disk that uses the given location to store hard
1900 disk data.
1901
1902 The given hard disk must be known to this VirtualBox installation, i.e.
1903 it must be previously created by
1904 <link to="#createHardDisk2()"/> or opened by <link
1905 to="#openHardDisk2()"/>, or attached to some known virtual machine.
1906
1907 The search is done by comparing the value of the @a location argument to
1908 the <link to="IHardDisk2::location"/> attribute of each known hard
1909 disk.
1910
1911 For locations represented by file names in the host's file system, the
1912 requested location can be a path relative to the
1913 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
1914 only a file name without any path is given, the
1915 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
1916 folder</link> will be prepended to the file name before searching. Note
1917 that on case sensitive file systems, a case sensitive comparison is
1918 performed, otherwise the case of symbols in the file path is ignored.
1919
1920 <result name="VBOX_E_OBJECT_NOT_FOUND">
1921 No hard disk object matching @a location found.
1922 </result>
1923
1924 </desc>
1925 <param name="location" type="wstring" dir="in">
1926 <desc>Location string to search for.</desc>
1927 </param>
1928 <param name="hardDisk" type="IHardDisk2" dir="return">
1929 <desc>Found hard disk object.</desc>
1930 </param>
1931 </method>
1932
1933 <method name="openDVDImage">
1934 <desc>
1935 Opens a CD/DVD image contained in the specified file of the supported
1936 format and assigns it the given UUID.
1937
1938 After the image is successfully opened by this method, it gets
1939 remembered by (known to) this VirtualBox installation and will be
1940 accessible through <link to="#getDVDImage()"/> and
1941 <link to="#findDVDImage()"/> methods. Remembered images are also
1942 returned as part of the <link to="#DVDImages"/> array and can be mounted
1943 to virtual machines. See IMedium for more details.
1944
1945 See <link to="IMedium::location"/> to get more details about the format
1946 of the location string.
1947
1948 <note>
1949 Currently only ISO 9960 CD/DVD images are supported by VirtualBox.
1950 </note>
1951
1952 <result name="VBOX_E_INVALID_OBJECT_STATE">
1953 CD/DVD image already exists in the media registry.
1954 </result>
1955
1956 </desc>
1957 <param name="location" type="wstring" dir="in">
1958 <desc>
1959 Full path to the file that contains a valid CD/DVD image.
1960 </desc>
1961 </param>
1962 <param name="id" type="uuid" dir="in">
1963 <desc>
1964 UUID to assign to the given image within this VirtualBox installation.
1965 If an empty (null) UUID is specified, the system will randomly
1966 generate a new UUID.
1967 </desc>
1968 </param>
1969 <param name="image" type="IDVDImage2" dir="return">
1970 <desc>Opened CD/DVD image object.</desc>
1971 </param>
1972 </method>
1973
1974 <method name="getDVDImage">
1975 <desc>
1976 Returns a CD/DVD image with the given UUID.
1977
1978 The image with the given UUID must be known to this VirtualBox
1979 installation, i.e. it must be previously opened by <link
1980 to="#openDVDImage()"/>, or mounted to some known virtual machine.
1981
1982 <result name="VBOX_E_OBJECT_NOT_FOUND">
1983 No matching DVD image found in the media registry.
1984 </result>
1985
1986 </desc>
1987 <param name="id" type="uuid" dir="in">
1988 <desc>UUID of the image to look for.</desc>
1989 </param>
1990 <param name="image" type="IDVDImage2" dir="return">
1991 <desc>Found CD/DVD image object.</desc>
1992 </param>
1993 </method>
1994
1995 <method name="findDVDImage">
1996 <desc>
1997 Returns a CD/DVD image with the given image location.
1998
1999 The image with the given UUID must be known to this VirtualBox
2000 installation, i.e. it must be previously opened by <link
2001 to="#openDVDImage()"/>, or mounted to some known virtual machine.
2002
2003 The search is done by comparing the value of the @a location argument to
2004 the <link to="IMedium::location"/> attribute of each known CD/DVD image.
2005
2006 The requested location can be a path relative to the
2007 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2008 only a file name without any path is given, the
2009 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2010 folder</link> will be prepended to the file name before searching. Note
2011 that on case sensitive file systems, a case sensitive comparison is
2012 performed, otherwise the case in the file path is ignored.
2013
2014 <result name="VBOX_E_FILE_ERROR">
2015 Invalid image file location.
2016 </result>
2017 <result name="VBOX_E_OBJECT_NOT_FOUND">
2018 No matching DVD image found in the media registry.
2019 </result>
2020
2021 </desc>
2022 <param name="location" type="wstring" dir="in">
2023 <desc>CD/DVD image file path to look for.</desc>
2024 </param>
2025 <param name="image" type="IDVDImage2" dir="return">
2026 <desc>Found CD/DVD image object.</desc>
2027 </param>
2028 </method>
2029
2030 <method name="openFloppyImage">
2031 <desc>
2032 Opens a floppy image contained in the specified file of the supported
2033 format and assigns it the given UUID.
2034
2035 After the image is successfully opened by this method, it gets
2036 remembered by (known to) this VirtualBox installation and will be
2037 accessible through <link to="#getFloppyImage()"/> and
2038 <link to="#findFloppyImage()"/> methods. Remembered images are also
2039 returned as part of the <link to="#floppyImages"/> array and can be
2040 mounted to virtual machines. See IMedium for more details.
2041
2042 See <link to="IMedium::location"/> to get more details about the format
2043 of the location string.
2044
2045 <result name="VBOX_E_FILE_ERROR">
2046 Floppy image specified by @a location not accessible.
2047 </result>
2048 <result name="VBOX_E_INVALID_OBJECT_STATE">
2049 Floppy image already exists in the media registry.
2050 </result>
2051
2052 <note>
2053 Currently, only raw floppy images are supported by VirtualBox.
2054 </note>
2055 </desc>
2056 <param name="location" type="wstring" dir="in">
2057 <desc>
2058 Full path to the file that contains a valid floppy image.
2059 </desc>
2060 </param>
2061 <param name="id" type="uuid" dir="in">
2062 <desc>
2063 UUID to assign to the given image file within this VirtualBox
2064 installation. If an empty (null) UUID is specified, the system will
2065 randomly generate a new UUID.
2066 </desc>
2067 </param>
2068 <param name="image" type="IFloppyImage2" dir="return">
2069 <desc>Opened floppy image object.</desc>
2070 </param>
2071 </method>
2072
2073 <method name="getFloppyImage">
2074 <desc>
2075 Returns a floppy image with the given UUID.
2076
2077 The image with the given UUID must be known to this VirtualBox
2078 installation, i.e. it must be previously opened by <link
2079 to="#openFloppyImage()"/>, or mounted to some known virtual machine.
2080
2081 <result name="VBOX_E_OBJECT_NOT_FOUND">
2082 No matching floppy image found in the media registry.
2083 </result>
2084
2085 </desc>
2086 <param name="id" type="uuid" dir="in">
2087 <desc>UUID of the image to look for.</desc>
2088 </param>
2089 <param name="image" type="IFloppyImage2" dir="return">
2090 <desc>Found floppy image object.</desc>
2091 </param>
2092 </method>
2093
2094 <method name="findFloppyImage">
2095 <desc>
2096 Returns a floppy image with the given image location.
2097
2098 The image with the given UUID must be known to this VirtualBox
2099 installation, i.e. it must be previously opened by <link
2100 to="#openFloppyImage()"/>, or mounted to some known virtual machine.
2101
2102 The search is done by comparing the value of the @a location argument to
2103 the <link to="IMedium::location"/> attribute of each known floppy image.
2104
2105 The requested location can be a path relative to the
2106 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2107 only a file name without any path is given, the
2108 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2109 folder</link> will be prepended to the file name before searching. Note
2110 that on case sensitive file systems, a case sensitive comparison is
2111 performed, otherwise the case of symbols in the file path is ignored.
2112
2113 <result name="VBOX_E_FILE_ERROR">
2114 Invalid image file location.
2115 </result>
2116 <result name="VBOX_E_OBJECT_NOT_FOUND">
2117 No matching floppy image found in the media registry.
2118 </result>
2119
2120 </desc>
2121 <param name="location" type="wstring" dir="in">
2122 <desc>Floppy image file path to look for.</desc>
2123 </param>
2124 <param name="image" type="IFloppyImage2" dir="return">
2125 <desc>Found floppy image object.</desc>
2126 </param>
2127 </method>
2128
2129 <method name="getGuestOSType">
2130 <desc>
2131 Returns an object describing the specified guest OS type.
2132
2133 The requested guest OS type is specified using a string which is a
2134 mnemonic identifier of the guest operating system, such as
2135 <tt>"win31"</tt> or <tt>"ubuntu"</tt>. The guest OS type ID of a
2136 particular virtual machine can be read or set using the
2137 <link to="IMachine::OSTypeId"/> attribute.
2138
2139 The <link to="IVirtualBox::guestOSTypes"/> collection contains all
2140 available guest OS type objects. Each object has an
2141 <link to="IGuestOSType::id"/> attribute which contains an identifier of
2142 the guest OS this object describes.
2143
2144 <result name="E_INVALIDARG">
2145 @a id is not a valid Guest OS type.
2146 </result>
2147
2148 </desc>
2149 <param name="id" type="wstring" dir="in">
2150 <desc>Guest OS type ID string.</desc>
2151 </param>
2152 <param name="type" type="IGuestOSType" dir="return">
2153 <desc>Guest OS type object.</desc>
2154 </param>
2155 </method>
2156
2157 <method name="createSharedFolder">
2158 <desc>
2159 Creates a new global shared folder by associating the given logical
2160 name with the given host path, adds it to the collection of shared
2161 folders and starts sharing it. Refer to the description of
2162 <link to="ISharedFolder"/> to read more about logical names.
2163 <note>
2164 In the current implementation, this operation is not
2165 implemented.
2166 </note>
2167 </desc>
2168 <param name="name" type="wstring" dir="in">
2169 <desc>Unique logical name of the shared folder.</desc>
2170 </param>
2171 <param name="hostPath" type="wstring" dir="in">
2172 <desc>Full path to the shared folder in the host file system.</desc>
2173 </param>
2174 <param name="writable" type="boolean" dir="in">
2175 <desc>Whether the share is writable or readonly</desc>
2176 </param>
2177 </method>
2178
2179 <method name="removeSharedFolder">
2180 <desc>
2181 Removes the global shared folder with the given name previously
2182 created by <link to="#createSharedFolder"/> from the collection of
2183 shared folders and stops sharing it.
2184 <note>
2185 In the current implementation, this operation is not
2186 implemented.
2187 </note>
2188 </desc>
2189 <param name="name" type="wstring" dir="in">
2190 <desc>Logical name of the shared folder to remove.</desc>
2191 </param>
2192 </method>
2193
2194 <method name="getNextExtraDataKey">
2195 <desc>
2196 Returns the global extra data key name following the supplied key.
2197
2198 An error is returned if the supplied @a key does not exist. @c NULL is
2199 returned in @a nextKey if the supplied key is the last key. When
2200 supplying @c NULL for the @a key, the first key item is returned in @a
2201 nextKey (if there is any). @a nextValue is an optional parameter and
2202 if supplied, the next key's value is returned in it.
2203
2204 <result name="VBOX_E_OBJECT_NOT_FOUND">
2205 Extra data @a key not found.
2206 </result>
2207
2208 </desc>
2209 <param name="key" type="wstring" dir="in">
2210 <desc>Name of the data key to follow.</desc>
2211 </param>
2212 <param name="nextKey" type="wstring" dir="out">
2213 <desc>Name of the next data key.</desc>
2214 </param>
2215 <param name="nextValue" type="wstring" dir="out">
2216 <desc>Value of the next data key.</desc>
2217 </param>
2218 </method>
2219
2220 <method name="getExtraData">
2221 <desc>
2222 Returns associated global extra data.
2223
2224 If the requested data @a key does not exist, this function will
2225 succeed and return @c NULL in the @a value argument.
2226
2227 <result name="VBOX_E_FILE_ERROR">
2228 Settings file not accessible.
2229 </result>
2230 <result name="VBOX_E_XML_ERROR">
2231 Could not parse the settings file.
2232 </result>
2233
2234 </desc>
2235 <param name="key" type="wstring" dir="in">
2236 <desc>Name of the data key to get.</desc>
2237 </param>
2238 <param name="value" type="wstring" dir="return">
2239 <desc>Value of the requested data key.</desc>
2240 </param>
2241 </method>
2242
2243 <method name="setExtraData">
2244 <desc>
2245 Sets associated global extra data.
2246
2247 If you pass @c NULL as a key @a value, the given @a key will be
2248 deleted.
2249
2250 <note>
2251 Before performing the actual data change, this method will ask all
2252 registered callbacks using the
2253 <link to="IVirtualBoxCallback::onExtraDataCanChange()"/>
2254 notification for a permission. If one of the callbacks refuses the
2255 new value, the change will not be performed.
2256 </note>
2257 <note>
2258 On success, the
2259 <link to="IVirtualBoxCallback::onExtraDataChange()"/> notification
2260 is called to inform all registered callbacks about a successful data
2261 change.
2262 </note>
2263
2264 <result name="VBOX_E_FILE_ERROR">
2265 Settings file not accessible.
2266 </result>
2267 <result name="VBOX_E_XML_ERROR">
2268 Could not parse the settings file.
2269 </result>
2270 <result name="E_ACCESSDENIED">
2271 Modification request refused.
2272 </result>
2273
2274 </desc>
2275 <param name="key" type="wstring" dir="in">
2276 <desc>Name of the data key to set.</desc>
2277 </param>
2278 <param name="value" type="wstring" dir="in">
2279 <desc>Value to assign to the key.</desc>
2280 </param>
2281 </method>
2282
2283 <method name="openSession">
2284 <desc>
2285 Opens a new direct session with the given virtual machine.
2286
2287 A direct session acts as a local lock on the given VM.
2288 There can be only one direct session open at a time for every
2289 virtual machine, protecting the VM from being manipulated by
2290 conflicting actions from different processes. Only after a
2291 direct session has been opened, one can change all VM settings
2292 and execute the VM in the process space of the session object.
2293
2294 Sessions therefore can be compared to mutex semaphores that
2295 lock a given VM for modification and execution.
2296 See <link to="ISession">ISession</link> for details.
2297
2298 <note>Unless you are writing a new VM frontend, you will not
2299 want to execute a VM in the current process. To spawn a new
2300 process that executes a VM, use
2301 <link to="IVirtualBox::openRemoteSession" />
2302 instead.</note>
2303
2304 Upon successful return, the session object can be used to
2305 get access to the machine and to the VM console.
2306
2307 In VirtualBox terminology, the machine becomes "mutable" after
2308 a session has been opened. Note that the "mutable" machine
2309 object, on which you may invoke IMachine methods to change its
2310 settings, will be a different object from the immutable IMachine
2311 objects returned by various IVirtualBox methods. To obtain a
2312 mutable IMachine object (upon which you can invoke settings methods),
2313 use the <link to="ISession::machine" /> attribute.
2314
2315 One must always call <link to="ISession::close" /> to release the
2316 lock on the machine, or the machine's state will eventually be
2317 set to "Aborted".
2318
2319 In other words, to change settings on a machine, the following
2320 sequence is typically performed:
2321
2322 <ol>
2323 <li>Call this method (openSession) to have a machine locked for
2324 the current session.</li>
2325
2326 <li>Obtain a mutable IMachine object from <link to="ISession::machine" />.</li>
2327
2328 <li>Change the settings of the machine.</li>
2329
2330 <li>Call <link to="IMachine::saveSettings" />.</li>
2331
2332 <li>Close the session by calling <link to="ISession::close()"/>.</li>
2333 </ol>
2334
2335 <result name="E_UNEXPECTED">
2336 Virtual machine not registered.
2337 </result>
2338 <result name="E_ACCESSDENIED">
2339 Process not started by OpenRemoteSession.
2340 </result>
2341 <result name="VBOX_E_OBJECT_NOT_FOUND">
2342 No matching virtual machine found.
2343 </result>
2344 <result name="VBOX_E_INVALID_OBJECT_STATE">
2345 Session already open or being opened.
2346 </result>
2347 <result name="VBOX_E_VM_ERROR">
2348 Failed to assign machine to session.
2349 </result>
2350
2351 </desc>
2352 <param name="session" type="ISession" dir="in">
2353 <desc>
2354 Session object that will represent the opened session after
2355 successful method invocation. This object must not represent
2356 the already open session.
2357 <note>
2358 This session will be automatically closed if the
2359 VirtualBox server is terminated for some reason.
2360 </note>
2361 </desc>
2362 </param>
2363 <param name="machineId" type="uuid" dir="in">
2364 <desc>ID of the virtual machine to open a session with.</desc>
2365 </param>
2366 </method>
2367
2368 <method name="openRemoteSession">
2369 <desc>
2370 Spawns a new process that executes a virtual machine (called a
2371 "remote session").
2372
2373 Opening a remote session causes the VirtualBox server to start a new
2374 process that opens a direct session with the given VM. As a result, the
2375 VM is locked by that direct session in the new process, preventing
2376 conflicting changes from other processes. Since sessions act as locks
2377 that prevent conflicting changes, one cannot open a remote session
2378 for a VM that already has another open session (direct or remote), or
2379 is currently in the process of opening one (see <link
2380 to="IMachine::sessionState"/>).
2381
2382 While the remote session still provides some level of control over the
2383 VM execution to the caller (using the <link to="IConsole" /> interface),
2384 not all VM settings are available for modification within the remote
2385 session context.
2386
2387 This operation can take some time (a new VM is started in a new process,
2388 for which memory and other resources need to be set up). Because of this,
2389 an <link to="IProgress" /> is returned to allow the caller to wait for this
2390 asynchronous operation to be completed. Until then, the remote session
2391 object remains in the closed state, and accessing the machine or its
2392 console through it is invalid. It is recommended to use
2393 <link to="IProgress::waitForCompletion" /> or similar calls to wait for
2394 completion.
2395
2396 As with all <link to="ISession" /> objects, it is recommended to call
2397 <link to="ISession::close" /> on the local session object once openRemoteSession()
2398 has been called. However, the session's state (see <link to="ISession::state" />)
2399 will not return to "Closed" until the remote session has also closed (i.e.
2400 until the VM is no longer running). In that case, however, the state of
2401 the session will automatically change back to "Closed".
2402
2403 Currently supported session types (values of the @a type
2404 argument) are:
2405 <ul>
2406 <li><tt>gui</tt>: VirtualBox Qt GUI session</li>
2407 <li><tt>vrdp</tt>: VirtualBox VRDP Server session</li>
2408 </ul>
2409
2410 The @a environment argument is a string containing definitions of
2411 environment variables in the following format:
2412 @code
2413 NAME[=VALUE]\n
2414 NAME[=VALUE]\n
2415 ...
2416 @endcode
2417 where <tt>\\n</tt> is the new line character. These environment
2418 variables will be appended to the environment of the VirtualBox server
2419 process. If an environment variable exists both in the server process
2420 and in this list, the value from this list takes precedence over the
2421 server's variable. If the value of the environment variable is
2422 omitted, this variable will be removed from the resulting environment.
2423 If the environment string is @c null, the server environment is
2424 inherited by the started process as is.
2425
2426 <see>openExistingSession</see>
2427
2428 <result name="E_UNEXPECTED">
2429 Virtual machine not registered.
2430 </result>
2431 <result name="E_INVALIDARG">
2432 Invalid session type @a type.
2433 </result>
2434 <result name="VBOX_E_OBJECT_NOT_FOUND">
2435 No machine matching @a machineId found.
2436 </result>
2437 <result name="VBOX_E_INVALID_OBJECT_STATE">
2438 Session already open or being opened.
2439 </result>
2440 <result name="VBOX_E_IPRT_ERROR">
2441 Launching process for machine failed.
2442 </result>
2443 <result name="VBOX_E_VM_ERROR">
2444 Failed to assign machine to session.
2445 </result>
2446
2447 </desc>
2448 <param name="session" type="ISession" dir="in">
2449 <desc>
2450 Session object that will represent the opened remote session
2451 after successful method invocation (this object must not
2452 represent an already open session).
2453 </desc>
2454 </param>
2455 <param name="machineId" type="uuid" dir="in">
2456 <desc>ID of the virtual machine to open a session with.</desc>
2457 </param>
2458 <param name="type" type="wstring" dir="in">
2459 <desc>
2460 Type of the remote session (case sensitive).
2461 </desc>
2462 </param>
2463 <param name="environment" type="wstring" dir="in">
2464 <desc>
2465 Environment to pass to the opened session (may be @c null).
2466 </desc>
2467 </param>
2468 <param name="progress" type="IProgress" dir="return">
2469 <desc>Progress object to track the operation completion.</desc>
2470 </param>
2471 </method>
2472
2473 <method name="openExistingSession">
2474 <desc>
2475 Opens a new remote session with the virtual machine for
2476 which a direct session is already open.
2477
2478 The remote session provides some level of control over the VM
2479 execution (using the IConsole interface) to the caller; however,
2480 within the remote session context, not all VM settings are available
2481 for modification.
2482
2483 As opposed to <link to="#openRemoteSession()"/>, the number of
2484 remote sessions opened this way is not limited by the API
2485
2486 <note>
2487 It is an error to open a remote session with the machine that
2488 doesn't have an open direct session.
2489 </note>
2490
2491 <result name="E_UNEXPECTED">
2492 Virtual machine not registered.
2493 </result>
2494 <result name="VBOX_E_OBJECT_NOT_FOUND">
2495 No machine matching @a machineId found.
2496 </result>
2497 <result name="VBOX_E_INVALID_OBJECT_STATE">
2498 Session already open or being opened.
2499 </result>
2500 <result name="VBOX_E_INVALID_SESSION_STATE">
2501 Direct session state not Open.
2502 </result>
2503 <result name="VBOX_E_VM_ERROR">
2504 Failed to get console object from direct session or assign
2505 machine to session.
2506 </result>
2507
2508 <see>openRemoteSession</see>
2509 </desc>
2510 <param name="session" type="ISession" dir="in">
2511 <desc>
2512 Session object that will represent the open remote session
2513 after successful method invocation. This object must not
2514 represent an already open session.
2515 <note>
2516 This session will be automatically closed when the peer
2517 (direct) session dies or gets closed.
2518 </note>
2519 </desc>
2520 </param>
2521 <param name="machineId" type="uuid" dir="in">
2522 <desc>ID of the virtual machine to open a session with.</desc>
2523 </param>
2524 </method>
2525
2526 <method name="registerCallback">
2527 <desc>
2528 Registers a new global VirtualBox callback. The methods of the given
2529 callback object will be called by VirtualBox when an appropriate
2530 event occurs.
2531
2532 <result name="E_INVALIDARG">
2533 Registering a @c NULL @a callback is pretty pointless, ain't it?
2534 <!-- See if someone is actually reading this and objects :-) -->
2535 </result>
2536
2537 </desc>
2538 <param name="callback" type="IVirtualBoxCallback" dir="in">
2539 <desc>Callback object to register.</desc>
2540 </param>
2541 </method>
2542
2543 <method name="unregisterCallback">
2544 <desc>
2545 Unregisters the previously registered global VirtualBox callback.
2546
2547 <result name="E_INVALIDARG">
2548 Specified @a callback not registered.
2549 </result>
2550
2551 </desc>
2552 <param name="callback" type="IVirtualBoxCallback" dir="in">
2553 <desc>Callback object to unregister.</desc>
2554 </param>
2555 </method>
2556
2557 <method name="waitForPropertyChange">
2558 <desc>
2559 Blocks the caller until any of the properties represented by the @a
2560 what argument changes the value or until the given timeout interval
2561 expires.
2562
2563 The @a what argument is a comma separated list of property masks that
2564 describe properties the caller is interested in. The property mask is
2565 a string in the following format:
2566
2567 <pre>
2568 [[group.]subgroup.]name
2569 </pre>
2570
2571 where @c name is the property name and @c group, @c subgroup are zero
2572 or more property group specifiers. Each element (group or name) in
2573 the property mask may be either a Latin string or an asterisk symbol
2574 (@c "*") which is used to match any string for the given element. A
2575 property mask that doesn't contain asterisk symbols represents a
2576 single fully qualified property name.
2577
2578 Groups in the fully qualified property name go from more generic (the
2579 left-most part) to more specific (the right-most part). The first
2580 element is usually a name of the object the property belongs to. The
2581 second element may be either a property name, or a child object name,
2582 or an index if the preceding element names an object which is one of
2583 many objects of the same type. This way, property names form a
2584 hierarchy of properties. Here are some examples of property names:
2585
2586 <table>
2587 <tr>
2588 <td><tt>VirtualBox.version</tt></td>
2589 <td><link to="IVirtualBox::version"/> property</td>
2590 </tr>
2591 <tr>
2592 <td><tt>Machine.&lt;UUID&gt;.name</tt></td>
2593 <td><link to="IMachine::name"/> property of the machine with the
2594 given UUID</td>
2595 </tr>
2596 </table>
2597
2598 Most property names directly correspond to the properties of objects
2599 (components) provided by the VirtualBox library and may be used to
2600 track changes to these properties. However, there may be
2601 pseudo-property names that don't correspond to any existing object's
2602 property directly, as well as there may be object properties that
2603 don't have a corresponding property name that is understood by this
2604 method, and therefore changes to such properties cannot be
2605 tracked. See individual object's property descriptions to get a
2606 fully qualified property name that can be used with this method (if
2607 any).
2608
2609 There is a special property mask @c "*" (i.e. a string consisting of a
2610 single asterisk symbol) that can be used to match all properties.
2611 Below are more examples of property masks:
2612
2613 <table>
2614 <tr>
2615 <td><tt>VirtualBox.*</tt></td>
2616 <td>Track all properties of the VirtualBox object</td>
2617 </tr>
2618 <tr>
2619 <td><tt>Machine.*.name</tt></td>
2620 <td>Track changes to the <link to="IMachine::name"/> property of
2621 all registered virtual machines</td>
2622 </tr>
2623 </table>
2624
2625 <note>
2626 This function is not implemented in the current version of the
2627 product.
2628 </note>
2629 </desc>
2630 <param name="what" type="wstring" dir="in">
2631 <desc>Comma separated list of property masks.</desc>
2632 </param>
2633 <param name="timeout" type="unsigned long" dir="in">
2634 <desc>
2635 Wait timeout in milliseconds.
2636 Specify -1 for an indefinite wait.
2637 </desc>
2638 </param>
2639 <param name="changed" type="wstring" dir="out">
2640 <desc>
2641 Comma separated list of properties that have been changed and caused
2642 this method to return to the caller.
2643 </desc>
2644 </param>
2645 <param name="values" type="wstring" dir="out">
2646 <desc>Reserved, not currently used.</desc>
2647 </param>
2648 </method>
2649
2650 <method name="saveSettings">
2651 <desc>
2652 Saves the global settings to the global settings file
2653 (<link to="#settingsFilePath"/>).
2654
2655 This method is only useful for explicitly saving the global settings
2656 file after it has been auto-converted from the old format to the most
2657 recent format (see <link to="#settingsFileVersion"/> for details).
2658 Normally, the global settings file is implicitly saved when a global
2659 setting is changed.
2660
2661 <result name="VBOX_E_FILE_ERROR">
2662 Settings file not accessible.
2663 </result>
2664 <result name="VBOX_E_XML_ERROR">
2665 Could not parse the settings file.
2666 </result>
2667
2668 </desc>
2669 </method>
2670
2671 <method name="saveSettingsWithBackup">
2672 <desc>
2673 Creates a backup copy of the global settings file
2674 (<link to="#settingsFilePath"/>) in case of auto-conversion, and then
2675 calls <link to="#saveSettings()"/>.
2676
2677 Note that the backup copy is created <b>only</b> if the settings file
2678 auto-conversion took place (see <link to="#settingsFileVersion"/> for
2679 details). Otherwise, this call is fully equivalent to
2680 <link to="#saveSettings()"/> and no backup copying is done.
2681
2682 The backup copy is created in the same directory where the original
2683 settings file is located. It is given the following file name:
2684 <pre>
2685 original.xml.x.y-platform.bak
2686 </pre>
2687 where <tt>original.xml</tt> is the original settings file name
2688 (excluding path), and <tt>x.y-platform</tt> is the version of the old
2689 format of the settings file (before auto-conversion).
2690
2691 If the given backup file already exists, this method will try to add the
2692 <tt>.N</tt> suffix to the backup file name (where <tt>N</tt> counts from
2693 0 to 9) and copy it again until it succeeds. If all suffixes are
2694 occupied, or if any other copy error occurs, this method will return a
2695 failure.
2696
2697 If the copy operation succeeds, the @a bakFileName return argument will
2698 receive a full path to the created backup file (for informational
2699 purposes). Note that this will happen even if the subsequent
2700 <link to="#saveSettings()"/> call performed by this method after the
2701 copy operation, fails.
2702
2703 <note>
2704 The VirtualBox API never calls this method. It is intended purely for
2705 the purposes of creating backup copies of the settings files by
2706 front-ends before saving the results of the automatically performed
2707 settings conversion to disk.
2708 </note>
2709
2710 <see>settingsFileVersion</see>
2711
2712 <result name="VBOX_E_FILE_ERROR">
2713 Settings file not accessible.
2714 </result>
2715 <result name="VBOX_E_XML_ERROR">
2716 Could not parse the settings file.
2717 </result>
2718 <result name="VBOX_E_IPRT_ERROR">
2719 Could not copy the settings file.
2720 </result>
2721
2722 </desc>
2723 <param name="bakFileName" type="wstring" dir="return">
2724 <desc>Full path to the created backup copy.</desc>
2725 </param>
2726 </method>
2727
2728 </interface>
2729
2730 <!--
2731 // IAppliance
2732 /////////////////////////////////////////////////////////////////////////
2733 -->
2734
2735 <enum
2736 name="CIMOSType"
2737 uuid="86ef5f8c-18b2-4db8-a314-33721b59f89b"
2738 >
2739 <desc>
2740 OVF operating system values according to CIM V2.20 (as of Nov 2008); http://www.dmtf.org/standards/cim/cim_schema_v220
2741 </desc>
2742
2743 <const name="CIMOS_Unknown" value="0" /> <!-- "Unknown" -->
2744 <const name="CIMOS_Other" value="1" /> <!-- "Other" -->
2745 <const name="CIMOS_MACOS" value="2" /> <!-- "MACOS" -->
2746 <const name="CIMOS_ATTUNIX" value="3" /> <!-- "ATTUNIX" -->
2747 <const name="CIMOS_DGUX" value="4" /> <!-- "DGUX" -->
2748 <const name="CIMOS_DECNT" value="5" /> <!-- "DECNT" -->
2749 <const name="CIMOS_Tru64UNIX" value="6" /> <!-- "Tru64 UNIX" -->
2750 <const name="CIMOS_OpenVMS" value="7" /> <!-- "OpenVMS" -->
2751 <const name="CIMOS_HPUX" value="8" /> <!-- "HPUX" -->
2752 <const name="CIMOS_AIX" value="9" /> <!-- "AIX" -->
2753 <const name="CIMOS_MVS" value="10" /> <!-- "MVS" -->
2754 <const name="CIMOS_OS400" value="11" /> <!-- "OS400" -->
2755 <const name="CIMOS_OS2" value="12" /> <!-- "OS/2" -->
2756 <const name="CIMOS_JavaVM" value="13" /> <!-- "JavaVM" -->
2757 <const name="CIMOS_MSDOS" value="14" /> <!-- "MSDOS" -->
2758 <const name="CIMOS_WIN3x" value="15" /> <!-- "WIN3x" -->
2759 <const name="CIMOS_WIN95" value="16" /> <!-- "WIN95" -->
2760 <const name="CIMOS_WIN98" value="17" /> <!-- "WIN98" -->
2761 <const name="CIMOS_WINNT" value="18" /> <!-- "WINNT" -->
2762 <const name="CIMOS_WINCE" value="19" /> <!-- "WINCE" -->
2763 <const name="CIMOS_NCR3000" value="20" /> <!-- "NCR3000" -->
2764 <const name="CIMOS_NetWare" value="21" /> <!-- "NetWare" -->
2765 <const name="CIMOS_OSF" value="22" /> <!-- "OSF" -->
2766 <const name="CIMOS_DCOS" value="23" /> <!-- "DC/OS" -->
2767 <const name="CIMOS_ReliantUNIX" value="24" /> <!-- "Reliant UNIX" -->
2768 <const name="CIMOS_SCOUnixWare" value="25" /> <!-- "SCO UnixWare" -->
2769 <const name="CIMOS_SCOOpenServer" value="26" /> <!-- "SCO OpenServer" -->
2770 <const name="CIMOS_Sequent" value="27" /> <!-- "Sequent" -->
2771 <const name="CIMOS_IRIX" value="28" /> <!-- "IRIX" -->
2772 <const name="CIMOS_Solaris" value="29" /> <!-- "Solaris" -->
2773 <const name="CIMOS_SunOS" value="30" /> <!-- "SunOS" -->
2774 <const name="CIMOS_U6000" value="31" /> <!-- "U6000" -->
2775 <const name="CIMOS_ASERIES" value="32" /> <!-- "ASERIES" -->
2776 <const name="CIMOS_HPNonStopOS" value="33" /> <!-- "HP NonStop OS" -->
2777 <const name="CIMOS_HPNonStopOSS" value="34" /> <!-- "HP NonStop OSS" -->
2778 <const name="CIMOS_BS2000" value="35" /> <!-- "BS2000" -->
2779 <const name="CIMOS_LINUX" value="36" /> <!-- "LINUX" -->
2780 <const name="CIMOS_Lynx" value="37" /> <!-- "Lynx" -->
2781 <const name="CIMOS_XENIX" value="38" /> <!-- "XENIX" -->
2782 <const name="CIMOS_VM" value="39" /> <!-- "VM" -->
2783 <const name="CIMOS_InteractiveUNIX" value="40" /> <!-- "Interactive UNIX" -->
2784 <const name="CIMOS_BSDUNIX" value="41" /> <!-- "BSDUNIX" -->
2785 <const name="CIMOS_FreeBSD" value="42" /> <!-- "FreeBSD" -->
2786 <const name="CIMOS_NetBSD" value="43" /> <!-- "NetBSD" -->
2787 <const name="CIMOS_GNUHurd" value="44" /> <!-- "GNU Hurd" -->
2788 <const name="CIMOS_OS9" value="45" /> <!-- "OS9" -->
2789 <const name="CIMOS_MACHKernel" value="46" /> <!-- "MACH Kernel" -->
2790 <const name="CIMOS_Inferno" value="47" /> <!-- "Inferno" -->
2791 <const name="CIMOS_QNX" value="48" /> <!-- "QNX" -->
2792 <const name="CIMOS_EPOC" value="49" /> <!-- "EPOC" -->
2793 <const name="CIMOS_IxWorks" value="50" /> <!-- "IxWorks" -->
2794 <const name="CIMOS_VxWorks" value="51" /> <!-- "VxWorks" -->
2795 <const name="CIMOS_MiNT" value="52" /> <!-- "MiNT" -->
2796 <const name="CIMOS_BeOS" value="53" /> <!-- "BeOS" -->
2797 <const name="CIMOS_HPMPE" value="54" /> <!-- "HP MPE" -->
2798 <const name="CIMOS_NextStep" value="55" /> <!-- "NextStep" -->
2799 <const name="CIMOS_PalmPilot" value="56" /> <!-- "PalmPilot" -->
2800 <const name="CIMOS_Rhapsody" value="57" /> <!-- "Rhapsody" -->
2801 <const name="CIMOS_Windows2000" value="58" /> <!-- "Windows 2000" -->
2802 <const name="CIMOS_Dedicated" value="59" /> <!-- "Dedicated" -->
2803 <const name="CIMOS_OS390" value="60" /> <!-- "OS/390" -->
2804 <const name="CIMOS_VSE" value="61" /> <!-- "VSE" -->
2805 <const name="CIMOS_TPF" value="62" /> <!-- "TPF" -->
2806 <const name="CIMOS_WindowsMe" value="63" /> <!-- "Windows (R) Me" -->
2807 <const name="CIMOS_CalderaOpenUNIX" value="64" /> <!-- "Caldera Open UNIX" -->
2808 <const name="CIMOS_OpenBSD" value="65" /> <!-- "OpenBSD" -->
2809 <const name="CIMOS_NotApplicable" value="66" /> <!-- "Not Applicable" -->
2810 <const name="CIMOS_WindowsXP" value="67" /> <!-- "Windows XP" -->
2811 <const name="CIMOS_zOS" value="68" /> <!-- "z/OS" -->
2812 <const name="CIMOS_MicrosoftWindowsServer2003" value="69" /> <!-- "Microsoft Windows Server 2003" -->
2813 <const name="CIMOS_MicrosoftWindowsServer2003_64" value="70" /> <!-- "Microsoft Windows Server 2003 64-Bit" -->
2814 <const name="CIMOS_WindowsXP_64" value="71" /> <!-- "Windows XP 64-Bit" -->
2815 <const name="CIMOS_WindowsXPEmbedded" value="72" /> <!-- "Windows XP Embedded" -->
2816 <const name="CIMOS_WindowsVista" value="73" /> <!-- "Windows Vista" -->
2817 <const name="CIMOS_WindowsVista_64" value="74" /> <!-- "Windows Vista 64-Bit" -->
2818 <const name="CIMOS_WindowsEmbeddedforPointofService" value="75" /> <!-- "Windows Embedded for Point of Service" -->
2819 <const name="CIMOS_MicrosoftWindowsServer2008" value="76" /> <!-- "Microsoft Windows Server 2008" -->
2820 <const name="CIMOS_MicrosoftWindowsServer2008_64" value="77" /> <!-- "Microsoft Windows Server 2008 64-Bit" -->
2821 <const name="CIMOS_FreeBSD_64" value="78" /> <!-- "FreeBSD 64-Bit" -->
2822 <const name="CIMOS_RedHatEnterpriseLinux" value="79" /> <!-- "RedHat Enterprise Linux" -->
2823 <const name="CIMOS_RedHatEnterpriseLinux_64" value="80" /> <!-- "RedHat Enterprise Linux 64-Bit" -->
2824 <const name="CIMOS_Solaris_64" value="81" /> <!-- "Solaris 64-Bit" -->
2825 <const name="CIMOS_SUSE" value="82" /> <!-- "SUSE" -->
2826 <const name="CIMOS_SUSE_64" value="83" /> <!-- "SUSE 64-Bit" -->
2827 <const name="CIMOS_SLES" value="84" /> <!-- "SLES" -->
2828 <const name="CIMOS_SLES_64" value="85" /> <!-- "SLES 64-Bit" -->
2829 <const name="CIMOS_NovellOES" value="86" /> <!-- "Novell OES" -->
2830 <const name="CIMOS_NovellLinuxDesktop" value="87" /> <!-- "Novell Linux Desktop" -->
2831 <const name="CIMOS_SunJavaDesktopSystem" value="88" /> <!-- "Sun Java Desktop System" -->
2832 <const name="CIMOS_Mandriva" value="89" /> <!-- "Mandriva" -->
2833 <const name="CIMOS_Mandriva_64" value="90" /> <!-- "Mandriva 64-Bit" -->
2834 <const name="CIMOS_TurboLinux" value="91" /> <!-- "TurboLinux" -->
2835 <const name="CIMOS_TurboLinux_64" value="92" /> <!-- "TurboLinux 64-Bit" -->
2836 <const name="CIMOS_Ubuntu" value="93" /> <!-- "Ubuntu" -->
2837 <const name="CIMOS_Ubuntu_64" value="94" /> <!-- "Ubuntu 64-Bit" -->
2838 <const name="CIMOS_Debian" value="95" /> <!-- "Debian" -->
2839 <const name="CIMOS_Debian_64" value="96" /> <!-- "Debian 64-Bit" -->
2840 <const name="CIMOS_Linux_2_4_x" value="97" /> <!-- "Linux 2.4.x" -->
2841 <const name="CIMOS_Linux_2_4_x_64" value="98" /> <!-- "Linux 2.4.x 64-Bit" -->
2842 <const name="CIMOS_Linux_2_6_x" value="99" /> <!-- "Linux 2.6.x" -->
2843 <const name="CIMOS_Linux_2_6_x_64" value="100" /> <!-- "Linux 2.6.x 64-Bit" -->
2844 <const name="CIMOS_Linux_64" value="101" /> <!-- "Linux 64-Bit" -->
2845 <const name="CIMOS_Other_64" value="102" /> <!-- "Other 64-Bit" -->
2846 </enum>
2847
2848 <enum
2849 name="OVFResourceType"
2850 uuid="646a78d7-6f04-49f4-82c4-75c28a75a4cd"
2851 >
2852 <desc>
2853 OVF resource type.
2854 </desc>
2855
2856 <const name="Other" value="1" />
2857 <const name="ComputerSystem" value="2" />
2858 <const name="Processor" value="3" />
2859 <const name="Memory" value="4" />
2860 <const name="IdeController" value="5" />
2861 <const name="ParallelScsiHba" value="6" />
2862 <const name="FcHba" value="7" />
2863 <const name="iScsiHba" value="8" />
2864 <const name="IbHca" value="9" />
2865 <const name="EthernetAdapter" value="10" />
2866 <const name="OtherNetworkAdapter" value="11" />
2867 <const name="IoSlot" value="12" />
2868 <const name="IoDevice" value="13" />
2869 <const name="FloppyDrive" value="14" />
2870 <const name="CdDrive" value="15" />
2871 <const name="DvdDrive" value="16" />
2872 <const name="HardDisk" value="17" />
2873 <const name="UsbController" value="23" />
2874 <const name="SoundCard" value="35" />
2875 </enum>
2876
2877 <interface
2878 name="IAppliance" extends="$unknown"
2879 uuid="a7a71c1f-20d3-4483-95c0-7357dda77f50"
2880 wsmap="managed"
2881 >
2882 <desc>
2883 Represents an appliance in OVF format. An instance of this is returned by
2884 <link to="IVirtualBox::openAppliance" />.
2885
2886 Importing an OVF appliance into VirtualBox is a three-step process:
2887
2888 <ol>
2889 <li>
2890 Call <link to="IVirtualBox::openAppliance" /> with the full path of the OVF
2891 file. So long as the appliance file is syntactically valid, this will succeed
2892 and return an instance of IAppliance that contains the parsed data from the
2893 OVF file.
2894 </li>
2895
2896 <li>The caller should then invoke <link to="#interpret" />, which
2897 analyzes the OVF data and sets up the contents of the IAppliance attributes
2898 accordingly. These can be inspected by a VirtualBox front-end such as the GUI,
2899 and the suggestions can be displayed to the user. For example, the virtual system
2900 will contain the virtual hardware prescribed by the OVF (network and hardware
2901 adapters, virtual disk images, memory size and so on), and the GUI can then give
2902 the user the option to confirm and/or change these suggestions.
2903 </li>
2904
2905 <li>Finally, the caller should invoke <link to="#importAppliance" />, which will
2906 create virtual machines in VirtualBox as instances of <link to="IMachine" /> that
2907 match the information in the virtual system descriptions.
2908 </li>
2909 </ol>
2910
2911 </desc>
2912
2913 <attribute name="path" type="wstring" readonly="yes">
2914 <desc>Path to the main file of the OVF appliance, which is either the <tt>.ovf</tt> or
2915 the <tt>.ova</tt> file passed to <link to="IVirtualBox::openAppliance" />.</desc>
2916 </attribute>
2917
2918 <attribute name="disks" type="wstring" readonly="yes" safearray="yes">
2919 <desc>
2920 Array of virtual disk definitions. One such description exists for each
2921 disk definition in the OVF; each string array item represents one such piece of
2922 disk information, with the information fields separated by tab (\t) characters.
2923
2924 The caller should be prepared for additional fields being appended to
2925 this string in future versions of VirtualBox and therefore check for
2926 the number of tabs in the strings returned.
2927
2928 In the current version, the following eight fields are returned per string
2929 in the array:
2930
2931 <ol>
2932 <li>Disk ID (unique string identifier given to disk)</li>
2933 <li>Capacity (unsigned integer indicating the maximum capacity of the disk)</li>
2934 <li>Populated size (optional unsigned integer indicating the current size of the
2935 disk; can be approximate; -1 if unspecified)</li>
2936 <li>Format (string identifying the disk format, typically
2937 "http://www.vmware.com/specifications/vmdk.html#sparse")</li>
2938 <li>Reference (where to find the disk image, typically a file name; if empty,
2939 then the disk should be created on import)</li>
2940 <li>Image size (optional unsigned integer indicating the size of the image,
2941 which need not necessarily be the same as the values specified above, since
2942 the image may be compressed or sparse; -1 if not specified)</li>
2943 <li>Chunk size (optional unsigned integer if the image is split into chunks;
2944 presently unsupported and always -1)</li>
2945 <li>Compression (optional string equalling "gzip" if the image is gzip-compressed)</li>
2946 </ol>
2947 </desc>
2948 </attribute>
2949
2950 <attribute name="virtualSystemDescriptions" type="IVirtualSystemDescription" readonly="yes" safearray="yes">
2951 <desc>
2952 Array of virtual system descriptions. One such description is created
2953 for each virtual system found in the OVF. The array is empty until after <link to="#interpret" />
2954 has been called.
2955 </desc>
2956 </attribute>
2957
2958 <method name="interpret">
2959 <desc>
2960 Interprets the OVF data that was read when the appliance was constructed. After
2961 calling this method, one can inspect the
2962 <link to="#virtualSystemDescriptions" /> array attribute, which will then contain
2963 one <link to="IVirtualSystemDescription" /> for each virtual machine found in
2964 the appliance.
2965
2966 Calling this method is the second step of importing an appliance into VirtualBox;
2967 see <link to="IAppliance" /> for an overview.
2968 </desc>
2969 </method>
2970
2971 <method name="importAppliance">
2972 <desc>
2973 Imports the appliance into VirtualBox by creating instances of <link to="IMachine" />
2974 and other interfaces that match the information contained in the appliance as
2975 closely as possible, as represented by the import instructions in the
2976 <link to="#virtualSystemDescriptions" /> array.
2977
2978 Calling this method is the final step of importing an appliance into VirtualBox;
2979 see <link to="IAppliance" /> for an overview.
2980
2981 Since importing the appliance may imply copying disk images, which can take a long
2982 time, this method operates asynchronously and returns an IProgress object to allow
2983 the caller to monitor the progress.
2984 </desc>
2985
2986 <param name="aProgress" type="IProgress" dir="return">
2987 <desc></desc>
2988 </param>
2989 </method>
2990
2991 </interface>
2992
2993 <enum
2994 name="VirtualSystemDescriptionType"
2995 uuid="8ac36d00-bb7c-4a35-a835-3f004b27427b"
2996 >
2997 <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
2998 a configuration value.</desc>
2999
3000 <const name="Ignore" value="1" />
3001 <const name="Name" value="2" />
3002 <const name="OS" value="3" />
3003 <const name="CPU" value="4" />
3004 <const name="Memory" value="5" />
3005 <const name="HardDiskControllerIDE" value="6" />
3006 <const name="HardDiskControllerSATA" value="7" />
3007 <const name="HardDiskControllerSCSI" value="8" />
3008 <const name="HardDiskImage" value="9" />
3009 <const name="CDROM" value="10" />
3010 <const name="Floppy" value="11" />
3011 <const name="NetworkAdapter" value="12" />
3012 <const name="USBController" value="13" />
3013 <const name="SoundCard" value="14" />
3014
3015 </enum>
3016
3017 <interface
3018 name="IVirtualSystemDescription" extends="$unknown"
3019 uuid="8606c2ae-c06f-487f-9573-1465b44f9524"
3020 wsmap="managed"
3021 >
3022
3023 <desc>This interface is used in the <link to="IAppliance::virtualSystemDescriptions" /> array.
3024 After <link to="IAppliance::interpret" /> has been called, that array contains
3025 information about how the virtual systems described in the OVF should best be imported into VirtualBox
3026 virtual machines. See <link to="IAppliance" /> for the steps required to import an OVF
3027 into VirtualBox.
3028 </desc>
3029
3030 <attribute name="count" type="unsigned long" readonly="yes">
3031 <desc>Return the number of virtual system description entries.</desc>
3032 </attribute>
3033
3034 <method name="getDescription">
3035 <desc>Returns information about the virtual system as arrays of instruction items. In each array, the
3036 items with the same indices correspond and jointly represent an import instruction for VirtualBox.
3037
3038 The list below identifies the value sets that are possible depending on the
3039 <link to="VirtualSystemDescriptionType" /> enum value in the array item in aTypes[]. In each case,
3040 the array item with the same index in aOrigValue[] will contain the original value as contained
3041 in the OVF file (just for informational purposes), and the corresponding item in aConfigValues[]
3042 will contain a suggested value to be used for VirtualBox. Depending on the description type,
3043 the aExtraConfigValues[] array item may also be used.
3044
3045 <ul>
3046 <li>
3047 "OS": the guest operating system type. There must be exactly one such array item on import. The
3048 corresponding item in aConfigValues[] contains the suggested guest operating system for VirtualBox.
3049 This will be one of the values listed in <link to="IVirtualBox::guestOSTypes" />. The corresponding
3050 item in aOrigValues[] will contain a numerical value that described the operating system in the OVF
3051 (see <link to="CIMOSType" />).
3052 </li>
3053 <li>
3054 "Name": the name to give to the new virtual machine. There can be at most one such array item;
3055 if none is present on import, then an automatic name will be created from the operating system
3056 type. The correponding item im aOrigValues[] will contain the suggested virtual machine name
3057 from the OVF file, and aConfigValues[] will contain a suggestion for a unique VirtualBox
3058 <link to="IMachine" /> name that does not exist yet.
3059 </li>
3060 <li>
3061 "CPU": the number of CPUs. There can be at most one such item, which will presently be ignored.
3062 </li>
3063 <li>
3064 "Memory": the amount of guest RAM, in bytes. There can be at most one such array item; if none
3065 is present on import, then VirtualBox will set a meaningful default based on the operating system
3066 type.
3067 </li>
3068 <li>
3069 "HarddiskControllerSCSI": a SCSI hard disk controller. There can be at most one such item.
3070 The items in aOrigValues[] and aConfigValues[] will either be "LsiLogic" or "BusLogic". The
3071 matching item in the aRefs[] array will contain an integer that other items of the "Harddisk"
3072 type can use to specify which hard disk controller a virtual disk should be connected to.
3073 </li>
3074 <li>
3075 "HarddiskControllerIDE": an IDE hard disk controller. There can be at most one such item. This
3076 has no value in aOrigValues[] or aAutoValues[]. The matching item in the aRefs[] array will be
3077 used as with SCSI controllers (see above).
3078 </li>
3079 <li>
3080 "Harddisk": a virtual hard disk, most probably as a reference to an image file. There can be an
3081 arbitrary number of these items, one for each virtual disk image that accompanies the OVF. The
3082 array item in aOrigValues[] will contain the file specification from the OVF file, whereas the item
3083 in aConfigValues[] will contain a qualified path specification where the hard disk image should
3084 be copied to; this target image will then be registered with VirtualBox.
3085 The matching item in the aRefs[] array must contain a integer specifying the hard disk controller
3086 to connect the image to. This number must be the same as the integer used by one of the hard disk
3087 controller items (SCSI, SATA or IDE; see above).
3088 </li>
3089 <li>
3090 "NetworkAdapter": a network adapter. (todo document)
3091 </li>
3092 <li>
3093 "SoundCard": a sound card. There can be at most one such item. If and only if such an item is
3094 present, sound support will be enabled for the new virtual machine. Note that the virtual
3095 machine in VirtualBox will always be presented with the standard VirtualBox soundcard, which
3096 may be different from the virtual soundcard expected by the appliance.
3097 </li>
3098 </ul>
3099
3100 </desc>
3101
3102 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3103 <desc></desc>
3104 </param>
3105
3106 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3107 <desc></desc>
3108 </param>
3109
3110 <param name="aOrigValues" type="wstring" dir="out" safearray="yes">
3111 <desc></desc>
3112 </param>
3113
3114 <param name="aConfigValues" type="wstring" dir="out" safearray="yes">
3115 <desc></desc>
3116 </param>
3117
3118 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3119 <desc></desc>
3120 </param>
3121
3122 </method>
3123
3124 <method name="setFinalValues">
3125 <desc>
3126 This method allows the appliance's user to change the configuration for the virtual
3127 system descriptions. For each array item returned from <link to="getDescription" />,
3128 you must pass in one boolean value and one configuration value.
3129
3130 Each item in the boolean array determines whether the particular configuration item
3131 should be enabled.
3132 You can only disable items of the types HardDiskControllerIDE, HardDiskControllerSATA,
3133 HardDiskControllerSCSI, HardDiskImage, CDROM, Floppy, NetworkAdapter, USBController
3134 and SoundCard.
3135
3136 For the configuration values, if you pass in the same array as returned
3137 in the aConfigValues array from getDescription(), the configuration remains unchanged.
3138 Please see the documentation for getDescription() for valid configuration values
3139 for the individual array item types. If the corresponding item in the aEnabled array
3140 is false, the configuration value is gnored.
3141 </desc>
3142
3143 <param name="aEnabled" type="boolean" dir="in" safearray="yes">
3144 <desc></desc>
3145 </param>
3146
3147 <param name="aFinalValues" type="wstring" dir="in" safearray="yes">
3148 <desc></desc>
3149 </param>
3150
3151 </method>
3152
3153 <method name="getWarnings">
3154 <desc>Returns textual warnings which occurs on the virtual system
3155 interpretion.</desc>
3156
3157 <param name="aWarnings" type="wstring" dir="return" safearray="yes">
3158 <desc></desc>
3159 </param>
3160 </method>
3161
3162 </interface>
3163
3164
3165 <!--
3166 // IMachine
3167 /////////////////////////////////////////////////////////////////////////
3168 -->
3169
3170 <enumerator
3171 name="IMachineEnumerator" type="IMachine"
3172 uuid="1b554149-be0a-4465-9252-9ff8f420af55"
3173 />
3174
3175 <collection
3176 name="IMachineCollection" type="IMachine" enumerator="IMachineEnumerator"
3177 uuid="FD443EC1-3007-4F5B-9282-D72760A66916"
3178 readonly="yes"
3179 />
3180
3181 <interface
3182 name="IInternalMachineControl" extends="$unknown"
3183 uuid="4042ddf2-93d3-4749-8517-dde3f17ea630"
3184 internal="yes"
3185 wsmap="suppress"
3186 >
3187 <method name="updateState">
3188 <desc>
3189 Updates the VM state.
3190 <note>
3191 This operation will also update the settings file with
3192 the correct information about the saved state file
3193 and delete this file from disk when appropriate.
3194 </note>
3195 </desc>
3196 <param name="state" type="MachineState" dir="in"/>
3197 </method>
3198
3199 <method name="getIPCId">
3200 <param name="id" type="wstring" dir="return"/>
3201 </method>
3202
3203 <method name="runUSBDeviceFilters">
3204 <desc>
3205 Asks the server to run USB devices filters of the associated
3206 machine against the given USB device and tell if there is
3207 a match.
3208 <note>
3209 Intended to be used only for remote USB devices. Local
3210 ones don't require to call this method (this is done
3211 implicitly by the Host and USBProxyService).
3212 </note>
3213 </desc>
3214 <param name="device" type="IUSBDevice" dir="in"/>
3215 <param name="matched" type="boolean" dir="out"/>
3216 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
3217 </method>
3218
3219 <method name="captureUSBDevice">
3220 <desc>
3221 Requests a capture of the given host USB device.
3222 When the request is completed, the VM process will
3223 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3224 notification.
3225 </desc>
3226 <param name="id" type="uuid" dir="in"/>
3227 </method>
3228
3229 <method name="detachUSBDevice">
3230 <desc>
3231 Notification that a VM is going to detach (done = false) or has
3232 already detached (done = true) the given USB device.
3233 When the done = true request is completed, the VM process will
3234 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
3235 notification.
3236 <note>
3237 In the done = true case, the server must run its own filters
3238 and filters of all VMs but this one on the detached device
3239 as if it were just attached to the host computer.
3240 </note>
3241 </desc>
3242 <param name="id" type="uuid" dir="in"/>
3243 <param name="done" type="boolean" dir="in"/>
3244 </method>
3245
3246 <method name="autoCaptureUSBDevices">
3247 <desc>
3248 Requests a capture all matching USB devices attached to the host.
3249 When the request is completed, the VM process will
3250 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3251 notification per every captured device.
3252 </desc>
3253 </method>
3254
3255 <method name="detachAllUSBDevices">
3256 <desc>
3257 Notification that a VM that is being powered down. The done
3258 parameter indicates whether which stage of the power down
3259 we're at. When done = false the VM is announcing its
3260 intentions, while when done = true the VM is reporting
3261 what it has done.
3262 <note>
3263 In the done = true case, the server must run its own filters
3264 and filters of all VMs but this one on all detach devices as
3265 if they were just attached to the host computer.
3266 </note>
3267 </desc>
3268 <param name="done" type="boolean" dir="in"/>
3269 </method>
3270
3271 <method name="onSessionEnd">
3272 <desc>
3273 Triggered by the given session object when the session is about
3274 to close normally.
3275 </desc>
3276 <param name="session" type="ISession" dir="in">
3277 <desc>Session that is being closed</desc>
3278 </param>
3279 <param name="progress" type="IProgress" dir="return">
3280 <desc>
3281 Used to wait until the corresponding machine is actually
3282 dissociated from the given session on the server.
3283 Returned only when this session is a direct one.
3284 </desc>
3285 </param>
3286 </method>
3287
3288 <method name="beginSavingState">
3289 <desc>
3290 Called by the VM process to inform the server it wants to
3291 save the current state and stop the VM execution.
3292 </desc>
3293 <param name="progress" type="IProgress" dir="in">
3294 <desc>
3295 Progress object created by the VM process to wait until
3296 the state is saved.
3297 </desc>
3298 </param>
3299 <param name="stateFilePath" type="wstring" dir="out">
3300 <desc>
3301 File path the VM process must save the execution state to.
3302 </desc>
3303 </param>
3304 </method>
3305
3306 <method name="endSavingState">
3307 <desc>
3308 Called by the VM process to inform the server that saving
3309 the state previously requested by #beginSavingState is either
3310 successfully finished or there was a failure.
3311
3312 <result name="VBOX_E_FILE_ERROR">
3313 Settings file not accessible.
3314 </result>
3315 <result name="VBOX_E_XML_ERROR">
3316 Could not parse the settings file.
3317 </result>
3318
3319 </desc>
3320
3321 <param name="success" type="boolean" dir="in">
3322 <desc><tt>true</tt> to indicate success and <tt>false</tt>
3323 otherwise.
3324 </desc>
3325 </param>
3326 </method>
3327
3328 <method name="adoptSavedState">
3329 <desc>
3330 Gets called by IConsole::adoptSavedState.
3331 <result name="VBOX_E_FILE_ERROR">
3332 Invalid saved state file path.
3333 </result>
3334 </desc>
3335 <param name="savedStateFile" type="wstring" dir="in">
3336 <desc>Path to the saved state file to adopt.</desc>
3337 </param>
3338 </method>
3339
3340 <method name="beginTakingSnapshot">
3341 <desc>
3342 Called by the VM process to inform the server it wants to
3343 take a snapshot.
3344
3345 <result name="VBOX_E_FILE_ERROR">
3346 Settings file not accessible.
3347 </result>
3348 <result name="VBOX_E_XML_ERROR">
3349 Could not parse the settings file.
3350 </result>
3351 </desc>
3352 <param name="initiator" type="IConsole" dir="in">
3353 <desc>The console object that initiated this call.</desc>
3354 </param>
3355 <param name="name" type="wstring" dir="in">
3356 <desc>Snapshot name.</desc>
3357 </param>
3358 <param name="description" type="wstring" dir="in">
3359 <desc>Snapshot description.</desc>
3360 </param>
3361 <param name="progress" type="IProgress" dir="in">
3362 <desc>
3363 Progress object created by the VM process to wait until
3364 the state is saved (only for online snapshots).
3365 </desc>
3366 </param>
3367 <param name="stateFilePath" type="wstring" dir="out">
3368 <desc>
3369 File path the VM process must save the execution state to.
3370 </desc>
3371 </param>
3372 <param name="serverProgress" type="IProgress" dir="out">
3373 <desc>
3374 Progress object created by the server process to wait until
3375 the snapshot is taken (VDI diff creation, etc.).
3376 </desc>
3377 </param>
3378 </method>
3379
3380 <method name="endTakingSnapshot">
3381 <desc>
3382 Called by the VM process to inform the server that the snapshot
3383 previously requested by #beginTakingSnapshot is either
3384 successfully taken or there was a failure.
3385 </desc>
3386
3387 <param name="success" type="boolean" dir="in">
3388 <desc><tt>true</tt> to indicate success and <tt>false</tt> otherwise</desc>
3389 </param>
3390 </method>
3391
3392 <method name="discardSnapshot">
3393 <desc>
3394 Gets called by IConsole::discardSnapshot.
3395 <result name="VBOX_E_INVALID_OBJECT_STATE">
3396 Snapshot has more than one child snapshot.
3397 </result>
3398 </desc>
3399 <param name="initiator" type="IConsole" dir="in">
3400 <desc>The console object that initiated this call.</desc>
3401 </param>
3402 <param name="id" type="uuid" dir="in">
3403 <desc>UUID of the snapshot to discard.</desc>
3404 </param>
3405 <param name="machineState" type="MachineState" dir="out">
3406 <desc>New machine state after this operation is started.</desc>
3407 </param>
3408 <param name="progress" type="IProgress" dir="return">
3409 <desc>Progress object to track the operation completion.</desc>
3410 </param>
3411 </method>
3412
3413 <method name="discardCurrentState">
3414 <desc>
3415 Gets called by IConsole::discardCurrentState.
3416 <result name="VBOX_E_INVALID_OBJECT_STATE">
3417 Virtual machine does not have any snapshot.
3418 </result>
3419 </desc>
3420 <param name="initiator" type="IConsole" dir="in">
3421 <desc>The console object that initiated this call.</desc>
3422 </param>
3423 <param name="machineState" type="MachineState" dir="out">
3424 <desc>New machine state after this operation is started.</desc>
3425 </param>
3426 <param name="progress" type="IProgress" dir="return">
3427 <desc>Progress object to track the operation completion.</desc>
3428 </param>
3429 </method>
3430
3431 <method name="discardCurrentSnapshotAndState">
3432 <desc>
3433 Gets called by IConsole::discardCurrentSnapshotAndState.
3434 <result name="VBOX_E_INVALID_OBJECT_STATE">
3435 Virtual machine does not have any snapshot.
3436 </result>
3437 </desc>
3438 <param name="initiator" type="IConsole" dir="in">
3439 <desc>The console object that initiated this call.</desc>
3440 </param>
3441 <param name="machineState" type="MachineState" dir="out">
3442 <desc>New machine state after this operation is started.</desc>
3443 </param>
3444 <param name="progress" type="IProgress" dir="return">
3445 <desc>Progress object to track the operation completion.</desc>
3446 </param>
3447 </method>
3448
3449 <method name="pullGuestProperties">
3450 <desc>
3451 Get the list of the guest properties matching a set of patterns along
3452 with their values, time stamps and flags and give responsibility for
3453 managing properties to the console.
3454 </desc>
3455 <param name="name" type="wstring" dir="out" safearray="yes">
3456 <desc>
3457 The names of the properties returned.
3458 </desc>
3459 </param>
3460 <param name="value" type="wstring" dir="out" safearray="yes">
3461 <desc>
3462 The values of the properties returned. The array entries match the
3463 corresponding entries in the @a name array.
3464 </desc>
3465 </param>
3466 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
3467 <desc>
3468 The time stamps of the properties returned. The array entries match
3469 the corresponding entries in the @a name array.
3470 </desc>
3471 </param>
3472 <param name="flags" type="wstring" dir="out" safearray="yes">
3473 <desc>
3474 The flags of the properties returned. The array entries match the
3475 corresponding entries in the @a name array.
3476 </desc>
3477 </param>
3478 </method>
3479
3480 <method name="pushGuestProperties">
3481 <desc>
3482 Set the list of the guest properties matching a set of patterns along
3483 with their values, time stamps and flags and return responsibility for
3484 managing properties to IMachine.
3485 </desc>
3486 <param name="name" type="wstring" dir="in" safearray="yes">
3487 <desc>
3488 The names of the properties.
3489 </desc>
3490 </param>
3491 <param name="value" type="wstring" dir="in" safearray="yes">
3492 <desc>
3493 The values of the properties. The array entries match the
3494 corresponding entries in the @a name array.
3495 </desc>
3496 </param>
3497 <param name="timestamp" type="unsigned long long" dir="in" safearray="yes">
3498 <desc>
3499 The time stamps of the properties. The array entries match
3500 the corresponding entries in the @a name array.
3501 </desc>
3502 </param>
3503 <param name="flags" type="wstring" dir="in" safearray="yes">
3504 <desc>
3505 The flags of the properties. The array entries match the
3506 corresponding entries in the @a name array.
3507 </desc>
3508 </param>
3509 </method>
3510 <method name="pushGuestProperty">
3511 <desc>
3512 Update a single guest property in IMachine.
3513 </desc>
3514 <param name="name" type="wstring" dir="in">
3515 <desc>
3516 The name of the property to be updated.
3517 </desc>
3518 </param>
3519 <param name="value" type="wstring" dir="in">
3520 <desc>
3521 The value of the property.
3522 </desc>
3523 </param>
3524 <param name="timestamp" type="unsigned long long" dir="in">
3525 <desc>
3526 The timestamp of the property.
3527 </desc>
3528 </param>
3529 <param name="flags" type="wstring" dir="in">
3530 <desc>
3531 The flags of the property.
3532 </desc>
3533 </param>
3534 </method>
3535 </interface>
3536
3537 <interface
3538 name="IBIOSSettings" extends="$unknown"
3539 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
3540 wsmap="managed"
3541 >
3542 <desc>
3543 The IBIOSSettings interface represents BIOS settings of the virtual
3544 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
3545 </desc>
3546 <attribute name="logoFadeIn" type="boolean">
3547 <desc>Fade in flag for BIOS logo animation.</desc>
3548 </attribute>
3549
3550 <attribute name="logoFadeOut" type="boolean">
3551 <desc>Fade out flag for BIOS logo animation.</desc>
3552 </attribute>
3553
3554 <attribute name="logoDisplayTime" type="unsigned long">
3555 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
3556 </attribute>
3557
3558 <attribute name="logoImagePath" type="wstring">
3559 <desc>Local file system path for external BIOS image.</desc>
3560 </attribute>
3561
3562 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
3563 <desc>Mode of the BIOS boot device menu.</desc>
3564 </attribute>
3565
3566 <attribute name="ACPIEnabled" type="boolean">
3567 <desc>ACPI support flag.</desc>
3568 </attribute>
3569
3570 <attribute name="IOAPICEnabled" type="boolean">
3571 <desc>
3572 IO APIC support flag. If set, VirtualBox will provide an IO APIC
3573 and support IRQs above 15.
3574 </desc>
3575 </attribute>
3576
3577 <attribute name="timeOffset" type="long long">
3578 <desc>
3579 Offset in milliseconds from the host system time. This allows for
3580 guests running with a different system date/time than the host.
3581 It is equivalent to setting the system date/time in the BIOS except
3582 it is not an absolute value but a relative one. Guest Additions
3583 time synchronization honors this offset.
3584 </desc>
3585 </attribute>
3586
3587 <attribute name="PXEDebugEnabled" type="boolean">
3588 <desc>
3589 PXE debug logging flag. If set, VirtualBox will write extensive
3590 PXE trace information to the release log.
3591 </desc>
3592 </attribute>
3593
3594 <attribute name="IDEControllerType" type="IDEControllerType">
3595 <desc>
3596 Type of the virtual IDE controller. Depending on this value,
3597 VirtualBox will provide different virtual IDE hardware
3598 devices to the guest.
3599 </desc>
3600 </attribute>
3601
3602 </interface>
3603
3604 <interface
3605 name="IMachine" extends="$unknown"
3606 uuid="ea6fb7ea-1993-4642-b113-f29eb39e0df0"
3607 wsmap="managed"
3608 >
3609 <desc>
3610 The IMachine interface represents a virtual machine, or guest, created
3611 in VirtualBox.
3612
3613 This interface is used in two contexts. First of all, a collection of
3614 objects implementing this interface is stored in the
3615 <link to="IVirtualBox::machines2"/> attribute which lists all the virtual
3616 machines that are currently registered with this VirtualBox
3617 installation. Also, once a session has been opened for the given virtual
3618 machine (e.g. the virtual machine is running), the machine object
3619 associated with the open session can be queried from the session object;
3620 see <link to="ISession"/> for details.
3621
3622 The main role of this interface is to expose the settings of the virtual
3623 machine and provide methods to change various aspects of the virtual
3624 machine's configuration. For machine objects stored in the
3625 <link to="IVirtualBox::machines2"/> collection, all attributes are
3626 read-only unless explicitly stated otherwise in individual attribute
3627 and method descriptions. In order to change a machine setting, a session
3628 for this machine must be opened using one of
3629 <link to="IVirtualBox::openSession"/>,
3630 <link to="IVirtualBox::openRemoteSession"/> or
3631 <link to="IVirtualBox::openExistingSession"/> methods. After the
3632 session has been successfully opened, a mutable machine object needs to
3633 be queried from the session object and then the desired settings changes
3634 can be applied to the returned object using IMachine attributes and
3635 methods. See the ISession interface description for more information
3636 about sessions.
3637
3638 Note that the IMachine interface does not provide methods to control
3639 virtual machine execution (such as start the machine, or power it
3640 down) -- these methods are grouped in a separate IConsole
3641 interface. Refer to the IConsole interface description to get more
3642 information about this topic.
3643
3644 <see>ISession, IConsole</see>
3645 </desc>
3646
3647 <attribute name="parent" type="IVirtualBox" readonly="yes">
3648 <desc>Associated parent object.</desc>
3649 </attribute>
3650
3651 <attribute name="accessible" type="boolean" readonly="yes">
3652 <desc>
3653 Whether this virtual machine is currently accessible or not.
3654
3655 The machine is considered to be inaccessible when:
3656 <ul>
3657 <li>It is a registered virtual machine, and
3658 </li>
3659 <li>Its settings file is inaccessible (for example, it is
3660 located on a network share that is not accessible during
3661 VirtualBox startup, or becomes inaccessible later, or if
3662 the settings file can be read but is invalid).
3663 </li>
3664 </ul>
3665
3666 Otherwise, the value of this property is always <tt>true</tt>.
3667
3668 Every time this property is read, the accessibility state of
3669 this machine is re-evaluated. If the returned value is |false|,
3670 the <link to="#accessError"/> property may be used to get the
3671 detailed error information describing the reason of
3672 inaccessibility.
3673
3674 When the machine is inaccessible, only the following properties
3675 can be used on it:
3676 <ul>
3677 <li><link to="#parent"/></li>
3678 <li><link to="#id"/></li>
3679 <li><link to="#settingsFilePath"/></li>
3680 <li><link to="#accessible"/></li>
3681 <li><link to="#accessError"/></li>
3682 </ul>
3683
3684 An attempt to access any other property or method will return
3685 an error.
3686
3687 The only possible action you can perform on an inaccessible
3688 machine is to unregister it using the
3689 <link to="IVirtualBox::unregisterMachine"/> call (or, to check
3690 for the accessibility state once more by querying this
3691 property).
3692
3693 <note>
3694 In the current implementation, once this property returns
3695 <tt>true</tt>, the machine will never become inaccessible
3696 later, even if its settings file cannot be successfully
3697 read/written any more (at least, until the VirtualBox
3698 server is restarted). This limitation may be removed in
3699 future releases.
3700 </note>
3701 </desc>
3702 </attribute>
3703
3704 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
3705 <desc>
3706 Error information describing the reason of machine
3707 inaccessibility.
3708
3709 Reading this property is only valid after the last call to
3710 <link to="#accessible"/> returned <tt>false</tt> (i.e. the
3711 machine is currently unaccessible). Otherwise, a null
3712 IVirtualBoxErrorInfo object will be returned.
3713 </desc>
3714 </attribute>
3715
3716 <attribute name="name" type="wstring">
3717 <desc>
3718 Name of the virtual machine.
3719
3720 Besides being used for human-readable identification purposes
3721 everywhere in VirtualBox, the virtual machine name is also used
3722 as a name of the machine's settings file and as a name of the
3723 subdirectory this settings file resides in. Thus, every time you
3724 change the value of this property, the settings file will be
3725 renamed once you call <link to="#saveSettings()"/> to confirm the
3726 change. The containing subdirectory will be also renamed, but
3727 only if it has exactly the same name as the settings file
3728 itself prior to changing this property (for backward compatibility
3729 with previous API releases). The above implies the following
3730 limitations:
3731 <ul>
3732 <li>The machine name cannot be empty.</li>
3733 <li>The machine name can contain only characters that are valid
3734 file name characters according to the rules of the file
3735 system used to store VirtualBox configuration.</li>
3736 <li>You cannot have two or more machines with the same name
3737 if they use the same subdirectory for storing the machine
3738 settings files.</li>
3739 <li>You cannot change the name of the machine if it is running,
3740 or if any file in the directory containing the settings file
3741 is being used by another running machine or by any other
3742 process in the host operating system at a time when
3743 <link to="#saveSettings()"/> is called.
3744 </li>
3745 </ul>
3746 If any of the above limitations are hit, <link to="#saveSettings()"/>
3747 will return an appropriate error message explaining the exact
3748 reason and the changes you made to this machine will not be
3749 saved.
3750 <note>
3751 For "legacy" machines created using the
3752 <link to="IVirtualBox::createLegacyMachine()"/> call,
3753 the above naming limitations do not apply because the
3754 machine name does not affect the settings file name.
3755 The settings file name remains the same as it was specified
3756 during machine creation and never changes.
3757 </note>
3758 </desc>
3759 </attribute>
3760
3761 <attribute name="description" type="wstring">
3762 <desc>
3763 Description of the virtual machine.
3764
3765 The description attribute can contain any text and is
3766 typically used to describe the hardware and software
3767 configuration of the virtual machine in detail (i.e. network
3768 settings, versions of the installed software and so on).
3769 </desc>
3770 </attribute>
3771
3772 <attribute name="id" type="uuid" readonly="yes">
3773 <desc>UUID of the virtual machine.</desc>
3774 </attribute>
3775
3776 <attribute name="OSTypeId" type="wstring">
3777 <desc>
3778 User-defined identifier of the Guest OS type.
3779 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
3780 an IGuestOSType object representing details about the given
3781 Guest OS type.
3782 <note>
3783 This value may differ from the value returned by
3784 <link to="IGuest::OSTypeId"/> if Guest Additions are
3785 installed to the guest OS.
3786 </note>
3787 </desc>
3788 </attribute>
3789
3790 <attribute name="HardwareVersion" type="wstring">
3791 <desc>Hardware version identifier. Internal use only for now.</desc>
3792 </attribute>
3793
3794 <attribute name="CPUCount" type="unsigned long">
3795 <desc>Number of virtual CPUs in the VM. In the current version of the product, this is always 1.</desc>
3796 </attribute>
3797
3798 <attribute name="memorySize" type="unsigned long">
3799 <desc>System memory size in megabytes.</desc>
3800 </attribute>
3801
3802 <attribute name="memoryBalloonSize" type="unsigned long">
3803 <desc>Initial memory balloon size in megabytes.</desc>
3804 </attribute>
3805
3806 <attribute name="statisticsUpdateInterval" type="unsigned long">
3807 <desc>Initial interval to update guest statistics in seconds.</desc>
3808 </attribute>
3809
3810 <attribute name="VRAMSize" type="unsigned long">
3811 <desc>Video memory size in megabytes.</desc>
3812 </attribute>
3813
3814 <attribute name="accelerate3DEnabled" type="boolean" default="false">
3815 <desc>
3816 This setting determines whether VirtualBox allows guests to make use
3817 of the 3D graphics support available on the host. Currently limited
3818 to OpenGL only. </desc>
3819 </attribute>
3820
3821 <attribute name="monitorCount" type="unsigned long">
3822 <desc>
3823 Number of virtual monitors.
3824 <note>
3825 Only effective on Windows XP and later guests with
3826 Guest Additions installed.
3827 </note>
3828 </desc>
3829 </attribute>
3830
3831 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
3832 <desc>Object containing all BIOS settings.</desc>
3833 </attribute>
3834
3835 <attribute name="HWVirtExEnabled" type="TSBool">
3836 <desc>
3837 This setting determines whether VirtualBox will try to make use of
3838 the host CPU's hardware virtualization extensions such as Intel VT-x
3839 and AMD-V. Note that in case such extensions are not available,
3840 they will not be used.
3841 </desc>
3842 </attribute>
3843
3844 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" default="false">
3845 <desc>
3846 This setting determines whether VirtualBox will try to make use of
3847 the nested paging extension of Intel VT-x and AMD-V. Note that in case
3848 such extensions are not available, they will not be used.
3849 </desc>
3850 </attribute>
3851
3852 <attribute name="HWVirtExVPIDEnabled" type="boolean" default="false">
3853 <desc>
3854 This setting determines whether VirtualBox will try to make use of
3855 the VPID extension of Intel VT-x. Note that in case such extensions are
3856 not available, they will not be used.
3857 </desc>
3858 </attribute>
3859
3860 <attribute name="PAEEnabled" type="boolean" default="false">
3861 <desc>
3862 This setting determines whether VirtualBox will expose the Physical Address
3863 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
3864 is not available, it will not be reported.
3865 </desc>
3866 </attribute>
3867
3868 <attribute name="snapshotFolder" type="wstring">
3869 <desc>
3870 Full path to the directory used to store snapshot data
3871 (differencing hard disks and saved state files) of this machine.
3872
3873 The initial value of this property is
3874 <tt>&lt;</tt><link to="#settingsFilePath">
3875 path_to_settings_file</link><tt>&gt;/&lt;</tt>
3876 <link to="#id">machine_uuid</link>
3877 <tt>&gt;</tt>.
3878
3879 Currently, it is an error to try to change this property on
3880 a machine that has snapshots (because this would require to
3881 move possibly large files to a different location).
3882 A separate method will be available for this purpose later.
3883
3884 <note>
3885 Setting this property to <tt>null</tt> will restore the
3886 initial value.
3887 </note>
3888 <note>
3889 When setting this property, the specified path can be
3890 absolute (full path) or relative to the directory where the
3891 <link to="#settingsFilePath">machine settings file</link>
3892 is located. When reading this property, a full path is
3893 always returned.
3894 </note>
3895 <note>
3896 The specified path may not exist, it will be created
3897 when necessary.
3898 </note>
3899 </desc>
3900 </attribute>
3901
3902 <attribute name="VRDPServer" type="IVRDPServer" readonly="yes">
3903 <desc>VRDP server object.</desc>
3904 </attribute>
3905
3906 <attribute name="hardDisk2Attachments" type="IHardDisk2Attachment" readonly="yes" safearray="yes">
3907 <desc>Array of hard disks attached to this machine.</desc>
3908 </attribute>
3909
3910 <attribute name="DVDDrive" type="IDVDDrive" readonly="yes">
3911 <desc>Associated DVD drive object.</desc>
3912 </attribute>
3913
3914 <attribute name="floppyDrive" type="IFloppyDrive" readonly="yes">
3915 <desc>Associated floppy drive object.</desc>
3916 </attribute>
3917
3918 <attribute name="USBController" type="IUSBController" readonly="yes">
3919 <desc>
3920 Associated USB controller object.
3921
3922 <note>
3923 This method may set a @ref com_warnings "warning result code".
3924 </note>
3925 <note>
3926 If USB functionality is not available in the given edition of
3927 VirtualBox, this method will set the result code to @c E_NOTIMPL.
3928 </note>
3929 </desc>
3930 </attribute>
3931
3932 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
3933 <desc>Associated audio adapter, always present.</desc>
3934 </attribute>
3935
3936 <attribute name="SATAController" type="ISATAController" readonly="yes">
3937 <desc>
3938 Associated SATA controller object.
3939 </desc>
3940 </attribute>
3941
3942 <attribute name="settingsFilePath" type="wstring" readonly="yes">
3943 <desc>
3944 Full name of the file containing machine settings data.
3945 </desc>
3946 </attribute>
3947
3948 <attribute name="settingsFileVersion" type="wstring" readonly="yes">
3949 <desc>
3950 Current version of the format of the settings file of this machine
3951 (<link to="#settingsFilePath"/>).
3952
3953 The version string has the following format:
3954 <pre>
3955 x.y-platform
3956 </pre>
3957 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
3958 versions, and <tt>platform</tt> is the platform identifier.
3959
3960 The current version usually matches the value of the
3961 <link to="IVirtualBox::settingsFormatVersion"/> attribute unless the
3962 settings file was created by an older version of VirtualBox and there
3963 was a change of the settings file format since then.
3964
3965 Note that VirtualBox automatically converts settings files from older
3966 versions to the most recent version when reading them (usually at
3967 VirtualBox startup) but it doesn't save the changes back until
3968 you call a method that implicitly saves settings (such as
3969 <link to="#setExtraData()"/>) or call <link to="#saveSettings()"/>
3970 explicitly. Therefore, if the value of this attribute differs from the
3971 value of <link to="IVirtualBox::settingsFormatVersion"/>, then it
3972 means that the settings file was converted but the result of the
3973 conversion is not yet saved to disk.
3974
3975 The above feature may be used by interactive front-ends to inform users
3976 about the settings file format change and offer them to explicitly save
3977 all converted settings files (the global and VM-specific ones),
3978 optionally create backup copies of the old settings files before saving,
3979 etc.
3980
3981 <see>IVirtualBox::settingsFormatVersion, saveSettingsWithBackup()</see>
3982 </desc>
3983 </attribute>
3984
3985 <attribute name="settingsModified" type="boolean" readonly="yes">
3986 <desc>
3987 Whether the settings of this machine have been modified
3988 (but neither yet saved nor discarded).
3989 <note>
3990 Reading this property is only valid on instances returned
3991 by <link to="ISession::machine"/> and on new machines
3992 created by <link to="IVirtualBox::createMachine"/> or opened
3993 by <link to="IVirtualBox::openMachine"/> but not
3994 yet registered, or on unregistered machines after calling
3995 <link to="IVirtualBox::unregisterMachine"/>. For all other
3996 cases, the settings can never be modified.
3997 </note>
3998 <note>
3999 For newly created unregistered machines, the value of this
4000 property is always TRUE until <link to="#saveSettings()"/>
4001 is called (no matter if any machine settings have been
4002 changed after the creation or not). For opened machines
4003 the value is set to FALSE (and then follows to normal rules).
4004 </note>
4005 </desc>
4006 </attribute>
4007
4008 <attribute name="sessionState" type="SessionState" readonly="yes">
4009 <desc>Current session state for this machine.</desc>
4010 </attribute>
4011
4012 <attribute name="sessionType" type="wstring" readonly="yes">
4013 <desc>
4014 Type of the session. If <link to="#sessionState"/> is
4015 SessionSpawning or SessionOpen, this attribute contains the
4016 same value as passed to the
4017 <link to="IVirtualBox::openRemoteSession()"/> method in the @a
4018 type parameter. If the session was opened directly using
4019 <link to="IVirtualBox::openSession()"/>, or if
4020 <link to="#sessionState"/> is SessionClosed, the value of this
4021 attribute is @c null.
4022 </desc>
4023 </attribute>
4024
4025 <attribute name="sessionPid" type="unsigned long" readonly="yes">
4026 <desc>
4027 Identifier of the session process. This attribute contains the
4028 platform-dependent identifier of the process that has opened a
4029 direct session for this machine using the
4030 <link to="IVirtualBox::openSession()"/> call. The returned value
4031 is only valid if <link to="#sessionState"/> is SessionOpen or
4032 SessionClosing (i.e. a session is currently open or being
4033 closed) by the time this property is read.
4034 </desc>
4035 </attribute>
4036
4037 <attribute name="state" type="MachineState" readonly="yes">
4038 <desc>Current execution state of this machine.</desc>
4039 </attribute>
4040
4041 <attribute name="lastStateChange" type="long long" readonly="yes">
4042 <desc>
4043 Time stamp of the last execution state change,
4044 in milliseconds since 1970-01-01 UTC.
4045 </desc>
4046 </attribute>
4047
4048 <attribute name="stateFilePath" type="wstring" readonly="yes">
4049 <desc>
4050 Full path to the file that stores the execution state of
4051 the machine when it is in the <link to="MachineState_Saved"/> state.
4052 <note>
4053 When the machine is not in the Saved state, this attribute
4054 <tt>null</tt>.
4055 </note>
4056 </desc>
4057 </attribute>
4058
4059 <attribute name="logFolder" type="wstring" readonly="yes">
4060 <desc>
4061 Full path to the folder that stores a set of rotated log files
4062 recorded during machine execution. The most recent log file is
4063 named <tt>VBox.log</tt>, the previous log file is
4064 named <tt>VBox.log.1</tt> and so on (up to <tt>VBox.log.3</tt>
4065 in the current version).
4066 </desc>
4067 </attribute>
4068
4069 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
4070 <desc>
4071 Current snapshot of this machine.
4072 <note>
4073 A <tt>null</tt> object is returned if the machine doesn't
4074 have snapshots.
4075 </note>
4076 <see><link to="ISnapshot"/></see>
4077 </desc>
4078 </attribute>
4079
4080 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
4081 <desc>
4082 Number of snapshots taken on this machine. Zero means the
4083 machine doesn't have any snapshots.
4084 </desc>
4085 </attribute>
4086
4087 <attribute name="currentStateModified" type="boolean" readonly="yes">
4088 <desc>
4089 Returns <tt>true</tt> if the current state of the machine is not
4090 identical to the state stored in the current snapshot.
4091
4092 The current state is identical to the current snapshot right
4093 after one of the following calls are made:
4094 <ul>
4095 <li><link to="IConsole::discardCurrentState"/> or
4096 <link to="IConsole::discardCurrentSnapshotAndState"/>
4097 </li>
4098 <li><link to="IConsole::takeSnapshot"/> (issued on a
4099 powered off or saved machine, for which
4100 <link to="#settingsModified"/> returns <tt>false</tt>)
4101 </li>
4102 <li><link to="IMachine::setCurrentSnapshot"/>
4103 </li>
4104 </ul>
4105
4106 The current state remains identical until one of the following
4107 happens:
4108 <ul>
4109 <li>settings of the machine are changed</li>
4110 <li>the saved state is discarded</li>
4111 <li>the current snapshot is discarded</li>
4112 <li>an attempt to execute the machine is made</li>
4113 </ul>
4114
4115 <note>
4116 For machines that don't have snapshots, this property is
4117 always <tt>false</tt>.
4118 </note>
4119 </desc>
4120 </attribute>
4121
4122 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
4123 <desc>
4124 Collection of shared folders for this machine (permanent shared
4125 folders). These folders are shared automatically at machine startup
4126 and available only to the guest OS installed within this machine.
4127
4128 New shared folders are added to the collection using
4129 <link to="#createSharedFolder"/>. Existing shared folders can be
4130 removed using <link to="#removeSharedFolder"/>.
4131 </desc>
4132 </attribute>
4133
4134 <attribute name="clipboardMode" type="ClipboardMode">
4135 <desc>
4136 Synchronization mode between the host OS clipboard
4137 and the guest OS clipboard.
4138 </desc>
4139 </attribute>
4140
4141 <attribute name="guestPropertyNotificationPatterns" type="wstring">
4142 <desc>
4143 A comma-separated list of simple glob patterns. Changes to guest
4144 properties whose name matches one of the patterns will generate an
4145 <link to="IVirtualBoxCallback::onGuestPropertyChange"/> signal.
4146 </desc>
4147 </attribute>
4148
4149 <method name="setBootOrder">
4150 <desc>
4151 Puts the given device to the specified position in
4152 the boot order.
4153
4154 To indicate that no device is associated with the given position,
4155 <link to="DeviceType_Null"/> should be used.
4156
4157 @todo setHardDiskBootOrder(), setNetworkBootOrder()
4158
4159 <result name="E_INVALIDARG">
4160 Boot @a position out of range.
4161 </result>
4162 <result name="E_NOTIMPL">
4163 Booting from USB @a device currently not supported.
4164 </result>
4165
4166 </desc>
4167 <param name="position" type="unsigned long" dir="in">
4168 <desc>
4169 Position in the boot order (<tt>1</tt> to the total number of
4170 devices the machine can boot from, as returned by
4171 <link to="ISystemProperties::maxBootPosition"/>).
4172 </desc>
4173 </param>
4174 <param name="device" type="DeviceType" dir="in">
4175 <desc>
4176 The type of the device used to boot at the given position.
4177 </desc>
4178 </param>
4179 </method>
4180
4181 <method name="getBootOrder" const="yes">
4182 <desc>
4183 Returns the device type that occupies the specified
4184 position in the boot order.
4185
4186 @todo [remove?]
4187 If the machine can have more than one device of the returned type
4188 (such as hard disks), then a separate method should be used to
4189 retrieve the individual device that occupies the given position.
4190
4191 If here are no devices at the given position, then
4192 <link to="DeviceType_Null"/> is returned.
4193
4194 @todo getHardDiskBootOrder(), getNetworkBootOrder()
4195
4196 <result name="E_INVALIDARG">
4197 Boot @a position out of range.
4198 </result>
4199
4200 </desc>
4201 <param name="position" type="unsigned long" dir="in">
4202 <desc>
4203 Position in the boot order (<tt>1</tt> to the total number of
4204 devices the machine can boot from, as returned by
4205 <link to="ISystemProperties::maxBootPosition"/>).
4206 </desc>
4207 </param>
4208 <param name="device" type="DeviceType" dir="return">
4209 <desc>
4210 Device at the given position.
4211 </desc>
4212 </param>
4213 </method>
4214
4215 <method name="attachHardDisk2">
4216 <desc>
4217 Attaches a virtual hard disk identified by the given UUID @a id
4218 to a device slot of the specified bus.
4219
4220 For the IDE bus, the @a channel parameter can be either @c 0 or @c 1, to
4221 specify the primary or secondary IDE controller, respectively. The
4222 SATA bus supports 30 channels, so this parameter can be a number
4223 ranging from @c 0 to @c 29.
4224
4225 For the primary controller of the IDE bus, the @a device number can be
4226 either @c 0 or @c 1, to specify the master or the slave device,
4227 respectively. For the secondary IDE controller, the device number is
4228 always @c 1 because the master device is reserved for the CD-ROM drive.
4229
4230 For the SATA bus, the @a device parameter is currently unused and
4231 must be @c 0.
4232
4233 The specified device slot must not have another disk attached to it, or
4234 this method will fail.
4235
4236 See <link to="IHardDisk2"/> for more detailed information about
4237 attaching hard disks.
4238
4239 <note>
4240 You cannot attach a hard disk to a running machine. Also, you cannot
4241 attach a hard disk to a newly created machine until this machine's
4242 settings are saved to disk using <link to="#saveSettings()"/>.
4243 </note>
4244 <note>
4245 If the hard disk is being attached indirectly, a new differencing hard
4246 disk will implicitly be created for it and attached instead. If the
4247 changes made to the machine settings (including this indirect
4248 attachment) are later cancelled using <link to="#discardSettings()"/>,
4249 this implicitly created differencing hard disk will implicitly
4250 be deleted.
4251 </note>
4252
4253 <result name="E_INVALIDARG">
4254 SATA device, SATA channel, IDE channel or IDE slot out of range.
4255 </result>
4256 <result name="VBOX_E_INVALID_OBJECT_STATE">
4257 Attempt to attach hard disk to an unregistered virtual machine.
4258 </result>
4259 <result name="VBOX_E_INVALID_VM_STATE">
4260 Invalid machine state.
4261 </result>
4262 <result name="VBOX_E_OBJECT_IN_USE">
4263 Hard disk already attached to this or another virtual machine.
4264 </result>
4265
4266 </desc>
4267 <param name="id" type="uuid" dir="in">
4268 <desc>UUID of the hard disk to attach.</desc>
4269 </param>
4270 <param name="bus" type="StorageBus" dir="in">
4271 <desc>Type of the storage bus to use (IDE or SATA).</desc>
4272 </param>
4273 <param name="channel" type="long" dir="in">
4274 <desc>Channel to attach the hard disk to.</desc>
4275 </param>
4276 <param name="device" type="long" dir="in">
4277 <desc>
4278 Device slot in the given channel to attach the hard disk to.
4279 </desc>
4280 </param>
4281 </method>
4282
4283 <method name="getHardDisk2" const="yes">
4284 <desc>
4285 Returns the virtual hard disk attached to a device slot of the specified
4286 bus.
4287
4288 Note that if the hard disk was indirectly attached by
4289 <link to="#attachHardDisk2()"/> to the given device slot then this
4290 method will return not the same object as passed to the
4291 <link to="#attachHardDisk2()"/> call. See <link to="IHardDisk2"/> for
4292 more detailed information about attaching hard disks.
4293
4294 <result name="VBOX_E_OBJECT_NOT_FOUND">
4295 No hard disk attached to given slot/bus.
4296 </result>
4297
4298 </desc>
4299 <param name="bus" type="StorageBus" dir="in">
4300 <desc>Type of the storage bus to query (IDE or SATA).</desc>
4301 </param>
4302 <param name="channel" type="long" dir="in">
4303 <desc>Channel to query.</desc>
4304 </param>
4305 <param name="device" type="long" dir="in">
4306 <desc>Device slot in the given channel to query.</desc>
4307 </param>
4308 <param name="hardDisk" type="IHardDisk2" dir="return">
4309 <desc>Attached hard disk object.</desc>
4310 </param>
4311 </method>
4312
4313 <method name="detachHardDisk2">
4314 <desc>
4315 Detaches the virtual hard disk attached to a device slot of the
4316 specified bus.
4317
4318 Detaching the hard disk from the virtual machine is deferred. This means
4319 that the hard disk remains associated with the machine when this method
4320 returns and gets actually de-associated only after a successful
4321 <link to="#saveSettings()"/> call. See <link to="IHardDisk2"/>
4322 for more detailed information about attaching hard disks.
4323
4324 <note>
4325 You cannot detach the hard disk from a running machine.
4326 </note>
4327 <note>
4328 Detaching differencing hard disks implicitly created by <link
4329 to="#attachHardDisk2()"/> for the indirect attachment using this
4330 method will <b>not</b> implicitly delete them. The
4331 <link to="IHardDisk2::deleteStorage()"/> operation should be
4332 explicitly performed by the caller after the hard disk is successfully
4333 detached and the settings are saved with
4334 <link to="#saveSettings()"/>, if it is the desired action.
4335 </note>
4336
4337 <result name="VBOX_E_INVALID_VM_STATE">
4338 Attempt to detach hard disk from a running virtual machine.
4339 </result>
4340 <result name="VBOX_E_OBJECT_NOT_FOUND">
4341 No hard disk attached to given slot/bus.
4342 </result>
4343 <result name="VBOX_E_NOT_SUPPORTED">
4344 Hard disk format does not support storage deletion.
4345 </result>
4346
4347 </desc>
4348 <param name="bus" type="StorageBus" dir="in">
4349 <desc>Bus to detach the hard disk from.</desc>
4350 </param>
4351 <param name="channel" type="long" dir="in">
4352 <desc>Channel number to detach the hard disk from.</desc>
4353 </param>
4354 <param name="device" type="long" dir="in">
4355 <desc>Device slot number to detach the hard disk from.</desc>
4356 </param>
4357 </method>
4358
4359 <method name="getNetworkAdapter" const="yes">
4360 <desc>
4361 Returns the network adapter associated with the given slot.
4362 Slots are numbered sequentially, starting with zero. The total
4363 number of adapters per machine is defined by the
4364 <link to="ISystemProperties::networkAdapterCount"/> property,
4365 so the maximum slot number is one less than that property's value.
4366
4367 <result name="E_INVALIDARG">
4368 Invalid @a slot number.
4369 </result>
4370
4371 </desc>
4372 <param name="slot" type="unsigned long" dir="in"/>
4373 <param name="adapter" type="INetworkAdapter" dir="return"/>
4374 </method>
4375
4376 <method name="getSerialPort" const="yes">
4377 <desc>
4378 Returns the serial port associated with the given slot.
4379 Slots are numbered sequentially, starting with zero. The total
4380 number of serial ports per machine is defined by the
4381 <link to="ISystemProperties::serialPortCount"/> property,
4382 so the maximum slot number is one less than that property's value.
4383
4384 <result name="E_INVALIDARG">
4385 Invalid @a slot number.
4386 </result>
4387
4388 </desc>
4389 <param name="slot" type="unsigned long" dir="in"/>
4390 <param name="port" type="ISerialPort" dir="return"/>
4391 </method>
4392
4393 <method name="getParallelPort" const="yes">
4394 <desc>
4395 Returns the parallel port associated with the given slot.
4396 Slots are numbered sequentially, starting with zero. The total
4397 number of parallel ports per machine is defined by the
4398 <link to="ISystemProperties::parallelPortCount"/> property,
4399 so the maximum slot number is one less than that property's value.
4400
4401 <result name="E_INVALIDARG">
4402 Invalid @a slot number.
4403 </result>
4404
4405 </desc>
4406 <param name="slot" type="unsigned long" dir="in"/>
4407 <param name="port" type="IParallelPort" dir="return"/>
4408 </method>
4409
4410 <method name="getNextExtraDataKey">
4411 <desc>
4412 Returns the machine-specific extra data key name following the
4413 supplied key.
4414
4415 An error is returned if the supplied @a key does not exist. @c NULL is
4416 returned in @a nextKey if the supplied key is the last key. When
4417 supplying @c NULL for the @a key, the first key item is returned in @a
4418 nextKey (if there is any). @a nextValue is an optional parameter and
4419 if supplied, the next key's value is returned in it.
4420
4421 <result name="VBOX_E_OBJECT_NOT_FOUND">
4422 Extra data @a key not found.
4423 </result>
4424
4425 </desc>
4426 <param name="key" type="wstring" dir="in">
4427 <desc>Name of the data key to follow.</desc>
4428 </param>
4429 <param name="nextKey" type="wstring" dir="out">
4430 <desc>Name of the next data key.</desc>
4431 </param>
4432 <param name="nextValue" type="wstring" dir="out">
4433 <desc>Value of the next data key.</desc>
4434 </param>
4435 </method>
4436
4437 <method name="getExtraData">
4438 <desc>
4439 Returns associated machine-specific extra data.
4440
4441 If the requested data @a key does not exist, this function will
4442 succeed and return @c NULL in the @a value argument.
4443
4444 <result name="VBOX_E_FILE_ERROR">
4445 Settings file not accessible.
4446 </result>
4447 <result name="VBOX_E_XML_ERROR">
4448 Could not parse the settings file.
4449 </result>
4450
4451 </desc>
4452 <param name="key" type="wstring" dir="in">
4453 <desc>Name of the data key to get.</desc>
4454 </param>
4455 <param name="value" type="wstring" dir="return">
4456 <desc>Value of the requested data key.</desc>
4457 </param>
4458 </method>
4459
4460 <method name="setExtraData">
4461 <desc>
4462 Sets associated machine-specific extra data.
4463
4464 If you pass @c NULL as a key @a value, the given @a key will be
4465 deleted.
4466
4467 <note>
4468 Before performing the actual data change, this method will ask all
4469 registered callbacks using the
4470 <link to="IVirtualBoxCallback::onExtraDataCanChange()"/>
4471 notification for a permission. If one of the callbacks refuses the
4472 new value, the change will not be performed.
4473 </note>
4474 <note>
4475 On success, the
4476 <link to="IVirtualBoxCallback::onExtraDataChange()"/> notification
4477 is called to inform all registered callbacks about a successful data
4478 change.
4479 </note>
4480 <note>
4481 This method can be called outside the machine session and therefore
4482 it's a caller's responsibility to handle possible race conditions
4483 when several clients change the same key at the same time.
4484 </note>
4485
4486 <result name="VBOX_E_FILE_ERROR">
4487 Settings file not accessible.
4488 </result>
4489 <result name="VBOX_E_XML_ERROR">
4490 Could not parse the settings file.
4491 </result>
4492
4493 </desc>
4494 <param name="key" type="wstring" dir="in">
4495 <desc>Name of the data key to set.</desc>
4496 </param>
4497 <param name="value" type="wstring" dir="in">
4498 <desc>Value to assign to the key.</desc>
4499 </param>
4500 </method>
4501
4502 <method name="saveSettings">
4503 <desc>
4504 Saves any changes to machine settings made since the session
4505 has been opened or a new machine has been created, or since the
4506 last call to <link to="#saveSettings()"/> or <link to="#discardSettings()"/>.
4507 For registered machines, new settings become visible to all
4508 other VirtualBox clients after successful invocation of this
4509 method.
4510 <note>
4511 The method sends <link to="IVirtualBoxCallback::onMachineDataChange()"/>
4512 notification event after the configuration has been successfully
4513 saved (only for registered machines).
4514 </note>
4515 <note>
4516 Calling this method is only valid on instances returned
4517 by <link to="ISession::machine"/> and on new machines
4518 created by <link to="IVirtualBox::createMachine"/> but not
4519 yet registered, or on unregistered machines after calling
4520 <link to="IVirtualBox::unregisterMachine"/>.
4521 </note>
4522
4523 <result name="VBOX_E_FILE_ERROR">
4524 Settings file not accessible.
4525 </result>
4526 <result name="VBOX_E_XML_ERROR">
4527 Could not parse the settings file.
4528 </result>
4529 <result name="E_ACCESSDENIED">
4530 Modification request refused.
4531 </result>
4532
4533 </desc>
4534 </method>
4535
4536 <method name="saveSettingsWithBackup">
4537 <desc>
4538 Creates a backup copy of the machine settings file (<link
4539 to="#settingsFilePath"/>) in case of auto-conversion, and then calls
4540 <link to="#saveSettings()"/>.
4541
4542 Note that the backup copy is created <b>only</b> if the settings file
4543 auto-conversion took place (see <link to="#settingsFileVersion"/> for
4544 details). Otherwise, this call is fully equivalent to
4545 <link to="#saveSettings()"/> and no backup copying is done.
4546
4547 The backup copy is created in the same directory where the original
4548 settings file is located. It is given the following file name:
4549 <pre>
4550 original.xml.x.y-platform.bak
4551 </pre>
4552 where <tt>original.xml</tt> is the original settings file name
4553 (excluding path), and <tt>x.y-platform</tt> is the version of the old
4554 format of the settings file (before auto-conversion).
4555
4556 If the given backup file already exists, this method will try to add the
4557 <tt>.N</tt> suffix to the backup file name (where <tt>N</tt> counts from
4558 0 to 9) and copy it again until it succeeds. If all suffixes are
4559 occupied, or if any other copy error occurs, this method will return a
4560 failure.
4561
4562 If the copy operation succeeds, the @a bakFileName return argument will
4563 receive a full path to the created backup file (for informational
4564 purposes). Note that this will happen even if the subsequent
4565 <link to="#saveSettings()"/> call performed by this method after the
4566 copy operation, fails.
4567
4568 <note>
4569 The VirtualBox API never calls this method. It is intended purely for
4570 the purposes of creating backup copies of the settings files by
4571 front-ends before saving the results of the automatically performed
4572 settings conversion to disk.
4573 </note>
4574
4575 <see>settingsFileVersion</see>
4576
4577 <result name="VBOX_E_FILE_ERROR">
4578 Settings file not accessible.
4579 </result>
4580 <result name="VBOX_E_XML_ERROR">
4581 Could not parse the settings file.
4582 </result>
4583 <result name="VBOX_E_INVALID_VM_STATE">
4584 Virtual machine is not mutable.
4585 </result>
4586 <result name="E_ACCESSDENIED">
4587 Modification request refused.
4588 </result>
4589
4590 </desc>
4591 <param name="bakFileName" type="wstring" dir="return">
4592 <desc>Full path to the created backup copy.</desc>
4593 </param>
4594 </method>
4595
4596 <method name="discardSettings">
4597 <desc>
4598 Discards any changes to the machine settings made since the session
4599 has been opened or since the last call to <link to="#saveSettings()"/>
4600 or <link to="#discardSettings"/>.
4601 <note>
4602 Calling this method is only valid on instances returned
4603 by <link to="ISession::machine"/> and on new machines
4604 created by <link to="IVirtualBox::createMachine"/> or
4605 opened by <link to="IVirtualBox::openMachine"/> but not
4606 yet registered, or on unregistered machines after calling
4607 <link to="IVirtualBox::unregisterMachine"/>.
4608 </note>
4609
4610 <result name="VBOX_E_INVALID_VM_STATE">
4611 Virtual machine is not mutable.
4612 </result>
4613
4614 </desc>
4615 </method>
4616
4617 <method name="deleteSettings">
4618 <desc>
4619 Deletes the settings file of this machine from disk.
4620 The machine must not be registered in order for this operation
4621 to succeed.
4622 <note>
4623 <link to="#settingsModified"/> will return TRUE after this
4624 method successfully returns.
4625 </note>
4626 <note>
4627 Calling this method is only valid on instances returned
4628 by <link to="ISession::machine"/> and on new machines
4629 created by <link to="IVirtualBox::createMachine"/> or
4630 opened by <link to="IVirtualBox::openMachine"/> but not
4631 yet registered, or on unregistered machines after calling
4632 <link to="IVirtualBox::unregisterMachine"/>.
4633 </note>
4634 <note>
4635 The deleted machine settings file can be restored (saved again)
4636 by calling <link to="#saveSettings()"/>.
4637 </note>
4638
4639 <result name="VBOX_E_INVALID_VM_STATE">
4640 Cannot delete settings of a registered machine or
4641 machine not mutable.
4642 </result>
4643 <result name="VBOX_E_IPRT_ERROR">
4644 Could not delete the settings file.
4645 </result>
4646
4647 </desc>
4648 </method>
4649
4650 <method name="getSnapshot">
4651 <desc>
4652 Returns a snapshot of this machine with the given UUID.
4653 A <tt>null</tt> UUID can be used to obtain the first snapshot
4654 taken on this machine. This is useful if you want to traverse
4655 the whole tree of snapshots starting from the root.
4656
4657 <result name="VBOX_E_OBJECT_NOT_FOUND">
4658 Virtual machine has no snapshots or snapshot not found.
4659 </result>
4660
4661 </desc>
4662 <param name="id" type="uuid" dir="in">
4663 <desc>UUID of the snapshot to get</desc>
4664 </param>
4665 <param name="snapshot" type="ISnapshot" dir="return">
4666 <desc>Snapshot object with the given UUID.</desc>
4667 </param>
4668 </method>
4669
4670 <method name="findSnapshot">
4671 <desc>
4672 Returns a snapshot of this machine with the given name.
4673
4674 <result name="VBOX_E_OBJECT_NOT_FOUND">
4675 Virtual machine has no snapshots or snapshot not found.
4676 </result>
4677
4678 </desc>
4679 <param name="name" type="wstring" dir="in">
4680 <desc>Name of the snapshot to find</desc>
4681 </param>
4682 <param name="snapshot" type="ISnapshot" dir="return">
4683 <desc>Snapshot object with the given name.</desc>
4684 </param>
4685 </method>
4686
4687 <method name="setCurrentSnapshot">
4688 <desc>
4689 Sets the current snapshot of this machine.
4690 <note>
4691 In the current implementation, this operation is not
4692 implemented.
4693 </note>
4694 </desc>
4695 <param name="id" type="uuid" dir="in">
4696 <desc>UUID of the snapshot to set as the current snapshot.</desc>
4697 </param>
4698 </method>
4699
4700 <method name="createSharedFolder">
4701 <desc>
4702 Creates a new permanent shared folder by associating the given logical
4703 name with the given host path, adds it to the collection of shared
4704 folders and starts sharing it. Refer to the description of
4705 <link to="ISharedFolder"/> to read more about logical names.
4706
4707 <result name="VBOX_E_OBJECT_IN_USE">
4708 Shared folder already exists.
4709 </result>
4710 <result name="VBOX_E_FILE_ERROR">
4711 Shared folder @a hostPath not accessible.
4712 </result>
4713
4714 </desc>
4715 <param name="name" type="wstring" dir="in">
4716 <desc>Unique logical name of the shared folder.</desc>
4717 </param>
4718 <param name="hostPath" type="wstring" dir="in">
4719 <desc>Full path to the shared folder in the host file system.</desc>
4720 </param>
4721 <param name="writable" type="boolean" dir="in">
4722 <desc>Whether the share is writable or readonly</desc>
4723 </param>
4724 </method>
4725
4726 <method name="removeSharedFolder">
4727 <desc>
4728 Removes the permanent shared folder with the given name previously
4729 created by <link to="#createSharedFolder"/> from the collection of
4730 shared folders and stops sharing it.
4731
4732 <result name="VBOX_E_INVALID_VM_STATE">
4733 Virtual machine is not mutable.
4734 </result>
4735 <result name="VBOX_E_OBJECT_NOT_FOUND">
4736 Shared folder @a name does not exist.
4737 </result>
4738
4739 </desc>
4740 <param name="name" type="wstring" dir="in">
4741 <desc>Logical name of the shared folder to remove.</desc>
4742 </param>
4743 </method>
4744
4745 <method name="canShowConsoleWindow">
4746 <desc>
4747 Returns @c true if the VM console process can activate the
4748 console window and bring it to foreground on the desktop of
4749 the host PC.
4750 <note>
4751 This method will fail if a session for this machine is not
4752 currently open.
4753 </note>
4754
4755 <result name="VBOX_E_INVALID_VM_STATE">
4756 Machine session is not open.
4757 </result>
4758
4759 </desc>
4760 <param name="canShow" type="boolean" dir="return">
4761 <desc>
4762 @c true if the console window can be shown and @c
4763 false otherwise.
4764 </desc>
4765 </param>
4766 </method>
4767
4768 <method name="showConsoleWindow">
4769 <desc>
4770 Activates the console window and brings it to foreground on
4771 the desktop of the host PC. Many modern window managers on
4772 many platforms implement some sort of focus stealing
4773 prevention logic, so that it may be impossible to activate
4774 a window without the help of the currently active
4775 application. In this case, this method will return a non-zero
4776 identifier that represents the top-level window of the VM
4777 console process. The caller, if it represents a currently
4778 active process, is responsible to use this identifier (in a
4779 platform-dependent manner) to perform actual window
4780 activation.
4781 <note>
4782 This method will fail if a session for this machine is not
4783 currently open.
4784 </note>
4785
4786 <result name="VBOX_E_INVALID_VM_STATE">
4787 Machine session is not open.
4788 </result>
4789
4790 </desc>
4791 <param name="winId" type="unsigned long long" dir="return">
4792 <desc>
4793 Platform-dependent identifier of the top-level VM console
4794 window, or zero if this method has performed all actions
4795 necessary to implement the <i>show window</i> semantics for
4796 the given platform and/or VirtualBox front-end.
4797 </desc>
4798 </param>
4799 </method>
4800
4801 <method name="getGuestProperty">
4802 <desc>
4803 Reads an entry from the machine's guest property store.
4804
4805 <result name="VBOX_E_INVALID_VM_STATE">
4806 Machine session is not open.
4807 </result>
4808
4809 </desc>
4810 <param name="name" type="wstring" dir="in">
4811 <desc>
4812 The name of the property to read.
4813 </desc>
4814 </param>
4815 <param name="value" type="wstring" dir="out">
4816 <desc>
4817 The value of the property. If the property does not exist then this
4818 will be empty.
4819 </desc>
4820 </param>
4821 <param name="timestamp" type="unsigned long long" dir="out">
4822 <desc>
4823 The time at which the property was last modified, as seen by the
4824 server process.
4825 </desc>
4826 </param>
4827 <param name="flags" type="wstring" dir="out">
4828 <desc>
4829 Additional property parameters, passed as a comma-separated list of
4830 "name=value" type entries.
4831 </desc>
4832 </param>
4833 </method>
4834
4835 <method name="getGuestPropertyValue">
4836 <desc>
4837 Reads a value from the machine's guest property store.
4838
4839 <result name="VBOX_E_INVALID_VM_STATE">
4840 Machine session is not open.
4841 </result>
4842
4843 </desc>
4844 <param name="property" type="wstring" dir="in">
4845 <desc>
4846 The name of the property to read.
4847 </desc>
4848 </param>
4849 <param name="value" type="wstring" dir="return">
4850 <desc>
4851 The value of the property. If the property does not exist then this
4852 will be empty.
4853 </desc>
4854 </param>
4855 </method>
4856
4857 <method name="getGuestPropertyTimestamp">
4858 <desc>
4859 Reads a property timestamp from the machine's guest property store.
4860
4861 <result name="VBOX_E_INVALID_VM_STATE">
4862 Machine session is not open.
4863 </result>
4864
4865 </desc>
4866 <param name="property" type="wstring" dir="in">
4867 <desc>
4868 The name of the property to read.
4869 </desc>
4870 </param>
4871 <param name="value" type="unsigned long long" dir="return">
4872 <desc>
4873 The timestamp. If the property does not exist then this will be
4874 empty.
4875 </desc>
4876 </param>
4877 </method>
4878
4879 <method name="setGuestProperty">
4880 <desc>
4881 Sets, changes or deletes an entry in the machine's guest property
4882 store.
4883
4884 <result name="E_ACCESSDENIED">
4885 Property cannot be changed.
4886 </result>
4887 <result name="E_INVALIDARG">
4888 Invalid @a flags.
4889 </result>
4890 <result name="VBOX_E_INVALID_VM_STATE">
4891 Virtual machine is not mutable or session not open.
4892 </result>
4893 <result name="VBOX_E_INVALID_OBJECT_STATE">
4894 Cannot set transient property when machine not running.
4895 </result>
4896
4897 </desc>
4898 <param name="property" type="wstring" dir="in">
4899 <desc>
4900 The name of the property to set, change or delete.
4901 </desc>
4902 </param>
4903 <param name="value" type="wstring" dir="in">
4904 <desc>
4905 The new value of the property to set, change or delete. If the
4906 property does not yet exist and value is non-empty, it will be
4907 created. If the value is empty, the key will be deleted if it
4908 exists.
4909 </desc>
4910 </param>
4911 <param name="flags" type="wstring" dir="in">
4912 <desc>
4913 Additional property parameters, passed as a comma-separated list of
4914 "name=value" type entries.
4915 </desc>
4916 </param>
4917 </method>
4918
4919 <method name="setGuestPropertyValue">
4920 <desc>
4921 Sets, changes or deletes a value in the machine's guest property
4922 store. The flags field will be left unchanged or created empty for a
4923 new property.
4924
4925 <result name="E_ACCESSDENIED">
4926 Property cannot be changed.
4927 </result>
4928 <result name="VBOX_E_INVALID_VM_STATE">
4929 Virtual machine is not mutable or session not open.
4930 </result>
4931 <result name="VBOX_E_INVALID_OBJECT_STATE">
4932 Cannot set transient property when machine not running.
4933 </result>
4934 </desc>
4935
4936 <param name="property" type="wstring" dir="in">
4937 <desc>
4938 The name of the property to set, change or delete.
4939 </desc>
4940 </param>
4941 <param name="value" type="wstring" dir="in">
4942 <desc>
4943 The new value of the property to set, change or delete. If the
4944 property does not yet exist and value is non-empty, it will be
4945 created. If value is empty, the property will be deleted if it
4946 exists.
4947 </desc>
4948 </param>
4949 </method>
4950
4951 <method name="enumerateGuestProperties">
4952 <desc>
4953 Return a list of the guest properties matching a set of patterns along
4954 with their values, time stamps and flags.
4955 </desc>
4956 <param name="patterns" type="wstring" dir="in">
4957 <desc>
4958 The patterns to match the properties against, separated by '|'
4959 characters. If this is empty or NULL, all properties will match.
4960 </desc>
4961 </param>
4962 <param name="name" type="wstring" dir="out" safearray="yes">
4963 <desc>
4964 The names of the properties returned.
4965 </desc>
4966 </param>
4967 <param name="value" type="wstring" dir="out" safearray="yes">
4968 <desc>
4969 The values of the properties returned. The array entries match the
4970 corresponding entries in the @a name array.
4971 </desc>
4972 </param>
4973 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
4974 <desc>
4975 The time stamps of the properties returned. The array entries match
4976 the corresponding entries in the @a name array.
4977 </desc>
4978 </param>
4979 <param name="flags" type="wstring" dir="out" safearray="yes">
4980 <desc>
4981 The flags of the properties returned. The array entries match the
4982 corresponding entries in the @a name array.
4983 </desc>
4984 </param>
4985 </method>
4986</interface>
4987
4988 <!--
4989 // IConsole
4990 /////////////////////////////////////////////////////////////////////////
4991 -->
4992
4993 <interface
4994 name="IConsoleCallback" extends="$unknown"
4995 uuid="13dfbef3-b74d-487d-bada-2304529aefa6"
4996 wsmap="suppress"
4997 >
4998
4999 <method name="onMousePointerShapeChange">
5000 <desc>
5001 Notification when the guest mouse pointer shape has
5002 changed. The new shape data is given.
5003 </desc>
5004 <param name="visible" type="boolean" dir="in">
5005 <desc>
5006 Flag whether the pointer is visible.
5007 </desc>
5008 </param>
5009 <param name="alpha" type="boolean" dir="in">
5010 <desc>
5011 Flag whether the pointer has an alpha channel.
5012 </desc>
5013 </param>
5014 <param name="xHot" type="unsigned long" dir="in">
5015 <desc>
5016 The pointer hot spot x coordinate.
5017 </desc>
5018 </param>
5019 <param name="yHot" type="unsigned long" dir="in">
5020 <desc>
5021 The pointer hot spot y coordinate.
5022 </desc>
5023 </param>
5024 <param name="width" type="unsigned long" dir="in">
5025 <desc>
5026 Width of the pointer shape in pixels.
5027 </desc>
5028 </param>
5029 <param name="height" type="unsigned long" dir="in">
5030 <desc>
5031 Height of the pointer shape in pixels.
5032 </desc>
5033 </param>
5034 <param name="shape" type="octet" mod="ptr" dir="in">
5035 <desc>
5036 Address of the shape buffer.
5037
5038 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
5039 followed by a 32-bpp XOR (color) mask.
5040
5041 For pointers without alpha channel the XOR mask pixels are 32
5042 bit values: (lsb)BGR0(msb). For pointers with alpha channel
5043 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
5044
5045 An AND mask is used for pointers with alpha channel, so if the
5046 callback does not support alpha, the pointer could be
5047 displayed as a normal color pointer.
5048
5049 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
5050 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
5051 height</tt>. The padding bits at the end of each scanline are
5052 undefined.
5053
5054 The XOR mask follows the AND mask on the next 4-byte aligned
5055 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
5056 Bytes in the gap between the AND and the XOR mask are undefined.
5057 The XOR mask scanlines have no gap between them and the size of
5058 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
5059
5060 <note>
5061 If @a shape is 0, only the pointer visibility is changed.
5062 </note>
5063 </desc>
5064 </param>
5065 </method>
5066
5067 <method name="onMouseCapabilityChange">
5068 <desc>
5069 Notification when the mouse capabilities reported by the
5070 guest have changed. The new capabilities are passed.
5071 </desc>
5072 <param name="supportsAbsolute" type="boolean" dir="in"/>
5073 <param name="needsHostCursor" type="boolean" dir="in"/>
5074 </method>
5075
5076 <method name="onKeyboardLedsChange">
5077 <desc>
5078 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
5079 to alter the state of the keyboard LEDs.
5080 </desc>
5081 <param name="numLock" type="boolean" dir="in"/>
5082 <param name="capsLock" type="boolean" dir="in"/>
5083 <param name="scrollLock" type="boolean" dir="in"/>
5084 </method>
5085
5086 <method name="onStateChange">
5087 <desc>
5088 Notification when the execution state of the machine has changed.
5089 The new state will be given.
5090 </desc>
5091 <param name="state" type="MachineState" dir="in"/>
5092 </method>
5093
5094 <method name="onAdditionsStateChange">
5095 <desc>
5096 Notification when a Guest Additions property changes.
5097 Interested callees should query IGuest attributes to
5098 find out what has changed.
5099 </desc>
5100 </method>
5101
5102 <method name="onDVDDriveChange">
5103 <desc>
5104 Notification when a property of the
5105 virtual <link to="IMachine::DVDDrive">DVD drive</link> changes.
5106 Interested callees should use IDVDDrive methods to find out what has
5107 changed.
5108 </desc>
5109 </method>
5110
5111 <method name="onFloppyDriveChange">
5112 <desc>
5113 Notification when a property of the
5114 virtual <link to="IMachine::floppyDrive">floppy drive</link> changes.
5115 Interested callees should use IFloppyDrive methods to find out what
5116 has changed.
5117 </desc>
5118 </method>
5119
5120 <method name="onNetworkAdapterChange">
5121 <desc>
5122 Notification when a property of one of the
5123 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
5124 changes. Interested callees should use INetworkAdapter methods and
5125 attributes to find out what has changed.
5126 </desc>
5127 <param name="networkAdapter" type="INetworkAdapter" dir="in">
5128 <desc>Network adapter that is subject to change.</desc>
5129 </param>
5130 </method>
5131
5132 <method name="onSerialPortChange">
5133 <desc>
5134 Notification when a property of one of the
5135 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
5136 Interested callees should use ISerialPort methods and attributes
5137 to find out what has changed.
5138 </desc>
5139 <param name="serialPort" type="ISerialPort" dir="in">
5140 <desc>Serial port that is subject to change.</desc>
5141 </param>
5142 </method>
5143
5144 <method name="onParallelPortChange">
5145 <desc>
5146 Notification when a property of one of the
5147 virtual <link to="IMachine::getParallelPort">parallel ports</link>
5148 changes. Interested callees should use ISerialPort methods and
5149 attributes to find out what has changed.
5150 </desc>
5151 <param name="parallelPort" type="IParallelPort" dir="in">
5152 <desc>Parallel port that is subject to change.</desc>
5153 </param>
5154 </method>
5155
5156 <method name="onVRDPServerChange">
5157 <desc>
5158 Notification when a property of the
5159 <link to="IMachine::VRDPServer">VRDP server</link> changes.
5160 Interested callees should use IVRDPServer methods and attributes to
5161 find out what has changed.
5162 </desc>
5163 </method>
5164
5165 <method name="onUSBControllerChange">
5166 <desc>
5167 Notification when a property of the virtual
5168 <link to="IMachine::USBController">USB controller</link> changes.
5169 Interested callees should use IUSBController methods and attributes to
5170 find out what has changed.
5171 </desc>
5172 </method>
5173
5174 <method name="onUSBDeviceStateChange">
5175 <desc>
5176 Notification when a USB device is attached to or detached from
5177 the virtual USB controller.
5178
5179 This notification is sent as a result of the indirect
5180 request to attach the device because it matches one of the
5181 machine USB filters, or as a result of the direct request
5182 issued by <link to="IConsole::attachUSBDevice"/> or
5183 <link to="IConsole::detachUSBDevice"/>.
5184
5185 This notification is sent in case of both a succeeded and a
5186 failed request completion. When the request succeeds, the @a
5187 error parameter is @c null, and the given device has been
5188 already added to (when @a attached is @c true) or removed from
5189 (when @a attached is @c false) the collection represented by
5190 <link to="IConsole::USBDevices"/>. On failure, the collection
5191 doesn't change and the @a error parameter represents the error
5192 message describing the failure.
5193
5194 </desc>
5195 <param name="device" type="IUSBDevice" dir="in">
5196 <desc>Device that is subject to state change.</desc>
5197 </param>
5198 <param name="attached" type="boolean" dir="in">
5199 <desc>
5200 <tt>true</tt> if the device was attached
5201 and <tt>false</tt> otherwise.
5202 </desc>
5203 </param>
5204 <param name="error" type="IVirtualBoxErrorInfo" dir="in">
5205 <desc>
5206 <tt>null</tt> on success or an error message object on
5207 failure.
5208 </desc>
5209 </param>
5210 </method>
5211
5212 <method name="onSharedFolderChange">
5213 <desc>
5214 Notification when a shared folder is added or removed.
5215 The @a scope argument defines one of three scopes:
5216 <link to="IVirtualBox::sharedFolders">global shared folders</link>
5217 (<link to="Scope_Global">Global</link>),
5218 <link to="IMachine::sharedFolders">permanent shared folders</link> of
5219 the machine (<link to="Scope_Machine">Machine</link>) or <link
5220 to="IConsole::sharedFolders">transient shared folders</link> of the
5221 machine (<link to="Scope_Session">Session</link>). Interested callees
5222 should use query the corresponding collections to find out what has
5223 changed.
5224 </desc>
5225 <param name="scope" type="Scope" dir="in">
5226 <desc>Scope of the notification.</desc>
5227 </param>
5228 </method>
5229
5230 <method name="onRuntimeError">
5231 <desc>
5232 Notification when an error happens during the virtual
5233 machine execution.
5234
5235 There are three kinds of runtime errors:
5236 <ul>
5237 <li><i>fatal</i></li>
5238 <li><i>non-fatal with retry</i></li>
5239 <li><i>non-fatal warnings</i></li>
5240 </ul>
5241
5242 <b>Fatal</b> errors are indicated by the @a fatal parameter set
5243 to <tt>true</tt>. In case of fatal errors, the virtual machine
5244 execution is always paused before calling this notification, and
5245 the notification handler is supposed either to immediately save
5246 the virtual machine state using <link to="IConsole::saveState()"/>
5247 or power it off using <link to="IConsole::powerDown()"/>.
5248 Resuming the execution can lead to unpredictable results.
5249
5250 <b>Non-fatal</b> errors and warnings are indicated by the
5251 @a fatal parameter set to <tt>false</tt>. If the virtual machine
5252 is in the Paused state by the time the error notification is
5253 received, it means that the user can <i>try to resume</i> the machine
5254 execution after attempting to solve the problem that caused the
5255 error. In this case, the notification handler is supposed
5256 to show an appropriate message to the user (depending on the
5257 value of the @a id parameter) that offers several actions such
5258 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
5259 wants to retry, the notification handler should continue
5260 the machine execution using the <link to="IConsole::resume()"/>
5261 call. If the machine execution is not Paused during this
5262 notification, then it means this notification is a <i>warning</i>
5263 (for example, about a fatal condition that can happen very soon);
5264 no immediate action is required from the user, the machine
5265 continues its normal execution.
5266
5267 Note that in either case the notification handler
5268 <b>must not</b> perform any action directly on a thread
5269 where this notification is called. Everything it is allowed to
5270 do is to post a message to another thread that will then talk
5271 to the user and take the corresponding action.
5272
5273 Currently, the following error identifiers are known:
5274 <ul>
5275 <li><tt>"HostMemoryLow"</tt></li>
5276 <li><tt>"HostAudioNotResponding"</tt></li>
5277 <li><tt>"VDIStorageFull"</tt></li>
5278 </ul>
5279
5280 <note>
5281 This notification is not designed to be implemented by
5282 more than one callback at a time. If you have multiple
5283 IConsoleCallback instances registered on the given
5284 IConsole object, make sure you simply do nothing but
5285 return @c S_OK from all but one of them that does actual
5286 user notification and performs necessary actions.
5287 </note>
5288
5289 </desc>
5290 <param name="fatal" type="boolean" dir="in">
5291 <desc>Whether the error is fatal or not</desc>
5292 </param>
5293 <param name="id" type="wstring" dir="in">
5294 <desc>Error identifier</desc>
5295 </param>
5296 <param name="message" type="wstring" dir="in">
5297 <desc>Optional error message</desc>
5298 </param>
5299 </method>
5300
5301 <method name="onCanShowWindow">
5302 <desc>
5303 Notification when a call to
5304 <link to="IMachine::canShowConsoleWindow()"/> is made by a
5305 front-end to check if a subsequent call to
5306 <link to="IMachine::showConsoleWindow()"/> can succeed.
5307
5308 The callee should give an answer appropriate to the current
5309 machine state in the @a canShow argument. This answer must
5310 remain valid at least until the next
5311 <link to="IConsole::state">machine state</link> change.
5312
5313 <note>
5314 This notification is not designed to be implemented by
5315 more than one callback at a time. If you have multiple
5316 IConsoleCallback instances registered on the given
5317 IConsole object, make sure you simply do nothing but
5318 return @c true and @c S_OK from all but one of them that
5319 actually manages console window activation.
5320 </note>
5321 </desc>
5322 <param name="canShow" type="boolean" dir="return">
5323 <desc>
5324 @c true if the console window can be shown and @c
5325 false otherwise.
5326 </desc>
5327 </param>
5328 </method>
5329
5330 <method name="onShowWindow">
5331 <desc>
5332 Notification when a call to
5333 <link to="IMachine::showConsoleWindow()"/>
5334 requests the console window to be activated and brought to
5335 foreground on the desktop of the host PC.
5336
5337 This notification should cause the VM console process to
5338 perform the requested action as described above. If it is
5339 impossible to do it at a time of this notification, this
5340 method should return a failure.
5341
5342 Note that many modern window managers on many platforms
5343 implement some sort of focus stealing prevention logic, so
5344 that it may be impossible to activate a window without the
5345 help of the currently active application (which is supposedly
5346 an initiator of this notification). In this case, this method
5347 must return a non-zero identifier that represents the
5348 top-level window of the VM console process. The caller, if it
5349 represents a currently active process, is responsible to use
5350 this identifier (in a platform-dependent manner) to perform
5351 actual window activation.
5352
5353 This method must set @a winId to zero if it has performed all
5354 actions necessary to complete the request and the console
5355 window is now active and in foreground, to indicate that no
5356 further action is required on the caller's side.
5357
5358 <note>
5359 This notification is not designed to be implemented by
5360 more than one callback at a time. If you have multiple
5361 IConsoleCallback instances registered on the given
5362 IConsole object, make sure you simply do nothing but
5363 return @c S_OK from all but one of them that actually
5364 manages console window activation.
5365 </note>
5366 </desc>
5367 <param name="winId" type="unsigned long long" dir="return">
5368 <desc>
5369 Platform-dependent identifier of the top-level VM console
5370 window, or zero if this method has performed all actions
5371 necessary to implement the <i>show window</i> semantics for
5372 the given platform and/or this VirtualBox front-end.
5373 </desc>
5374 </param>
5375 </method>
5376
5377 </interface>
5378
5379 <interface
5380 name="IRemoteDisplayInfo" extends="$unknown"
5381 uuid="550104cd-2dfd-4a6c-857d-f6f8e088e62c"
5382 wsmap="struct"
5383 >
5384 <desc>
5385 Contains information about the remote display (VRDP) capabilities and status.
5386 This is used in the <link to="IConsole::remoteDisplayInfo" /> attribute.
5387 </desc>
5388
5389 <attribute name="active" type="boolean" readonly="yes">
5390 <desc>
5391 Whether the remote display connection is active.
5392 </desc>
5393 </attribute>
5394
5395 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
5396 <desc>
5397 How many times a client connected.
5398 </desc>
5399 </attribute>
5400
5401 <attribute name="beginTime" type="long long" readonly="yes">
5402 <desc>
5403 When the last connection was established, in milliseconds since 1970-01-01 UTC.
5404 </desc>
5405 </attribute>
5406
5407 <attribute name="endTime" type="long long" readonly="yes">
5408 <desc>
5409 When the last connection was terminated or the current time, if
5410 connection is still active, in milliseconds since 1970-01-01 UTC.
5411 </desc>
5412 </attribute>
5413
5414 <attribute name="bytesSent" type="unsigned long long" readonly="yes">
5415 <desc>
5416 How many bytes were sent in last or current, if still active, connection.
5417 </desc>
5418 </attribute>
5419
5420 <attribute name="bytesSentTotal" type="unsigned long long" readonly="yes">
5421 <desc>
5422 How many bytes were sent in all connections.
5423 </desc>
5424 </attribute>
5425
5426 <attribute name="bytesReceived" type="unsigned long long" readonly="yes">
5427 <desc>
5428 How many bytes were received in last or current, if still active, connection.
5429 </desc>
5430 </attribute>
5431
5432 <attribute name="bytesReceivedTotal" type="unsigned long long" readonly="yes">
5433 <desc>
5434 How many bytes were received in all connections.
5435 </desc>
5436 </attribute>
5437
5438 <attribute name="user" type="wstring" readonly="yes">
5439 <desc>
5440 Login user name supplied by the client.
5441 </desc>
5442 </attribute>
5443
5444 <attribute name="domain" type="wstring" readonly="yes">
5445 <desc>
5446 Login domain name supplied by the client.
5447 </desc>
5448 </attribute>
5449
5450 <attribute name="clientName" type="wstring" readonly="yes">
5451 <desc>
5452 The client name supplied by the client.
5453 </desc>
5454 </attribute>
5455
5456 <attribute name="clientIP" type="wstring" readonly="yes">
5457 <desc>
5458 The IP address of the client.
5459 </desc>
5460 </attribute>
5461
5462 <attribute name="clientVersion" type="unsigned long" readonly="yes">
5463 <desc>
5464 The client software version number.
5465 </desc>
5466 </attribute>
5467
5468 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
5469 <desc>
5470 Public key exchange method used when connection was established.
5471 Values: 0 - RDP4 public key exchange scheme.
5472 1 - X509 certificates were sent to client.
5473 </desc>
5474 </attribute>
5475
5476 </interface>
5477
5478 <interface
5479 name="IConsole" extends="$unknown"
5480 uuid="e3c6d4a1-a935-47ca-b16d-f9e9c496e53e"
5481 wsmap="managed"
5482 >
5483 <desc>
5484 The IConsole interface represents an interface to control virtual
5485 machine execution.
5486
5487 The console object that implements the IConsole interface is obtained
5488 from a session object after the session for the given machine has been
5489 opened using one of <link to="IVirtualBox::openSession"/>,
5490 <link to="IVirtualBox::openRemoteSession"/> or
5491 <link to="IVirtualBox::openExistingSession"/> methods.
5492
5493 Methods of the IConsole interface allow the caller to query the current
5494 virtual machine execution state, pause the machine or power it down, save
5495 the machine state or take a snapshot, attach and detach removable media
5496 and so on.
5497
5498 <see>ISession</see>
5499 </desc>
5500
5501 <attribute name="machine" type="IMachine" readonly="yes">
5502 <desc>
5503 Machine object this console is sessioned with.
5504 <note>
5505 This is a convenience property, it has the same value as
5506 <link to="ISession::machine"/> of the corresponding session
5507 object.
5508 </note>
5509 </desc>
5510 </attribute>
5511
5512 <attribute name="state" type="MachineState" readonly="yes">
5513 <desc>
5514 Current execution state of the machine.
5515 <note>
5516 This property always returns the same value as the corresponding
5517 property of the IMachine object this console is sessioned with.
5518 For the process that owns (executes) the VM, this is the
5519 preferable way of querying the VM state, because no IPC
5520 calls are made.
5521 </note>
5522 </desc>
5523 </attribute>
5524
5525 <attribute name="guest" type="IGuest" readonly="yes">
5526 <desc>Guest object.</desc>
5527 </attribute>
5528
5529 <attribute name="keyboard" type="IKeyboard" readonly="yes">
5530 <desc>
5531 Virtual keyboard object.
5532 <note>
5533 If the machine is not running, any attempt to use
5534 the returned object will result in an error.
5535 </note>
5536 </desc>
5537 </attribute>
5538
5539 <attribute name="mouse" type="IMouse" readonly="yes">
5540 <desc>
5541 Virtual mouse object.
5542 <note>
5543 If the machine is not running, any attempt to use
5544 the returned object will result in an error.
5545 </note>
5546 </desc>
5547 </attribute>
5548
5549 <attribute name="display" type="IDisplay" readonly="yes">
5550 <desc>Virtual display object.
5551 <note>
5552 If the machine is not running, any attempt to use
5553 the returned object will result in an error.
5554 </note>
5555 </desc>
5556 </attribute>
5557
5558 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
5559 <desc>Debugging interface.</desc>
5560 </attribute>
5561
5562 <attribute name="USBDevices" type="IUSBDeviceCollection" readonly="yes">
5563 <desc>
5564 Collection of USB devices currently attached to the virtual
5565 USB controller.
5566 <note>
5567 The collection is empty if the machine is not running.
5568 </note>
5569 </desc>
5570 </attribute>
5571
5572 <attribute name="remoteUSBDevices" type="IHostUSBDeviceCollection" readonly="yes">
5573 <desc>
5574 List of USB devices currently attached to the remote VRDP client.
5575 Once a new device is physically attached to the remote host computer,
5576 it appears in this list and remains there until detached.
5577 </desc>
5578 </attribute>
5579
5580 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
5581 <desc>
5582 Collection of shared folders for the current session. These folders
5583 are called transient shared folders because they are available to the
5584 guest OS running inside the associated virtual machine only for the
5585 duration of the session (as opposed to
5586 <link to="IMachine::sharedFolders"/> which represent permanent shared
5587 folders). When the session is closed (e.g. the machine is powered down),
5588 these folders are automatically discarded.
5589
5590 New shared folders are added to the collection using
5591 <link to="#createSharedFolder"/>. Existing shared folders can be
5592 removed using <link to="#removeSharedFolder"/>.
5593 </desc>
5594 </attribute>
5595
5596 <attribute name="remoteDisplayInfo" type="IRemoteDisplayInfo" readonly="yes">
5597 <desc>
5598 Interface that provides information on Remote Display (VRDP) connection.
5599 </desc>
5600 </attribute>
5601
5602 <method name="powerUp">
5603 <desc>
5604 Starts the virtual machine execution using the current machine
5605 state (that is, its current execution state, current settings and
5606 current hard disks).
5607
5608 If the machine is powered off or aborted, the execution will
5609 start from the beginning (as if the real hardware were just
5610 powered on).
5611
5612 If the machine is in the <link to="MachineState_Saved"/> state,
5613 it will continue its execution the point where the state has
5614 been saved.
5615
5616 <note>
5617 Unless you are trying to write a new VirtualBox front-end that
5618 performs direct machine execution (like the VirtualBox or VBoxSDL
5619 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
5620 session opened by <link to="IVirtualBox::openSession"/> and use this
5621 session only to change virtual machine settings. If you simply want to
5622 start virtual machine execution using one of the existing front-ends
5623 (for example the VirtualBox GUI or headless server), simply use
5624 <link to="IVirtualBox::openRemoteSession"/>; these front-ends will
5625 power up the machine automatically for you.
5626 </note>
5627
5628 <see>#saveState</see>
5629 <result name="VBOX_E_INVALID_VM_STATE">
5630 Virtual machine already running.
5631 </result>
5632 <result name="VBOX_E_HOST_ERROR">
5633 Host interface does not exist or name not set.
5634 </result>
5635 <result name="VBOX_E_FILE_ERROR">
5636 Invalid saved state file.
5637 </result>
5638 </desc>
5639 <param name="progress" type="IProgress" dir="return">
5640 <desc>Progress object to track the operation completion.</desc>
5641 </param>
5642 </method>
5643
5644 <method name="powerUpPaused">
5645 <desc>
5646 Identical to powerUp except that the VM will enter the
5647 <link to="MachineState_Paused"/> state, instead of
5648 <link to="MachineState_Running"/>.
5649
5650 <see>#powerUp</see>
5651 <result name="VBOX_E_INVALID_VM_STATE">
5652 Virtual machine already running.
5653 </result>
5654 <result name="VBOX_E_HOST_ERROR">
5655 Host interface does not exist or name not set.
5656 </result>
5657 <result name="VBOX_E_FILE_ERROR">
5658 Invalid saved state file.
5659 </result>
5660 </desc>
5661 <param name="progress" type="IProgress" dir="return">
5662 <desc>Progress object to track the operation completion.</desc>
5663 </param>
5664 </method>
5665
5666 <method name="powerDown">
5667 <desc>
5668 Stops the virtual machine execution.
5669 After this operation completes, the machine will go to the
5670 PoweredOff state.
5671
5672 @deprecated This method will be removed in VirtualBox 2.1 where the
5673 powerDownAsync() method will take its name. Do not use this method in
5674 the code.
5675 <result name="VBOX_E_INVALID_VM_STATE">
5676 Virtual machine must be Running, Paused or Stuck to be powered down.
5677 </result>
5678 <result name="VBOX_E_VM_ERROR">
5679 Unable to power off or destroy virtual machine.
5680 </result>
5681 </desc>
5682 </method>
5683
5684 <method name="powerDownAsync">
5685 <desc>
5686 Initiates the power down procedure to stop the virtual machine
5687 execution.
5688
5689 The completion of the power down procedure is tracked using the returned
5690 IProgress object. After the operation is complete, the machine will go
5691 to the PoweredOff state.
5692
5693 @warning This method will be renamed to "powerDown" in VirtualBox 2.1
5694 where the original powerDown() method will be removed. You will need to
5695 rename "powerDownAsync" to "powerDown" in your sources to make them
5696 build with version 2.1.
5697 <result name="VBOX_E_INVALID_VM_STATE">
5698 Virtual machine must be Running, Paused or Stuck to be powered down.
5699 </result>
5700 </desc>
5701 <param name="progress" type="IProgress" dir="return">
5702 <desc>Progress object to track the operation completion.</desc>
5703 </param>
5704 </method>
5705
5706 <method name="reset">
5707 <desc>Resets the virtual machine.
5708 <result name="VBOX_E_INVALID_VM_STATE">
5709 Virtual machine not in Running state.
5710 </result>
5711 <result name="VBOX_E_VM_ERROR">
5712 Virtual machine error in reset operation.
5713 </result>
5714 </desc>
5715 </method>
5716
5717 <method name="pause">
5718 <desc>Pauses the virtual machine execution.
5719 <result name="VBOX_E_INVALID_VM_STATE">
5720 Virtual machine not in Running state.
5721 </result>
5722 <result name="VBOX_E_VM_ERROR">
5723 Virtual machine error in suspend operation.
5724 </result>
5725 </desc>
5726 </method>
5727
5728 <method name="resume">
5729 <desc>Resumes the virtual machine execution.
5730 <result name="VBOX_E_INVALID_VM_STATE">
5731 Virtual machine not in Paused state.
5732 </result>
5733 <result name="VBOX_E_VM_ERROR">
5734 Virtual machine error in resume operation.
5735 </result>
5736 </desc>
5737 </method>
5738
5739 <method name="powerButton">
5740 <desc>Sends the ACPI power button event to the guest.
5741 <result name="VBOX_E_INVALID_VM_STATE">
5742 Virtual machine not in Running state.
5743 </result>
5744 <result name="VBOX_E_PDM_ERROR">
5745 Controlled power off failed.
5746 </result>
5747 </desc>
5748 </method>
5749
5750 <method name="sleepButton">
5751 <desc>Sends the ACPI sleep button event to the guest.
5752 <result name="VBOX_E_INVALID_VM_STATE">
5753 Virtual machine not in Running state.
5754 </result>
5755 <result name="VBOX_E_PDM_ERROR">
5756 Sending sleep button event failed.
5757 </result>
5758 </desc>
5759 </method>
5760
5761 <method name="getPowerButtonHandled">
5762 <desc>Checks if the last power button event was handled by guest.
5763 <result name="VBOX_E_PDM_ERROR">
5764 Checking if the event was handled by the guest OS failed.
5765 </result>
5766 </desc>
5767 <param name="handled" type="boolean" dir="return"/>
5768 </method>
5769
5770 <method name="getGuestEnteredACPIMode">
5771 <desc>Checks if the guest entered the ACPI mode G0 (working) or
5772 G1 (sleeping). If this method returns false, the guest will
5773 most likely not respond to external ACPI events.
5774 <result name="VBOX_E_INVALID_VM_STATE">
5775 Virtual machine not in Running state.
5776 </result>
5777 </desc>
5778 <param name="entered" type="boolean" dir="return"/>
5779 </method>
5780
5781 <method name="saveState">
5782 <desc>
5783 Saves the current execution state of a running virtual machine
5784 and stops its execution.
5785
5786 After this operation completes, the machine will go to the
5787 Saved state. Next time it is powered up, this state will
5788 be restored and the machine will continue its execution from
5789 the place where it was saved.
5790
5791 This operation differs from taking a snapshot to the effect
5792 that it doesn't create new differencing hard disks. Also, once
5793 the machine is powered up from the state saved using this method,
5794 the saved state is deleted, so it will be impossible to return
5795 to this state later.
5796
5797 <note>
5798 On success, this method implicitly calls
5799 <link to="IMachine::saveSettings()"/> to save all current machine
5800 settings (including runtime changes to the DVD drive, etc.).
5801 Together with the impossibility to change any VM settings when it is
5802 in the Saved state, this guarantees adequate hardware
5803 configuration of the machine when it is restored from the saved
5804 state file.
5805 </note>
5806
5807 <note>
5808 The machine must be in the Running or Paused state, otherwise
5809 the operation will fail.
5810 </note>
5811 <result name="VBOX_E_INVALID_VM_STATE">
5812 Virtual machine state neither Running nor Paused.
5813 </result>
5814 <result name="VBOX_E_FILE_ERROR">
5815 Failed to create directory for saved state file.
5816 </result>
5817
5818 <see><link to="#takeSnapshot"/></see>
5819 </desc>
5820 <param name="progress" type="IProgress" dir="return">
5821 <desc>Progress object to track the operation completion.</desc>
5822 </param>
5823 </method>
5824
5825 <method name="adoptSavedState">
5826 <desc>
5827 Associates the given saved state file to the virtual machine.
5828
5829 On success, the machine will go to the Saved state. Next time it is
5830 powered up, it will be restored from the adopted saved state and
5831 continue execution from the place where the saved state file was
5832 created.
5833
5834 The specified saved state file path may be absolute or relative to the
5835 folder the VM normally saves the state to (usually,
5836 <link to="IMachine::snapshotFolder"/>).
5837
5838 <note>
5839 It's a caller's responsibility to make sure the given saved state
5840 file is compatible with the settings of this virtual machine that
5841 represent its virtual hardware (memory size, hard disk configuration
5842 etc.). If there is a mismatch, the behavior of the virtual machine
5843 is undefined.
5844 </note>
5845 <result name="VBOX_E_INVALID_VM_STATE">
5846 Virtual machine state neither PoweredOff nor Aborted.
5847 </result>
5848 </desc>
5849 <param name="savedStateFile" type="wstring" dir="in">
5850 <desc>Path to the saved state file to adopt.</desc>
5851 </param>
5852 </method>
5853
5854 <method name="discardSavedState">
5855 <desc>
5856 Discards (deletes) the saved state of the virtual machine
5857 previously created by <link to="#saveState"/>. Next time the
5858 machine is powered up, a clean boot will occur.
5859 <note>
5860 This operation is equivalent to resetting or powering off
5861 the machine without doing a proper shutdown in the guest OS.
5862 </note>
5863 <result name="VBOX_E_INVALID_VM_STATE">
5864 Virtual machine not in state Saved.
5865 </result>
5866 </desc>
5867 </method>
5868
5869 <method name="getDeviceActivity">
5870 <desc>
5871 Gets the current activity type of a given device or device group.
5872 <result name="E_INVALIDARG">
5873 Invalid device type.
5874 </result>
5875 </desc>
5876 <param name="type" type="DeviceType" dir="in"/>
5877 <param name="activity" type="DeviceActivity" dir="return"/>
5878 </method>
5879
5880 <method name="attachUSBDevice">
5881 <desc>
5882 Attaches a host USB device with the given UUID to the
5883 USB controller of the virtual machine.
5884
5885 The device needs to be in one of the following states:
5886 <link to="USBDeviceState_Busy"/>,
5887 <link to="USBDeviceState_Available"/> or
5888 <link to="USBDeviceState_Held"/>,
5889 otherwise an error is immediately returned.
5890
5891 When the device state is
5892 <link to="USBDeviceState_Busy">Busy</link>, an error may also
5893 be returned if the host computer refuses to release it for some reason.
5894
5895 <see>IUSBController::deviceFilters, USBDeviceState</see>
5896 <result name="VBOX_E_INVALID_VM_STATE">
5897 Virtual machine state neither Running nor Paused.
5898 </result>
5899 <result name="VBOX_E_PDM_ERROR">
5900 Virtual machine does not have a USB controller.
5901 </result>
5902 </desc>
5903 <param name="id" type="uuid" dir="in">
5904 <desc>UUID of the host USB device to attach.</desc>
5905 </param>
5906 </method>
5907
5908 <method name="detachUSBDevice">
5909 <desc>
5910 Detaches an USB device with the given UUID from the USB controller
5911 of the virtual machine.
5912
5913 After this method succeeds, the VirtualBox server re-initiates
5914 all USB filters as if the device were just physically attached
5915 to the host, but filters of this machine are ignored to avoid
5916 a possible automatic re-attachment.
5917
5918 <see>IUSBController::deviceFilters, USBDeviceState</see>
5919
5920 <result name="VBOX_E_PDM_ERROR">
5921 Virtual machine does not have a USB controller.
5922 </result>
5923 <result name="E_INVALIDARG">
5924 USB device not attached to this virtual machine.
5925 </result>
5926 </desc>
5927 <param name="id" type="uuid" dir="in">
5928 <desc>UUID of the USB device to detach.</desc>
5929 </param>
5930 <param name="device" type="IUSBDevice" dir="return">
5931 <desc>Detached USB device.</desc>
5932 </param>
5933 </method>
5934
5935 <method name="createSharedFolder">
5936 <desc>
5937 Creates a transient new shared folder by associating the given logical
5938 name with the given host path, adds it to the collection of shared
5939 folders and starts sharing it. Refer to the description of
5940 <link to="ISharedFolder"/> to read more about logical names.
5941
5942 <result name="VBOX_E_INVALID_VM_STATE">
5943 Virtual machine in Saved state or currently changing state.
5944 </result>
5945 <result name="VBOX_E_FILE_ERROR">
5946 Shared folder already exists or not accessible.
5947 </result>
5948 </desc>
5949 <param name="name" type="wstring" dir="in">
5950 <desc>Unique logical name of the shared folder.</desc>
5951 </param>
5952 <param name="hostPath" type="wstring" dir="in">
5953 <desc>Full path to the shared folder in the host file system.</desc>
5954 </param>
5955 <param name="writable" type="boolean" dir="in">
5956 <desc>Whether the share is writable or readonly</desc>
5957 </param>
5958 </method>
5959
5960 <method name="removeSharedFolder">
5961 <desc>
5962 Removes a transient shared folder with the given name previously
5963 created by <link to="#createSharedFolder"/> from the collection of
5964 shared folders and stops sharing it.
5965 <result name="VBOX_E_INVALID_VM_STATE">
5966 Virtual machine in Saved state or currently changing state.
5967 </result>
5968 <result name="VBOX_E_FILE_ERROR">
5969 Shared folder does not exists.
5970 </result>
5971 </desc>
5972 <param name="name" type="wstring" dir="in">
5973 <desc>Logical name of the shared folder to remove.</desc>
5974 </param>
5975 </method>
5976
5977 <method name="takeSnapshot">
5978 <desc>
5979 Saves the current execution state and all settings of the
5980 machine and creates differencing images for all
5981 normal (non-independent) hard disks.
5982
5983 This method can be called for a PoweredOff, Saved, Running or
5984 Paused virtual machine. When the machine is PoweredOff, an
5985 offline <link to="ISnapshot">snapshot</link> is created,
5986 in all other cases -- an online snapshot.
5987
5988 The taken snapshot is always based on the
5989 <link to="IMachine::currentSnapshot">current
5990 snapshot</link> of the associated virtual machine and becomes
5991 a new current snapshot.
5992
5993 <note>
5994 This method implicitly calls <link to="IMachine::saveSettings()"/> to
5995 save all current machine settings before taking an offline snapshot.
5996 </note>
5997
5998 <see>ISnapshot, <link to="#saveState"/></see>
5999 <result name="VBOX_E_INVALID_VM_STATE">
6000 Virtual machine currently changing state.
6001 </result>
6002 </desc>
6003 <param name="name" type="wstring" dir="in">
6004 <desc>Short name for the snapshot.</desc>
6005 </param>
6006 <param name="description" type="wstring" dir="in">
6007 <desc>Optional description of the snapshot.</desc>
6008 </param>
6009 <param name="progress" type="IProgress" dir="return">
6010 <desc>Progress object to track the operation completion.</desc>
6011 </param>
6012 </method>
6013
6014 <method name="discardSnapshot">
6015 <desc>
6016
6017 Starts discarding the specified snapshot. The execution state
6018 and settings of the associated machine stored in the snapshot
6019 will be deleted. The contents of all differencing hard disks of
6020 this snapshot will be merged with the contents of their
6021 dependent child hard disks to keep the, disks valid (in other
6022 words, all changes represented by hard disks being discarded
6023 will be propagated to their child hard disks). After that, this
6024 snapshot's differencing hard disks will be deleted. The parent
6025 of this snapshot will become a new parent for all its child
6026 snapshots.
6027
6028 If the discarded snapshot is the current one, its parent
6029 snapshot will become a new current snapshot. The current machine
6030 state is not directly affected in this case, except that
6031 currently attached differencing hard disks based on hard disks
6032 of the discarded snapshot will be also merged as described
6033 above.
6034
6035 If the discarded snapshot is the first one (the root snapshot)
6036 and it has exactly one child snapshot, this child snapshot will
6037 become the first snapshot after discarding. If there are no
6038 children at all (i.e. the first snapshot is the only snapshot of
6039 the machine), both the current and the first snapshot of the
6040 machine will be set to null. In all other cases, the first
6041 snapshot cannot be discarded.
6042
6043 You cannot discard the snapshot if it
6044 stores <link to="HardDiskType_Normal">normal</link> (non-differencing)
6045 hard disks that have differencing hard disks based on them. Snapshots of
6046 such kind can be discarded only when every normal hard disk has either
6047 no children at all or exactly one child. In the former case, the normal
6048 hard disk simply becomes unused (i.e. not attached to any VM). In the
6049 latter case, it receives all the changes stored in the child hard disk,
6050 and then it replaces the child hard disk in the configuration of the
6051 corresponding snapshot or machine.
6052
6053 Also, you cannot discard the snapshot if it stores hard disks
6054 (of any type) having differencing child hard disks that belong
6055 to other machines. Such snapshots can be only discarded after
6056 you discard all snapshots of other machines containing "foreign"
6057 child disks, or detach these "foreign" child disks from machines
6058 they are attached to.
6059
6060 One particular example of the snapshot storing normal hard disks
6061 is the first snapshot of a virtual machine that had normal hard
6062 disks attached when taking the snapshot. Be careful when
6063 discarding such snapshots because this implicitly commits
6064 changes (made since the snapshot being discarded has been taken)
6065 to normal hard disks (as described above), which may be not what
6066 you want.
6067
6068 The virtual machine is put to
6069 the <link to="MachineState_Discarding">Discarding</link> state until
6070 the discard operation is completed.
6071
6072 <note>
6073 The machine must not be running, otherwise the operation
6074 will fail.
6075 </note>
6076
6077 <note>
6078 Child hard disks of all normal hard disks of the discarded snapshot
6079 must be accessible (see <link to="IMedium::state"/>) for this
6080 operation to succeed. In particular, this means that all virtual
6081 machines, whose hard disks are directly or indirectly based on the
6082 hard disks of discarded snapshot, must be powered off.
6083 </note>
6084 <note>
6085 Merging hard disk contents can be very time and disk space
6086 consuming, if these disks are big in size and have many
6087 children. However, if the snapshot being discarded is the last
6088 (head) snapshot on the branch, the operation will be rather
6089 quick.
6090 </note>
6091 <note>
6092 Note that discarding the current snapshot
6093 will implicitly call <link to="IMachine::saveSettings()"/> to
6094 make all current machine settings permanent.
6095 </note>
6096 <result name="VBOX_E_INVALID_VM_STATE">
6097 Virtual machine is running.
6098 </result>
6099 </desc>
6100 <param name="id" type="uuid" dir="in">
6101 <desc>UUID of the snapshot to discard.</desc>
6102 </param>
6103 <param name="progress" type="IProgress" dir="return">
6104 <desc>Progress object to track the operation completion.</desc>
6105 </param>
6106 </method>
6107
6108 <method name="discardCurrentState">
6109 <desc>
6110 This operation is similar to <link to="#discardSnapshot()"/> but
6111 affects the current machine state. This means that the state stored in
6112 the current snapshot will become a new current state, and all current
6113 settings of the machine and changes stored in differencing hard disks
6114 will be lost.
6115
6116 After this operation is successfully completed, new empty differencing
6117 hard disks are created for all normal hard disks of the machine.
6118
6119 If the current snapshot of the machine is an online snapshot, the
6120 machine will go to the <link to="MachineState_Saved"> saved
6121 state</link>, so that the next time it is powered on, the execution
6122 state will be restored from the current snapshot.
6123
6124 <note>
6125 The machine must not be running, otherwise the operation will fail.
6126 </note>
6127
6128 <note>
6129 If the machine state is <link to="MachineState_Saved">Saved</link>
6130 prior to this operation, the saved state file will be implicitly
6131 discarded (as if <link to="IConsole::discardSavedState()"/> were
6132 called).
6133 </note>
6134
6135 <result name="VBOX_E_INVALID_VM_STATE">
6136 Virtual machine is running.
6137 </result>
6138 </desc>
6139 <param name="progress" type="IProgress" dir="return">
6140 <desc>Progress object to track the operation completion.</desc>
6141 </param>
6142 </method>
6143
6144 <method name="discardCurrentSnapshotAndState">
6145 <desc>
6146
6147 This method is equivalent to
6148 doing <link to="IConsole::discardSnapshot">discardSnapshot</link>
6149 (currentSnapshot.id(), progress) followed by
6150 <link to="#discardCurrentState()"/>.
6151
6152 As a result, the machine will be fully restored from the
6153 snapshot preceding the current snapshot, while both the current
6154 snapshot and the current machine state will be discarded.
6155
6156 If the current snapshot is the first snapshot of the machine (i.e. it
6157 has the only snapshot), the current machine state will be
6158 discarded <b>before</b> discarding the snapshot. In other words, the
6159 machine will be restored from its last snapshot, before discarding
6160 it. This differs from performing a single
6161 <link to="#discardSnapshot()"/> call (note that no
6162 <link to="#discardCurrentState()"/> will be possible after it)
6163 to the effect that the latter will preserve the current state instead of
6164 discarding it.
6165
6166 Unless explicitly mentioned otherwise, all remarks and
6167 limitations of the above two methods also apply to this method.
6168
6169 <note>
6170 The machine must not be running, otherwise the operation
6171 will fail.
6172 </note>
6173
6174 <note>
6175 If the machine state is <link to="MachineState_Saved">Saved</link>
6176 prior to this operation, the saved state file will be implicitly
6177 discarded (as if <link to="#discardSavedState()"/> were
6178 called).
6179 </note>
6180
6181 <note>
6182 This method is more efficient than calling both of the above
6183 methods separately: it requires less IPC calls and provides
6184 a single progress object.
6185 </note>
6186
6187 <result name="VBOX_E_INVALID_VM_STATE">
6188 Virtual machine is running.
6189 </result>
6190 </desc>
6191 <param name="progress" type="IProgress" dir="return">
6192 <desc>Progress object to track the operation completion.</desc>
6193 </param>
6194 </method>
6195
6196 <method name="registerCallback">
6197 <desc>
6198 Registers a new console callback on this instance. The methods of the
6199 callback interface will be called by this instance when the appropriate
6200 event occurs.
6201 </desc>
6202 <param name="callback" type="IConsoleCallback" dir="in"/>
6203 </method>
6204
6205 <method name="unregisterCallback">
6206 <desc>
6207 Unregisters the console callback previously registered using
6208 <link to="#registerCallback"/>.
6209 <result name="E_INVALIDARG">
6210 Given @a callback handler is not registered.
6211 </result>
6212 </desc>
6213 <param name="callback" type="IConsoleCallback" dir="in"/>
6214 </method>
6215 </interface>
6216
6217 <!--
6218 // IHost
6219 /////////////////////////////////////////////////////////////////////////
6220 -->
6221
6222 <interface
6223 name="IHostDVDDrive" extends="$unknown"
6224 uuid="21f86694-202d-4ce4-8b05-a63ff82dbf4c"
6225 wsmap="managed"
6226 >
6227 <desc>
6228 The IHostDVDDrive interface represents the physical CD/DVD drive
6229 hardware on the host. Used indirectly in <link to="IHost::DVDDrives"/>.
6230 </desc>
6231
6232 <attribute name="name" type="wstring" readonly="yes">
6233 <desc>
6234 Returns the platform-specific device identifier.
6235 On DOS-like platforms, it is a drive name (e.g. R:).
6236 On Unix-like platforms, it is a device name (e.g. /dev/hdc).
6237 </desc>
6238 </attribute>
6239 <attribute name="description" type="wstring" readonly="yes">
6240 <desc>
6241 Returns a human readable description for the drive. This
6242 description usually contains the product and vendor name. A
6243 @c null string is returned if the description is not available.
6244 </desc>
6245 </attribute>
6246 <attribute name="udi" type="wstring" readonly="yes">
6247 <desc>
6248 Returns the unique device identifier for the drive. This
6249 attribute is reserved for future use instead of
6250 <link to="#name"/>. Currently it is not used and may return
6251 @c null on some platforms.
6252 </desc>
6253 </attribute>
6254
6255 </interface>
6256
6257 <enumerator
6258 name="IHostDVDDriveEnumerator" type="IHostDVDDrive"
6259 uuid="1ed7cfaf-c363-40df-aa4e-89c1afb7d96b"
6260 />
6261
6262 <collection
6263 name="IHostDVDDriveCollection" type="IHostDVDDrive"
6264 enumerator="IHostDVDDriveEnumerator"
6265 uuid="1909c533-1a1e-445f-a4e1-a267cffc30ed"
6266 readonly="yes"
6267 >
6268 <method name="findByName">
6269 <desc>
6270 Searches this collection for a host drive with the given name.
6271 <note>
6272 The method returns an error if the given name does not
6273 correspond to any host drive in the collection.
6274 </note>
6275 </desc>
6276 <param name="name" type="wstring" dir="in">
6277 <desc>Name of the host drive to search for</desc>
6278 </param>
6279 <param name="drive" type="IHostDVDDrive" dir="return">
6280 <desc>Found host drive object</desc>
6281 </param>
6282 </method>
6283 </collection>
6284
6285 <interface
6286 name="IHostFloppyDrive" extends="$unknown"
6287 uuid="b6a4d1a9-4221-43c3-bd52-021a5daa9ed2"
6288 wsmap="managed"
6289 >
6290 <desc>
6291 The IHostFloppyDrive interface represents the physical floppy drive
6292 hardware on the host. Used indirectly in <link to="IHost::floppyDrives"/>.
6293 </desc>
6294 <attribute name="name" type="wstring" readonly="yes">
6295 <desc>
6296 Returns the platform-specific device identifier.
6297 On DOS-like platforms, it is a drive name (e.g. A:).
6298 On Unix-like platforms, it is a device name (e.g. /dev/fd0).
6299 </desc>
6300 </attribute>
6301 <attribute name="description" type="wstring" readonly="yes">
6302 <desc>
6303 Returns a human readable description for the drive. This
6304 description usually contains the product and vendor name. A
6305 @c null string is returned if the description is not available.
6306 </desc>
6307 </attribute>
6308 <attribute name="udi" type="wstring" readonly="yes">
6309 <desc>
6310 Returns the unique device identifier for the drive. This
6311 attribute is reserved for future use instead of
6312 <link to="#name"/>. Currently it is not used and may return
6313 @c null on some platforms.
6314 </desc>
6315 </attribute>
6316 </interface>
6317
6318 <enumerator
6319 name="IHostFloppyDriveEnumerator" type="IHostFloppyDrive"
6320 uuid="ce04c924-4f54-432a-9dec-11fddc3ea875"
6321 />
6322
6323 <collection
6324 name="IHostFloppyDriveCollection" type="IHostFloppyDrive"
6325 enumerator="IHostFloppyDriveEnumerator"
6326 uuid="fd84bb86-c59a-4037-a557-755ff263a460"
6327 readonly="yes"
6328 >
6329 <method name="findByName">
6330 <desc>
6331 Searches this collection for a host drive with the given name.
6332 <note>
6333 The method returns an error if the given name does not
6334 correspond to any host drive in the collection.
6335 </note>
6336 </desc>
6337 <param name="name" type="wstring" dir="in">
6338 <desc>Name of the host drive to search for</desc>
6339 </param>
6340 <param name="drive" type="IHostFloppyDrive" dir="return">
6341 <desc>Found host drive object</desc>
6342 </param>
6343 </method>
6344 </collection>
6345
6346 <enum
6347 name="HostNetworkInterfaceType"
6348 uuid="763754FA-3246-4539-9590-9E603EDBF706"
6349 >
6350 <desc>
6351 Type of encapsulation. Ethernet encapsulation includes both wired and
6352 wireless Ethernet connections.
6353 <see>IHostNetworkInterface</see>
6354 </desc>
6355
6356 <const name="Unknown" value="0">
6357 <desc>
6358 The type of interface cannot be determined.
6359 </desc>
6360 </const>
6361 <const name="Ethernet" value="1">
6362 <desc>
6363 Ethernet frame encapsulation.
6364 </desc>
6365 </const>
6366 <const name="PPP" value="2">
6367 <desc>
6368 Point-to-point protocol encapsulation.
6369 </desc>
6370 </const>
6371 <const name="SLIP" value="3">
6372 <desc>
6373 Serial line IP encapsulation.
6374 </desc>
6375 </const>
6376 </enum>
6377
6378 <enum
6379 name="HostNetworkInterfaceStatus"
6380 uuid="CC474A69-2710-434B-8D99-C38E5D5A6F41"
6381 >
6382 <desc>
6383 Current status of the interface.
6384 <see>IHostNetworkInterface</see>
6385 </desc>
6386
6387 <const name="Unknown" value="0">
6388 <desc>
6389 The state of interface cannot be determined.
6390 </desc>
6391 </const>
6392 <const name="Up" value="1">
6393 <desc>
6394 The interface is fully operational.
6395 </desc>
6396 </const>
6397 <const name="Down" value="2">
6398 <desc>
6399 The interface is not functioning.
6400 </desc>
6401 </const>
6402 </enum>
6403
6404 <interface
6405 name="IHostNetworkInterface" extends="$unknown"
6406 uuid="832720ac-2df6-41d4-a867-a0b40df14c7f"
6407 wsmap="managed"
6408 >
6409 <desc>
6410 Reprents one of host's network interfaces. IP V6 address and network
6411 mask are strings of 32 hexdecimal digits grouped by four. Groups are
6412 separated by colons.
6413 For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
6414 </desc>
6415 <attribute name="name" type="wstring" readonly="yes">
6416 <desc>Returns the host network interface name.</desc>
6417 </attribute>
6418
6419 <attribute name="id" type="uuid" readonly="yes">
6420 <desc>Returns the interface UUID.</desc>
6421 </attribute>
6422
6423 <attribute name="IPAddress" type="unsigned long" readonly="yes">
6424 <desc>Returns the IP V4 address of the interface.</desc>
6425 </attribute>
6426
6427 <attribute name="networkMask" type="unsigned long" readonly="yes">
6428 <desc>Returns the network mask of the interface.</desc>
6429 </attribute>
6430
6431 <attribute name="IPV6Address" type="wstring" readonly="yes">
6432 <desc>Returns the IP V6 address of the interface.</desc>
6433 </attribute>
6434
6435 <attribute name="IPV6NetworkMask" type="wstring" readonly="yes">
6436 <desc>Returns the IP V6 network mask of the interface.</desc>
6437 </attribute>
6438
6439 <attribute name="hardwareAddress" type="wstring" readonly="yes">
6440 <desc>Returns the hardware address. For Ethernet it is MAC address.</desc>
6441 </attribute>
6442
6443 <attribute name="type" type="HostNetworkInterfaceType" readonly="yes">
6444 <desc>Type of protocol encapsulation used.</desc>
6445 </attribute>
6446
6447 <attribute name="status" type="HostNetworkInterfaceStatus" readonly="yes">
6448 <desc>Status of the interface.</desc>
6449 </attribute>
6450 </interface>
6451
6452 <interface
6453 name="IHost" extends="$unknown"
6454 uuid="7c172c42-b209-4bdc-9ddf-a84f222bd59a"
6455 wsmap="managed"
6456 >
6457 <desc>
6458 The IHost interface represents the physical machine that this VirtualBox
6459 installation runs on.
6460
6461 An object implementing this interface is returned by the
6462 <link to="IVirtualBox::host" /> attribute. This interface contains
6463 read-only information about the host's physical hardware (such as what
6464 processors and disks are available, what the host operating system is,
6465 and so on) and also allows for manipulating some of the host's hardware,
6466 such as global USB device filters and host interface networking.
6467
6468 </desc>
6469 <attribute name="DVDDrives" type="IHostDVDDriveCollection" readonly="yes">
6470 <desc>List of DVD drives available on the host.</desc>
6471 </attribute>
6472
6473 <attribute name="floppyDrives" type="IHostFloppyDriveCollection" readonly="yes">
6474 <desc>List of floppy drives available on the host.</desc>
6475 </attribute>
6476
6477 <attribute name="USBDevices" type="IHostUSBDeviceCollection" readonly="yes">
6478 <desc>
6479 List of USB devices currently attached to the host.
6480 Once a new device is physically attached to the host computer,
6481 it appears in this list and remains there until detached.
6482
6483 <note>
6484 This method may set a @ref com_warnings "warning result code".
6485 </note>
6486 <note>
6487 If USB functionality is not available in the given edition of
6488 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6489 </note>
6490 </desc>
6491 </attribute>
6492
6493 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilterCollection" readonly="yes">
6494 <desc>
6495 List of USB device filters in action.
6496 When a new device is physically attached to the host computer,
6497 filters from this list are applied to it (in order they are stored
6498 in the list). The first matched filter will determine the
6499 <link to="IHostUSBDeviceFilter::action">action</link>
6500 performed on the device.
6501
6502 Unless the device is ignored by these filters, filters of all
6503 currently running virtual machines
6504 (<link to="IUSBController::deviceFilters"/>) are applied to it.
6505
6506 <note>
6507 This method may set a @ref com_warnings "warning result code".
6508 </note>
6509 <note>
6510 If USB functionality is not available in the given edition of
6511 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6512 </note>
6513
6514 <see>IHostUSBDeviceFilter, USBDeviceState</see>
6515 </desc>
6516 </attribute>
6517
6518 <attribute name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" readonly="yes">
6519 <desc>List of host network interfaces currently defined on the host.</desc>
6520 </attribute>
6521
6522 <attribute name="processorCount" type="unsigned long" readonly="yes">
6523 <desc>Number of (logical) CPUs installed in the host system.</desc>
6524 </attribute>
6525
6526 <attribute name="processorOnlineCount" type="unsigned long" readonly="yes">
6527 <desc>Number of (logical) CPUs online in the host system.</desc>
6528 </attribute>
6529
6530 <method name="getProcessorSpeed">
6531 <desc>Query the (approximate) maximum speed of a specified host CPU in
6532 Megahertz.
6533 </desc>
6534 <param name="cpuId" type="unsigned long" dir="in">
6535 <desc>
6536 Identifier of the CPU.
6537 </desc>
6538 </param>
6539 <param name="speed" type="unsigned long" dir="return">
6540 <desc>
6541 Speed value. 0 is returned if value is not known or @a cpuId is
6542 invalid.
6543 </desc>
6544 </param>
6545 </method>
6546
6547 <method name="getProcessorFeature">
6548 <desc>Query whether a CPU feature is supported or not.</desc>
6549 <param name="feature" type="ProcessorFeature" dir="in">
6550 <desc>
6551 CPU Feature identifier.
6552 </desc>
6553 </param>
6554 <param name="supported" type="boolean" dir="return">
6555 <desc>
6556 Feature is supported or not.
6557 </desc>
6558 </param>
6559 </method>
6560
6561 <method name="getProcessorDescription">
6562 <desc>Query the model string of a specified host CPU.
6563 <note>
6564 This function is not implemented in the current version of the
6565 product.
6566 </note>
6567 </desc>
6568 <param name="cpuId" type="unsigned long" dir="in">
6569 <desc>
6570 Identifier of the CPU.
6571 </desc>
6572 </param>
6573 <param name="description" type="wstring" dir="return">
6574 <desc>
6575 Model string. A NULL string is returned if value is not known or
6576 @a cpuId is invalid.
6577 </desc>
6578 </param>
6579 </method>
6580
6581 <attribute name="memorySize" type="unsigned long" readonly="yes">
6582 <desc>Amount of system memory in megabytes installed in the host system.</desc>
6583 </attribute>
6584
6585 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
6586 <desc>Available system memory in the host system.</desc>
6587 </attribute>
6588
6589 <attribute name="operatingSystem" type="wstring" readonly="yes">
6590 <desc>Name of the host system's operating system.</desc>
6591 </attribute>
6592
6593 <attribute name="OSVersion" type="wstring" readonly="yes">
6594 <desc>Host operating system's version string.</desc>
6595 </attribute>
6596
6597 <attribute name="UTCTime" type="long long" readonly="yes">
6598 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
6599 </attribute>
6600
6601<if target="midl">
6602 <method name="createHostNetworkInterface">
6603 <desc>
6604 Creates a new adapter for Host Interface Networking.
6605 <result name="E_INVALIDARG">
6606 Host network interface @a name already exists.
6607 </result>
6608 </desc>
6609 <param name="name" type="wstring" dir="in">
6610 <desc>
6611 Adapter name.
6612 </desc>
6613 </param>
6614 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
6615 <desc>
6616 Created host interface object.
6617 </desc>
6618 </param>
6619 <param name="progress" type="IProgress" dir="return">
6620 <desc>
6621 Progress object to track the operation completion.
6622 </desc>
6623 </param>
6624 </method>
6625 <method name="removeHostNetworkInterface">
6626 <desc>
6627 Removes the given host network interface.
6628 <result name="VBOX_E_OBJECT_NOT_FOUND">
6629 No host network interface matching @a id found.
6630 </result>
6631 </desc>
6632 <param name="id" type="uuid" dir="in">
6633 <desc>
6634 Adapter GUID.
6635 </desc>
6636 </param>
6637 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
6638 <desc>
6639 Removed host interface object.
6640 </desc>
6641 </param>
6642 <param name="progress" type="IProgress" dir="return">
6643 <desc>
6644 Progress object to track the operation completion.
6645 </desc>
6646 </param>
6647 </method>
6648</if>
6649
6650 <method name="createUSBDeviceFilter">
6651 <desc>
6652 Creates a new USB device filter. All attributes except
6653 the filter name are set to <tt>null</tt> (any match),
6654 <i>active</i> is <tt>false</tt> (the filter is not active).
6655
6656 The created filter can be added to the list of filters using
6657 <link to="#insertUSBDeviceFilter()"/>.
6658
6659 <see>#USBDeviceFilters</see>
6660 </desc>
6661 <param name="name" type="wstring" dir="in">
6662 <desc>
6663 Filter name. See <link to="IHostUSBDeviceFilter::name"/>
6664 for more info.
6665 </desc>
6666 </param>
6667 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
6668 <desc>Created filter object.</desc>
6669 </param>
6670 </method>
6671
6672 <method name="insertUSBDeviceFilter">
6673 <desc>
6674 Inserts the given USB device to the specified position
6675 in the list of filters.
6676
6677 Positions are numbered starting from <tt>0</tt>. If the specified
6678 position is equal to or greater than the number of elements in
6679 the list, the filter is added at the end of the collection.
6680
6681 <note>
6682 Duplicates are not allowed, so an attempt to insert a
6683 filter that is already in the list, will return an
6684 error.
6685 </note>
6686 <note>
6687 This method may set a @ref com_warnings "warning result code".
6688 </note>
6689 <note>
6690 If USB functionality is not available in the given edition of
6691 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6692 </note>
6693
6694 <see>#USBDeviceFilters</see>
6695
6696 <result name="VBOX_E_INVALID_OBJECT_STATE">
6697 USB device filter is not created within this VirtualBox instance.
6698 </result>
6699 <result name="E_INVALIDARG">
6700 USB device filter already in list.
6701 </result>
6702
6703 </desc>
6704 <param name="position" type="unsigned long" dir="in">
6705 <desc>Position to insert the filter to.</desc>
6706 </param>
6707 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
6708 <desc>USB device filter to insert.</desc>
6709 </param>
6710 </method>
6711
6712 <method name="removeUSBDeviceFilter">
6713 <desc>
6714 Removes a USB device filter from the specified position in the
6715 list of filters.
6716
6717 Positions are numbered starting from <tt>0</tt>. Specifying a
6718 position equal to or greater than the number of elements in
6719 the list will produce an error.
6720
6721 <note>
6722 This method may set a @ref com_warnings "warning result code".
6723 </note>
6724 <note>
6725 If USB functionality is not available in the given edition of
6726 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6727 </note>
6728
6729 <see>#USBDeviceFilters</see>
6730
6731 <result name="E_INVALIDARG">
6732 USB device filter list empty or invalid @a position.
6733 </result>
6734
6735 </desc>
6736 <param name="position" type="unsigned long" dir="in">
6737 <desc>Position to remove the filter from.</desc>
6738 </param>
6739 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
6740 <desc>Removed USB device filter.</desc>
6741 </param>
6742 </method>
6743
6744 <method name="findHostNetworkInterfaceByName">
6745 <desc>
6746 Searches through all host network interfaces for an interface with
6747 the given name.
6748 <note>
6749 The method returns an error if the given name does not
6750 correspond to any host network interface.
6751 </note>
6752 </desc>
6753 <param name="name" type="wstring" dir="in">
6754 <desc>Name of the host network interface to search for.</desc>
6755 </param>
6756 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
6757 <desc>Found host network interface object.</desc>
6758 </param>
6759 </method>
6760 <method name="findHostNetworkInterfaceById">
6761 <desc>
6762 Searches through all host network interfaces for an interface with
6763 the given GUID.
6764 <note>
6765 The method returns an error if the given GUID does not
6766 correspond to any host network interface.
6767 </note>
6768 </desc>
6769 <param name="id" type="uuid" dir="in">
6770 <desc>GUID of the host network interface to search for.</desc>
6771 </param>
6772 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
6773 <desc>Found host network interface object.</desc>
6774 </param>
6775 </method>
6776 </interface>
6777
6778 <!--
6779 // ISystemProperties
6780 /////////////////////////////////////////////////////////////////////////
6781 -->
6782
6783 <interface
6784 name="ISystemProperties"
6785 extends="$unknown"
6786 uuid="0760e03f-06d0-481e-9f81-be43fef092ba"
6787 wsmap="managed"
6788 >
6789 <desc>
6790 The ISystemProperties interface represents global properties of the given
6791 VirtualBox installation.
6792
6793 These properties define limits and default values for various attributes
6794 and parameters. Most of the properties are read-only, but some can be
6795 changed by a user.
6796 </desc>
6797
6798 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
6799 <desc>Minimum guest system memory in Megabytes.</desc>
6800 </attribute>
6801
6802 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
6803 <desc>Maximum guest system memory in Megabytes.</desc>
6804 </attribute>
6805
6806 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
6807 <desc>Minimum guest video memory in Megabytes.</desc>
6808 </attribute>
6809
6810 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
6811 <desc>Maximum guest video memory in Megabytes.</desc>
6812 </attribute>
6813
6814 <attribute name="minGuestCPUCount" type="unsigned long" readonly="yes">
6815 <desc>Minimum CPU count.</desc>
6816 </attribute>
6817
6818 <attribute name="maxGuestCPUCount" type="unsigned long" readonly="yes">
6819 <desc>Maximum CPU count.</desc>
6820 </attribute>
6821
6822 <attribute name="maxVDISize" type="unsigned long long" readonly="yes">
6823 <desc>Maximum size of a virtual disk image in Megabytes.</desc>
6824 </attribute>
6825
6826 <attribute name="networkAdapterCount" type="unsigned long" readonly="yes">
6827 <desc>
6828 Number of network adapters associated with every
6829 <link to="IMachine"/> instance.
6830 </desc>
6831 </attribute>
6832
6833 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
6834 <desc>
6835 Number of serial ports associated with every
6836 <link to="IMachine"/> instance.
6837 </desc>
6838 </attribute>
6839
6840 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
6841 <desc>
6842 Number of parallel ports associated with every
6843 <link to="IMachine"/> instance.
6844 </desc>
6845 </attribute>
6846
6847 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
6848 <desc>
6849 Maximum device position in the boot order. This value corresponds
6850 to the total number of devices a machine can boot from, to make it
6851 possible to include all possible devices to the boot list.
6852 <see><link to="IMachine::setBootOrder()"/></see>
6853 </desc>
6854 </attribute>
6855
6856 <attribute name="defaultMachineFolder" type="wstring">
6857 <desc>
6858 Full path to the default directory used to create new or open
6859 existing machines when a settings file name contains no
6860 path.
6861
6862 The initial value of this property is
6863 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
6864 VirtualBox_home</link><tt>&gt;/Machines</tt>.
6865
6866 <note>
6867 Setting this property to <tt>null</tt> will restore the
6868 initial value.
6869 </note>
6870 <note>
6871 When settings this property, the specified path can be
6872 absolute (full path) or relative
6873 to the <link to="IVirtualBox::homeFolder">
6874 VirtualBox home directory</link>.
6875 When reading this property, a full path is
6876 always returned.
6877 </note>
6878 <note>
6879 The specified path may not exist, it will be created
6880 when necessary.
6881 </note>
6882
6883 <see>
6884 <link to="IVirtualBox::createMachine()"/>,
6885 <link to="IVirtualBox::openMachine()"/>
6886 </see>
6887 </desc>
6888 </attribute>
6889
6890 <attribute name="defaultHardDiskFolder" type="wstring">
6891 <desc>
6892 Full path to the default directory used to create new or open existing
6893 virtual disks.
6894
6895 This path is used when the storage unit of a hard disk is a regular file
6896 in the host's file system and only a file name that contains no path is
6897 given.
6898
6899 The initial value of this property is
6900 <tt>&lt;</tt>
6901 <link to="IVirtualBox::homeFolder">VirtualBox_home</link>
6902 <tt>&gt;/HardDisks</tt>.
6903
6904 <note>
6905 Setting this property to <tt>null</tt> will restore the
6906 initial value.
6907 </note>
6908 <note>
6909 When settings this property, the specified path can be relative
6910 to the
6911 <link to="IVirtualBox::homeFolder">VirtualBox home directory</link> or
6912 absolute. When reading this property, a full path is
6913 always returned.
6914 </note>
6915 <note>
6916 The specified path may not exist, it will be created
6917 when necessary.
6918 </note>
6919
6920 <see>
6921 IHardDisk2,
6922 <link to="IVirtualBox::createHardDisk2()"/>,
6923 <link to="IVirtualBox::openHardDisk2()"/>,
6924 <link to="IMedium::location"/>
6925 </see>
6926 </desc>
6927 </attribute>
6928
6929 <attribute name="hardDiskFormats" type="IHardDiskFormat" safearray="yes" readonly="yes">
6930 <desc>
6931 List of all hard disk storage formats supported by this VirtualBox
6932 installation.
6933
6934 Keep in mind that the hard disk format identifier
6935 (<link to="IHardDiskFormat::id"/>) used in other API calls like
6936 <link to="IVirtualBox::createHardDisk2()"/> to refer to a particular
6937 hard disk format is a case-insensitive string. This means that, for
6938 example, all of the following strings:
6939 <pre>
6940 "VDI"
6941 "vdi"
6942 "VdI"</pre>
6943 refer to the same hard disk format.
6944
6945 Note that the virtual hard disk framework is backend-based, therefore
6946 the list of supported formats depends on what backends are currently
6947 installed.
6948
6949 <see>
6950 <link to="IHardDiskFormat"/>,
6951 </see>
6952 </desc>
6953 </attribute>
6954
6955 <attribute name="defaultHardDiskFormat" type="wstring">
6956 <desc>
6957 Identifier of the default hard disk format used by VirtualBox.
6958
6959 The hard disk format set by this attribute is used by VirtualBox
6960 when the hard disk format was not specified explicitly. One example is
6961 <link to="IVirtualBox::createHardDisk2()"/> with the <tt>null</tt>
6962 format argument. A more complex example is implicit creation of
6963 differencing hard disks when taking a snapshot of a virtual machine:
6964 this operation will try to use a format of the parent hard disk first
6965 and if this format does not support differencing hard disks the default
6966 format specified by this argument will be used.
6967
6968 The list of supported hard disk formats may be obtained by the
6969 <link to="#hardDiskFormats"/> call. Note that the default hard disk
6970 format must have a capability to create differencing hard disks;
6971 otherwise opeartions that create hard disks implicitly may fail
6972 unexpectedly.
6973
6974 The initial value of this property is <tt>VDI</tt> in the current
6975 version of the VirtualBox product, but may change in the future.
6976
6977 <note>
6978 Setting this property to <tt>null</tt> will restore the
6979 initial value.
6980 </note>
6981
6982 <see>
6983 <link to="#hardDiskFormats"/>,
6984 <link to="IHardDiskFormat::id"/>,
6985 <link to="IVirtualBox::createHardDisk2()"/>
6986 </see>
6987 </desc>
6988 </attribute>
6989
6990 <attribute name="remoteDisplayAuthLibrary" type="wstring">
6991 <desc>
6992 Library that provides authentication for VRDP clients. The library
6993 is used if a virtual machine's authentication type is set to "external"
6994 in the VM RemoteDisplay configuration.
6995
6996 The system library extension (".DLL" or ".so") must be omitted.
6997 A full path can be specified; if not, then the library must reside on the
6998 system's default library path.
6999
7000 The default value of this property is <tt>VRDPAuth</tt>. There is a library
7001 of that name in one of the default VirtualBox library directories.
7002
7003 For details about VirtualBox authentication libraries and how to implement
7004 them, please refer to the VirtualBox manual.
7005
7006 <note>
7007 Setting this property to <tt>null</tt> will restore the
7008 initial value.
7009 </note>
7010 </desc>
7011 </attribute>
7012
7013 <attribute name="webServiceAuthLibrary" type="wstring">
7014 <desc>
7015 Library that provides authentication for webservice clients. The library
7016 is used if a virtual machine's authentication type is set to "external"
7017 in the VM RemoteDisplay configuration and will be called from
7018 within the <link to="IWebsessionManager::logon" /> implementation.
7019
7020 As opposed to <link to="ISystemProperties::remoteDisplayAuthLibrary" />,
7021 there is no per-VM setting for this, as the webservice is a global
7022 resource (if it is running). Only for this setting (for the webservice),
7023 setting this value to a literal "null" string disables authentication,
7024 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
7025 no matter what user name and password are supplied.
7026
7027 The initial value of this property is <tt>VRDPAuth</tt>,
7028 meaning that the webservice will use the same authentication
7029 library that is used by default for VBoxVRDP (again, see
7030 <link to="ISystemProperties::remoteDisplayAuthLibrary" />).
7031 The format and calling convention of authentication libraries
7032 is the same for the webservice as it is for VBoxVRDP.
7033
7034 </desc>
7035 </attribute>
7036
7037 <attribute name="HWVirtExEnabled" type="boolean">
7038 <desc>
7039 This specifies the default value for hardware virtualization
7040 extensions. If enabled, virtual machines will make use of
7041 hardware virtualization extensions such as Intel VT-x and
7042 AMD-V by default. This value can be overridden by each VM
7043 using their <link to="IMachine::HWVirtExEnabled" /> property.
7044 </desc>
7045 </attribute>
7046
7047 <attribute name="LogHistoryCount" type="unsigned long">
7048 <desc>
7049 This value specifies how many old release log files are kept.
7050 </desc>
7051 </attribute>
7052 </interface>
7053
7054 <!--
7055 // IGuest
7056 /////////////////////////////////////////////////////////////////////////
7057 -->
7058
7059 <interface
7060 name="IGuestOSType" extends="$unknown"
7061 uuid="bc415228-eed0-402c-92f5-96fc4e2dd7e4"
7062 wsmap="struct"
7063 >
7064 <desc>
7065 </desc>
7066
7067 <attribute name="familyId" type="wstring" readonly="yes">
7068 <desc>Guest OS family identifier string.</desc>
7069 </attribute>
7070
7071 <attribute name="familyDescription" type="wstring" readonly="yes">
7072 <desc>Human readable description of the guest OS family.</desc>
7073 </attribute>
7074
7075 <attribute name="id" type="wstring" readonly="yes">
7076 <desc>Guest OS identifier string.</desc>
7077 </attribute>
7078
7079 <attribute name="description" type="wstring" readonly="yes">
7080 <desc>Human readable description of the guest OS.</desc>
7081 </attribute>
7082
7083 <attribute name="is64Bit" type="boolean" readonly="yes">
7084 <desc>Returns @c true if the given OS is 64-bit</desc>
7085 </attribute>
7086
7087 <attribute name="recommendedIOAPIC" type="boolean" readonly="yes">
7088 <desc>Returns @c true if IO APIC recommended for this OS type.</desc>
7089 </attribute>
7090
7091 <attribute name="recommendedVirtEx" type="boolean" readonly="yes">
7092 <desc>Returns @c true if VT-x or AMD-V recommended for this OS type.</desc>
7093 </attribute>
7094
7095 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
7096 <desc>Recommended RAM size in Megabytes.</desc>
7097 </attribute>
7098
7099 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
7100 <desc>Recommended video RAM size in Megabytes.</desc>
7101 </attribute>
7102
7103 <attribute name="recommendedHDD" type="unsigned long" readonly="yes">
7104 <desc>Recommended hard disk size in Megabytes.</desc>
7105 </attribute>
7106
7107 <attribute name="adapterType" type="NetworkAdapterType" readonly="yes">
7108 <desc>Returns recommended network adapter for this OS type.</desc>
7109 </attribute>
7110 </interface>
7111
7112
7113 <enumerator
7114 name="IGuestOSTypeEnumerator" type="IGuestOSType"
7115 uuid="a3335e02-4669-4e3c-80c7-c4dc7056a07c"
7116 />
7117
7118 <collection
7119 name="IGuestOSTypeCollection" type="IGuestOSType" enumerator="IGuestOSTypeEnumerator"
7120 uuid="a5e36749-a610-498b-9f29-2e36c1042d65"
7121 readonly="yes"
7122 />
7123
7124 <interface
7125 name="IGuest" extends="$unknown"
7126 uuid="d8556fca-81bc-12af-fca3-365528fa38ca"
7127
7128 wsmap="suppress"
7129 >
7130 <desc>
7131 The IGuest interface represents information about the operating system
7132 running inside the virtual machine. Used in
7133 <link to="IConsole::guest"/>.
7134
7135 IGuest provides information about the guest operating system, whether
7136 Guest Additions are installed and other OS-specific virtual machine
7137 properties.
7138 </desc>
7139
7140 <attribute name="OSTypeId" type="wstring" readonly="yes">
7141 <desc>
7142 Identifier of the Guest OS type as reported by the Guest
7143 Additions.
7144 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
7145 an IGuestOSType object representing details about the given
7146 Guest OS type.
7147 <note>
7148 If Guest Additions are not installed, this value will be
7149 the same as <link to="IMachine::OSTypeId"/>.
7150 </note>
7151 </desc>
7152 </attribute>
7153
7154 <attribute name="additionsActive" type="boolean" readonly="yes">
7155 <desc>
7156 Flag whether the Guest Additions are installed and active
7157 in which case their version will be returned by the
7158 <link to="#additionsVersion"/> property.
7159 </desc>
7160 </attribute>
7161
7162 <attribute name="additionsVersion" type="wstring" readonly="yes">
7163 <desc>
7164 Version of the Guest Additions (3 decimal numbers separated
7165 by dots) or empty when the Additions are not installed. The
7166 Additions may also report a version but yet not be active as
7167 the version might be refused by VirtualBox (incompatible) or
7168 other failures occurred.
7169 </desc>
7170 </attribute>
7171
7172 <attribute name="supportsSeamless" type="boolean" readonly="yes">
7173 <desc>
7174 Flag whether seamless guest display rendering (seamless desktop
7175 integration) is supported.
7176 </desc>
7177 </attribute>
7178
7179 <attribute name="supportsGraphics" type="boolean" readonly="yes">
7180 <desc>
7181 Flag whether the guest is in graphics mode. If it is not, then
7182 seamless rendering will not work, resize hints are not immediately
7183 acted on and guest display resizes are probably not initiated by
7184 the guest additions.
7185 </desc>
7186 </attribute>
7187
7188 <attribute name="memoryBalloonSize" type="unsigned long">
7189 <desc>Guest system memory balloon size in megabytes.</desc>
7190 </attribute>
7191
7192 <attribute name="statisticsUpdateInterval" type="unsigned long">
7193 <desc>Interval to update guest statistics in seconds.</desc>
7194 </attribute>
7195
7196 <method name="setCredentials">
7197 <desc>
7198 Store login credentials that can be queried by guest operating
7199 systems with Additions installed. The credentials are transient
7200 to the session and the guest may also choose to erase them. Note
7201 that the caller cannot determine whether the guest operating system
7202 has queried or made use of the credentials.
7203
7204 <result name="VBOX_E_VM_ERROR">
7205 VMM device is not available.
7206 </result>
7207
7208 </desc>
7209 <param name="userName" type="wstring" dir="in">
7210 <desc>User name string, can be empty</desc>
7211 </param>
7212 <param name="password" type="wstring" dir="in">
7213 <desc>Password string, can be empty</desc>
7214 </param>
7215 <param name="domain" type="wstring" dir="in">
7216 <desc>Domain name (guest logon scheme specific), can be empty</desc>
7217 </param>
7218 <param name="allowInteractiveLogon" type="boolean" dir="in">
7219 <desc>
7220 Flag whether the guest should alternatively allow the user to
7221 interactively specify different credentials. This flag might
7222 not be supported by all versions of the Additions.
7223 </desc>
7224 </param>
7225 </method>
7226
7227 <method name="getStatistic">
7228 <desc>
7229 Query specified guest statistics as reported by the VirtualBox Additions.
7230 </desc>
7231 <param name="cpuId" type="unsigned long" dir="in">
7232 <desc>Virtual CPU id; not relevant for all statistic types</desc>
7233 </param>
7234 <param name="statistic" type="GuestStatisticType" dir="in">
7235 <desc>Statistic type.</desc>
7236 </param>
7237 <param name="statVal" type="unsigned long" dir="out">
7238 <desc>Statistics value</desc>
7239 </param>
7240 </method>
7241
7242 </interface>
7243
7244
7245 <!--
7246 // IProgress
7247 /////////////////////////////////////////////////////////////////////////
7248 -->
7249
7250 <enumerator
7251 name="IProgressEnumerator" type="IProgress"
7252 uuid="e0380522-4ef1-48f4-856c-e455177ccb2d"
7253 />
7254
7255 <collection
7256 name="IProgressCollection" type="IProgress" enumerator="IProgressEnumerator"
7257 uuid="78B76A7C-F0F2-467c-9F0E-F089A54EE957"
7258 readonly="yes"
7259 />
7260
7261 <interface
7262 name="IProgress" extends="$unknown"
7263 uuid="10CC03A1-717E-429b-992D-C67B56175A51"
7264 wsmap="managed"
7265 >
7266 <desc>
7267 The IProgress interface represents a task progress object that allows
7268 to wait for the completion of some asynchronous task.
7269
7270 The task consists of one or more operations that run sequentially,
7271 one after one. There is an individual percent of completion of the
7272 current operation and the percent of completion of the task as a
7273 whole. Similarly, you can wait for the completion of a particular
7274 operation or for the completion of the whole task.
7275
7276 Every operation is identified by a number (starting from 0)
7277 and has a separate description.
7278 </desc>
7279
7280 <attribute name="id" type="uuid" readonly="yes">
7281 <desc>ID of the task.</desc>
7282 </attribute>
7283
7284 <attribute name="description" type="wstring" readonly="yes">
7285 <desc>Description of the task.</desc>
7286 </attribute>
7287
7288 <attribute name="initiator" type="$unknown" readonly="yes">
7289 <desc>Initiator of the task.</desc>
7290 </attribute>
7291
7292 <attribute name="cancelable" type="boolean" readonly="yes">
7293 <desc>Whether the task can be interrupted.</desc>
7294 </attribute>
7295
7296 <attribute name="percent" type="long" readonly="yes">
7297 <desc>
7298 Current task progress value in percent.
7299 This value depends on how many operations are already complete.
7300 </desc>
7301 </attribute>
7302
7303 <attribute name="completed" type="boolean" readonly="yes">
7304 <desc>Whether the task has been completed.</desc>
7305 </attribute>
7306
7307 <attribute name="canceled" type="boolean" readonly="yes">
7308 <desc>Whether the task has been canceled.</desc>
7309 </attribute>
7310
7311 <attribute name="resultCode" type="result" readonly="yes">
7312 <desc>
7313 Result code of the progress task.
7314 Valid only if <link to="#completed"/> is true.
7315 </desc>
7316 </attribute>
7317
7318 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
7319 <desc>
7320 Extended information about the unsuccessful result of the
7321 progress operation. May be NULL when no extended information
7322 is available.
7323 Valid only if <link to="#completed"/> is true and
7324 <link to="#resultCode"/> indicates a failure.
7325 </desc>
7326 </attribute>
7327
7328 <attribute name="operationCount" type="unsigned long" readonly="yes">
7329 <desc>
7330 Number of operations this task is divided into.
7331 Every task consists of at least one operation.
7332 </desc>
7333 </attribute>
7334
7335 <attribute name="operation" type="unsigned long" readonly="yes">
7336 <desc>Number of the operation being currently executed.</desc>
7337 </attribute>
7338
7339 <attribute name="operationDescription" type="wstring" readonly="yes">
7340 <desc>
7341 Description of the operation being currently executed.
7342 </desc>
7343 </attribute>
7344
7345 <attribute name="operationPercent" type="long" readonly="yes">
7346 <desc>Current operation progress value in percent.</desc>
7347 </attribute>
7348
7349 <method name="waitForCompletion">
7350 <desc>
7351 Waits until the task is done (including all operations) with a
7352 given timeout.
7353
7354 <result name="VBOX_E_IPRT_ERROR">
7355 Failed to wait for task completion.
7356 </result>
7357
7358 </desc>
7359 <param name="timeout" type="long" dir="in">
7360 <desc>
7361 Timeout value in milliseconds.
7362 Specify -1 for an indefinite wait.
7363 </desc>
7364 </param>
7365 </method>
7366
7367 <method name="waitForOperationCompletion">
7368 <desc>
7369 Waits until the given operation is done with a given timeout.
7370
7371 <result name="VBOX_E_IPRT_ERROR">
7372 Failed to wait for operation completion.
7373 </result>
7374
7375 </desc>
7376 <param name="operation" type="unsigned long" dir="in">
7377 <desc>
7378 Number of the operation to wait for.
7379 Must be less than <link to="#operationCount"/>.
7380 </desc>
7381 </param>
7382 <param name="timeout" type="long" dir="in">
7383 <desc>
7384 Timeout value in milliseconds.
7385 Specify -1 for an indefinite wait.
7386 </desc>
7387 </param>
7388 </method>
7389
7390 <method name="cancel">
7391 <desc>
7392 Cancels the task.
7393 <note>
7394 If <link to="#cancelable"/> is <tt>false</tt>, then
7395 this method will fail.
7396 </note>
7397
7398 <result name="VBOX_E_INVALID_OBJECT_STATE">
7399 Operation cannot be canceled.
7400 </result>
7401
7402 </desc>
7403 </method>
7404
7405 </interface>
7406
7407
7408 <!--
7409 // ISnapshot
7410 /////////////////////////////////////////////////////////////////////////
7411 -->
7412
7413 <enumerator
7414 name="ISnapshotEnumerator" type="ISnapshot"
7415 uuid="25cfa2a4-1f1d-4f05-9658-b7a5894ef1a3"
7416 />
7417
7418 <collection
7419 name="ISnapshotCollection" type="ISnapshot"
7420 enumerator="ISnapshotEnumerator"
7421 uuid="23852e3c-94cd-4801-ab05-ed35675b3894"
7422 readonly="yes"
7423 />
7424
7425 <interface
7426 name="ISnapshot" extends="$unknown"
7427 uuid="9f1bbf79-13b0-4da2-abba-4a992c65c083"
7428 wsmap="managed"
7429 >
7430 <desc>
7431 The ISnapshot interface represents a snapshot of the virtual
7432 machine.
7433
7434 The <i>snapshot</i> stores all the information about a virtual
7435 machine necessary to bring it to exactly the same state as it was at
7436 the time of taking the snapshot. The snapshot includes:
7437
7438 <ul>
7439 <li>all settings of the virtual machine (i.e. its hardware
7440 configuration: RAM size, attached hard disks, etc.)
7441 </li>
7442 <li>the execution state of the virtual machine (memory contents,
7443 CPU state, etc.).
7444 </li>
7445 </ul>
7446
7447 Snapshots can be <i>offline</i> (taken when the VM is powered off)
7448 or <i>online</i> (taken when the VM is running). The execution
7449 state of the offline snapshot is called a <i>zero execution state</i>
7450 (it doesn't actually contain any information about memory contents
7451 or the CPU state, assuming that all hardware is just powered off).
7452
7453 <h3>Snapshot branches</h3>
7454
7455 Snapshots can be chained. Chained snapshots form a branch where
7456 every next snapshot is based on the previous one. This chaining is
7457 mostly related to hard disk branching (see <link to="IHardDisk2"/>
7458 description). This means that every time a new snapshot is created,
7459 a new differencing hard disk is implicitly created for all normal
7460 hard disks attached to the given virtual machine. This allows to
7461 fully restore hard disk contents when the machine is later reverted
7462 to a particular snapshot.
7463
7464 In the current implementation, multiple snapshot branches within one
7465 virtual machine are not allowed. Every machine has a single branch,
7466 and <link to="IConsole::takeSnapshot()"/> operation adds a new
7467 snapshot to the top of that branch.
7468
7469 Existing snapshots can be discarded using
7470 <link to="IConsole::discardSnapshot()"/>.
7471
7472 <h3>Current snapshot</h3>
7473
7474 Every virtual machine has a current snapshot, identified by
7475 <link to="IMachine::currentSnapshot"/>. This snapshot is used as
7476 a base for the <i>current machine state</i> (see below), to the effect
7477 that all normal hard disks of the machine and its execution
7478 state are based on this snapshot.
7479
7480 In the current implementation, the current snapshot is always the
7481 last taken snapshot (i.e. the head snapshot on the branch) and it
7482 cannot be changed.
7483
7484 The current snapshot is <tt>null</tt> if the machine doesn't have
7485 snapshots at all; in this case the current machine state is just
7486 current settings of this machine plus its current execution state.
7487
7488 <h3>Current machine state</h3>
7489
7490 The current machine state is what represented by IMachine instances got
7491 directly from IVirtualBox
7492 using <link
7493 to="IVirtualBox::getMachine()">getMachine()</link>, <link
7494 to="IVirtualBox::findMachine()">findMachine()</link>, etc. (as opposed
7495 to instances returned by <link to="ISnapshot::machine"/>). This state
7496 is always used when the machine is <link to="IConsole::powerUp"> powered
7497 on</link>.
7498
7499 The current machine state also includes the current execution state.
7500 If the machine is being currently executed
7501 (<link to="IMachine::state"/> is <link to="MachineState_Running"/>
7502 and above), its execution state is just what's happening now.
7503 If it is powered off (<link to="MachineState_PoweredOff"/> or
7504 <link to="MachineState_Aborted"/>), it has a zero execution state.
7505 If the machine is saved (<link to="MachineState_Saved"/>), its
7506 execution state is what saved in the execution state file
7507 (<link to="IMachine::stateFilePath"/>).
7508
7509 If the machine is in the saved state, then, next time it is powered
7510 on, its execution state will be fully restored from the saved state
7511 file and the execution will continue from the point where the state
7512 was saved.
7513
7514 Similarly to snapshots, the current machine state can be discarded
7515 using <link to="IConsole::discardCurrentState()"/>.
7516
7517 <h3>Taking and discarding snapshots</h3>
7518
7519 The table below briefly explains the meaning of every snapshot
7520 operation:
7521
7522 <table>
7523 <tr><th>Operation</th><th>Meaning</th><th>Remarks</th></tr>
7524
7525 <tr><td><link to="IConsole::takeSnapshot()"/></td>
7526
7527 <td>Save the current state of the virtual machine, including all
7528 settings, contents of normal hard disks and the current modifications
7529 to immutable hard disks (for online snapshots)</td>
7530
7531 <td>The current state is not changed (the machine will continue
7532 execution if it is being executed when the snapshot is
7533 taken)</td></tr>
7534
7535 <tr><td><link to="IConsole::discardSnapshot()"/></td>
7536
7537 <td>Forget the state of the virtual machine stored in the snapshot:
7538 dismiss all saved settings and delete the saved execution state (for
7539 online snapshots)</td>
7540
7541 <td>Other snapshots (including child snapshots, if any) and the
7542 current state are not directly affected</td></tr>
7543
7544 <tr><td><link to="IConsole::discardCurrentState()"/></td>
7545
7546 <td>Restore the current state of the virtual machine from the state
7547 stored in the current snapshot, including all settings and hard disk
7548 contents</td>
7549
7550 <td>The current state of the machine existed prior to this operation
7551 is lost</td></tr>
7552
7553 <tr><td><link to="IConsole::discardCurrentSnapshotAndState()"/></td>
7554
7555 <td>Completely revert the virtual machine to the state it was in
7556 before the current snapshot has been taken</td>
7557
7558 <td>The current state, as well as the current snapshot, are
7559 lost</td></tr>
7560
7561 </table>
7562
7563 </desc>
7564
7565 <attribute name="id" type="uuid" readonly="yes">
7566 <desc>UUID of the snapshot.</desc>
7567 </attribute>
7568
7569 <attribute name="name" type="wstring">
7570 <desc>Short name of the snapshot.</desc>
7571 </attribute>
7572
7573 <attribute name="description" type="wstring">
7574 <desc>Optional description of the snapshot.</desc>
7575 </attribute>
7576
7577 <attribute name="timeStamp" type="long long" readonly="yes">
7578 <desc>
7579 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
7580 </desc>
7581 </attribute>
7582
7583 <attribute name="online" type="boolean" readonly="yes">
7584 <desc>
7585 <tt>true</tt> if this snapshot is an online snapshot and
7586 <tt>false</tt> otherwise.
7587
7588 <note>
7589 When this attribute is <tt>true</tt>, the
7590 <link to="IMachine::stateFilePath"/> attribute of the
7591 <link to="#machine"/> object associated with this snapshot
7592 will point to the saved state file. Otherwise, it will be
7593 <tt>null</tt>.
7594 </note>
7595 </desc>
7596 </attribute>
7597
7598 <attribute name="machine" type="IMachine" readonly="yes">
7599 <desc>
7600 Virtual machine this snapshot is taken on. This object
7601 stores all settings the machine had when taking this snapshot.
7602 <note>
7603 The returned machine object is immutable, i.e. no
7604 any settings can be changed.
7605 </note>
7606 </desc>
7607 </attribute>
7608
7609 <attribute name="parent" type="ISnapshot" readonly="yes">
7610 <desc>
7611 Parent snapshot (a snapshot this one is based on).
7612 <note>
7613 It's not an error to read this attribute on a snapshot
7614 that doesn't have a parent -- a null object will be
7615 returned to indicate this.
7616 </note>
7617 </desc>
7618 </attribute>
7619
7620 <attribute name="children" type="ISnapshotCollection" readonly="yes">
7621 <desc>
7622 Child snapshots (all snapshots having this one as a parent).
7623 <note>
7624 In the current implementation, there can be only one
7625 child snapshot, or no children at all, meaning this is the
7626 last (head) snapshot.
7627 </note>
7628 </desc>
7629 </attribute>
7630
7631 </interface>
7632
7633
7634 <!--
7635 // IMedia
7636 /////////////////////////////////////////////////////////////////////////
7637 -->
7638
7639 <enum
7640 name="MediaState"
7641 uuid="8b86e03c-2f1c-412a-8fbd-326f62701200"
7642 >
7643 <desc>
7644 Virtual media state.
7645 <see>IMedia</see>
7646 </desc>
7647
7648 <const name="NotCreated" value="0">
7649 <desc>
7650 Associated media storage does not exist (either was not created yet or
7651 was deleted).
7652 </desc>
7653 </const>
7654 <const name="Created" value="1">
7655 <desc>
7656 Associated storage exists and accessible.
7657 </desc>
7658 </const>
7659 <const name="LockedRead" value="2">
7660 <desc>
7661 Media is locked for reading, no data modification is possible.
7662 </desc>
7663 </const>
7664 <const name="LockedWrite" value="3">
7665 <desc>
7666 Media is locked for writing, no concurrent data reading or modification
7667 is possible.
7668 </desc>
7669 </const>
7670 <const name="Inaccessible" value="4">
7671 <desc>
7672 Associated media storage is not accessible.
7673 </desc>
7674 </const>
7675 <const name="Creating" value="5">
7676 <desc>
7677 Associated media storage is being created.
7678 </desc>
7679 </const>
7680 <const name="Deleting" value="6">
7681 <desc>
7682 Associated media storage is being deleted.
7683 </desc>
7684 </const>
7685 </enum>
7686
7687 <interface
7688 name="IMedium" extends="$unknown"
7689 uuid="a7fb3bfb-c180-4274-bae4-7fbc89046e13"
7690 wsmap="managed"
7691 >
7692 <desc>
7693 The IMedium interface is a common interface for all objects representing
7694 virtual media such as hard disks, DVD images.
7695
7696 Each medium is associated with a storage unit (such as a file on the host
7697 computer or a network resource) that holds actual data. The location of
7698 the storage unit is represented by the #location attribute. The value of
7699 this attribute is media type dependent.
7700
7701 The exact media type may be determined by querying the appropriate
7702 interface such as:
7703 <ul>
7704 <li>IHardDisk2 (virtual hard disks)</li>
7705 <li>IDVDImage2 (standard CD/DVD ISO image files)</li>
7706 <li>IFloppyImage2 (raw floppy image files)</li>
7707 </ul>
7708
7709 Existing media are opened using the following methods, depending on the
7710 media type:
7711 <ul>
7712 <li><link to="IVirtualBox::openHardDisk2()"/></li>
7713 <li><link to="IVirtualBox::openDVDImage()"/></li>
7714 <li><link to="IVirtualBox::openFloppyImage()"/></li>
7715 </ul>
7716
7717 New hard disk media are created using the
7718 <link to="IVirtualBox::createHardDisk2()"/> method. CD/DVD and floppy
7719 images are created outside VirtualBox, usually by storing a copy
7720 of the real medium of the corresponding type in a regular file.
7721
7722 <h3>Known Media</h3>
7723
7724 When an existing medium gets opened for the first time, it gets
7725 automatically remembered by the given VirtualBox installation or, in other
7726 words, becomes a <i>known medium</i>. Known media are stored in the media
7727 registry transparently maintained by VirtualBox and stored in settings
7728 files so that this registry is preserved when VirtualBox is not running.
7729
7730 Newly created virtual hard disks get remembered only when the associated
7731 storage unit is actually created (see IHardDisk2 for more details).
7732
7733 All known media can be enumerated using
7734 <link to="IVirtualBox::hardDisks2"/>,
7735 <link to="IVirtualBox::DVDImages"/> and
7736 <link to="IVirtualBox::floppyImages"/> attributes. Individual media can be
7737 quickly found by UUID using <link to="IVirtualBox::getHardDisk2()"/>
7738 and similar methods or by location using
7739 <link to="IVirtualBox::findHardDisk2()"/> and similar methods.
7740
7741 Only known media can be attached to virtual machines.
7742
7743 Removing known media from the media registry is performed when the given
7744 medium is closed using the <link to="#close()"/> method or when its
7745 associated storage unit is deleted (only for hard disks).
7746
7747 <h3>Accessibility Checks</h3>
7748
7749 The given medium (with the created storage unit) is considered to be
7750 <i>accessible</i> when its storage unit can be successfully read from.
7751 Accessible media are indicated by the <link to="MediaState_Created"/>
7752 value of the <link to="#state"/> attribute. When the storage unit cannot
7753 be read (for example, because it is located on a disconnected network
7754 resource, or was accidentally deleted outside VirtualBox), the medium is
7755 considered to be <i>inaccessible</i> which is indicated by the
7756 <link to="MediaState_Inaccessible"/> state. The details about the reason
7757 of being inaccessible can be obtained using the
7758 <link to="#lastAccessError"/> attribute.
7759
7760 A new accessibility check is performed each time the <link to="#state"/>
7761 attribute is read. Please note that this check may take long time (several
7762 seconds or even minutes, depending on the storage unit location and
7763 format), and will block the calling thread until finished. For this
7764 reason, it is recommended to never read this attribute on the main UI
7765 thread to avoid making the UI unresponsive.
7766
7767 Note that when VirtualBox starts up (e.g. the VirtualBox object gets
7768 created for the first time), all known media are in the
7769 <link to="MediaState_Inaccessible"/> state but the value of the <link
7770 to="#lastAccessError"/> attribute is <tt>null</tt> because no actual
7771 accessibility check is made on startup. This is done to make the
7772 VirtualBox object ready for serving requests as
7773 fast as possible and let the end-user application decide if it needs to
7774 check media accessibility right away or not.
7775 </desc>
7776
7777 <attribute name="id" type="uuid" readonly="yes">
7778 <desc>
7779 UUID of the medium. For a newly created medium, this value is a randomly
7780 generated UUID.
7781
7782 <note>
7783 For media in one of MediaState_NotCreated, MediaState_Creating or
7784 MediaState_Deleting states, the value of this property is undefined
7785 and will most likely be an empty UUID.
7786 </note>
7787 </desc>
7788 </attribute>
7789
7790 <attribute name="description" type="wstring">
7791 <desc>
7792 Optional description of the medium. For newly created media, the value
7793 of this attribute value is <tt>null</tt>.
7794
7795 Media types that don't support this attribute will return E_NOTIMPL in
7796 attempt to get or set this attribute's value.
7797
7798 <note>
7799 For some storage types, reading this attribute may return an outdated
7800 (last known) value when <link to="#state"/> is <link
7801 to="MediaState_Inaccessible"/> or <link
7802 to="MediaState_LockedWrite"/> because the value of this attribute is
7803 stored within the storage unit itself. Also note that changing the
7804 attribute value is not possible in such case, as well as when the
7805 medium is the <link to="MediaState_LockedRead"/> state.
7806 </note>
7807 </desc>
7808 </attribute>
7809
7810 <attribute name="state" type="MediaState" readonly="yes">
7811 <desc>
7812 Current media state. Inspect <link to="MediaState"/> values for details.
7813
7814 Reading this attribute may take long time because a new accessibility
7815 check of the storage unit is performed every time the attribute is read.
7816 This check may cause a significant delay if the storage unit of the
7817 given medium is, for example, a file located on a network share which is
7818 not currently accessible due to connectivity problems -- the call will
7819 not return until a timeout interval defined by the host OS for this
7820 operation expires.
7821
7822 If the last known state of the medium is <link to="MediaState_Created"/>
7823 and the accessibility check fails then the state would be set to
7824 <link to="MediaState_Inaccessible"/> and <link to="#lastAccessError"/>
7825 may be used to get more details about the failure. If the state of the
7826 medium is <link to="MediaState_LockedRead"/> or
7827 <link to="MediaState_LockedWrite"/> then it remains the same, and a
7828 non-null value of <link to="#lastAccessError"/> will indicate a failed
7829 accessibility check in this case.
7830
7831 Note that not all media states are applicable to certain media types.
7832 For example, states <link to="MediaState_NotCreated"/>,
7833 <link to="MediaState_LockedWrite"/>, <link to="MediaState_Creating"/>,
7834 <link to="MediaState_Deleting"/> are meaningless for IDVDImage2 and
7835 IFloppyImage2 media.
7836 </desc>
7837 </attribute>
7838
7839 <attribute name="location" type="wstring">
7840 <desc>
7841 Location of the storage unit holding media data.
7842
7843 The format of the location string is media type specific. For media
7844 types that use regular files in a host's file system, the location
7845 string is just a full file name.
7846
7847 Some media types may support changing the storage unit location by
7848 simply changing the value of this property. If this operation is not
7849 supported, the implementation will return E_NOTIMPL in attempt to set
7850 this attribute's value.
7851
7852 When setting a value of the location attribute which is a regular file
7853 in the host's file system, the given file name may be either relative to
7854 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
7855 absolute. Note that if the given location specification does not contain
7856 the file extension part then a proper default extension will be
7857 automatically appended by the implementation depending on the media type.
7858 </desc>
7859 </attribute>
7860
7861 <attribute name="name" type="wstring" readonly="yes">
7862 <desc>
7863 Name of the storage unit holding media data.
7864
7865 The returned string is a short version of the <link to="#location"/>
7866 attribute that is suitable for representing the medium in situations
7867 where the full location specification is too long (such as lists
7868 and comboboxes in GUI frontends). This string is also used by frontends
7869 to sort the media list alphabetically when needed.
7870
7871 For example, for locations that are regular files in the host's file
7872 system, the value of this attribute is just a file name (+ extension),
7873 without the path specification.
7874
7875 Note that as opposed to the <link to="#location"/> attribute, the name
7876 attribute will not necessary be unique for a list of media of the
7877 given type and format.
7878 </desc>
7879 </attribute>
7880
7881 <attribute name="size" type="unsigned long long" readonly="yes">
7882 <desc>
7883 Physical size of the storage unit used to hold media data (in bytes).
7884
7885 <note>
7886 For media whose <link to="#state"/> is <link
7887 to="MediaState_Inaccessible"/>, the value of this property is the
7888 last known size. For <link to="MediaState_NotCreated"/> media,
7889 the returned value is zero.
7890 </note>
7891 </desc>
7892 </attribute>
7893
7894 <attribute name="lastAccessError" type="wstring" readonly="yes">
7895 <desc>
7896 Text message that represents the result of the last accessibility
7897 check.
7898
7899 Accessibility checks are performed each time the <link to="#state"/>
7900 attribute is read. A @c null string is returned if the last
7901 accessibility check was successful. A non-null string indicates a
7902 failure and should normally describe a reason of the failure (for
7903 example, a file read error).
7904 </desc>
7905 </attribute>
7906
7907 <attribute name="machineIds" type="uuid" safearray="yes" readonly="yes">
7908 <desc>
7909 Array of UUIDs of all machines this medium is attached to.
7910
7911 A <tt>null</tt> array is returned if this medium is not attached to any
7912 machine or to any machine's snapshot.
7913
7914 <note>
7915 The returned array will include a machine even if this medium is not
7916 attached to that machine in the current state but attached to it in
7917 one of the machine's snapshots. See <link to="#getSnapshotIds()"/> for
7918 details.
7919 </note>
7920 </desc>
7921 </attribute>
7922
7923 <method name="getSnapshotIds">
7924 <desc>
7925 Returns an array of UUIDs of all snapshots of the given machine where
7926 this medium is attached to it.
7927
7928 If the medium is attached to the machine in the current state, then the
7929 first element in the array will always be the ID of the queried machine
7930 (i.e. the value equal to the @c machineId argument), followed by
7931 snapshot IDs (if any).
7932
7933 If the medium is not attached to the machine in the current state, then
7934 the array will contain only snapshot IDs.
7935
7936 The returned array may be <tt>null</tt> if this medium is not attached
7937 to the given machine at all, neither in the current state nor in one of
7938 snapshots.
7939 </desc>
7940 <param name="machineId" type="uuid" dir="in">
7941 <desc>
7942 UUID of the machine to query.
7943 </desc>
7944 </param>
7945 <param name="snapshotIds" type="uuid" safearray="yes" dir="return">
7946 <desc>
7947 Array of snapshot UUIDs of the given machine using this medium.
7948 </desc>
7949 </param>
7950 </method>
7951
7952 <method name="lockRead">
7953 <desc>
7954 Locks this medium for reading.
7955
7956 The read lock is shared: many clients can simultaneously lock the
7957 same media for reading unless it is already locked for writing (see
7958 <link to="#lockWrite()"/>) in which case an error is returned.
7959
7960 When the medium is locked for reading, it cannot be modified
7961 from within VirtualBox. This means that any method that changes
7962 the properties of this medium or contents of the storage unit
7963 will return an error (unless explicitly stated otherwise) and
7964 that an attempt to start a virtual machine that wants to modify
7965 the medium will also fail.
7966
7967 When the virtual machine is started up, it locks for reading all
7968 media it uses in read-only mode. If some media cannot be locked
7969 for reading, the startup procedure will fail.
7970
7971 The medium locked for reading must be unlocked using the <link
7972 to="#unlockRead()"/> method. Calls to <link to="#lockRead()"/>
7973 can be nested and must be followed by the same number of paired
7974 <link to="#unlockRead()"/> calls.
7975
7976 This method sets the media state to <link
7977 to="MediaState_LockedRead"/> on success. The state prior to
7978 this call must be <link to="MediaState_Created"/>, <link
7979 to="MediaState_Inaccessible"/> or <link
7980 to="MediaState_LockedRead"/>. As you can see, inaccessible
7981 media can be locked too. This is not an error; this method
7982 performs a logical lock that prevents modifications of this
7983 media through the VirtualBox API, not a physical lock of the
7984 underlying storage unit.
7985
7986 This method returns the current state of the medium
7987 <b>before</b> the operation.
7988
7989 <result name="VBOX_E_INVALID_OBJECT_STATE">
7990 Invalid media state (e.g. not created, locked, inaccessible,
7991 creating, deleting).
7992 </result>
7993
7994 </desc>
7995 <param name="state" type="MediaState" dir="return">
7996 <desc>
7997 State of the medium after the operation.
7998 </desc>
7999 </param>
8000 </method>
8001
8002 <method name="unlockRead">
8003 <desc>
8004 Cancels the read lock previously set by <link to="#lockRead()"/>.
8005
8006 Either on success or on failure, this method returns the current state
8007 of the medium <b>after</b> the operation.
8008
8009 See <link to="#lockRead()"/> for more details.
8010
8011 <result name="VBOX_E_INVALID_OBJECT_STATE">
8012 Medium not locked for reading.
8013 </result>
8014
8015 </desc>
8016 <param name="state" type="MediaState" dir="return">
8017 <desc>
8018 State of the medium after the operation.
8019 </desc>
8020 </param>
8021 </method>
8022
8023 <method name="lockWrite">
8024 <desc>
8025 Locks this medium for writing.
8026
8027 The write lock, as opposed to <link to="#lockRead()"/>, is
8028 exclusive: there may be only one client that holds a write lock
8029 and there may be no read locks while the write lock is held.
8030
8031 When the medium is locked for writing, it cannot be modified
8032 from within VirtualBox and it is not guaranteed that the values
8033 of its properties are up-to-date. Any method that changes the
8034 properties of this medium or contents of the storage unit will
8035 return an error ((unless explicitly stated otherwise) and an
8036 attempt to start a virtual machine that wants to modify or to
8037 read the medium will also fail.
8038
8039 When the virtual machine is started up, it locks for writing all
8040 media it uses to write data to. If some media cannot be locked
8041 for writing, the startup procedure will fail.
8042
8043 The medium locked for writing must be unlocked using the <link
8044 to="#unlockWrite()"/> method. Calls to <link to="#lockWrite()"/>
8045 can <b>not</b> be nested and must be followed by a paired <link
8046 to="#unlockWrite()"/> call.
8047
8048 This method sets the media state to <link
8049 to="MediaState_LockedWrite"/> on success. The state prior to
8050 this call must be <link to="MediaState_Created"/> or <link
8051 to="MediaState_Inaccessible"/>. As you can see, inaccessible
8052 media can be locked too. This is not an error; this method
8053 performs a logical lock that prevents modifications of this
8054 media through the VirtualBox API, not a physical lock of the
8055 underlying storage unit.
8056
8057 Either on success or on failure, this method returns the current
8058 state of the medium <b>before</b> the operation.
8059
8060 <result name="VBOX_E_INVALID_OBJECT_STATE">
8061 Invalid media state (e.g. not created, locked, inaccessible,
8062 creating, deleting).
8063 </result>
8064
8065 </desc>
8066 <param name="state" type="MediaState" dir="return">
8067 <desc>
8068 State of the medium after the operation.
8069 </desc>
8070 </param>
8071 </method>
8072
8073 <method name="unlockWrite">
8074 <desc>
8075 Cancels the write lock previously set by <link to="#lockWrite()"/>.
8076
8077 Either on success or on failure, this method returns the current
8078 state of the medium <b>after</b> the operation.
8079
8080 See <link to="#lockWrite()"/> for more details.
8081
8082 <result name="VBOX_E_INVALID_OBJECT_STATE">
8083 Medium not locked for writing.
8084 </result>
8085
8086 </desc>
8087 <param name="state" type="MediaState" dir="return">
8088 <desc>
8089 State of the medium after the operation.
8090 </desc>
8091 </param>
8092 </method>
8093
8094 <method name="close">
8095 <desc>
8096 Closes this medium.
8097
8098 The hard disk must not be attached to any known virtual machine
8099 and must not have any known child hard disks, otherwise the
8100 operation will fail.
8101
8102 When the hard disk is successfully closed, it gets removed from
8103 the list of remembered hard disks, but its storage unit is not
8104 deleted. In particular, this means that this hard disk can be
8105 later opened again using the <link
8106 to="IVirtualBox::openHardDisk2"/> call.
8107
8108 Note that after this method successfully returns, the given hard
8109 disk object becomes uninitialized. This means that any attempt
8110 to call any of its methods or attributes will fail with the
8111 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
8112
8113 <result name="VBOX_E_INVALID_OBJECT_STATE">
8114 Invalid media state (other than not created, created or
8115 inaccessible).
8116 </result>
8117 <result name="VBOX_E_OBJECT_IN_USE">
8118 Medium attached to virtual machine.
8119 </result>
8120 <result name="VBOX_E_FILE_ERROR">
8121 Settings file not accessible.
8122 </result>
8123 <result name="VBOX_E_XML_ERROR">
8124 Could not parse the settings file.
8125 </result>
8126
8127 </desc>
8128 </method>
8129
8130 </interface>
8131
8132
8133 <!--
8134 // IHardDisk2
8135 /////////////////////////////////////////////////////////////////////////
8136 -->
8137
8138 <enum
8139 name="HardDiskType"
8140 uuid="a348fafd-a64e-4643-ba65-eb3896bd7e0a"
8141 >
8142 <desc>
8143 Virtual hard disk type.
8144 <see>IHardDisk</see>
8145 </desc>
8146
8147 <const name="Normal" value="0">
8148 <desc>
8149 Normal hard disk (attached directly or indirectly, preserved
8150 when taking snapshots).
8151 </desc>
8152 </const>
8153 <const name="Immutable" value="1">
8154 <desc>
8155 Immutable hard disk (attached indirectly, changes are wiped out
8156 after powering off the virtual machine).
8157 </desc>
8158 </const>
8159 <const name="Writethrough" value="2">
8160 <desc>
8161 Write through hard disk (attached directly, ignored when
8162 taking snapshots).
8163 </desc>
8164 </const>
8165 </enum>
8166
8167 <interface
8168 name="IHardDisk2Attachment" extends="$unknown"
8169 uuid="fa2f4619-2c14-4090-869e-73b45419b7b5"
8170 wsmap="struct"
8171 >
8172 <desc>
8173 The IHardDisk2Attachment interface represents a hard disk attachment of a
8174 virtual machine.
8175
8176 Every hard disk attachment specifies a slot of the virtual hard disk
8177 controller and a virtual hard disk attached to this slot.
8178
8179 The array of hard disk attachments is returned by
8180 <link to="IMachine::hardDisk2Attachments"/>.
8181
8182 <note>
8183 With the COM API, this is an interface like all the others. With the
8184 webservice, this is mapped to a structure, so querying the attribute
8185 will not return an object, but a complete structure.
8186 </note>
8187 </desc>
8188 <attribute name="hardDisk" type="IHardDisk2" readonly="yes">
8189 <desc>Hard disk object associated with this attachment.</desc>
8190 </attribute>
8191
8192 <attribute name="bus" type="StorageBus" readonly="yes">
8193 <desc>Interface bus of this attachment.</desc>
8194 </attribute>
8195
8196 <attribute name="channel" type="long" readonly="yes">
8197 <desc>Channel number of this attachment.</desc>
8198 </attribute>
8199
8200 <attribute name="device" type="long" readonly="yes">
8201 <desc>Device slot number of this attachment.</desc>
8202 </attribute>
8203
8204 </interface>
8205
8206 <interface
8207 name="IHardDisk2" extends="IMedium"
8208 uuid="ed6e2525-c2fd-42a4-917a-7a9045ac9e15"
8209 wsmap="managed"
8210 >
8211 <desc>
8212 The IHardDisk2 interface represents a virtual hard disk drive
8213 used by a virtual machine.
8214
8215 Virtual hard disk objects virtualize the hard disk hardware and look like
8216 regular hard disks for the guest OS running inside the virtual machine.
8217
8218 <h3>Hard Disk Types</h3>
8219
8220 There are three types of hard disks:
8221 <link to="HardDiskType_Normal">Normal</link>,
8222 <link to="HardDiskType_Immutable">Immutable</link> and
8223 <link to="HardDiskType_Writethrough">Writethrough</link>. The type of the
8224 hard disk defines how the hard disk is attached to a virtual machine and
8225 what happens when a <link to="ISnapshot">snapshot</link> of the virtual
8226 machine with the attached hard disk is taken. The type of the hard disk is
8227 defined by the <link to="#type"/> attribute.
8228
8229 All hard disks can be also divided in two big groups: <i>base</i> hard
8230 disks and <i>differencing</i> hard disks. A base hard disk contains all
8231 sectors of the hard disk data in its storage unit and therefore can be
8232 used independently. On the contrary, a differencing hard disk contains
8233 only some part of the hard disk data (a subset of sectors) and needs
8234 another hard disk to get access to the missing sectors of data. This
8235 another hard disk is called a <i>parent</i> hard disk and defines a hard
8236 disk to which this differencing hard disk is known to be <i>linked to</i>.
8237 The parent hard disk may be itself a differencing hard disk. This
8238 way, differencing hard disks form a linked hard disk chain. This chain
8239 always ends with the base hard disk which is sometimes referred to as the
8240 root hard disk of this chain. Note that several differencing hard disks
8241 may be linked to the same parent hard disk. This way, all known hard disks
8242 form a hard disk tree which is based on their parent-child relationship.
8243
8244 Differencing hard disks can be distinguished from base hard disks by
8245 querying the <link to="#parent"/> attribute: base hard disks do not have
8246 parents they would depend on, so the value of this attribute is always
8247 <tt>null</tt> for them. Using this attribute, it is possible to walk up
8248 the hard disk tree (from the child hard disk to its parent). It is also
8249 possible to walk down the tree using the <link to="#children"/>
8250 attribute.
8251
8252 Note that the type of all differencing hard disks is
8253 <link to="HardDiskType_Normal">Normal</link>; all other values are
8254 meaningless for them. Base hard disks may be of any type.
8255
8256 <h3>Creating Hard Disks</h3>
8257
8258 New base hard disks are created using
8259 <link to="IVirtualBox::createHardDisk2()"/>. Existing hard disks are
8260 opened using <link to="IVirtualBox::openHardDisk2()"/>. Differencing hard
8261 disks are usually implicitly created by VirtualBox when needed but may
8262 also be created explicitly using <link to="#createDiffStorage()"/>.
8263
8264 After the hard disk is successfully created (including the storage unit)
8265 or opened, it becomes a known hard disk (remembered in the internal media
8266 registry). Known hard disks can be attached to a virtual machine, accessed
8267 through <link to="IVirtualBox::getHardDisk2()"/> and
8268 <link to="IVirtualBox::findHardDisk2()"/> methods or enumerated using the
8269 <link to="IVirtualBox::hardDisks2"/> array (only for base hard disks).
8270
8271 The following methods, besides <link to="IMedium::close()"/>,
8272 automatically remove the hard disk from the media registry:
8273 <ul>
8274 <li><link to="#deleteStorage()"/></li>
8275 <li><link to="#mergeTo()"/></li>
8276 </ul>
8277
8278 If the storage unit of the hard disk is a regular file in the host's
8279 file system then the rules stated in the description of the
8280 <link to="IMedium::location"/> attribute apply when setting its value. In
8281 addition, a plain file name without any path may be given, in which case
8282 the <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
8283 folder</link> will be prepended to it.
8284
8285 <h4>Automatic composition of the file name part</h4>
8286
8287 Another extension to the <link to="IMedium::location"/> attribute is that
8288 there is a possibility to cause VirtualBox to compose a unique value for
8289 the file name part of the location using the UUID of the hard disk. This
8290 applies only to hard disks in <link to="MediaState_NotCreated"/> state,
8291 e.g. before the storage unit is created, and works as follows. You set the
8292 value of the <link to="IMedium::location"/> attribute to a location
8293 specification which only contains the path specification but not the file
8294 name part and ends with either a forward slash or a backslash character.
8295 In response, VirtualBox will generate a new UUID for the hard disk and
8296 compose the file name using the following pattern:
8297 <pre>
8298 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
8299 </pre>
8300 where <tt>&lt;path&gt;</tt> is the supplied path specification,
8301 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
8302 is the default extension for the storage format of this hard disk. After
8303 that, you may call any of the methods that create a new hard disk storage
8304 unit and they will use the generated UUID and file name.
8305
8306 <h3>Attaching Hard Disks</h3>
8307
8308 Hard disks are attached to virtual machines using the
8309 <link to="IMachine::attachHardDisk2()"/> method and detached using the
8310 <link to="IMachine::detachHardDisk2()"/> method. Depending on their
8311 <link to="#type"/>, hard disks are attached either
8312 <i>directly</i> or <i>indirectly</i>.
8313
8314 When a hard disk is being attached directly, it is associated with the
8315 virtual machine and used for hard disk operations when the machine is
8316 running. When a hard disk is being attached indirectly, a new differencing
8317 hard disk linked to it is implicitly created and this differencing hard
8318 disk is associated with the machine and used for hard disk operations.
8319 This also means that if <link to="IMachine::attachHardDisk2()"/> performs
8320 a direct attachment then the same hard disk will be returned in response
8321 to the subsequent <link to="IMachine::getHardDisk2()"/> call; however if
8322 an indirect attachment is performed then
8323 <link to="IMachine::getHardDisk2()"/> will return the implicitly created
8324 differencing hard disk, not the original one passed to <link
8325 to="IMachine::attachHardDisk2()"/>. The following table shows the
8326 dependency of the attachment type on the hard disk type:
8327
8328 <table>
8329 <tr>
8330 <th>Hard Disk Type</th>
8331 <th>Direct or Indirect?</th>
8332 </tr>
8333 <tr>
8334 <td>Normal (Base)</td>
8335 <td>
8336 Normal base hard disks that do not have children (i.e. differencing
8337 hard disks linked to them) and that are not already attached to
8338 virtual machines in snapshots are attached <b>directly</b>.
8339 Otherwise, they are attached <b>indirectly</b> because having
8340 dependent children or being part of the snapshot makes it impossible
8341 to modify hard disk contents without breaking the integrity of the
8342 dependent party. The <link to="#readOnly"/> attribute allows to
8343 quickly determine the kind of the attachment for the given hard
8344 disk. Note that if a normal base hard disk is to be indirectly
8345 attached to a virtual machine with snapshots then a special
8346 procedure called <i>smart attachment</i> is performed (see below).
8347 </td>
8348 </tr>
8349 <tr>
8350 <td>Normal (Differencing)</td>
8351 <td>
8352 Differencing hard disks are like normal base hard disks: attached
8353 <b>directly</b> if they do not have children and are not attached to
8354 virtual machines in snapshots, and <b>indirectly</b> otherwise. Note
8355 that the smart attachment procedure is never performed for
8356 differencing hard disks.
8357 </td>
8358 </tr>
8359 <tr>
8360 <td>Immutable</td>
8361 <td>
8362 Immutable hard disks are always attached <b>indirectly</b> because
8363 they are designed to be non-writable. If an immutable hard disk is
8364 attached to a virtual machine with snapshots then a special
8365 procedure called smart attachment is performed (see below).
8366 </td>
8367 </tr>
8368 <tr>
8369 <td>Writethrough</td>
8370 <td>
8371 Writethrough hard disks are always attached <b>directly</b>, also as
8372 designed. This also means that writethrough hard disks cannot have
8373 other hard disks linked to them at all.
8374 </td>
8375 </tr>
8376 </table>
8377
8378 Note that the same hard disk, regardless of its type, may be attached to
8379 more than one virtual machine at a time. In this case, the machine that is
8380 started first gains exclusive access to the hard disk and attempts to
8381 start other machines having this hard disk attached will fail until the
8382 first machine is powered down.
8383
8384 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
8385 that the given hard disk remains associated with the given machine after a
8386 successful <link to="IMachine::detachHardDisk2()"/> call until
8387 <link to="IMachine::saveSettings()"/> is called to save all changes to
8388 machine settings to disk. This deferring is necessary to guarantee that
8389 the hard disk configuration may be restored at any time by a call to
8390 <link to="IMachine::discardSettings()"/> before the settings
8391 are saved (committed).
8392
8393 Note that if <link to="IMachine::discardSettings()"/> is called after
8394 indirectly attaching some hard disks to the machine but before a call to
8395 <link to="IMachine::saveSettings()"/> is made, it will implicitly delete
8396 all differencing hard disks implicitly created by
8397 <link to="IMachine::attachHardDisk2()"/> for these indirect attachments.
8398 Such implicitly created hard disks will also be immediately deleted when
8399 detached explicitly using the <link to="IMachine::detachHardDisk2()"/>
8400 call if it is made before <link to="IMachine::saveSettings()"/>. This
8401 implicit deletion is safe because newly created differencing hard
8402 disks do not contain any user data.
8403
8404 However, keep in mind that detaching differencing hard disks that were
8405 implicitly created by <link to="IMachine::attachHardDisk2()"/>
8406 before the last <link to="IMachine::saveSettings()"/> call will
8407 <b>not</b> implicitly delete them as they may already contain some data
8408 (for example, as a result of virtual machine execution). If these hard
8409 disks are no more necessary, the caller can always delete them explicitly
8410 using <link to="#deleteStorage()"/> after they are actually de-associated
8411 from this machine by the <link to="IMachine::saveSettings()"/> call.
8412
8413 <h3>Smart Attachment</h3>
8414
8415 When normal base or immutable hard disks are indirectly attached to a
8416 virtual machine then some additional steps are performed to make sure the
8417 virtual machine will have the most recent "view" of the hard disk being
8418 attached. These steps include walking through the machine's snapshots
8419 starting from the current one and going through ancestors up to the first
8420 snapshot. Hard disks attached to the virtual machine in all
8421 of the encountered snapshots are checked whether they are descendants of
8422 the given normal base or immutable hard disk. The first found child (which
8423 is the differencing hard disk) will be used instead of the normal base or
8424 immutable hard disk as a parent for creating a new differencing hard disk
8425 that will be actually attached to the machine. And only if no descendants
8426 are found or if the virtual machine does not have any snapshots then the
8427 normal base or immutable hard disk will be used itself as a parent for
8428 this differencing hard disk.
8429
8430 It is easier to explain what smart attachment does using the
8431 following example:
8432 <pre>
8433BEFORE attaching B.vdi: AFTER attaching B.vdi:
8434
8435Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
8436 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
8437 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
8438 Snapshot 4 (none) Snapshot 4 (none)
8439 CurState (none) CurState (D3->D2.vdi)
8440
8441 NOT
8442 ...
8443 CurState (D3->B.vdi)
8444 </pre>
8445 The first column is the virtual machine configuration before the base hard
8446 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
8447 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
8448 mean that the hard disk that is actually attached to the machine is a
8449 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
8450 another hard disk, <tt>B.vdi</tt>.
8451
8452 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
8453 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
8454 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
8455 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
8456 it cannot be attached directly and needs an indirect attachment (i.e.
8457 implicit creation of a new differencing hard disk). Due to the smart
8458 attachment procedure, the new differencing hard disk
8459 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
8460 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
8461 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
8462 machine.
8463
8464 Note that if there is more than one descendant hard disk of the given base
8465 hard disk found in a snapshot, and there is an exact device, channel and
8466 bus match, then this exact match will be used. Otherwise, the youngest
8467 descendant will be picked up.
8468
8469 There is one more important aspect of the smart attachment procedure which
8470 is not related to snapshots at all. Before walking through the snapshots
8471 as described above, the backup copy of the current list of hard disk
8472 attachment is searched for descendants. This backup copy is created when
8473 the hard disk configuration is changed for the first time after the last
8474 <link to="IMachine::saveSettings()"/> call and used by
8475 <link to="IMachine::discardSettings()"/> to undo the recent hard disk
8476 changes. When such a descendant is found in this backup copy, it will be
8477 simply re-attached back, without creating a new differencing hard disk for
8478 it. This optimization is necessary to make it possible to re-attach the
8479 base or immutable hard disk to a different bus, channel or device slot
8480 without losing the contents of the differencing hard disk actually
8481 attached to the machine in place of it.
8482 </desc>
8483
8484 <attribute name="format" type="wstring" readonly="yes">
8485 <desc>
8486 Storage format of this hard disk.
8487
8488 The value of this attribute is a string that specifies a backend used to
8489 store hard disk data. The storage format is defined when you create a
8490 new hard disk or automatically detected when you open an existing hard
8491 disk medium, and cannot be changed later.
8492
8493 The list of all storage formats supported by this VirtualBox
8494 installation can be obtained using
8495 <link to="ISystemProperties::hardDiskFormats"/>.
8496 </desc>
8497 </attribute>
8498
8499 <attribute name="type" type="HardDiskType">
8500 <desc>
8501 Type (role) of this hard disk.
8502
8503 The following constraints apply when changing the value of this
8504 attribute:
8505 <ul>
8506 <li>If a hard disk is attached to a virtual machine (either in the
8507 current state or in one of the snapshots), its type cannot be
8508 changed.
8509 </li>
8510 <li>As long as the hard disk has children, its type cannot be set
8511 to <link to="HardDiskType_Writethrough"/>.
8512 </li>
8513 <li>The type of all differencing hard disks is
8514 <link to="HardDiskType_Normal"/> and cannot be changed.
8515 </li>
8516 </ul>
8517
8518 The type of a newly created or opened hard disk is set to
8519 <link to="HardDiskType_Normal"/>.
8520 </desc>
8521 </attribute>
8522
8523 <attribute name="parent" type="IHardDisk2" readonly="yes">
8524 <desc>
8525 Parent of this hard disk (a hard disk this hard disk is directly based
8526 on).
8527
8528 Only differencing hard disks have parents. For base (non-differencing)
8529 hard disks, <tt>null</tt> is returned.
8530 </desc>
8531 </attribute>
8532
8533 <attribute name="children" type="IHardDisk2" safearray="yes" readonly="yes">
8534 <desc>
8535 Children of this hard disk (all differencing hard disks directly based
8536 on this hard disk). A <tt>null</tt> array is returned if this hard disk
8537 does not have any children.
8538 </desc>
8539 </attribute>
8540
8541 <attribute name="root" type="IHardDisk2" readonly="yes">
8542 <desc>
8543 Root hard disk of this hard disk.
8544
8545 If this is a differencing hard disk, its root hard disk is the base hard
8546 disk the given hard disk branch starts from. For all other types of hard
8547 disks, this property returns the hard disk object itself (i.e. the same
8548 object this property is read on).
8549 </desc>
8550 </attribute>
8551
8552 <attribute name="readOnly" type="boolean" readonly="yes">
8553 <desc>
8554 Returns <tt>true</tt> if this hard disk is read-only and <tt>false</tt>
8555 otherwise.
8556
8557 A hard disk is considered to be read-only when its contents cannot be
8558 modified without breaking the integrity of other parties that depend on
8559 this hard disk such as its child hard disks or snapshots of virtual
8560 machines where this hard disk is attached to these machines. If there
8561 are no children and no such snapshots then there is no dependency and
8562 the hard disk is not read-only.
8563
8564 The value of this attribute can be used to determine the kind of the
8565 attachment that will take place when attaching this hard disk to a
8566 virtual machine. If the value is <tt>false</tt> then the hard disk will
8567 be attached directly. If the value is <tt>true</tt> then the hard disk
8568 will be attached indirectly by creating a new differencing child hard
8569 disk for that. See the interface description for more information.
8570
8571 Note that all <link to="HardDiskType_Immutable">Immutable</link> hard
8572 disks are always read-only while all
8573 <link to="HardDiskType_Writethrough">Writethrough</link> hard disks are
8574 always not.
8575
8576 <note>
8577 The read-only condition represented by this attribute is related to
8578 the hard disk type and usage, not to the current
8579 <link to="IMedium::state">media state</link> and not to the read-only
8580 state of the storage unit.
8581 </note>
8582 </desc>
8583 </attribute>
8584
8585 <attribute name="logicalSize" type="unsigned long long" readonly="yes">
8586 <desc>
8587 Logical size of this hard disk (in megabytes), as reported to the
8588 guest OS running inside the virtual machine this disk is
8589 attached to. The logical size is defined when the hard disk is created
8590 and cannot be changed later.
8591
8592 <note>
8593 Reading this property on a differencing hard disk will return the size
8594 of its <link to="#root"/> hard disk.
8595 </note>
8596 <note>
8597 For hard disks whose state is <link to="#state"/> is <link
8598 to="MediaState_Inaccessible"/>, the value of this property is the
8599 last known logical size. For <link to="MediaState_NotCreated"/> hard
8600 disks, the returned value is zero.
8601 </note>
8602 </desc>
8603 </attribute>
8604
8605 <!-- storage methods -->
8606
8607 <method name="getProperty">
8608 <desc>
8609 Returns the value of the custom hard disk property with the given name.
8610
8611 The list of all properties supported by the given hard disk format can
8612 be obtained with <link to="IHardDiskFormat::describeProperties()"/>.
8613
8614 Note that if this method returns a <tt>null</tt> @a value, the requested
8615 property is supported but currently not assigned any value.
8616
8617 <result name="VBOX_E_OBJECT_NOT_FOUND">
8618 Requested property does not exist (not supported by the format).
8619 </result>
8620 <result name="E_INVALIDARG">@a name is NULL or empty.</result>
8621 </desc>
8622 <param name="name" type="wstring" dir="in">
8623 <desc>Name of the property to get.</desc>
8624 </param>
8625 <param name="value" type="wstring" dir="return">
8626 <desc>Current property value.</desc>
8627 </param>
8628 </method>
8629
8630 <method name="setProperty">
8631 <desc>
8632 Sets the value of the custom hard disk property with the given name.
8633
8634 The list of all properties supported by the given hard disk format can
8635 be obtained with <link to="IHardDiskFormat::describeProperties()"/>.
8636
8637 Note that setting the property value to <tt>null</tt> is equivalent to
8638 deleting the existing value. A default value (if it is defined for this
8639 property) will be used by the format backend in this case.
8640
8641 <result name="VBOX_E_OBJECT_NOT_FOUND">
8642 Requested property does not exist (not supported by the format).
8643 </result>
8644 <result name="E_INVALIDARG">@a name is NULL or empty.</result>
8645 </desc>
8646 <param name="name" type="wstring" dir="in">
8647 <desc>Name of the property to set.</desc>
8648 </param>
8649 <param name="value" type="wstring" dir="in">
8650 <desc>Property value to set.</desc>
8651 </param>
8652 </method>
8653
8654 <method name="getProperties">
8655 <desc>
8656 Returns values for a group of properties in one call.
8657
8658 The names of the properties to get are specified using the @a names
8659 argument which is a list of comma-separated property names or
8660 <tt>null</tt> if all properties are to be returned. Note that currently
8661 the value of this argument is ignored and the method always returns all
8662 existing properties.
8663
8664 The list of all properties supported by the given hard disk format can
8665 be obtained with <link to="IHardDiskFormat::describeProperties()"/>.
8666
8667 The method returns two arrays, the array of property names corresponding
8668 to the @a names argument and the current values of these properties.
8669 Both arrays have the same number of elements with each elemend at the
8670 given index in the first array corresponds to an element at the same
8671 index in the second array.
8672
8673 Note that for properties that do not have assigned values,
8674 <tt>null</tt> is returned at the appropriate index in the @a
8675 returnValues array.
8676
8677 </desc>
8678 <param name="names" type="wstring" dir="in">
8679 <desc>
8680 Names of properties to get.
8681 </desc>
8682 </param>
8683 <param name="returnNames" type="wstring" safearray="yes" dir="out">
8684 <desc>Names of returned properties.</desc>
8685 </param>
8686 <param name="returnValues" type="wstring" safearray="yes" dir="return">
8687 <desc>Values of returned properties.</desc>
8688 </param>
8689 </method>
8690
8691 <method name="setProperties">
8692 <desc>
8693 Sets values for a group of properties in one call.
8694
8695 The names of the properties to set are passed in the @a names
8696 array along with the new values for them in the @a values array. Both
8697 arrays have the same number of elements with each elemend at the given
8698 index in the first array corresponding to an element at the same index
8699 in the second array.
8700
8701 If there is at least one property name in @a names that is not valid,
8702 the method will fail before changing the values of any other properties
8703 from the @a names array.
8704
8705 Using this method over <link to="#setProperty()"/> is preferred if you
8706 need to set several properties at once since it will result into less
8707 IPC calls.
8708
8709 The list of all properties supported by the given hard disk format can
8710 be obtained with <link to="IHardDiskFormat::describeProperties()"/>.
8711
8712 Note that setting the property value to <tt>null</tt> is equivalent to
8713 deleting the existing value. A default value (if it is defined for this
8714 property) will be used by the format backend in this case.
8715 </desc>
8716 <param name="names" type="wstring" safearray="yes" dir="in">
8717 <desc>Names of properties to set.</desc>
8718 </param>
8719 <param name="values" type="wstring" safearray="yes" dir="in">
8720 <desc>Values of properties to set.</desc>
8721 </param>
8722 </method>
8723
8724 <!-- storage methods -->
8725
8726 <method name="createDynamicStorage">
8727 <desc>
8728 Starts creating a dynamically expanding hard disk storage unit in the
8729 background. The previous storage unit created for this object, if
8730 any, must first be deleted using <link to="#deleteStorage"/>, otherwise
8731 the operation will fail.
8732
8733 Before the operation starts, the hard disk is placed in
8734 <link to="MediaState_Creating"/> state. If the create operation
8735 fails, the media will be placed back in <link to="MediaState_NotCreated"/>
8736 state.
8737
8738 After the returned progress object reports that the operation has
8739 successfully completed, the media state will be set to <link
8740 to="MediaState_Created"/>, the hard disk will be remembered by this
8741 VirtualBox installation and may be attached to virtual machines.
8742
8743 <result name="VBOX_E_NOT_SUPPORTED">
8744 Dynamic storage creation operation is not supported. See <link
8745 to="IHardDiskFormat::capabilities"/>.
8746 </result>
8747 </desc>
8748 <param name="logicalSize" type="unsigned long long" dir="in">
8749 <desc>Maximum logical size of the hard disk in megabytes.</desc>
8750 </param>
8751 <param name="progress" type="IProgress" dir="return">
8752 <desc>Progress object to track the operation completion.</desc>
8753 </param>
8754 </method>
8755
8756 <method name="createFixedStorage">
8757 <desc>
8758 Starts creating a fixed-size hard disk storage unit in the background.
8759 The previous storage unit created for this object, if
8760 any, must be first deleted using <link to="#deleteStorage"/>, otherwise
8761 the operation will fail.
8762
8763 Before the operation starts, the hard disk is placed to
8764 <link to="MediaState_Creating"/> state. If the create operation
8765 fails, the media will placed back to <link to="MediaState_NotCreated"/>
8766 state.
8767
8768 After the returned progress object reports that the operation is
8769 successfully complete, the media state will be set to <link
8770 to="MediaState_Created"/>, the hard disk will be remembered by this
8771 VirtualBox installation and may be attached to virtual machines.
8772
8773 <result name="VBOX_E_NOT_SUPPORTED">
8774 Fixed storage creation operation is not supported. See
8775 <link to="IHardDiskFormat::capabilities"/>.
8776 </result>
8777 </desc>
8778 <param name="logicalSize" type="unsigned long long" dir="in">
8779 <desc>Logical size of the hard disk in megabytes.</desc>
8780 </param>
8781 <param name="progress" type="IProgress" dir="return">
8782 <desc>Progress object to track the operation completion.</desc>
8783 </param>
8784 </method>
8785
8786 <method name="deleteStorage">
8787 <desc>
8788 Starts deleting the storage unit of this hard disk.
8789
8790 The hard disk must not be attached to any known virtual machine and must
8791 not have any known child hard disks, otherwise the operation will fail.
8792 It will also fail if there is no storage unit to delete or if deletion
8793 is already in progress, or if the hard disk is being in use (locked for
8794 read or for write) or inaccessible. Therefore, the only valid state for
8795 this operation to succeed is <link to="MediaState_Created"/>.
8796
8797 Before the operation starts, the hard disk is placed to
8798 <link to="MediaState_Deleting"/> state and gets removed from the list
8799 of remembered hard disks (media registry). If the delete operation
8800 fails, the media will be remembered again and placed back to
8801 <link to="MediaState_Created"/> state.
8802
8803 After the returned progress object reports that the operation is
8804 complete, the media state will be set to
8805 <link to="MediaState_NotCreated"/> and you will be able to use one of
8806 the storage creation methods to create it again.
8807
8808 <see>#close()</see>
8809
8810 <result name="VBOX_E_OBJECT_IN_USE">
8811 Hard disk is attached to a virtual machine.
8812 </result>
8813 <result name="VBOX_E_NOT_SUPPORTED">
8814 Storage deletion is not allowed because neither of storage creation
8815 operations are supported. See
8816 <link to="IHardDiskFormat::capabilities"/>.
8817 </result>
8818
8819 <note>
8820 If the deletion operation fails, it is not guaranteed that the storage
8821 unit still exists. You may check the <link to="IMedium::state"/> value
8822 to answer this question.
8823 </note>
8824 </desc>
8825 <param name="progress" type="IProgress" dir="return">
8826 <desc>Progress object to track the operation completion.</desc>
8827 </param>
8828 </method>
8829
8830 <!-- diff methods -->
8831
8832 <method name="createDiffStorage">
8833 <desc>
8834 Starts creating an empty differencing storage unit based on this hard
8835 disk in the format and at the location defined by the @a target
8836 argument.
8837
8838 The target hard disk must be in <link to="MediaState_NotCreated"/>
8839 state (i.e. must not have an existing storage unit). Upon successful
8840 completion, this operation will set the type of the target hard disk to
8841 <link to="HardDiskType_Normal"/> and create a storage unit necessary to
8842 represent the differencing hard disk data in the given format (according
8843 to the storage format of the target object).
8844
8845 After the returned progress object reports that the operation is
8846 successfully complete, the target hard disk gets remembered by this
8847 VirtualBox installation and may be attached to virtual machines.
8848
8849 <note>
8850 The hard disk will be set to <link to="MediaState_LockedRead"/>
8851 state for the duration of this operation.
8852 </note>
8853 <result name="VBOX_E_OBJECT_IN_USE">
8854 Hard disk not in NotCreated state.
8855 </result>
8856 </desc>
8857 <param name="target" type="IHardDisk2" dir="in">
8858 <desc>Target hard disk.</desc>
8859 </param>
8860 <param name="progress" type="IProgress" dir="return">
8861 <desc>Progress object to track the operation completion.</desc>
8862 </param>
8863 </method>
8864
8865 <method name="mergeTo">
8866 <desc>
8867 Starts merging the contents of this hard disk and all intermediate
8868 differencing hard disks in the chain to the given target hard disk.
8869
8870 The target hard disk must be either a descendant of this hard disk or
8871 its ancestor (otherwise this method will immediately return a failure).
8872 It follows that there are two logical directions of the merge operation:
8873 from ancestor to descendant (<i>forward merge</i>) and from descendant to
8874 ancestor (<i>backward merge</i>). Let us consider the following hard disk
8875 chain:
8876
8877 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
8878
8879 Here, calling this method on the <tt>Base</tt> hard disk object with
8880 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
8881 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
8882 merge. Note that in both cases the contents of the resulting hard disk
8883 will be the same, the only difference is the hard disk object that takes
8884 the result of the merge operation. In case of the forward merge in the
8885 above example, the result will be written to <tt>Diff_2</tt>; in case of
8886 the backward merge, the result will be written to <tt>Base</tt>. In
8887 other words, the result of the operation is always stored in the target
8888 hard disk.
8889
8890 Upon successful operation completion, the storage units of all hard
8891 disks in the chain between this (source) hard disk and the target hard
8892 disk, including the source hard disk itself, will be automatically
8893 deleted and the relevant hard disk objects (including this hard disk)
8894 will become uninitialized. This means that any attempt to call any of
8895 their methods or attributes will fail with the
8896 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
8897 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
8898 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> hard
8899 disks. Note that <tt>Diff_2</tt> in this case will become a base hard
8900 disk itself since it will no longer be based on any other hard disk.
8901
8902 Considering the above, all of the following conditions must be met in
8903 order for the merge operation to succeed:
8904 <ul>
8905 <li>
8906 Neither this (source) hard disk nor any intermediate
8907 differencing hard disk in the chain between it and the target
8908 hard disk is attached to any virtual machine.
8909 </li>
8910 <li>
8911 Neither the source hard disk nor the target hard disk is an
8912 <link to="HardDiskType_Immutable"/> hard disk.
8913 </li>
8914 <li>
8915 The part of the hard disk tree from the source hard disk to the
8916 target hard disk is a linear chain, i.e. all hard disks in this
8917 chain have exactly one child which is the next hard disk in this
8918 chain. The only exception from this rule is the target hard disk in
8919 the forward merge operation; it is allowed to have any number of
8920 child hard disks because the merge operation will hot change its
8921 logical contents (as it is seen by the guest OS or by children).
8922 </li>
8923 <li>
8924 None of the involved hard disks are in
8925 <link to="MediaState_LockedRead"/> or
8926 <link to="MediaState_LockedWrite"/> state.
8927 </li>
8928 </ul>
8929
8930 <note>
8931 This (source) hard disk and all intermediates will be placed to <link
8932 to="MediaState_Deleting"/> state and the target hard disk will be
8933 placed to <link to="MediaState_LockedWrite"/> state and for the
8934 duration of this operation.
8935 </note>
8936 </desc>
8937 <param name="targetId" type="uuid" dir="in">
8938 <desc>UUID of the target ancestor or descendant hard disk.</desc>
8939 </param>
8940 <param name="progress" type="IProgress" dir="return">
8941 <desc>Progress object to track the operation completion.</desc>
8942 </param>
8943 </method>
8944
8945 <!-- clone methods -->
8946
8947 <method name="cloneTo">
8948 <desc>
8949 Starts creating a clone of this hard disk in the format and at the
8950 location defined by the @a target argument.
8951
8952 The target hard disk must be in <link to="MediaState_NotCreated"/>
8953 state (i.e. must not have an existing storage unit). Upon successful
8954 completion, the cloned hard disk will contain exactly the same sector
8955 data as the hard disk being cloned, except that a new UUID for the clone
8956 will be randomly generated.
8957
8958 After the returned progress object reports that the operation is
8959 successfully complete, the target hard disk gets remembered by this
8960 VirtualBox installation and may be attached to virtual machines.
8961
8962 <note>
8963 If the cloned hard disk is a differencing hard disk, it will inherit
8964 parent dependency of the original hard disk.
8965 </note>
8966 <note>
8967 This hard disk will be placed to <link to="MediaState_LockedRead"/>
8968 state for the duration of this operation.
8969 </note>
8970 </desc>
8971 <param name="target" type="IHardDisk2" dir="in">
8972 <desc>Target hard disk.</desc>
8973 </param>
8974 <param name="progress" type="IProgress" dir="return">
8975 <desc>Progress object to track the operation completion.</desc>
8976 </param>
8977 </method>
8978
8979 <method name="flattenTo">
8980 <desc>
8981 Starts creating a deep (independent) clone of this hard disk in the
8982 format and at the location defined by the @a target argument.
8983
8984 This operation is similar to <link to="#cloneTo()"/> except that when
8985 applied to a differencing hard disk, it will also copy missing hard disk
8986 data from all parent hard disks it is linked to. This will make the
8987 created clone an independent base hard disk that contains all hard disk
8988 data and does not need any other hard disks to operate.
8989
8990 After the returned progress object reports that the operation is
8991 successfully complete, the target hard disk gets remembered by this
8992 VirtualBox installation and may be attached to virtual machines.
8993
8994 <note>
8995 For base hard disks, this operation is identical to
8996 <link to="#cloneTo()"/>.
8997 </note>
8998 <note>
8999 This hard disk and all its parent hard disks will be placed to <link
9000 to="MediaState_LockedRead"/> state for the duration of this
9001 operation.
9002 </note>
9003 </desc>
9004 <param name="target" type="IHardDisk2" dir="in">
9005 <desc>Target hard disk.</desc>
9006 </param>
9007 <param name="progress" type="IProgress" dir="return">
9008 <desc>Progress object to track the operation completion.</desc>
9009 </param>
9010 </method>
9011
9012 <method name="compact">
9013 <desc>
9014 Starts compacting of this hard disk. This means that the disk is
9015 transformed into a possibly more compact storage representation.
9016 This potentially creates temporary images, which can require a
9017 substantial amount of additional disk space.
9018
9019 After the returned progress object reports that the operation is
9020 successfully complete, the media state will be set back to the
9021 current state.
9022
9023 <note>
9024 This hard disk and all its parent hard disks will be placed to <link
9025 to="MediaState_LockedRead"/> state for the duration of this
9026 operation.
9027 </note>
9028 </desc>
9029 <param name="progress" type="IProgress" dir="return">
9030 <desc>Progress object to track the operation completion.</desc>
9031 </param>
9032 </method>
9033
9034 </interface>
9035
9036
9037 <!--
9038 // IHardDiskFormat
9039 /////////////////////////////////////////////////////////////////////////
9040 -->
9041
9042 <enum
9043 name="DataType"
9044 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
9045 >
9046 <const name="Int32" value="0"/>
9047 <const name="Int8" value="1"/>
9048 <const name="String" value="2"/>
9049 </enum>
9050
9051 <enum
9052 name="DataFlags"
9053 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
9054 >
9055 <const name="None" value="0x00"/>
9056 <const name="Mandatory" value="0x01"/>
9057 <const name="Expert" value="0x02"/>
9058 <const name="Array" value="0x04"/>
9059 <const name="FlagMask" value="0x07"/>
9060 </enum>
9061
9062 <enum
9063 name="HardDiskFormatCapabilities"
9064 uuid="1df1e4aa-d25a-4ba6-b2a2-02f60eb5903b"
9065 >
9066 <desc>
9067 Hard disk format capability flags.
9068 </desc>
9069
9070 <const name="Uuid" value="0x01">
9071 <desc>
9072 Supports UUIDs as expected by VirtualBox code.
9073 </desc>
9074 </const>
9075
9076 <const name="CreateFixed" value="0x02">
9077 <desc>
9078 Supports creating fixed size images, allocating all space instantly.
9079 </desc>
9080 </const>
9081
9082 <const name="CreateDynamic" value="0x04">
9083 <desc>
9084 Supports creating dynamically growing images, allocating space on
9085 demand.
9086 </desc>
9087 </const>
9088
9089 <const name="CreateSplit2G" value="0x08">
9090 <desc>
9091 Supports creating images split in chunks of a bit less than 2 GBytes.
9092 </desc>
9093 </const>
9094
9095 <const name="Differencing" value="0x10">
9096 <desc>
9097 Supports being used as a format for differencing hard disks (see <link
9098 to="IHardDisk2::createDiffStorage"/>).
9099 </desc>
9100 </const>
9101
9102 <const name="Asynchronous" value="0x20">
9103 <desc>
9104 Supports asynchronous I/O operations for at least some configurations.
9105 </desc>
9106 </const>
9107
9108 <const name="File" value="0x40">
9109 <desc>
9110 The format backend operates on files (the <link to="IMedium::location"/>
9111 attribute of the hard disk specifies a file used to store hard disk
9112 data; for a list of supported file extensions see
9113 <link to="IHardDiskFormat::fileExtensions"/>).
9114 </desc>
9115 </const>
9116
9117 <const name="Properties" value="0x80">
9118 <desc>
9119 The format backend uses the property interface to configure the storage
9120 location and properties (the <link to="IHardDiskFormat::describeProperties"/>
9121 method is used to get access to properties supported by the given hard
9122 disk format).
9123 </desc>
9124 </const>
9125
9126 <const name="CapabilityMask" value="0xFF"/>
9127 </enum>
9128
9129 <interface
9130 name="IHardDiskFormat" extends="$unknown"
9131 uuid="7f3ba790-3a0b-4a8a-bac2-bb50150123c5"
9132 wsmap="managed"
9133 >
9134 <desc>
9135 The IHardDiskFormat interface represents a virtual hard disk format.
9136
9137 Each hard disk format has an associated backend which is used to handle
9138 hard disks stored in this format. This interface provides information
9139 about the properties of the associated backend.
9140
9141 Each hard disk format is identified by a string represented by the
9142 <link to="#id"/> attribute. This string is used in calls like
9143 <link to="IVirtualBox::createHardDisk2()"/> to specify the desired
9144 format.
9145
9146 The list of all supported hard disk formats can be obtained using
9147 <link to="ISystemProperties::hardDiskFormats"/>.
9148
9149 <see>IHardDisk2</see>
9150 </desc>
9151
9152 <attribute name="id" type="wstring" readonly="yes">
9153 <desc>
9154 Identifier of this format.
9155
9156 The format identifier is a non-null non-empty ASCII string. Note that
9157 this string is case-insensitive. This means that, for example, all of
9158 the following strings:
9159 <pre>
9160 "VDI"
9161 "vdi"
9162 "VdI"</pre>
9163 refer to the same hard disk format.
9164
9165 This string is used in methods of other interfaces where it is necessary
9166 to specify a hard disk format, such as
9167 <link to="IVirtualBox::createHardDisk2()"/>.
9168 </desc>
9169 </attribute>
9170
9171 <attribute name="name" type="wstring" readonly="yes">
9172 <desc>
9173 Human readable description of this format.
9174
9175 Mainly for use in file open dialogs.
9176 </desc>
9177 </attribute>
9178
9179 <attribute name="fileExtensions" type="wstring" safearray="yes" readonly="yes">
9180 <desc>
9181 Array of strings containing the supported file extensions.
9182
9183 The first extension in the array is the extension preferred by the
9184 backend. It is recommended to use this extension when specifying a
9185 location of the storage unit for a new hard disk.
9186
9187 Note that some backends do not work on files, so this array may be
9188 empty.
9189
9190 <see>IHardDiskFormat::capabilities</see>
9191 </desc>
9192 </attribute>
9193
9194 <attribute name="capabilities" type="unsigned long" readonly="yes">
9195 <desc>
9196 Capabilities of the format as a set of bit flags.
9197
9198 For the meaning of individual capability flags see
9199 <link to="HardDiskFormatCapabilities"/>.
9200 </desc>
9201 </attribute>
9202
9203 <method name="describeProperties">
9204 <desc>
9205 Returns several arrays describing the properties supported by this
9206 format.
9207
9208 An element with the given index in each array describes one
9209 property. Thus, the number of elements in each returned array is the
9210 same and corresponds to the number of supported properties.
9211
9212 The returned arrays are filled in only if the
9213 <link to="HardDiskFormatCapabilities_Properties"/> flag is set.
9214 All arguments must be non-NULL.
9215
9216 <see>DataType</see>
9217 <see>DataFlags</see>
9218 </desc>
9219
9220 <param name="names" type="wstring" safearray="yes" dir="out">
9221 <desc>Array of property names.</desc>
9222 </param>
9223 <param name="description" type="wstring" safearray="yes" dir="out">
9224 <desc>Array of property descriptions.</desc>
9225 </param>
9226 <param name="types" type="DataType" safearray="yes" dir="out">
9227 <desc>Array of property types.</desc>
9228 </param>
9229 <param name="flags" type="unsigned long" safearray="yes" dir="out">
9230 <desc>Array of property flags.</desc>
9231 </param>
9232 <param name="defaults" type="wstring" safearray="yes" dir="out">
9233 <desc>Array of default property values.</desc>
9234 </param>
9235 </method>
9236
9237 </interface>
9238
9239
9240 <!--
9241 // IFloppyImage2
9242 /////////////////////////////////////////////////////////////////////////
9243 -->
9244
9245 <interface
9246 name="IFloppyImage2" extends="IMedium"
9247 uuid="fcdee8f0-03f9-11dd-95ff-0800200c9a66"
9248 wsmap="managed"
9249 >
9250 <desc>
9251 The IFloppyImage2 interface represents a medium containing the image
9252 of a floppy disk.
9253 </desc>
9254
9255 </interface>
9256
9257
9258 <!--
9259 // IDVDImage2
9260 /////////////////////////////////////////////////////////////////////////
9261 -->
9262
9263 <interface
9264 name="IDVDImage2" extends="IMedium"
9265 uuid="1c5165f1-9543-478d-a117-84a1d2317068"
9266 wsmap="managed"
9267 >
9268 <desc>
9269 The IDVDImage2 interface represents a medium containing the image
9270 of a CD or DVD disk in the ISO format.
9271 </desc>
9272
9273 </interface>
9274
9275
9276 <!--
9277 // IDVDDrive
9278 /////////////////////////////////////////////////////////////////////////
9279 -->
9280
9281 <interface
9282 name="IDVDDrive" extends="$unknown"
9283 uuid="d650ef30-be9b-4dae-b463-11d5824681a5"
9284 wsmap="managed"
9285 >
9286 <desc>
9287 The IDVDDrive interface represents the virtual CD/DVD drive of the
9288 virtual machine. An object of this type is returned by
9289 <link to="IMachine::DVDDrive"/>.
9290 </desc>
9291
9292 <attribute name="state" type="DriveState" readonly="yes">
9293 <desc>Current drive state.</desc>
9294 </attribute>
9295
9296 <attribute name="passthrough" type="boolean">
9297 <desc>
9298 When a host drive is mounted and passthrough is enabled
9299 the guest OS will be able to directly send SCSI commands to
9300 the host drive. This enables the guest OS to use CD/DVD writers
9301 but is potentially dangerous.
9302 </desc>
9303 </attribute>
9304
9305 <method name="mountImage">
9306 <desc>Mounts a CD/DVD image with the specified UUID.
9307
9308 <result name="VBOX_E_FILE_ERROR">
9309 Invalid image file location.
9310 </result>
9311 <result name="VBOX_E_OBJECT_NOT_FOUND">
9312 Could not find a CD/DVD image matching @a imageID.
9313 </result>
9314 <result name="VBOX_E_INVALID_OBJECT_STATE">
9315 Invalid media state.
9316 </result>
9317
9318 </desc>
9319 <param name="imageId" type="uuid" dir="in"/>
9320 </method>
9321
9322 <method name="captureHostDrive">
9323 <desc>Captures the specified host CD/DVD drive.</desc>
9324 <param name="drive" type="IHostDVDDrive" dir="in"/>
9325 </method>
9326
9327 <method name="unmount">
9328 <desc>Unmounts the currently mounted image or host drive.</desc>
9329 </method>
9330
9331 <method name="getImage">
9332 <desc>Returns the currently mounted CD/DVD image.</desc>
9333 <param name="image" type="IDVDImage2" dir="return"/>
9334 </method>
9335
9336 <method name="getHostDrive">
9337 <desc>Returns the currently mounted host CD/DVD drive.</desc>
9338 <param name="drive" type="IHostDVDDrive" dir="return"/>
9339 </method>
9340
9341 </interface>
9342
9343
9344 <!--
9345 // IFloppyDrive
9346 /////////////////////////////////////////////////////////////////////////
9347 -->
9348
9349 <interface
9350 name="IFloppyDrive" extends="$unknown"
9351 uuid="159412cd-bab8-452e-8097-218a020825a6"
9352 wsmap="managed"
9353 >
9354 <desc>
9355 The IFloppyDrive interface represents the virtual floppy drive of the
9356 virtual machine. An object of this type is returned by
9357 <link to="IMachine::floppyDrive" />.
9358 </desc>
9359
9360 <attribute name="enabled" type="boolean">
9361 <desc>
9362 Flag whether the floppy drive is enabled. If it is disabled,
9363 the floppy drive will not be reported to the guest OS.
9364 </desc>
9365 </attribute>
9366
9367 <attribute name="state" type="DriveState" readonly="yes">
9368 <desc>Current drive state.</desc>
9369 </attribute>
9370
9371 <method name="mountImage">
9372 <desc>Mounts a floppy image with the specified UUID.
9373
9374 <result name="VBOX_E_FILE_ERROR">
9375 Invalid image file location.
9376 </result>
9377 <result name="VBOX_E_OBJECT_NOT_FOUND">
9378 Could not find a floppy image matching @a imageID.
9379 </result>
9380 <result name="VBOX_E_INVALID_OBJECT_STATE">
9381 Invalid media state.
9382 </result>
9383
9384 </desc>
9385 <param name="imageId" type="uuid" dir="in"/>
9386 </method>
9387
9388 <method name="captureHostDrive">
9389 <desc>Captures the specified host floppy drive.</desc>
9390 <param name="drive" type="IHostFloppyDrive" dir="in"/>
9391 </method>
9392
9393 <method name="unmount">
9394 <desc>Unmounts the currently mounted image or host drive.</desc>
9395 </method>
9396
9397 <method name="getImage">
9398 <desc>Returns the currently mounted floppy image.</desc>
9399 <param name="image" type="IFloppyImage2" dir="return"/>
9400 </method>
9401
9402 <method name="getHostDrive">
9403 <desc>Returns the currently mounted host floppy drive.</desc>
9404 <param name="drive" type="IHostFloppyDrive" dir="return"/>
9405 </method>
9406
9407 </interface>
9408
9409
9410 <!--
9411 // IKeyboard
9412 /////////////////////////////////////////////////////////////////////////
9413 -->
9414
9415 <interface
9416 name="IKeyboard" extends="$unknown"
9417 uuid="2d1a531b-4c6e-49cc-8af6-5c857b78b5d7"
9418 wsmap="managed"
9419 >
9420 <desc>
9421 The IKeyboard interface represents the virtual machine's keyboard. Used
9422 in <link to="IConsole::keyboard"/>.
9423
9424 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
9425 to the virtual machine.
9426
9427 </desc>
9428 <method name="putScancode">
9429 <desc>Sends a scancode to the keyboard.
9430
9431 <result name="VBOX_E_IPRT_ERROR">
9432 Could not send scan code to virtual keyboard.
9433 </result>
9434
9435 </desc>
9436 <param name="scancode" type="long" dir="in"/>
9437 </method>
9438
9439 <method name="putScancodes">
9440 <desc>Sends an array of scancodes to the keyboard.
9441
9442 <result name="VBOX_E_IPRT_ERROR">
9443 Could not send all scan codes to virtual keyboard.
9444 </result>
9445
9446 </desc>
9447 <param name="scancodes" type="long" dir="in" safearray="yes"/>
9448 <param name="codesStored" type="unsigned long" dir="return"/>
9449 </method>
9450
9451 <method name="putCAD">
9452 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
9453 function is nothing special, it is just a convenience function
9454 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
9455
9456 <result name="VBOX_E_IPRT_ERROR">
9457 Could not send all scan codes to virtual keyboard.
9458 </result>
9459
9460 </desc>
9461 </method>
9462
9463 </interface>
9464
9465
9466 <!--
9467 // IMouse
9468 /////////////////////////////////////////////////////////////////////////
9469 -->
9470
9471 <enum
9472 name="MouseButtonState"
9473 uuid="03131722-2EC5-4173-9794-0DACA46673EF"
9474 >
9475 <desc>
9476 Mouse button state.
9477 </desc>
9478
9479 <const name="LeftButton" value="0x01"/>
9480 <const name="RightButton" value="0x02"/>
9481 <const name="MiddleButton" value="0x04"/>
9482 <const name="WheelUp" value="0x08"/>
9483 <const name="WheelDown" value="0x10"/>
9484 <const name="MouseStateMask" value="0x1F"/>
9485 </enum>
9486
9487 <interface
9488 name="IMouse" extends="$unknown"
9489 uuid="FD443EC1-0006-4F5B-9282-D72760A66916"
9490 wsmap="managed"
9491 >
9492 <desc>
9493 The IMouse interface represents the virtual machine's mouse. Used in
9494 <link to="IConsole::mouse"/>.
9495
9496 Through this interface, the virtual machine's virtual mouse can be
9497 controlled.
9498 </desc>
9499
9500 <attribute name="absoluteSupported" type="boolean" readonly="yes">
9501 <desc>
9502 Whether the guest OS supports absolute mouse pointer positioning
9503 or not.
9504 <note>
9505 VirtualBox Guest Tools need to be installed to the guest OS
9506 in order to enable absolute mouse positioning support.
9507 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
9508 callback to be instantly informed about changes of this attribute
9509 during virtual machine execution.
9510 </note>
9511 <see><link to="#putMouseEventAbsolute"/></see>
9512 </desc>
9513 </attribute>
9514
9515 <method name="putMouseEvent">
9516 <desc>
9517 Initiates a mouse event using relative pointer movements
9518 along x and y axis.
9519
9520 <result name="E_ACCESSDENIED">
9521 Console not powered up.
9522 </result>
9523 <result name="VBOX_E_IPRT_ERROR">
9524 Could not send mouse event to virtual mouse.
9525 </result>
9526
9527 </desc>
9528
9529 <param name="dx" type="long" dir="in">
9530 <desc>
9531 Amount of pixels the mouse should move to the right.
9532 Negative values move the mouse to the left.
9533 </desc>
9534 </param>
9535 <param name="dy" type="long" dir="in">
9536 <desc>
9537 Amount of pixels the mouse should move downwards.
9538 Negative values move the mouse upwards.
9539 </desc>
9540 </param>
9541 <param name="dz" type="long" dir="in">
9542 <desc>
9543 Amount of mouse wheel moves.
9544 Positive values describe clockwise wheel rotations,
9545 negative values describe counterclockwise rotations.
9546 </desc>
9547 </param>
9548 <param name="buttonState" type="long" dir="in">
9549 <desc>
9550 The current state of mouse buttons. Every bit represents
9551 a mouse button as follows:
9552 <table>
9553 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
9554 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
9555 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
9556 </table>
9557 A value of <tt>1</tt> means the corresponding button is pressed.
9558 otherwise it is released.
9559 </desc>
9560 </param>
9561 </method>
9562
9563 <method name="putMouseEventAbsolute">
9564 <desc>
9565 Positions the mouse pointer using absolute x and y coordinates.
9566 These coordinates are expressed in pixels and
9567 start from <tt>[1,1]</tt> which corresponds to the top left
9568 corner of the virtual display.
9569
9570 <result name="E_ACCESSDENIED">
9571 Console not powered up.
9572 </result>
9573 <result name="VBOX_E_IPRT_ERROR">
9574 Could not send mouse event to virtual mouse.
9575 </result>
9576
9577 <note>
9578 This method will have effect only if absolute mouse
9579 positioning is supported by the guest OS.
9580 </note>
9581
9582 <see><link to="#absoluteSupported"/></see>
9583 </desc>
9584
9585 <param name="x" type="long" dir="in">
9586 <desc>
9587 X coordinate of the pointer in pixels, starting from <tt>1</tt>.
9588 </desc>
9589 </param>
9590 <param name="y" type="long" dir="in">
9591 <desc>
9592 Y coordinate of the pointer in pixels, starting from <tt>1</tt>.
9593 </desc>
9594 </param>
9595 <param name="dz" type="long" dir="in">
9596 <desc>
9597 Amount of mouse wheel moves.
9598 Positive values describe clockwise wheel rotations,
9599 negative values describe counterclockwise rotations.
9600 </desc>
9601 </param>
9602 <param name="buttonState" type="long" dir="in">
9603 <desc>
9604 The current state of mouse buttons. Every bit represents
9605 a mouse button as follows:
9606 <table>
9607 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
9608 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
9609 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
9610 </table>
9611 A value of <tt>1</tt> means the corresponding button is pressed.
9612 otherwise it is released.
9613 </desc>
9614 </param>
9615 </method>
9616
9617 </interface>
9618
9619 <!--
9620 // IDisplay
9621 /////////////////////////////////////////////////////////////////////////
9622 -->
9623
9624 <enum
9625 name="FramebufferAccelerationOperation"
9626 uuid="f0e5ebbe-dc8e-4e2d-916e-53baa3844df8"
9627 >
9628 <desc>
9629 Frame buffer acceleration operation.
9630 </desc>
9631
9632 <const name="SolidFillAcceleration" value="1"/>
9633 <const name="ScreenCopyAcceleration" value="2"/>
9634 </enum>
9635
9636 <enum
9637 name="FramebufferPixelFormat"
9638 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
9639 >
9640 <desc>
9641 Format of the video memory buffer. Constants represented by this enum can
9642 be used to test for particular values of <link
9643 to="IFramebuffer::pixelFormat"/>. See also <link
9644 to="IFramebuffer::requestResize()"/>.
9645
9646 See also www.fourcc.org for more information about FOURCC pixel formats.
9647 </desc>
9648
9649 <const name="Opaque" value="0">
9650 <desc>
9651 Unknown buffer format (the user may not assume any particular format of
9652 the buffer).
9653 </desc>
9654 </const>
9655 <const name="FOURCC_RGB" value="0x32424752">
9656 <desc>
9657 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
9658 bit layout).
9659 </desc>
9660 </const>
9661 </enum>
9662
9663 <interface
9664 name="IFramebuffer" extends="$unknown"
9665 uuid="af431304-5b09-40e2-94da-3c3cb03822c1"
9666 wsmap="suppress"
9667 >
9668 <attribute name="address" type="octet" mod="ptr" readonly="yes">
9669 <desc>Address of the start byte of the frame buffer.</desc>
9670 </attribute>
9671
9672 <attribute name="width" type="unsigned long" readonly="yes">
9673 <desc>Frame buffer width, in pixels.</desc>
9674 </attribute>
9675
9676 <attribute name="height" type="unsigned long" readonly="yes">
9677 <desc>Frame buffer height, in pixels.</desc>
9678 </attribute>
9679
9680 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
9681 <desc>
9682 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
9683 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
9684 are: 8, 15, 16, 24 and 32.
9685 </desc>
9686 </attribute>
9687
9688 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
9689 <desc>
9690 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
9691 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
9692 size of the scan line must be aligned to 32 bits.
9693 </desc>
9694 </attribute>
9695
9696 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
9697 <desc>
9698 Frame buffer pixel format. It's either one of the values defined by <link
9699 to="FramebufferPixelFormat"/> or a raw FOURCC code.
9700 <note>
9701 This attribute must never return <link
9702 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
9703 <link to="#address"/> points to must be always known.
9704 </note>
9705 </desc>
9706 </attribute>
9707
9708 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
9709 <desc>
9710 Defines whether this frame buffer uses the virtual video card's memory
9711 buffer (guest VRAM) directly or not. See <link
9712 to="IFramebuffer::requestResize()"/> for more information.
9713 </desc>
9714 </attribute>
9715
9716 <attribute name="heightReduction" type="unsigned long" readonly="yes">
9717 <desc>
9718 Hint from the frame buffer about how much of the standard
9719 screen height it wants to use for itself. This information is
9720 exposed to the guest through the VESA BIOS and VMMDev interface
9721 so that it can use it for determining its video mode table. It
9722 is not guaranteed that the guest respects the value.
9723 </desc>
9724 </attribute>
9725
9726 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
9727 <desc>
9728 An alpha-blended overlay which is superposed over the frame buffer.
9729 The initial purpose is to allow the display of icons providing
9730 information about the VM state, including disk activity, in front
9731 ends which do not have other means of doing that. The overlay is
9732 designed to controlled exclusively by IDisplay. It has no locking
9733 of its own, and any changes made to it are not guaranteed to be
9734 visible until the affected portion of IFramebuffer is updated. The
9735 overlay can be created lazily the first time it is requested. This
9736 attribute can also return NULL to signal that the overlay is not
9737 implemented.
9738 </desc>
9739 </attribute>
9740
9741 <attribute name="winId" type="unsigned long long" readonly="yes">
9742 <desc>
9743 Platform-dependent identifier of the window where context of this
9744 frame buffer is drawn, or zero if there's no such window.
9745 </desc>
9746 </attribute>
9747
9748 <method name="lock">
9749 <desc>
9750 Locks the frame buffer.
9751 Gets called by the IDisplay object where this frame buffer is
9752 bound to.
9753 </desc>
9754 </method>
9755
9756 <method name="unlock">
9757 <desc>
9758 Unlocks the frame buffer.
9759 Gets called by the IDisplay object where this frame buffer is
9760 bound to.
9761 </desc>
9762 </method>
9763
9764 <method name="notifyUpdate">
9765 <desc>
9766 Informs about an update.
9767 Gets called by the display object where this buffer is
9768 registered.
9769 </desc>
9770 <param name="x" type="unsigned long" dir="in"/>
9771 <param name="y" type="unsigned long" dir="in"/>
9772 <param name="width" type="unsigned long" dir="in"/>
9773 <param name="height" type="unsigned long" dir="in"/>
9774 <param name="finished" type="boolean" dir="return"/>
9775 </method>
9776
9777 <method name="requestResize">
9778 <desc>
9779 Requests a size and pixel format change.
9780
9781 There are two modes of working with the video buffer of the virtual
9782 machine. The <i>indirect</i> mode implies that the IFramebuffer
9783 implementation allocates a memory buffer for the requested display mode
9784 and provides it to the virtual machine. In <i>direct</i> mode, the
9785 IFramebuffer implementation uses the memory buffer allocated and owned
9786 by the virtual machine. This buffer represents the video memory of the
9787 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
9788 usually faster because the implementation gets a raw pointer to the
9789 guest VRAM buffer which it can directly use for visualizing the contents
9790 of the virtual display, as opposed to the indirect mode where the
9791 contents of guest VRAM are copied to the memory buffer provided by
9792 the implementation every time a display update occurs.
9793
9794 It is important to note that the direct mode is really fast only when
9795 the implementation uses the given guest VRAM buffer directly, for
9796 example, by blitting it to the window representing the virtual machine's
9797 display, which saves at least one copy operation comparing to the
9798 indirect mode. However, using the guest VRAM buffer directly is not
9799 always possible: the format and the color depth of this buffer may be
9800 not supported by the target window, or it may be unknown (opaque) as in
9801 case of text or non-linear multi-plane VGA video modes. In this case,
9802 the indirect mode (that is always available) should be used as a
9803 fallback: when the guest VRAM contents are copied to the
9804 implementation-provided memory buffer, color and format conversion is
9805 done automatically by the underlying code.
9806
9807 The @a pixelFormat parameter defines whether the direct mode is
9808 available or not. If @a pixelFormat is <link
9809 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
9810 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and @a
9811 bytesPerLine parameters must be ignored and the implementation must use
9812 the indirect mode (where it provides its own buffer in one of the
9813 supported formats). In all other cases, @a pixelFormat together with @a
9814 bitsPerPixel and @a bytesPerLine define the format of the video memory
9815 buffer pointed to by the @a VRAM parameter and the implementation is
9816 free to choose which mode to use. To indicate that this frame buffer uses
9817 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
9818 attribute must return <tt>true</tt> and <link to="#address"/> must
9819 return exactly the same address that is passed in the @a VRAM parameter
9820 of this method; otherwise it is assumed that the indirect strategy is
9821 chosen.
9822
9823 The @a width and @a height parameters represent the size of the
9824 requested display mode in both modes. In case of indirect mode, the
9825 provided memory buffer should be big enough to store data of the given
9826 display mode. In case of direct mode, it is guaranteed that the given @a
9827 VRAM buffer contains enough space to represent the display mode of the
9828 given size. Note that this frame buffer's <link to="#width"/> and <link
9829 to="#height"/> attributes must return exactly the same values as
9830 passed to this method after the resize is completed (see below).
9831
9832 The @a finished output parameter determines if the implementation has
9833 finished resizing the frame buffer or not. If, for some reason, the
9834 resize cannot be finished immediately during this call, @a finished
9835 must be set to @c false, and the implementation must call
9836 <link to="IDisplay::resizeCompleted()"/> after it has returned from
9837 this method as soon as possible. If @a finished is @c false, the
9838 machine will not call any frame buffer methods until
9839 <link to="IDisplay::resizeCompleted()"/> is called.
9840
9841 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
9842 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
9843 this frame buffer must return exactly the same values as specified in the
9844 parameters of this method, after the resize is completed. If the
9845 indirect mode is chosen, these attributes must return values describing
9846 the format of the implementation's own memory buffer <link
9847 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
9848 value must always correlate with <link to="#pixelFormat"/>. Note that
9849 the <link to="#pixelFormat"/> attribute must never return <link
9850 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
9851
9852 <note>
9853 This method is called by the IDisplay object under the
9854 <link to="#lock()"/> provided by this IFramebuffer
9855 implementation. If this method returns @c false in @a finished, then
9856 this lock is not released until
9857 <link to="IDisplay::resizeCompleted()"/> is called.
9858 </note>
9859 </desc>
9860 <param name="screenId" type="unsigned long" dir="in">
9861 <desc>
9862 Logical screen number. Must be used in the corresponding call to
9863 <link to="IDisplay::resizeCompleted()"/> if this call is made.
9864 </desc>
9865 </param>
9866 <param name="pixelFormat" type="unsigned long" dir="in">
9867 <desc>
9868 Pixel format of the memory buffer pointed to by @a VRAM.
9869 See also <link to="FramebufferPixelFormat"/>.
9870 </desc>
9871 </param>
9872 <param name="VRAM" type="octet" mod="ptr" dir="in">
9873 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
9874 </param>
9875 <param name="bitsPerPixel" type="unsigned long" dir="in">
9876 <desc>Color depth, bits per pixel.</desc>
9877 </param>
9878 <param name="bytesPerLine" type="unsigned long" dir="in">
9879 <desc>Size of one scan line, in bytes.</desc>
9880 </param>
9881 <param name="width" type="unsigned long" dir="in">
9882 <desc>Width of the guest display, in pixels.</desc>
9883 </param>
9884 <param name="height" type="unsigned long" dir="in">
9885 <desc>Height of the guest display, in pixels.</desc>
9886 </param>
9887 <param name="finished" type="boolean" dir="return">
9888 <desc>
9889 Can the VM start using the new frame buffer immediately
9890 after this method returns or it should wait for
9891 <link to="IDisplay::resizeCompleted()"/>.
9892 </desc>
9893 </param>
9894 </method>
9895
9896 <method name="operationSupported">
9897 <desc>
9898 Returns whether the given acceleration operation is supported
9899 by the IFramebuffer implementation. If not, the display object
9900 will not attempt to call the corresponding IFramebuffer entry
9901 point. Even if an operation is indicated as supported, the
9902 IFramebuffer implementation always has the option to return non
9903 supported from the corresponding acceleration method in which
9904 case the operation will be performed by the display engine. This
9905 allows for reduced IFramebuffer implementation complexity where
9906 only common cases are handled.
9907 </desc>
9908 <param name="operation" type="FramebufferAccelerationOperation" dir="in"/>
9909 <param name="supported" type="boolean" dir="return"/>
9910 </method>
9911
9912 <method name="videoModeSupported">
9913 <desc>
9914 Returns whether the frame buffer implementation is willing to
9915 support a given video mode. In case it is not able to render
9916 the video mode (or for some reason not willing), it should
9917 return false. Usually this method is called when the guest
9918 asks the VMM device whether a given video mode is supported
9919 so the information returned is directly exposed to the guest.
9920 It is important that this method returns very quickly.
9921 </desc>
9922 <param name="width" type="unsigned long" dir="in"/>
9923 <param name="height" type="unsigned long" dir="in"/>
9924 <param name="bpp" type="unsigned long" dir="in"/>
9925 <param name="supported" type="boolean" dir="return"/>
9926 </method>
9927
9928 <method name="solidFill">
9929 <desc>
9930 Fills the specified rectangle on screen with a solid color.
9931 </desc>
9932 <param name="x" type="unsigned long" dir="in"/>
9933 <param name="y" type="unsigned long" dir="in"/>
9934 <param name="width" type="unsigned long" dir="in"/>
9935 <param name="height" type="unsigned long" dir="in"/>
9936 <param name="color" type="unsigned long" dir="in"/>
9937 <param name="handled" type="boolean" dir="return"/>
9938 </method>
9939
9940 <method name="copyScreenBits">
9941 <desc>
9942 Copies specified rectangle on the screen.
9943 </desc>
9944 <param name="xDst" type="unsigned long" dir="in"/>
9945 <param name="yDst" type="unsigned long" dir="in"/>
9946 <param name="xSrc" type="unsigned long" dir="in"/>
9947 <param name="ySrc" type="unsigned long" dir="in"/>
9948 <param name="width" type="unsigned long" dir="in"/>
9949 <param name="height" type="unsigned long" dir="in"/>
9950 <param name="handled" type="boolean" dir="return"/>
9951 </method>
9952
9953 <method name="getVisibleRegion">
9954 <desc>
9955 Returns the visible region of this frame buffer.
9956
9957 If the @a rectangles parameter is <tt>NULL</tt> then the value of the
9958 @a count parameter is ignored and the number of elements necessary to
9959 describe the current visible region is returned in @a countCopied.
9960
9961 If @a rectangles is not <tt>NULL</tt> but @a count is less
9962 than the required number of elements to store region data, the method
9963 will report a failure. If @a count is equal or greater than the
9964 required number of elements, then the actual number of elements copied
9965 to the provided array will be returned in @a countCopied.
9966
9967 <note>
9968 The address of the provided array must be in the process space of
9969 this IFramebuffer object.
9970 </note>
9971 <note>
9972 Method not yet implemented.
9973 </note>
9974 </desc>
9975 <param name="rectangles" type="octet" mod="ptr" dir="in">
9976 <desc>Pointer to the <tt>RTRECT</tt> array to receive region data.</desc>
9977 </param>
9978 <param name="count" type="unsigned long" dir="in">
9979 <desc>Number of <tt>RTRECT</tt> elements in the @a rectangles array.</desc>
9980 </param>
9981 <param name="countCopied" type="unsigned long" dir="return">
9982 <desc>Number of elements copied to the @a rectangles array.</desc>
9983 </param>
9984 </method>
9985
9986 <method name="setVisibleRegion">
9987 <desc>
9988 Suggests a new visible region to this frame buffer. This region
9989 represents the area of the VM display which is a union of regions of
9990 all top-level windows of the guest operating system running inside the
9991 VM (if the Guest Additions for this system support this
9992 functionality). This information may be used by the frontends to
9993 implement the seamless desktop integration feature.
9994
9995 <note>
9996 The address of the provided array must be in the process space of
9997 this IFramebuffer object.
9998 </note>
9999 <note>
10000 The IFramebuffer implementation must make a copy of the provided
10001 array of rectangles.
10002 </note>
10003 <note>
10004 Method not yet implemented.
10005 </note>
10006 </desc>
10007 <param name="rectangles" type="octet" mod="ptr" dir="in">
10008 <desc>Pointer to the <tt>RTRECT</tt> array.</desc>
10009 </param>
10010 <param name="count" type="unsigned long" dir="in">
10011 <desc>Number of <tt>RTRECT</tt> elements in the @a rectangles array.</desc>
10012 </param>
10013 </method>
10014
10015 </interface>
10016
10017 <interface
10018 name="IFramebufferOverlay" extends="IFramebuffer"
10019 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
10020 wsmap="suppress"
10021 >
10022 <desc>
10023 The IFramebufferOverlay interface represents an alpha blended overlay
10024 for displaying status icons above an IFramebuffer. It is always created
10025 not visible, so that it must be explicitly shown. It only covers a
10026 portion of the IFramebuffer, determined by its width, height and
10027 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
10028 that order) format, and may be written to directly. Do re-read the
10029 width though, after setting it, as it may be adjusted (increased) to
10030 make it more suitable for the front end.
10031 </desc>
10032 <attribute name="x" type="unsigned long" readonly="yes">
10033 <desc>X position of the overlay, relative to the frame buffer.</desc>
10034 </attribute>
10035
10036 <attribute name="y" type="unsigned long" readonly="yes">
10037 <desc>Y position of the overlay, relative to the frame buffer.</desc>
10038 </attribute>
10039
10040 <attribute name="visible" type="boolean" readonly="no">
10041 <desc>
10042 Whether the overlay is currently visible.
10043 </desc>
10044 </attribute>
10045
10046 <attribute name="alpha" type="unsigned long" readonly="no">
10047 <desc>
10048 The global alpha value for the overlay. This may or may not be
10049 supported by a given front end.
10050 </desc>
10051 </attribute>
10052
10053 <method name="move">
10054 <desc>
10055 Changes the overlay's position relative to the IFramebuffer.
10056 </desc>
10057 <param name="x" type="unsigned long" dir="in"/>
10058 <param name="y" type="unsigned long" dir="in"/>
10059 </method>
10060
10061 </interface>
10062
10063 <interface
10064 name="IDisplay" extends="$unknown"
10065 uuid="09789f63-4525-48e5-a5e4-1080453b0eab"
10066 wsmap="suppress"
10067 >
10068 <desc>
10069 The IDisplay interface represents the virtual machine's display.
10070
10071 The object implementing this interface is contained in each
10072 <link to="IConsole::display"/> attribute and represents the visual
10073 output of the virtual machine.
10074
10075 The virtual display supports pluggable output targets represented by the
10076 IFramebuffer interface. Examples of the output target are a window on
10077 the host computer or an RDP session's display on a remote computer.
10078 </desc>
10079 <attribute name="width" type="unsigned long" readonly="yes">
10080 <desc>Current display width.</desc>
10081 </attribute>
10082
10083 <attribute name="height" type="unsigned long" readonly="yes">
10084 <desc>Current display height.</desc>
10085 </attribute>
10086
10087 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
10088 <desc>
10089 Current guest display color depth. Note that this may differ
10090 from <link to="IFramebuffer::bitsPerPixel"/>.
10091 </desc>
10092 </attribute>
10093
10094 <method name="setupInternalFramebuffer">
10095 <desc>
10096 Prepares an internally managed frame buffer.
10097 </desc>
10098 <param name="depth" type="unsigned long" dir="in"/>
10099 </method>
10100
10101 <method name="lockFramebuffer">
10102 <desc>
10103 Requests access to the internal frame buffer.
10104
10105 <result name="VBOX_E_NOT_SUPPORTED">
10106 Attempt to lock a non-internal frame buffer.
10107 </result>
10108
10109 </desc>
10110 <param name="address" type="octet" mod="ptr" dir="return"/>
10111 </method>
10112
10113 <method name="unlockFramebuffer">
10114 <desc>
10115 Releases access to the internal frame buffer.
10116
10117 <result name="VBOX_E_NOT_SUPPORTED">
10118 Attempt to unlock a non-internal frame buffer.
10119 </result>
10120
10121 </desc>
10122 </method>
10123
10124 <method name="registerExternalFramebuffer">
10125 <desc>
10126 Registers an external frame buffer.
10127 </desc>
10128 <param name="framebuffer" type="IFramebuffer" dir="in"/>
10129 </method>
10130
10131 <method name="setFramebuffer">
10132 <desc>
10133 Sets the framebuffer for given screen.
10134 </desc>
10135 <param name="screenId" type="unsigned long" dir="in"/>
10136 <param name="framebuffer" type="IFramebuffer" dir="in"/>
10137 </method>
10138
10139 <method name="getFramebuffer">
10140 <desc>
10141 Queries the framebuffer for given screen.
10142 </desc>
10143 <param name="screenId" type="unsigned long" dir="in"/>
10144 <param name="framebuffer" type="IFramebuffer" dir="out"/>
10145 <param name="xOrigin" type="long" dir="out"/>
10146 <param name="yOrigin" type="long" dir="out"/>
10147 </method>
10148
10149 <method name="setVideoModeHint">
10150 <desc>
10151 Asks VirtualBox to request the given video mode from
10152 the guest. This is just a hint and it cannot be guaranteed
10153 that the requested resolution will be used. Guest Additions
10154 are required for the request to be seen by guests. The caller
10155 should issue the request and wait for a resolution change and
10156 after a timeout retry.
10157
10158 Specifying <tt>0</tt> for either @a width, @a height or @a bitsPerPixel
10159 parameters means that the corresponding values should be taken from the
10160 current video mode (i.e. left unchanged).
10161
10162 If the guest OS supports multi-monitor configuration then the @a display
10163 parameter specifies the number of the guest display to send the hint to:
10164 <tt>0</tt> is the primary display, <tt>1</tt> is the first secondary and
10165 so on. If the multi-monitor configuration is not supported, @a display
10166 must be <tt>0</tt>.
10167
10168 <result name="E_INVALIDARG">
10169 The @a display is not associated with any monitor.
10170 </result>
10171
10172 </desc>
10173 <param name="width" type="unsigned long" dir="in"/>
10174 <param name="height" type="unsigned long" dir="in"/>
10175 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
10176 <param name="display" type="unsigned long" dir="in"/>
10177 </method>
10178
10179 <method name="setSeamlessMode">
10180 <desc>
10181 Enables or disables seamless guest display rendering (seamless desktop
10182 integration) mode.
10183 <note>
10184 Calling this method has no effect if <link
10185 to="IGuest::supportsSeamless"/> returns <tt>false</tt>.
10186 </note>
10187 </desc>
10188 <param name="enabled" type="boolean" dir="in"/>
10189 </method>
10190
10191 <method name="takeScreenShot">
10192 <desc>
10193 Takes a screen shot of the requested size and copies it to the
10194 32-bpp buffer allocated by the caller.
10195
10196 <result name="E_NOTIMPL">
10197 Feature not implemented.
10198 </result>
10199 <result name="VBOX_E_IPRT_ERROR">
10200 Could not take a screenshot.
10201 </result>
10202
10203 </desc>
10204 <param name="address" type="octet" mod="ptr" dir="in"/>
10205 <param name="width" type="unsigned long" dir="in"/>
10206 <param name="height" type="unsigned long" dir="in"/>
10207 </method>
10208
10209 <method name="drawToScreen">
10210 <desc>
10211 Draws a 32-bpp image of the specified size from the given buffer
10212 to the given point on the VM display.
10213
10214 <result name="E_NOTIMPL">
10215 Feature not implemented.
10216 </result>
10217 <result name="VBOX_E_IPRT_ERROR">
10218 Could not draw to screen.
10219 </result>
10220
10221 </desc>
10222 <param name="address" type="octet" mod="ptr" dir="in"/>
10223 <param name="x" type="unsigned long" dir="in"/>
10224 <param name="y" type="unsigned long" dir="in"/>
10225 <param name="width" type="unsigned long" dir="in"/>
10226 <param name="height" type="unsigned long" dir="in"/>
10227 </method>
10228
10229 <method name="invalidateAndUpdate">
10230 <desc>
10231 Does a full invalidation of the VM display and instructs the VM
10232 to update it.
10233
10234 <result name="VBOX_E_IPRT_ERROR">
10235 Could not invalidate and update screen.
10236 </result>
10237
10238 </desc>
10239 </method>
10240
10241 <method name="resizeCompleted">
10242 <desc>
10243 Signals that a framebuffer has completed the resize operation.
10244
10245 <result name="VBOX_E_NOT_SUPPORTED">
10246 Operation only valid for external frame buffers.
10247 </result>
10248
10249 </desc>
10250 <param name="screenId" type="unsigned long" dir="in"/>
10251 </method>
10252
10253 <method name="updateCompleted">
10254 <desc>
10255 Signals that a framebuffer has completed the update operation.
10256
10257 <result name="VBOX_E_NOT_SUPPORTED">
10258 Operation only valid for external frame buffers.
10259 </result>
10260
10261 </desc>
10262 </method>
10263
10264 </interface>
10265
10266 <!--
10267 // INetworkAdapter
10268 /////////////////////////////////////////////////////////////////////////
10269 -->
10270
10271 <enum
10272 name="NetworkAttachmentType"
10273 uuid="64e770dc-dd1d-4879-9f12-5bd6bc879b78"
10274 >
10275 <desc>
10276 Network attachment type.
10277 </desc>
10278
10279 <const name="Null" value="0">
10280 <desc>Null value, also means "not attached".</desc>
10281 </const>
10282 <const name="NAT" value="1"/>
10283 <const name="HostInterface" value="2"/>
10284 <const name="Internal" value="3"/>
10285 <const name="HostOnly" value="4"/>
10286 </enum>
10287
10288 <enum
10289 name="NetworkAdapterType"
10290 uuid="156b17b9-5d61-4d54-be90-62e37dda848d"
10291 >
10292 <desc>
10293 Network adapter type.
10294 </desc>
10295
10296 <const name="Null" value="0">
10297 <desc>Null value (never used by the API).</desc>
10298 </const>
10299 <const name="Am79C970A" value="1"/>
10300 <const name="Am79C973" value="2"/>
10301 <const name="I82540EM" value="3"/>
10302 <const name="I82543GC" value="4"/>
10303 </enum>
10304
10305 <interface
10306 name="INetworkAdapter" extends="$unknown"
10307 uuid="4a1ee64e-6c5f-47dd-acfa-f834d7cb74fb"
10308 wsmap="managed"
10309 >
10310 <attribute name="adapterType" type="NetworkAdapterType">
10311 <desc>
10312 Type of the virtual network adapter. Depending on this value,
10313 VirtualBox will provide a different virtual network hardware
10314 to the guest.
10315 </desc>
10316 </attribute>
10317
10318 <attribute name="slot" type="unsigned long" readonly="yes">
10319 <desc>
10320 Slot number this adapter is plugged into. Corresponds to
10321 the value you pass to <link to="IMachine::getNetworkAdapter"/>
10322 to obtain this instance.
10323 </desc>
10324 </attribute>
10325
10326 <attribute name="enabled" type="boolean">
10327 <desc>
10328 Flag whether the network adapter is present in the
10329 guest system. If disabled, the virtual guest hardware will
10330 not contain this network adapter. Can only be changed when
10331 the VM is not running.
10332 </desc>
10333 </attribute>
10334
10335 <attribute name="MACAddress" type="wstring">
10336 <desc>
10337 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
10338 it to NULL, VirtualBox will generate a unique MAC address.
10339 </desc>
10340 </attribute>
10341
10342 <attribute name="attachmentType" type="NetworkAttachmentType" readonly="yes"/>
10343
10344 <attribute name="hostInterface" type="wstring">
10345 <desc>
10346 Name of the host network interface the VM is attached to.
10347 </desc>
10348 </attribute>
10349
10350 <attribute name="internalNetwork" type="wstring">
10351 <desc>
10352 Name of the internal network the VM is attached to.
10353 </desc>
10354 </attribute>
10355
10356 <attribute name="NATNetwork" type="wstring">
10357 <desc>
10358 Name of the NAT network the VM is attached to.
10359 </desc>
10360 </attribute>
10361
10362 <attribute name="cableConnected" type="boolean">
10363 <desc>
10364 Flag whether the adapter reports the cable as connected or not.
10365 It can be used to report offline situations to a VM.
10366 </desc>
10367 </attribute>
10368
10369 <attribute name="lineSpeed" type="unsigned long">
10370 <desc>
10371 Line speed reported by custom drivers, in units of 1 kbps.
10372 </desc>
10373 </attribute>
10374
10375 <attribute name="traceEnabled" type="boolean">
10376 <desc>
10377 Flag whether network traffic from/to the network card should be traced.
10378 Can only be toggled when the VM is turned off.
10379 </desc>
10380 </attribute>
10381
10382 <attribute name="traceFile" type="wstring">
10383 <desc>
10384 Filename where a network trace will be stored. If not set, VBox-pid.pcap
10385 will be used.
10386 </desc>
10387 </attribute>
10388
10389 <method name="attachToNAT">
10390 <desc>
10391 Attach the network adapter to the Network Address Translation (NAT) interface.
10392 </desc>
10393 </method>
10394
10395 <method name="attachToHostInterface">
10396 <desc>
10397 Attach the network adapter to a host interface.
10398 </desc>
10399 </method>
10400
10401 <method name="attachToInternalNetwork">
10402 <desc>
10403 Attach the network adapter to an internal network.
10404 </desc>
10405 </method>
10406
10407 <method name="attachToHostOnlyNetwork">
10408 <desc>
10409 Attach the network adapter to the host-only network.
10410 </desc>
10411 </method>
10412
10413 <method name="detach">
10414 <desc>
10415 Detach the network adapter
10416 </desc>
10417 </method>
10418 </interface>
10419
10420
10421 <!--
10422 // ISerialPort
10423 /////////////////////////////////////////////////////////////////////////
10424 -->
10425
10426 <enum
10427 name="PortMode"
10428 uuid="b266f43c-2e93-46b3-812b-c20e600e867b"
10429 >
10430 <desc>
10431 The PortMode enumeration represents possible communication modes for
10432 the virtual serial port device.
10433 </desc>
10434
10435 <const name="Disconnected" value="0">
10436 <desc>Virtual device is not attached to any real host device.</desc>
10437 </const>
10438 <const name="HostPipe" value="1">
10439 <desc>Virtual device is attached to a host pipe.</desc>
10440 </const>
10441 <const name="HostDevice" value="2">
10442 <desc>Virtual device is attached to a host device.</desc>
10443 </const>
10444 </enum>
10445
10446 <interface
10447 name="ISerialPort" extends="$unknown"
10448 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
10449 wsmap="managed"
10450 >
10451
10452 <desc>
10453 The ISerialPort interface represents the virtual serial port device.
10454
10455 The virtual serial port device acts like an ordinary serial port
10456 inside the virtual machine. This device communicates to the real
10457 serial port hardware in one of two modes: host pipe or host device.
10458
10459 In host pipe mode, the #path attribute specifies the path to the pipe on
10460 the host computer that represents a serial port. The #server attribute
10461 determines if this pipe is created by the virtual machine process at
10462 machine startup or it must already exist before starting machine
10463 execution.
10464
10465 In host device mode, the #path attribute specifies the name of the
10466 serial port device on the host computer.
10467
10468 There is also a third communication mode: the disconnected mode. In this
10469 mode, the guest OS running inside the virtual machine will be able to
10470 detect the serial port, but all port write operations will be discarded
10471 and all port read operations will return no data.
10472
10473 <see>IMachine::getSerialPort</see>
10474 </desc>
10475
10476 <attribute name="slot" type="unsigned long" readonly="yes">
10477 <desc>
10478 Slot number this serial port is plugged into. Corresponds to
10479 the value you pass to <link to="IMachine::getSerialPort"/>
10480 to obtain this instance.
10481 </desc>
10482 </attribute>
10483
10484 <attribute name="enabled" type="boolean">
10485 <desc>
10486 Flag whether the serial port is enabled. If disabled,
10487 the serial port will not be reported to the guest OS.
10488 </desc>
10489 </attribute>
10490
10491 <attribute name="IOBase" type="unsigned long">
10492 <desc>Base I/O address of the serial port.</desc>
10493 </attribute>
10494
10495 <attribute name="IRQ" type="unsigned long">
10496 <desc>IRQ number of the serial port.</desc>
10497 </attribute>
10498
10499 <attribute name="hostMode" type="PortMode">
10500 <desc>
10501 How is this port connected to the host.
10502 <note>
10503 Changing this attribute may fail if the conditions for
10504 <link to="#path"/> are not met.
10505 </note>
10506 </desc>
10507 </attribute>
10508
10509 <attribute name="server" type="boolean">
10510 <desc>
10511 Flag whether this serial port acts as a server (creates a new pipe on
10512 the host) or as a client (uses the existing pipe). This attribute is
10513 used only when <link to="#hostMode"/> is PortMode_HostPipe.
10514 </desc>
10515 </attribute>
10516
10517 <attribute name="path" type="wstring">
10518 <desc>
10519 Path to the serial port's pipe on the host when <link to="#hostMode"/> is
10520 PortMode_HostPipe, or the host serial device name when
10521 <link to="#hostMode"/> is PortMode_HostDevice. In either of the above
10522 cases, setting a @c null or an empty string as the attribute's value
10523 will result into an error. Otherwise, the value of this property is
10524 ignored.
10525 </desc>
10526 </attribute>
10527
10528 </interface>
10529
10530 <!--
10531 // IParallelPort
10532 /////////////////////////////////////////////////////////////////////////
10533 -->
10534
10535 <interface
10536 name="IParallelPort" extends="$unknown"
10537 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
10538 wsmap="managed"
10539 >
10540
10541 <desc>
10542 The IParallelPort interface represents the virtual parallel port device.
10543
10544 The virtual parallel port device acts like an ordinary parallel port
10545 inside the virtual machine. This device communicates to the real
10546 parallel port hardware using the name of the parallel device on the host
10547 computer specified in the #path attribute.
10548
10549 Each virtual parallel port device is assigned a base I/O address and an
10550 IRQ number that will be reported to the guest operating system and used
10551 to operate the given parallel port from within the virtual machine.
10552
10553 <see>IMachine::getParallelPort</see>
10554 </desc>
10555
10556 <attribute name="slot" type="unsigned long" readonly="yes">
10557 <desc>
10558 Slot number this parallel port is plugged into. Corresponds to
10559 the value you pass to <link to="IMachine::getParallelPort"/>
10560 to obtain this instance.
10561 </desc>
10562 </attribute>
10563
10564 <attribute name="enabled" type="boolean">
10565 <desc>
10566 Flag whether the parallel port is enabled. If disabled,
10567 the parallel port will not be reported to the guest OS.
10568 </desc>
10569 </attribute>
10570
10571 <attribute name="IOBase" type="unsigned long">
10572 <desc>Base I/O address of the parallel port.</desc>
10573 </attribute>
10574
10575 <attribute name="IRQ" type="unsigned long">
10576 <desc>IRQ number of the parallel port.</desc>
10577 </attribute>
10578
10579 <attribute name="path" type="wstring">
10580 <desc>
10581 Host parallel device name. If this parallel port is enabled, setting a
10582 @c null or an empty string as this attribute's value will result into
10583 an error.
10584 </desc>
10585 </attribute>
10586
10587 </interface>
10588
10589
10590 <!--
10591 // IMachineDebugger
10592 /////////////////////////////////////////////////////////////////////////
10593 -->
10594
10595 <interface
10596 name="IMachineDebugger" extends="$unknown"
10597 uuid="b0b2a2dd-0627-4502-91c2-ddc5e77609e0"
10598 wsmap="suppress"
10599 >
10600 <method name="resetStats">
10601 <desc>
10602 Reset VM statistics.
10603 </desc>
10604 <param name="pattern" type="wstring" dir="in">
10605 <desc>The selection pattern. A bit similar to filename globbing.</desc>
10606 </param>
10607 </method>
10608
10609 <method name="dumpStats">
10610 <desc>
10611 Dumps VM statistics.
10612 </desc>
10613 <param name="pattern" type="wstring" dir="in">
10614 <desc>The selection pattern. A bit similar to filename globbing.</desc>
10615 </param>
10616 </method>
10617
10618 <method name="getStats">
10619 <desc>
10620 Get the VM statistics in a XMLish format.
10621 </desc>
10622 <param name="pattern" type="wstring" dir="in">
10623 <desc>The selection pattern. A bit similar to filename globbing.</desc>
10624 </param>
10625 <param name="withDescriptions" type="boolean" dir="in">
10626 <desc>Whether to include the descriptions.</desc>
10627 </param>
10628 <param name="stats" type="wstring" dir="out">
10629 <desc>The XML document containing the statistics.</desc>
10630 </param>
10631 </method>
10632
10633 <method name="injectNMI">
10634 <desc>
10635 Inject an NMI into a running VT-x/AMD-V VM.
10636 </desc>
10637 </method>
10638
10639 <attribute name="singlestep" type="boolean">
10640 <desc>Switch for enabling singlestepping.</desc>
10641 </attribute>
10642
10643 <attribute name="recompileUser" type="boolean">
10644 <desc>Switch for forcing code recompilation for user mode code.</desc>
10645 </attribute>
10646
10647 <attribute name="recompileSupervisor" type="boolean">
10648 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
10649 </attribute>
10650
10651 <attribute name="PATMEnabled" type="boolean">
10652 <desc>Switch for enabling and disabling the PATM component.</desc>
10653 </attribute>
10654
10655 <attribute name="CSAMEnabled" type="boolean">
10656 <desc>Switch for enabling and disabling the CSAM component.</desc>
10657 </attribute>
10658
10659 <attribute name="logEnabled" type="boolean">
10660 <desc>Switch for enabling and disabling logging.</desc>
10661 </attribute>
10662
10663 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
10664 <desc>
10665 Flag indicating whether the VM is currently making use of CPU hardware
10666 virtualization extensions.
10667 </desc>
10668 </attribute>
10669
10670 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
10671 <desc>
10672 Flag indicating whether the VM is currently making use of the nested paging
10673 CPU hardware virtualization extension.
10674 </desc>
10675 </attribute>
10676
10677 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
10678 <desc>
10679 Flag indicating whether the VM is currently making use of the VPID
10680 VT-x extension.
10681 </desc>
10682 </attribute>
10683
10684 <attribute name="PAEEnabled" type="boolean" readonly="yes">
10685 <desc>
10686 Flag indicating whether the VM is currently making use of the Physical
10687 Address Extension CPU feature.
10688 </desc>
10689 </attribute>
10690
10691 <attribute name="virtualTimeRate" type="unsigned long">
10692 <desc>
10693 The rate at which the virtual time runs expressed as a percentage.
10694 The accepted range is 2% to 20000%.
10695 </desc>
10696 </attribute>
10697
10698 <!-- @todo method for setting log flags, groups and destination! -->
10699
10700 <attribute name="VM" type="unsigned long long" readonly="yes">
10701 <desc>
10702 Gets the VM handle. This is only for internal use while
10703 we carve the details of this interface.
10704 </desc>
10705 </attribute>
10706
10707 </interface>
10708
10709 <!--
10710 // IUSBController
10711 /////////////////////////////////////////////////////////////////////////
10712 -->
10713
10714 <interface
10715 name="IUSBController" extends="$unknown"
10716 uuid="f4c2d3dc-f109-4da7-93b1-ec28973ac89f"
10717 wsmap="managed"
10718 >
10719 <attribute name="enabled" type="boolean">
10720 <desc>
10721 Flag whether the USB controller is present in the
10722 guest system. If disabled, the virtual guest hardware will
10723 not contain any USB controller. Can only be changed when
10724 the VM is powered off.
10725 </desc>
10726 </attribute>
10727
10728 <attribute name="enabledEhci" type="boolean">
10729 <desc>
10730 Flag whether the USB EHCI controller is present in the
10731 guest system. If disabled, the virtual guest hardware will
10732 not contain a USB EHCI controller. Can only be changed when
10733 the VM is powered off.
10734 </desc>
10735 </attribute>
10736
10737 <attribute name="USBStandard" type="unsigned short" readonly="yes">
10738 <desc>
10739 USB standard version which the controller implements.
10740 This is a BCD which means that the major version is in the
10741 high byte and minor version is in the low byte.
10742 </desc>
10743 </attribute>
10744
10745 <attribute name="deviceFilters" type="IUSBDeviceFilterCollection" readonly="yes">
10746 <desc>
10747 List of USB device filters associated with the machine.
10748
10749 If the machine is currently running, these filters are activated
10750 every time a new (supported) USB device is attached to the host
10751 computer that was not ignored by global filters
10752 (<link to="IHost::USBDeviceFilters"/>).
10753
10754 These filters are also activated when the machine is powered up.
10755 They are run against a list of all currently available USB
10756 devices (in states
10757 <link to="USBDeviceState_Available"/>,
10758 <link to="USBDeviceState_Busy"/>,
10759 <link to="USBDeviceState_Held"/>) that were not previously
10760 ignored by global filters.
10761
10762 If at least one filter matches the USB device in question, this
10763 device is automatically captured (attached to) the virtual USB
10764 controller of this machine.
10765
10766 <see>IUSBDeviceFilter, ::IUSBController</see>
10767 </desc>
10768 </attribute>
10769
10770 <method name="createDeviceFilter">
10771 <desc>
10772 Creates a new USB device filter. All attributes except
10773 the filter name are set to <tt>null</tt> (any match),
10774 <i>active</i> is <tt>false</tt> (the filter is not active).
10775
10776 The created filter can then be added to the list of filters using
10777 <link to="#insertDeviceFilter()"/>.
10778
10779 <result name="VBOX_E_INVALID_VM_STATE">
10780 The virtual machine is not mutable.
10781 </result>
10782
10783 <see>#deviceFilters</see>
10784 </desc>
10785 <param name="name" type="wstring" dir="in">
10786 <desc>
10787 Filter name. See <link to="IUSBDeviceFilter::name"/>
10788 for more info.
10789 </desc>
10790 </param>
10791 <param name="filter" type="IUSBDeviceFilter" dir="return">
10792 <desc>Created filter object.</desc>
10793 </param>
10794 </method>
10795
10796 <method name="insertDeviceFilter">
10797 <desc>
10798 Inserts the given USB device to the specified position
10799 in the list of filters.
10800
10801 Positions are numbered starting from <tt>0</tt>. If the specified
10802 position is equal to or greater than the number of elements in
10803 the list, the filter is added to the end of the collection.
10804
10805 <note>
10806 Duplicates are not allowed, so an attempt to insert a
10807 filter that is already in the collection, will return an
10808 error.
10809 </note>
10810
10811 <result name="VBOX_E_INVALID_VM_STATE">
10812 Virtual machine is not mutable.
10813 </result>
10814 <result name="E_INVALIDARG">
10815 USB device filter not created within this VirtualBox instance.
10816 </result>
10817 <result name="VBOX_E_INVALID_OBJECT_STATE">
10818 USB device filter already in list.
10819 </result>
10820
10821 <see>#deviceFilters</see>
10822 </desc>
10823 <param name="position" type="unsigned long" dir="in">
10824 <desc>Position to insert the filter to.</desc>
10825 </param>
10826 <param name="filter" type="IUSBDeviceFilter" dir="in">
10827 <desc>USB device filter to insert.</desc>
10828 </param>
10829 </method>
10830
10831 <method name="removeDeviceFilter">
10832 <desc>
10833 Removes a USB device filter from the specified position in the
10834 list of filters.
10835
10836 Positions are numbered starting from <tt>0</tt>. Specifying a
10837 position equal to or greater than the number of elements in
10838 the list will produce an error.
10839
10840 <see>#deviceFilters</see>
10841
10842 <result name="VBOX_E_INVALID_VM_STATE">
10843 Virtual machine is not mutable.
10844 </result>
10845 <result name="E_INVALIDARG">
10846 USB device filter list empty or invalid @a position.
10847 </result>
10848
10849 </desc>
10850 <param name="position" type="unsigned long" dir="in">
10851 <desc>Position to remove the filter from.</desc>
10852 </param>
10853 <param name="filter" type="IUSBDeviceFilter" dir="return">
10854 <desc>Removed USB device filter.</desc>
10855 </param>
10856 </method>
10857
10858 </interface>
10859
10860
10861 <!--
10862 // IUSBDevice
10863 /////////////////////////////////////////////////////////////////////////
10864 -->
10865
10866 <enumerator
10867 name="IUSBDeviceEnumerator" type="IUSBDevice"
10868 uuid="aefe00f7-eb8a-454b-9ea4-fd5ad93c0e99"
10869 />
10870
10871 <collection
10872 name="IUSBDeviceCollection" type="IUSBDevice"
10873 enumerator="IUSBDeviceEnumerator"
10874 uuid="e31f3248-90dd-4ca2-95f0-6b36042d96a2"
10875 readonly="yes"
10876 >
10877 <method name="findById">
10878 <desc>
10879 Searches this collection for a USB device with the given UUID.
10880 <note>
10881 The method returns an error if the given UUID does not
10882 correspond to any USB device in the collection.
10883 </note>
10884 <see>IUSBDevice::id</see>
10885 </desc>
10886 <param name="id" type="uuid" dir="in">
10887 <desc>UUID of the USB device to search for.</desc>
10888 </param>
10889 <param name="device" type="IUSBDevice" dir="return">
10890 <desc>Found USB device object.</desc>
10891 </param>
10892 </method>
10893
10894 <method name="findByAddress">
10895 <desc>
10896 Searches this collection for a USB device with the given
10897 host address.
10898 <note>
10899 The method returns an error if the given address does not
10900 correspond to any USB device in the collection.
10901 </note>
10902 <see>IUSBDevice::address</see>
10903 </desc>
10904 <param name="name" type="wstring" dir="in">
10905 <desc>
10906 Address of the USB device (as assigned by the host) to
10907 search for.
10908 </desc>
10909 </param>
10910 <param name="device" type="IUSBDevice" dir="return">
10911 <desc>Found USB device object.</desc>
10912 </param>
10913 </method>
10914
10915 </collection>
10916
10917 <interface
10918 name="IUSBDevice" extends="$unknown"
10919 uuid="850af07b-9ee8-48c2-b6b0-f6d0acbf63c3"
10920 wsmap="managed"
10921 >
10922 <desc>
10923 The IUSBDevice interface represents a virtual USB device attached to the
10924 virtual machine.
10925
10926 A collection of objects implementing this interface is stored in the
10927 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
10928 attached to a running virtual machine's USB controller.
10929 </desc>
10930
10931 <attribute name="id" type="uuid" readonly="yes">
10932 <desc>
10933 Unique USB device ID. This ID is built from #vendorId,
10934 #productId, #revision and #serialNumber.
10935 </desc>
10936 </attribute>
10937
10938 <attribute name="vendorId" type="unsigned short" readonly="yes">
10939 <desc>Vendor ID.</desc>
10940 </attribute>
10941
10942 <attribute name="productId" type="unsigned short" readonly="yes">
10943 <desc>Product ID.</desc>
10944 </attribute>
10945
10946 <attribute name="revision" type="unsigned short" readonly="yes">
10947 <desc>
10948 Product revision number. This is a packed BCD represented as
10949 unsigned short. The high byte is the integer part and the low
10950 byte is the decimal.
10951 </desc>
10952 </attribute>
10953
10954 <attribute name="manufacturer" type="wstring" readonly="yes">
10955 <desc>Manufacturer string.</desc>
10956 </attribute>
10957
10958 <attribute name="product" type="wstring" readonly="yes">
10959 <desc>Product string.</desc>
10960 </attribute>
10961
10962 <attribute name="serialNumber" type="wstring" readonly="yes">
10963 <desc>Serial number string.</desc>
10964 </attribute>
10965
10966 <attribute name="address" type="wstring" readonly="yes">
10967 <desc>Host specific address of the device.</desc>
10968 </attribute>
10969
10970 <attribute name="port" type="unsigned short" readonly="yes">
10971 <desc>
10972 Host USB port number the device is physically
10973 connected to.
10974 </desc>
10975 </attribute>
10976
10977 <attribute name="version" type="unsigned short" readonly="yes">
10978 <desc>
10979 The major USB version of the device - 1 or 2.
10980 </desc>
10981 </attribute>
10982
10983 <attribute name="portVersion" type="unsigned short" readonly="yes">
10984 <desc>
10985 The major USB version of the host USB port the device is
10986 physically connected to - 1 or 2. For devices not connected to
10987 anything this will have the same value as the version attribute.
10988 </desc>
10989 </attribute>
10990
10991 <attribute name="remote" type="boolean" readonly="yes">
10992 <desc>
10993 Whether the device is physically connected to a remote VRDP
10994 client or to a local host machine.
10995 </desc>
10996 </attribute>
10997
10998 </interface>
10999
11000
11001 <!--
11002 // IUSBDeviceFilter
11003 /////////////////////////////////////////////////////////////////////////
11004 -->
11005
11006 <enumerator
11007 name="IUSBDeviceFilterEnumerator" type="IUSBDeviceFilter"
11008 uuid="d5109c61-93e7-4726-926b-0dee1020da56"
11009 />
11010
11011 <collection
11012 name="IUSBDeviceFilterCollection" type="IUSBDeviceFilter"
11013 enumerator="IUSBDeviceFilterEnumerator"
11014 uuid="4fa3fc99-ceb1-4bf5-a9cb-e962d825c1ef"
11015 readonly="yes"
11016 />
11017
11018 <interface
11019 name="IUSBDeviceFilter" extends="$unknown"
11020 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
11021 wsmap="managed"
11022 >
11023 <desc>
11024 The IUSBDeviceFilter interface represents an USB device filter used
11025 to perform actions on a group of USB devices.
11026
11027 This type of filters is used by running virtual machines to
11028 automatically capture selected USB devices once they are physically
11029 attached to the host computer.
11030
11031 A USB device is matched to the given device filter if and only if all
11032 attributes of the device match the corresponding attributes of the
11033 filter (that is, attributes are joined together using the logical AND
11034 operation). On the other hand, all together, filters in the list of
11035 filters carry the semantics of the logical OR operation. So if it is
11036 desirable to create a match like "this vendor id OR this product id",
11037 one needs to create two filters and specify "any match" (see below)
11038 for unused attributes.
11039
11040 All filter attributes used for matching are strings. Each string
11041 is an expression representing a set of values of the corresponding
11042 device attribute, that will match the given filter. Currently, the
11043 following filtering expressions are supported:
11044
11045 <ul>
11046 <li><i>Interval filters</i>. Used to specify valid intervals for
11047 integer device attributes (Vendor ID, Product ID and Revision).
11048 The format of the string is:
11049
11050 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
11051
11052 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
11053 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
11054 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
11055 is omitted before a dash (<tt>-</tt>), the minimum possible integer
11056 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
11057 possible integer is assumed.
11058 </li>
11059 <li><i>Boolean filters</i>. Used to specify acceptable values for
11060 boolean device attributes. The format of the string is:
11061
11062 <tt>true|false|yes|no|0|1</tt>
11063
11064 </li>
11065 <li><i>Exact match</i>. Used to specify a single value for the given
11066 device attribute. Any string that doesn't start with <tt>int:</tt>
11067 represents the exact match. String device attributes are compared to
11068 this string including case of symbols. Integer attributes are first
11069 converted to a string (see individual filter attributes) and then
11070 compared ignoring case.
11071
11072 </li>
11073 <li><i>Any match</i>. Any value of the corresponding device attribute
11074 will match the given filter. An empty or <tt>null</tt> string is
11075 used to construct this type of filtering expressions.
11076
11077 </li>
11078 </ul>
11079
11080 <note>
11081 On the Windows host platform, interval filters are not currently
11082 available. Also all string filter attributes
11083 (<link to="#manufacturer"/>, <link to="#product"/>,
11084 <link to="#serialNumber"/>) are ignored, so they behave as
11085 <i>any match</i> no matter what string expression is specified.
11086 </note>
11087
11088 <see>IUSBController::deviceFilters, IHostUSBDeviceFilter</see>
11089 </desc>
11090
11091 <attribute name="name" type="wstring">
11092 <desc>
11093 Visible name for this filter.
11094 This name is used to visually distinguish one filter from another,
11095 so it can neither be <tt>null</tt> nor an empty string.
11096 </desc>
11097 </attribute>
11098
11099 <attribute name="active" type="boolean">
11100 <desc>Whether this filter active or has been temporarily disabled.</desc>
11101 </attribute>
11102
11103 <attribute name="vendorId" type="wstring">
11104 <desc>
11105 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
11106 The string representation for the <i>exact matching</i>
11107 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
11108 (including leading zeroes).
11109 </desc>
11110 </attribute>
11111
11112 <attribute name="productId" type="wstring">
11113 <desc>
11114 <link to="IUSBDevice::productId">Product ID</link> filter.
11115 The string representation for the <i>exact matching</i>
11116 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
11117 (including leading zeroes).
11118 </desc>
11119 </attribute>
11120
11121 <attribute name="revision" type="wstring">
11122 <desc>
11123 <link to="IUSBDevice::productId">Product revision number</link>
11124 filter. The string representation for the <i>exact matching</i>
11125 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
11126 of the integer part of the revision, and <tt>F</tt> is the
11127 decimal digit of its fractional part (including leading and
11128 trailing zeros).
11129 Note that for interval filters, it's best to use the hexadecimal
11130 form, because the revision is stored as a 16 bit packed BCD value;
11131 so the expression <tt>int:0x0100-0x0199</tt> will match any
11132 revision from <tt>1.0</tt> to <tt>1.99</tt>.
11133 </desc>
11134 </attribute>
11135
11136 <attribute name="manufacturer" type="wstring">
11137 <desc>
11138 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
11139 </desc>
11140 </attribute>
11141
11142 <attribute name="product" type="wstring">
11143 <desc>
11144 <link to="IUSBDevice::product">Product</link> filter.
11145 </desc>
11146 </attribute>
11147
11148 <attribute name="serialNumber" type="wstring">
11149 <desc>
11150 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
11151 </desc>
11152 </attribute>
11153
11154 <attribute name="port" type="wstring">
11155 <desc>
11156 <link to="IUSBDevice::port">Host USB port</link> filter.
11157 </desc>
11158 </attribute>
11159
11160 <attribute name="remote" type="wstring">
11161 <desc>
11162 <link to="IUSBDevice::remote">Remote state</link> filter.
11163 <note>
11164 This filter makes sense only for machine USB filters,
11165 i.e. it is ignored by IHostUSBDeviceFilter objects.
11166 </note>
11167 </desc>
11168 </attribute>
11169
11170 <attribute name="maskedInterfaces" type="unsigned long">
11171 <desc>
11172 This is an advanced option for hiding one or more USB interfaces
11173 from the guest. The value is a bit mask where the bits that are set
11174 means the corresponding USB interface should be hidden, masked off
11175 if you like.
11176 This feature only works on Linux hosts.
11177 </desc>
11178 </attribute>
11179
11180 </interface>
11181
11182
11183 <!--
11184 // IHostUSBDevice
11185 /////////////////////////////////////////////////////////////////////////
11186 -->
11187
11188 <enum
11189 name="USBDeviceState"
11190 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
11191 >
11192 <desc>
11193 USB device state. This enumeration represents all possible states
11194 of the USB device physically attached to the host computer regarding
11195 its state on the host computer and availability to guest computers
11196 (all currently running virtual machines).
11197
11198 Once a supported USB device is attached to the host, global USB
11199 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
11200 either ignore the device, or put it to USBDeviceState_Held state, or do
11201 nothing. Unless the device is ignored by global filters, filters of all
11202 currently running guests (<link to="IUSBController::deviceFilters"/>) are
11203 activated that can put it to USBDeviceState_Captured state.
11204
11205 If the device was ignored by global filters, or didn't match
11206 any filters at all (including guest ones), it is handled by the host
11207 in a normal way. In this case, the device state is determined by
11208 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
11209 or USBDeviceState_Available, depending on the current device usage.
11210
11211 Besides auto-capturing based on filters, the device can be manually
11212 captured by guests (<link to="IConsole::attachUSBDevice()"/>) if its
11213 state is USBDeviceState_Busy, USBDeviceState_Available or
11214 USBDeviceState_Held.
11215
11216 <note>
11217 Due to differences in USB stack implementations in Linux and Win32,
11218 states USBDeviceState_Busy and USBDeviceState_vailable are applicable
11219 only to the Linux version of the product. This also means that (<link
11220 to="IConsole::attachUSBDevice()"/>) can only succeed on Win32 if the
11221 device state is USBDeviceState_Held.
11222 </note>
11223
11224 <see>IHostUSBDevice, IHostUSBDeviceFilter</see>
11225 </desc>
11226
11227 <const name="NotSupported" value="0">
11228 <desc>
11229 Not supported by the VirtualBox server, not available to guests.
11230 </desc>
11231 </const>
11232 <const name="Unavailable" value="1">
11233 <desc>
11234 Being used by the host computer exclusively,
11235 not available to guests.
11236 </desc>
11237 </const>
11238 <const name="Busy" value="2">
11239 <desc>
11240 Being used by the host computer, potentially available to guests.
11241 </desc>
11242 </const>
11243 <const name="Available" value="3">
11244 <desc>
11245 Not used by the host computer, available to guests (the host computer
11246 can also start using the device at any time).
11247 </desc>
11248 </const>
11249 <const name="Held" value="4">
11250 <desc>
11251 Held by the VirtualBox server (ignored by the host computer),
11252 available to guests.
11253 </desc>
11254 </const>
11255 <const name="Captured" value="5">
11256 <desc>
11257 Captured by one of the guest computers, not available
11258 to anybody else.
11259 </desc>
11260 </const>
11261 </enum>
11262
11263 <enumerator
11264 name="IHostUSBDeviceEnumerator" type="IHostUSBDevice"
11265 uuid="a0c55136-939f-4d20-b9d3-4d406f08bfa5"
11266 />
11267
11268 <collection
11269 name="IHostUSBDeviceCollection" type="IHostUSBDevice"
11270 enumerator="IHostUSBDeviceEnumerator"
11271 uuid="f9d3f96d-b027-4994-b589-70bb9ee0d364"
11272 readonly="yes"
11273 >
11274 <method name="findById">
11275 <desc>
11276 Searches this collection for a USB device with the given UUID.
11277 <note>
11278 The method returns an error if the given UUID does not
11279 correspond to any USB device in the collection.
11280 </note>
11281 <see>IHostUSBDevice::id</see>
11282 </desc>
11283 <param name="id" type="uuid" dir="in">
11284 <desc>UUID of the USB device to search for.</desc>
11285 </param>
11286 <param name="device" type="IHostUSBDevice" dir="return">
11287 <desc>Found USB device object.</desc>
11288 </param>
11289 </method>
11290
11291 <method name="findByAddress">
11292 <desc>
11293 Searches this collection for a USB device with the given
11294 host address.
11295 <note>
11296 The method returns an error if the given address does not
11297 correspond to any USB device in the collection.
11298 </note>
11299 <see>IHostUSBDevice::address</see>
11300 </desc>
11301 <param name="name" type="wstring" dir="in">
11302 <desc>
11303 Address of the USB device (as assigned by the host) to
11304 search for.
11305 </desc>
11306 </param>
11307 <param name="device" type="IHostUSBDevice" dir="return">
11308 <desc>Found USB device object.</desc>
11309 </param>
11310 </method>
11311
11312 </collection>
11313
11314 <interface
11315 name="IHostUSBDevice" extends="IUSBDevice"
11316 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
11317 wsmap="managed"
11318 >
11319 <desc>
11320 The IHostUSBDevice interface represents a physical USB device attached
11321 to the host computer.
11322
11323 Besides properties inherited from IUSBDevice, this interface adds the
11324 <link to="#state"/> property that holds the current state of the USB
11325 device.
11326
11327 <see>IHost::USBDevices, IHost::USBDeviceFilters</see>
11328 </desc>
11329
11330 <attribute name="state" type="USBDeviceState" readonly="yes">
11331 <desc>
11332 Current state of the device.
11333 </desc>
11334 </attribute>
11335
11336 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
11337
11338 </interface>
11339
11340
11341 <!--
11342 // IHostUSBDeviceFilter
11343 /////////////////////////////////////////////////////////////////////////
11344 -->
11345
11346 <enum
11347 name="USBDeviceFilterAction"
11348 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
11349 >
11350 <desc>
11351 Actions for host USB device filters.
11352 <see>IHostUSBDeviceFilter, USBDeviceState</see>
11353 </desc>
11354
11355 <const name="Null" value="0">
11356 <desc>Null value (never used by the API).</desc>
11357 </const>
11358 <const name="Ignore" value="1">
11359 <desc>Ignore the matched USB device.</desc>
11360 </const>
11361 <const name="Hold" value="2">
11362 <desc>Hold the matched USB device.</desc>
11363 </const>
11364 </enum>
11365
11366 <enumerator
11367 name="IHostUSBDeviceFilterEnumerator" type="IHostUSBDeviceFilter"
11368 uuid="ff735211-903e-4642-9c37-189eb44579fe"
11369 />
11370
11371 <collection
11372 name="IHostUSBDeviceFilterCollection" type="IHostUSBDeviceFilter"
11373 enumerator="IHostUSBDeviceFilterEnumerator"
11374 uuid="1a80458b-87f1-4a74-995d-04e2330119e0"
11375 readonly="yes"
11376 />
11377
11378 <interface
11379 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
11380 uuid="4cc70246-d74a-400f-8222-3900489c0374"
11381 wsmap="managed"
11382 >
11383 <desc>
11384 The IHostUSBDeviceFilter interface represents a global filter for a
11385 physical USB device used by the host computer. Used indirectly in
11386 <link to="IHost::USBDeviceFilters"/>.
11387
11388 Using filters of this type, the host computer determines the initial
11389 state of the USB device after it is physically attached to the
11390 host's USB controller.
11391
11392 <note>
11393 The <link to="#remote"/> attribute is ignored by this type of
11394 filters, because it makes sense only for
11395 <link to="IUSBController::deviceFilters">machine USB filters</link>.
11396 </note>
11397
11398 <see>IHost::USBDeviceFilters</see>
11399 </desc>
11400
11401 <attribute name="action" type="USBDeviceFilterAction">
11402 <desc>
11403 Action performed by the host when an attached USB device
11404 matches this filter.
11405 </desc>
11406 </attribute>
11407
11408 </interface>
11409
11410 <!--
11411 // IAudioAdapter
11412 /////////////////////////////////////////////////////////////////////////
11413 -->
11414
11415 <enum
11416 name="AudioDriverType"
11417 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
11418 >
11419 <desc>
11420 Host audio driver type.
11421 </desc>
11422
11423 <const name="Null" value="0">
11424 <desc>Null value, also means "dummy audio driver".</desc>
11425 </const>
11426 <const name="WinMM" value="1"/>
11427 <const name="OSS" value="2"/>
11428 <const name="ALSA" value="3"/>
11429 <const name="DirectSound" value="4"/>
11430 <const name="CoreAudio" value="5"/>
11431 <const name="MMPM" value="6"/>
11432 <const name="Pulse" value="7"/>
11433 <const name="SolAudio" value="8"/>
11434 </enum>
11435
11436 <enum
11437 name="AudioControllerType"
11438 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
11439 >
11440 <desc>
11441 Virtual audio controller type.
11442 </desc>
11443
11444 <const name="AC97" value="0"/>
11445 <const name="SB16" value="1"/>
11446 </enum>
11447
11448 <interface
11449 name="IAudioAdapter" extends="$unknown"
11450 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
11451 wsmap="managed"
11452 >
11453 <desc>
11454 The IAudioAdapter interface represents the virtual audio adapter of
11455 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
11456 </desc>
11457 <attribute name="enabled" type="boolean">
11458 <desc>
11459 Flag whether the audio adapter is present in the
11460 guest system. If disabled, the virtual guest hardware will
11461 not contain any audio adapter. Can only be changed when
11462 the VM is not running.
11463 </desc>
11464 </attribute>
11465 <attribute name="audioController" type="AudioControllerType">
11466 <desc>
11467 The audio hardware we emulate.
11468 </desc>
11469 </attribute>
11470 <attribute name="audioDriver" type="AudioDriverType">
11471 <desc>
11472 Audio driver the adapter is connected to. This setting
11473 can only be changed when the VM is not running.
11474 </desc>
11475 </attribute>
11476 </interface>
11477
11478 <!--
11479 // IVRDPServer
11480 /////////////////////////////////////////////////////////////////////////
11481 -->
11482
11483 <enum
11484 name="VRDPAuthType"
11485 uuid="3d91887a-b67f-4b33-85bf-2da7ab1ea83a"
11486 >
11487 <desc>
11488 VRDP authentication type.
11489 </desc>
11490
11491 <const name="Null" value="0">
11492 <desc>Null value, also means "no authentication".</desc>
11493 </const>
11494 <const name="External" value="1"/>
11495 <const name="Guest" value="2"/>
11496 </enum>
11497
11498 <interface
11499 name="IVRDPServer" extends="$unknown"
11500 uuid="f4584ae7-6bce-474b-83d6-17d235e6aa89"
11501 wsmap="managed"
11502 >
11503 <attribute name="enabled" type="boolean">
11504 <desc>VRDP server status.</desc>
11505 </attribute>
11506
11507 <attribute name="port" type="unsigned long">
11508 <desc>
11509 VRDP server port number.
11510 <note>
11511 Setting the value of this property to <tt>0</tt> will reset the port
11512 number to the default value which is
11513 currently <tt>3389</tt>. Reading this property will always return a
11514 real port number, even after it has been set to <tt>0</tt> (in which
11515 case the default port is returned).
11516 </note>
11517 </desc>
11518 </attribute>
11519
11520 <attribute name="netAddress" type="wstring">
11521 <desc>VRDP server address.</desc>
11522 </attribute>
11523
11524 <attribute name="authType" type="VRDPAuthType">
11525 <desc>VRDP authentication method.</desc>
11526 </attribute>
11527
11528 <attribute name="authTimeout" type="unsigned long">
11529 <desc>Timeout for guest authentication. Milliseconds.</desc>
11530 </attribute>
11531
11532 <attribute name="allowMultiConnection" type="boolean">
11533 <desc>
11534 Flag whether multiple simultaneous connections to the VM are permitted.
11535 Note that this will be replaced by a more powerful mechanism in the future.
11536 </desc>
11537 </attribute>
11538
11539 <attribute name="reuseSingleConnection" type="boolean">
11540 <desc>
11541 Flag whether the existing connection must be dropped and a new connection
11542 must be established by the VRDP server, when a new client connects in single
11543 connection mode.
11544 </desc>
11545 </attribute>
11546
11547 </interface>
11548
11549
11550 <!--
11551 // ISharedFolder
11552 /////////////////////////////////////////////////////////////////////////
11553 -->
11554
11555 <enumerator
11556 name="ISharedFolderEnumerator" type="ISharedFolder"
11557 uuid="1d420fd8-e7c1-4511-abf4-a504dc6d0cbf"
11558 />
11559
11560 <collection
11561 name="ISharedFolderCollection" type="ISharedFolder"
11562 enumerator="ISharedFolderEnumerator"
11563 uuid="9c7e2282-bb16-4fa7-9138-f383c5e02353"
11564 readonly="yes">
11565
11566 <method name="findByName">
11567 <desc>
11568 Searches this collection for a shared folder with the given logical
11569 name.
11570 <note>
11571 The method returns an error if the given name does not correspond to
11572 any shared folder in the collection.
11573 </note>
11574 </desc>
11575 <param name="name" type="wstring" dir="in">
11576 <desc>Logical name of the shared folder to search for</desc>
11577 </param>
11578 <param name="sharedFolder" type="ISharedFolder" dir="return">
11579 <desc>Found shared folder object</desc>
11580 </param>
11581 </method>
11582
11583 </collection>
11584
11585 <interface
11586 name="ISharedFolder" extends="$unknown"
11587 uuid="ef41869b-ef31-4b30-8e8f-95af35c0e378"
11588 wsmap="struct"
11589 >
11590 <desc>
11591 The ISharedFolder interface represents a folder in the host computer's
11592 file system accessible from the guest OS running inside a virtual
11593 machine using an associated logical name.
11594
11595 There are three types of shared folders:
11596 <ul>
11597 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
11598 folders available to all virtual machines.</li>
11599 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
11600 VM-specific shared folders available to the given virtual machine at
11601 startup.</li>
11602 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
11603 VM-specific shared folders created in the session context (for
11604 example, when the virtual machine is running) and automatically
11605 discarded when the session is closed (the VM is powered off).</li>
11606 </ul>
11607
11608 Logical names of shared folders must be unique within the given scope
11609 (global, permanent or transient). However, they do not need to be unique
11610 across scopes. In this case, the definition of the shared folder in a
11611 more specific scope takes precedence over definitions in all other
11612 scopes. The order of precedence is (more specific to more general):
11613 <ol>
11614 <li>Transient definitions</li>
11615 <li>Permanent definitions</li>
11616 <li>Global definitions</li>
11617 </ol>
11618
11619 For example, if MyMachine has a shared folder named
11620 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
11621 transient shared folder named <tt>C_DRIVE</tt> (that points
11622 to <tt>C:\\\\WINDOWS</tt>) will change the definition
11623 of <tt>C_DRIVE</tt> in the guest OS so
11624 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
11625 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
11626 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
11627 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
11628 to <tt>C:\\</tt> if it still exists.
11629
11630 Note that permanent and transient shared folders of different machines
11631 are in different name spaces, so they don't overlap and don't need to
11632 have unique logical names.
11633
11634 <note>
11635 Global shared folders are not implemented in the current version of the
11636 product.
11637 </note>
11638 </desc>
11639
11640 <attribute name="name" type="wstring" readonly="yes">
11641 <desc>Logical name of the shared folder.</desc>
11642 </attribute>
11643
11644 <attribute name="hostPath" type="wstring" readonly="yes">
11645 <desc>Full path to the shared folder in the host file system.</desc>
11646 </attribute>
11647
11648 <attribute name="accessible" type="boolean" readonly="yes">
11649 <desc>
11650 Whether the folder defined by the host path is currently
11651 accessible or not.
11652 For example, the folder can be unaccessible if it is placed
11653 on the network share that is not available by the time
11654 this property is read.
11655 </desc>
11656 </attribute>
11657
11658 <attribute name="writable" type="boolean" readonly="yes">
11659 <desc>
11660 Whether the folder defined by the host path is writable or
11661 not.
11662 </desc>
11663 </attribute>
11664
11665 <attribute name="lastAccessError" type="wstring" readonly="yes">
11666 <desc>
11667 Text message that represents the result of the last accessibility
11668 check.
11669
11670 Accessibility checks are performed each time the <link to="#accessible"/>
11671 attribute is read. A @c null string is returned if the last
11672 accessibility check was successful. A non-null string indicates a
11673 failure and should normally describe a reason of the failure (for
11674 example, a file read error).
11675 </desc>
11676 </attribute>
11677
11678 </interface>
11679
11680 <!--
11681 // ISession
11682 /////////////////////////////////////////////////////////////////////////
11683 -->
11684
11685 <interface
11686 name="IInternalSessionControl" extends="$unknown"
11687 uuid="2581845a-5a9d-45fb-bc3b-2476552dd970"
11688 internal="yes"
11689 wsmap="suppress"
11690 >
11691 <method name="getPID">
11692 <desc>PID of the process that has created this Session object.
11693 </desc>
11694 <param name="pid" type="unsigned long" dir="return"/>
11695 </method>
11696
11697 <method name="getRemoteConsole">
11698 <desc>
11699 Returns the console object suitable for remote control.
11700
11701 <result name="VBOX_E_INVALID_VM_STATE">
11702 Session state prevents operation.
11703 </result>
11704 <result name="VBOX_E_INVALID_OBJECT_STATE">
11705 Session type prevents operation.
11706 </result>
11707
11708 </desc>
11709 <param name="console" type="IConsole" dir="return"/>
11710 </method>
11711
11712 <method name="assignMachine">
11713 <desc>
11714 Assigns the machine object associated with this direct-type
11715 session or informs the session that it will be a remote one
11716 (if @a machine == NULL).
11717
11718 <result name="VBOX_E_INVALID_VM_STATE">
11719 Session state prevents operation.
11720 </result>
11721 <result name="VBOX_E_INVALID_OBJECT_STATE">
11722 Session type prevents operation.
11723 </result>
11724
11725 </desc>
11726 <param name="machine" type="IMachine" dir="in"/>
11727 </method>
11728
11729 <method name="assignRemoteMachine">
11730 <desc>
11731 Assigns the machine and the (remote) console object associated with
11732 this remote-type session.
11733
11734 <result name="VBOX_E_INVALID_VM_STATE">
11735 Session state prevents operation.
11736 </result>
11737
11738 </desc>
11739 <param name="machine" type="IMachine" dir="in"/>
11740 <param name="console" type="IConsole" dir="in"/>
11741 </method>
11742
11743 <method name="updateMachineState">
11744 <desc>
11745 Updates the machine state in the VM process.
11746 Must be called only in certain cases
11747 (see the method implementation).
11748
11749 <result name="VBOX_E_INVALID_VM_STATE">
11750 Session state prevents operation.
11751 </result>
11752 <result name="VBOX_E_INVALID_OBJECT_STATE">
11753 Session type prevents operation.
11754 </result>
11755
11756 </desc>
11757 <param name="aMachineState" type="MachineState" dir="in"/>
11758 </method>
11759
11760 <method name="uninitialize">
11761 <desc>
11762 Uninitializes (closes) this session. Used by VirtualBox to close
11763 the corresponding remote session when the direct session dies
11764 or gets closed.
11765
11766 <result name="VBOX_E_INVALID_VM_STATE">
11767 Session state prevents operation.
11768 </result>
11769
11770 </desc>
11771 </method>
11772
11773 <method name="onDVDDriveChange">
11774 <desc>
11775 Triggered when settings of the DVD drive object of the
11776 associated virtual machine have changed.
11777
11778 <result name="VBOX_E_INVALID_VM_STATE">
11779 Session state prevents operation.
11780 </result>
11781 <result name="VBOX_E_INVALID_OBJECT_STATE">
11782 Session type prevents operation.
11783 </result>
11784
11785 </desc>
11786 </method>
11787
11788 <method name="onFloppyDriveChange">
11789 <desc>
11790 Triggered when settings of the floppy drive object of the
11791 associated virtual machine have changed.
11792
11793 <result name="VBOX_E_INVALID_VM_STATE">
11794 Session state prevents operation.
11795 </result>
11796 <result name="VBOX_E_INVALID_OBJECT_STATE">
11797 Session type prevents operation.
11798 </result>
11799
11800 </desc>
11801 </method>
11802
11803 <method name="onNetworkAdapterChange">
11804 <desc>
11805 Triggered when settings of a network adapter of the
11806 associated virtual machine have changed.
11807
11808 <result name="VBOX_E_INVALID_VM_STATE">
11809 Session state prevents operation.
11810 </result>
11811 <result name="VBOX_E_INVALID_OBJECT_STATE">
11812 Session type prevents operation.
11813 </result>
11814
11815 </desc>
11816 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
11817 </method>
11818
11819 <method name="onSerialPortChange">
11820 <desc>
11821 Triggered when settings of a serial port of the
11822 associated virtual machine have changed.
11823
11824 <result name="VBOX_E_INVALID_VM_STATE">
11825 Session state prevents operation.
11826 </result>
11827 <result name="VBOX_E_INVALID_OBJECT_STATE">
11828 Session type prevents operation.
11829 </result>
11830
11831 </desc>
11832 <param name="serialPort" type="ISerialPort" dir="in"/>
11833 </method>
11834
11835 <method name="onParallelPortChange">
11836 <desc>
11837 Triggered when settings of a parallel port of the
11838 associated virtual machine have changed.
11839
11840 <result name="VBOX_E_INVALID_VM_STATE">
11841 Session state prevents operation.
11842 </result>
11843 <result name="VBOX_E_INVALID_OBJECT_STATE">
11844 Session type prevents operation.
11845 </result>
11846
11847 </desc>
11848 <param name="parallelPort" type="IParallelPort" dir="in"/>
11849 </method>
11850
11851 <method name="onVRDPServerChange">
11852 <desc>
11853 Triggered when settings of the VRDP server object of the
11854 associated virtual machine have changed.
11855
11856 <result name="VBOX_E_INVALID_VM_STATE">
11857 Session state prevents operation.
11858 </result>
11859 <result name="VBOX_E_INVALID_OBJECT_STATE">
11860 Session type prevents operation.
11861 </result>
11862
11863 </desc>
11864 </method>
11865
11866 <method name="onUSBControllerChange">
11867 <desc>
11868 Triggered when settings of the USB controller object of the
11869 associated virtual machine have changed.
11870
11871 <result name="VBOX_E_INVALID_VM_STATE">
11872 Session state prevents operation.
11873 </result>
11874 <result name="VBOX_E_INVALID_OBJECT_STATE">
11875 Session type prevents operation.
11876 </result>
11877
11878 </desc>
11879 </method>
11880
11881 <method name="onSharedFolderChange">
11882 <desc>
11883 Triggered when a permanent (global or machine) shared folder has been
11884 created or removed.
11885 <note>
11886 We don't pass shared folder parameters in this notification because
11887 the order in which parallel notifications are delivered is not defined,
11888 therefore it could happen that these parameters were outdated by the
11889 time of processing this notification.
11890 </note>
11891
11892 <result name="VBOX_E_INVALID_VM_STATE">
11893 Session state prevents operation.
11894 </result>
11895 <result name="VBOX_E_INVALID_OBJECT_STATE">
11896 Session type prevents operation.
11897 </result>
11898
11899 </desc>
11900 <param name="global" type="boolean" dir="in"/>
11901 </method>
11902
11903 <method name="onUSBDeviceAttach">
11904 <desc>
11905 Triggered when a request to capture a USB device (as a result
11906 of matched USB filters or direct call to
11907 <link to="IConsole::attachUSBDevice"/>) has completed.
11908 A @c null @a error object means success, otherwise it
11909 describes a failure.
11910
11911 <result name="VBOX_E_INVALID_VM_STATE">
11912 Session state prevents operation.
11913 </result>
11914 <result name="VBOX_E_INVALID_OBJECT_STATE">
11915 Session type prevents operation.
11916 </result>
11917
11918 </desc>
11919 <param name="device" type="IUSBDevice" dir="in"/>
11920 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
11921 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
11922 </method>
11923
11924 <method name="onUSBDeviceDetach">
11925 <desc>
11926 Triggered when a request to release the USB device (as a result
11927 of machine termination or direct call to
11928 <link to="IConsole::detachUSBDevice"/>) has completed.
11929 A @c null @a error object means success, otherwise it
11930
11931 <result name="VBOX_E_INVALID_VM_STATE">
11932 Session state prevents operation.
11933 </result>
11934 <result name="VBOX_E_INVALID_OBJECT_STATE">
11935 Session type prevents operation.
11936 </result>
11937
11938 </desc>
11939 <param name="id" type="uuid" dir="in"/>
11940 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
11941 </method>
11942
11943 <method name="onShowWindow">
11944 <desc>
11945 Called by <link to="IMachine::canShowConsoleWindow()"/> and by
11946 <link to="IMachine::showConsoleWindow()"/> in order to notify
11947 console callbacks
11948 <link to="IConsoleCallback::onCanShowWindow()"/>
11949 and <link to="IConsoleCallback::onShowWindow()"/>.
11950
11951 <result name="VBOX_E_INVALID_OBJECT_STATE">
11952 Session type prevents operation.
11953 </result>
11954
11955 </desc>
11956 <param name="check" type="boolean" dir="in"/>
11957 <param name="canShow" type="boolean" dir="out"/>
11958 <param name="winId" type="unsigned long long" dir="out"/>
11959 </method>
11960
11961 <method name="accessGuestProperty">
11962 <desc>
11963 Called by <link to="IMachine::getGuestProperty()"/> and by
11964 <link to="IMachine::setGuestProperty()"/> in order to read and
11965 modify guest properties.
11966
11967 <result name="VBOX_E_INVALID_VM_STATE">
11968 Machine session is not open.
11969 </result>
11970 <result name="VBOX_E_INVALID_OBJECT_STATE">
11971 Session type is not direct.
11972 </result>
11973
11974 </desc>
11975 <param name="name" type="wstring" dir="in"/>
11976 <param name="value" type="wstring" dir="in"/>
11977 <param name="flags" type="wstring" dir="in"/>
11978 <param name="isSetter" type="boolean" dir="in"/>
11979 <param name="retValue" type="wstring" dir="out"/>
11980 <param name="retTimestamp" type="unsigned long long" dir="out"/>
11981 <param name="retFlags" type="wstring" dir="out"/>
11982 </method>
11983
11984 <method name="enumerateGuestProperties">
11985 <desc>
11986 Return a list of the guest properties matching a set of patterns along
11987 with their values, time stamps and flags.
11988
11989 <result name="VBOX_E_INVALID_VM_STATE">
11990 Machine session is not open.
11991 </result>
11992 <result name="VBOX_E_INVALID_OBJECT_STATE">
11993 Session type is not direct.
11994 </result>
11995
11996 </desc>
11997 <param name="patterns" type="wstring" dir="in">
11998 <desc>
11999 The patterns to match the properties against as a comma-separated
12000 string. If this is empty, all properties currently set will be
12001 returned.
12002 </desc>
12003 </param>
12004 <param name="key" type="wstring" dir="out" safearray="yes">
12005 <desc>
12006 The key names of the properties returned.
12007 </desc>
12008 </param>
12009 <param name="value" type="wstring" dir="out" safearray="yes">
12010 <desc>
12011 The values of the properties returned. The array entries match the
12012 corresponding entries in the @a key array.
12013 </desc>
12014 </param>
12015 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
12016 <desc>
12017 The time stamps of the properties returned. The array entries match
12018 the corresponding entries in the @a key array.
12019 </desc>
12020 </param>
12021 <param name="flags" type="wstring" dir="out" safearray="yes">
12022 <desc>
12023 The flags of the properties returned. The array entries match the
12024 corresponding entries in the @a key array.
12025 </desc>
12026 </param>
12027 </method>
12028
12029 </interface>
12030
12031 <interface
12032 name="ISession" extends="$dispatched"
12033 uuid="12F4DCDB-12B2-4ec1-B7CD-DDD9F6C5BF4D"
12034 wsmap="managed"
12035 >
12036 <desc>
12037 The ISession interface represents a serialization primitive for virtual
12038 machines.
12039
12040 With VirtualBox, every time one wishes to manipulate a virtual machine
12041 (e.g. change its settings or start execution), a session object is
12042 required. Such an object must be passed to one of the session methods
12043 that open the given session, which then initiates the machine manipulation.
12044
12045 A session serves several purposes: it identifies to the inter-process VirtualBox
12046 code which process is currently working with the virtual machine, and it ensures
12047 that there are no incompatible requests from several processes for the
12048 same virtual machine. Session objects can therefore be thought of as mutex
12049 semaphores that lock virtual machines to prevent conflicting accesses from
12050 several processes.
12051
12052 How sessions objects are used depends on whether you use the Main API
12053 via COM or via the webservice:
12054
12055 <ul>
12056 <li>When using the COM API directly, an object of the Session class from the
12057 VirtualBox type library needs to be created. In regular COM C++ client code,
12058 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
12059 This object will then act as a local session object in further calls to open
12060 a session.
12061 </li>
12062
12063 <li>In the webservice, the session manager (IWebsessionManager) instead creates
12064 one session object automatically when <link to="IWebsessionManager::logon" />
12065 is called. A managed object reference to that session object can be retrieved by
12066 calling <link to="IWebsessionManager::getSessionObject" />. This session object
12067 reference can then be used to open sessions.
12068 </li>
12069 </ul>
12070
12071 Sessions are mainly used in two variations:
12072
12073 <ul>
12074 <li>
12075 To start a virtual machine in a separate process, one would call
12076 <link to="IVirtualBox::openRemoteSession"/>, which requires a session
12077 object as its first parameter. This session then identifies the caller
12078 and lets him control the started machine (for example, pause machine
12079 execution or power it down) as well as be notified about machine
12080 execution state changes.
12081 </li>
12082
12083 <li>To alter machine settings, or to start machine execution within the
12084 current process, one needs to open a direct session for the machine first by
12085 calling <link to="IVirtualBox::openSession"/>. While a direct session
12086 is open within one process, no any other process may open another direct
12087 session for the same machine. This prevents the machine from being changed
12088 by other processes while it is running or while the machine is being configured.
12089 </li>
12090 </ul>
12091
12092 One also can attach to an existing direct session already opened by
12093 another process (for example, in order to send a control request to the
12094 virtual machine such as the pause or the reset request). This is done by
12095 calling <link to="IVirtualBox::openExistingSession"/>.
12096
12097 <note>
12098 Unless you are trying to write a new VirtualBox front-end that
12099 performs direct machine execution (like the VirtualBox or VBoxSDL
12100 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
12101 session opened by <link to="IVirtualBox::openSession"/> and use this
12102 session only to change virtual machine settings. If you simply want to
12103 start virtual machine execution using one of the existing front-ends
12104 (for example the VirtualBox GUI or headless server), simply use
12105 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
12106 will power up the machine automatically for you.
12107 </note>
12108 </desc>
12109
12110 <attribute name="state" type="SessionState" readonly="yes">
12111 <desc>Current state of this session.</desc>
12112 </attribute>
12113
12114 <attribute name="type" type="SessionType" readonly="yes">
12115 <desc>
12116 Type of this session. The value of this attribute is valid only
12117 if the session is currently open (i.e. its #state is
12118 SessionType_SessionOpen), otherwise an error will be returned.
12119 </desc>
12120 </attribute>
12121
12122 <attribute name="machine" type="IMachine" readonly="yes">
12123 <desc>Machine object associated with this session.</desc>
12124 </attribute>
12125
12126 <attribute name="console" type="IConsole" readonly="yes">
12127 <desc>Console object associated with this session.</desc>
12128 </attribute>
12129
12130 <method name="close">
12131 <desc>
12132 Closes a session that was previously opened.
12133
12134 It is recommended that every time an "open session" method (such as
12135 <link to="IVirtualBox::openRemoteSession" /> or
12136 <link to="IVirtualBox::openSession" />) has been called to
12137 manipulate a virtual machine, the caller invoke
12138 ISession::close() when it's done doing so. Since sessions are
12139 serialization primitives much like ordinary mutexes, they are
12140 best used the same way: for each "open" call, there should be
12141 a matching "close" call, even when errors occur.
12142
12143 Otherwise, if a direct session for a machine opened with
12144 <link to="IVirtualBox::openSession()"/> is not explicitly closed
12145 when the application terminates, the state of the machine will
12146 be set to <link to="MachineState_Aborted" /> on the server.
12147
12148 Generally, it is recommended to close all open sessions explicitly
12149 before terminating the application (regardless of the reason for
12150 the termination).
12151
12152 <note>
12153 Do not expect the session state (<link to="ISession::state" />
12154 to return to "Closed" immediately after you invoke
12155 ISession::close(), particularly if you have started a remote
12156 session to execute the VM in a new process. The session state will
12157 automatically return to "Closed" once the VM is no longer executing,
12158 which can of course take a very long time.
12159 </note>
12160
12161 <result name="E_UNEXPECTED">
12162 Session is not open.
12163 </result>
12164
12165 </desc>
12166 </method>
12167
12168 </interface>
12169
12170 <!--
12171 // ISATAController
12172 /////////////////////////////////////////////////////////////////////////
12173 -->
12174
12175 <interface
12176 name="ISATAController" extends="$unknown"
12177 uuid="9a4b868b-1376-4533-8ef5-065b8e8cedff"
12178 wsmap="managed"
12179 >
12180 <attribute name="enabled" type="boolean">
12181 <desc>
12182 Flag whether the SATA controller is present in the
12183 guest system. If disabled, the virtual guest hardware will
12184 not contain any SATA controller. Can only be changed when
12185 the VM is powered off.
12186 </desc>
12187 </attribute>
12188
12189 <attribute name="portCount" type="unsigned long">
12190 <desc>
12191 The number of usable ports on the SATA controller.
12192 It ranges from 1 to 30.
12193 </desc>
12194 </attribute>
12195
12196 <method name="GetIDEEmulationPort">
12197 <desc>
12198 Gets the corresponding port number which is emulated as an IDE device.
12199
12200 <result name="E_INVALIDARG">
12201 The @a devicePosition is not in the range 0 to 3.
12202 </result>
12203
12204 </desc>
12205 <param name="devicePosition" type="long" dir="in"/>
12206 <param name="portNumber" type="long" dir="return"/>
12207 </method>
12208
12209 <method name="SetIDEEmulationPort">
12210 <desc>
12211 Sets the port number which is emulated as an IDE device.
12212
12213 <result name="E_INVALIDARG">
12214 The @a devicePosition is not in the range 0 to 3 or the
12215 @a portNumber is not in the range 0 to 29.
12216 </result>
12217
12218 </desc>
12219 <param name="devicePosition" type="long" dir="in"/>
12220 <param name="portNumber" type="long" dir="in"/>
12221 </method>
12222
12223 </interface>
12224
12225<if target="wsdl">
12226
12227 <!--
12228 // IManagedObjectRef
12229 /////////////////////////////////////////////////////////////////////////
12230 -->
12231
12232 <interface
12233 name="IManagedObjectRef" extends="$unknown"
12234 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
12235 internal="yes"
12236 wsmap="managed"
12237 wscpp="hardcoded"
12238 >
12239 <desc>
12240 Managed object reference.
12241
12242 Only within the webservice, a managed object reference (which is really
12243 an opaque number) allows a webservice client to address an object
12244 that lives in the address space of the webservice server.
12245
12246 Behind each managed object reference, there is a COM object that lives
12247 in the webservice server's address space. The COM object is not freed
12248 until the managed object reference is released, either by an explicit
12249 call to <link to="IManagedObjectRef::release" /> or by logging off from
12250 the webservice (<link to="IWebsessionManager::logoff" />), which releases
12251 all objects created during the webservice session.
12252
12253 Whenever a method call of the VirtualBox API returns a COM object, the
12254 webservice representation of that method will instead return a
12255 managed object reference, which can then be used to invoke methods
12256 on that object.
12257 </desc>
12258
12259 <method name="getInterfaceName">
12260 <desc>
12261 Returns the name of the interface that this managed object represents,
12262 for example, "IMachine", as a string.
12263 </desc>
12264 <param name="return" type="wstring" dir="return"/>
12265 </method>
12266
12267 <method name="release">
12268 <desc>
12269 Releases this managed object reference and frees the resources that
12270 were allocated for it in the webservice server process. After calling
12271 this method, the identifier of the reference can no longer be used.
12272 </desc>
12273 </method>
12274
12275 </interface>
12276
12277 <!--
12278 // IWebsessionManager
12279 /////////////////////////////////////////////////////////////////////////
12280 -->
12281
12282 <interface
12283 name="IWebsessionManager" extends="$unknown"
12284 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
12285 internal="yes"
12286 wsmap="global"
12287 wscpp="hardcoded"
12288 >
12289 <desc>
12290 Websession manager. This provides essential services
12291 to webservice clients.
12292 </desc>
12293 <method name="logon">
12294 <desc>
12295 Logs a new client onto the webservice and returns a managed object reference to
12296 the IVirtualBox instance, which the client can then use as a basis to further
12297 queries, since all calls to the VirtualBox API are based on the IVirtualBox
12298 interface, in one way or the other.
12299 </desc>
12300 <param name="username" type="wstring" dir="in"/>
12301 <param name="password" type="wstring" dir="in"/>
12302 <param name="return" type="IVirtualBox" dir="return"/>
12303 </method>
12304
12305 <method name="getSessionObject">
12306 <desc>
12307 Returns a managed object reference to the internal ISession object that was created
12308 for this web service session when the client logged on.
12309
12310 <see>ISession</see>
12311 </desc>
12312 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
12313 <param name="return" type="ISession" dir="return"/>
12314 </method>
12315
12316 <method name="logoff">
12317 <desc>
12318 Logs off the client who has previously logged on with <link to="IWebsessionManager::logoff" />
12319 and destroys all resources associated with the session (most importantly, all
12320 managed objects created in the server while the session was active).
12321 </desc>
12322 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
12323 </method>
12324
12325 </interface>
12326
12327</if>
12328
12329 <!--
12330 // IPerformanceCollector & friends
12331 /////////////////////////////////////////////////////////////////////////
12332 -->
12333
12334 <interface
12335 name="IPerformanceMetric" extends="$unknown"
12336 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
12337 >
12338 <desc>
12339 The IPerformanceMetric interface represents parameters of the given
12340 performance metric.
12341 </desc>
12342
12343 <attribute name="metricName" type="wstring" readonly="yes">
12344 <desc>
12345 Name of the metric.
12346 </desc>
12347 </attribute>
12348
12349 <attribute name="object" type="$unknown" readonly="yes">
12350 <desc>
12351 Object this metric belongs to.
12352 </desc>
12353 </attribute>
12354
12355 <attribute name="description" type="wstring" readonly="yes">
12356 <desc>
12357 Textual description of the metric.
12358 </desc>
12359 </attribute>
12360
12361 <attribute name="period" type="unsigned long" readonly="yes">
12362 <desc>
12363 Time interval between samples, measured in seconds.
12364 </desc>
12365 </attribute>
12366
12367 <attribute name="count" type="unsigned long" readonly="yes">
12368 <desc>
12369 Number of recent samples retained by the performance collector for this
12370 metric.
12371
12372 When the collected sample count exceeds this number, older samples
12373 are discarded.
12374 </desc>
12375 </attribute>
12376
12377 <attribute name="unit" type="wstring" readonly="yes">
12378 <desc>
12379 Unit of measurement.
12380 </desc>
12381 </attribute>
12382
12383 <attribute name="minimumValue" type="long" readonly="yes">
12384 <desc>
12385 Minimum possible value of this metric.
12386 </desc>
12387 </attribute>
12388
12389 <attribute name="maximumValue" type="long" readonly="yes">
12390 <desc>
12391 Maximum possible value of this metric.
12392 </desc>
12393 </attribute>
12394 </interface>
12395
12396 <interface
12397 name="IPerformanceCollector" extends="$unknown"
12398 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
12399 wsmap="managed"
12400 >
12401 <desc>
12402 The IPerformanceCollector interface represents a service that collects and
12403 stores performance metrics data.
12404
12405 Performance metrics are associated with objects like IHost and
12406 IMachine. Each object has a distinct set of performance metrics.
12407 The set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
12408
12409 Metric data are collected at the specified intervals and are retained
12410 internally. The interval and the number of samples retained can be set
12411 with <link to="IPerformanceCollector::setupMetrics" />.
12412
12413 Metrics are organized hierarchically, each level separated by slash (/).
12414 General scheme for metric name is
12415 "Category/Metric[/SubMetric][:aggregation]". For example CPU/Load/User:avg
12416 metric name stands for: CPU category, Load metric, User submetric, average
12417 aggregate. An aggregate function is computed over all retained data. Valid
12418 aggregate functions are:
12419
12420 <ul>
12421 <li>avg -- average</li>
12422 <li>min -- minimum</li>
12423 <li>max -- maximum</li>
12424 </ul>
12425
12426 "Category/Metric" together form base metric name. A base metric is the
12427 smallest unit for which a sampling interval and the number of retained
12428 samples can be set. Only base metrics can be enabled and disabled. All
12429 sub-metrics are collected when their base metric is collected.
12430 Collected values for any set of sub-metrics can be queried with
12431 <link to="IPerformanceCollector::queryMetricsData" />. When setting up
12432 metric parameters, querying metric data, enabling or disabling metrics
12433 wildcards can be used in metric names to specify a subset of metrics. For
12434 example, to select all CPU-related metrics use <tt>CPU/*</tt>, all
12435 averages can be queried using <tt>*:avg</tt> and so on. To query metric
12436 values without aggregates <tt>*:</tt> can be used.
12437
12438 The valid names for base metrics are:
12439
12440 <ul>
12441 <li>CPU/Load</li>
12442 <li>CPU/MHz</li>
12443 <li>RAM/Usage</li>
12444 </ul>
12445
12446 The general sequence for collecting and retrieving the metrics is:
12447 <ul>
12448 <li>
12449 Obtain an instance of IPerformanceCollector with
12450 <link to="IVirtualBox::performanceCollector" />
12451 </li>
12452 <li>
12453 Allocate and populate an array with references to objects the metrics
12454 will be collected for. Use references to IHost and IMachine objects.
12455 </li>
12456 <li>
12457 Allocate and populate an array with base metric names the data will be
12458 collected for.
12459 </li>
12460 <li>
12461 Call <link to="IPerformanceCollector::setupMetrics" />. From now on the
12462 metric data will be collected and stored.
12463 </li>
12464 <li>
12465 Wait for the data to get collected.
12466 </li>
12467 <li>
12468 Allocate and populate an array with references to objects the metric
12469 values will be queried for. You can re-use the object array used for
12470 setting base metrics.
12471 </li>
12472 <li>
12473 Allocate and populate an array with metric names the data will be
12474 collected for. Note that metric names differ from base metric names.
12475 </li>
12476 <li>
12477 Call <link to="IPerformanceCollector::queryMetricsData" />. The data that
12478 have been collected so far are returned. Note that the values are still
12479 retained internally and data collection continues.
12480 </li>
12481 </ul>
12482
12483 For an example of usage refer to the following files in VirtualBox SDK:
12484 <ul>
12485 <li>
12486 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
12487 </li>
12488 <li>
12489 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
12490 </li>
12491 </ul>
12492 </desc>
12493
12494 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
12495 <desc>
12496 Array of unique names of metrics.
12497
12498 This array represents all metrics supported by the performance
12499 collector. Individual objects do not necessarily support all of them.
12500 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
12501 list of supported metrics for a particular object.
12502 </desc>
12503 </attribute>
12504
12505 <method name="getMetrics">
12506 <desc>
12507 Returns parameters of specified metrics for a set of objects.
12508 <note>
12509 @c Null metrics array means all metrics. @c Null object array means
12510 all existing objects.
12511 </note>
12512 </desc>
12513 <param name="metricNames" type="wstring" dir="in" safearray="yes">
12514 <desc>
12515 Metric name filter. Currently, only a comma-separated list of metrics
12516 is supported.
12517 </desc>
12518 </param>
12519 <param name="objects" type="$unknown" dir="in" safearray="yes">
12520 <desc>
12521 Set of objects to return metric parameters for.
12522 </desc>
12523 </param>
12524 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
12525 <desc>
12526 Array of returned metric parameters.
12527 </desc>
12528 </param>
12529 </method>
12530
12531 <method name="setupMetrics">
12532 <desc>
12533 Sets parameters of specified base metrics for a set of objects. Returns
12534 an array of <link to="IPerformanceMetric" /> describing the metrics have
12535 been affected.
12536 <note>
12537 @c Null or empty metric name array means all metrics. @c Null or empty
12538 object array means all existing objects. If metric name array contains
12539 a single element and object array contains many, the single metric
12540 name array element is applied to each object array element to form
12541 metric/object pairs.
12542 </note>
12543 </desc>
12544 <param name="metricNames" type="wstring" dir="in" safearray="yes">
12545 <desc>
12546 Metric name filter. Comma-separated list of metrics with wildcard
12547 support.
12548 </desc>
12549 </param>
12550 <param name="objects" type="$unknown" dir="in" safearray="yes">
12551 <desc>
12552 Set of objects to setup metric parameters for.
12553 </desc>
12554 </param>
12555 <param name="period" type="unsigned long" dir="in">
12556 <desc>
12557 Time interval in seconds between two consecutive samples of performance
12558 data.
12559 </desc>
12560 </param>
12561 <param name="count" type="unsigned long" dir="in">
12562 <desc>
12563 Number of samples to retain in performance data history. Older samples
12564 get discarded.
12565 </desc>
12566 </param>
12567 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
12568 <desc>
12569 Array of metrics that have been modified by the call to this method.
12570 </desc>
12571 </param>
12572 </method>
12573
12574 <method name="enableMetrics">
12575 <desc>
12576 Turns on collecting specified base metrics. Returns an array of
12577 <link to="IPerformanceMetric" /> describing the metrics have been
12578 affected.
12579 <note>
12580 @c Null or empty metric name array means all metrics. @c Null or empty
12581 object array means all existing objects. If metric name array contains
12582 a single element and object array contains many, the single metric
12583 name array element is applied to each object array element to form
12584 metric/object pairs.
12585 </note>
12586 </desc>
12587 <param name="metricNames" type="wstring" dir="in" safearray="yes">
12588 <desc>
12589 Metric name filter. Comma-separated list of metrics with wildcard
12590 support.
12591 </desc>
12592 </param>
12593 <param name="objects" type="$unknown" dir="in" safearray="yes">
12594 <desc>
12595 Set of objects to enable metrics for.
12596 </desc>
12597 </param>
12598 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
12599 <desc>
12600 Array of metrics that have been modified by the call to this method.
12601 </desc>
12602 </param>
12603 </method>
12604
12605 <method name="disableMetrics">
12606 <desc>
12607 Turns off collecting specified base metrics. Returns an array of
12608 <link to="IPerformanceMetric" /> describing the metrics have been
12609 affected.
12610 <note>
12611 @c Null or empty metric name array means all metrics. @c Null or empty
12612 object array means all existing objects. If metric name array contains
12613 a single element and object array contains many, the single metric
12614 name array element is applied to each object array element to form
12615 metric/object pairs.
12616 </note>
12617 </desc>
12618 <param name="metricNames" type="wstring" dir="in" safearray="yes">
12619 <desc>
12620 Metric name filter. Comma-separated list of metrics with wildcard
12621 support.
12622 </desc>
12623 </param>
12624 <param name="objects" type="$unknown" dir="in" safearray="yes">
12625 <desc>
12626 Set of objects to disable metrics for.
12627 </desc>
12628 </param>
12629 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
12630 <desc>
12631 Array of metrics that have been modified by the call to this method.
12632 </desc>
12633 </param>
12634 </method>
12635
12636 <method name="queryMetricsData">
12637 <desc>
12638 Queries collected metrics data for a set of objects.
12639
12640 The data itself and related metric information are returned in seven
12641 parallel and one flattened array of arrays. Elements of
12642 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
12643 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
12644 the same index describe one set of values corresponding to a single
12645 metric.
12646
12647 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
12648 start and length of a sub-array is indicated by
12649 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
12650 value for metric <tt>metricNames[i]</tt> is at
12651 <tt>returnData[returnIndices[i]]</tt>.
12652
12653 <note>
12654 @c Null or empty metric name array means all metrics. @c Null or empty
12655 object array means all existing objects. If metric name array contains
12656 a single element and object array contains many, the single metric
12657 name array element is applied to each object array element to form
12658 metric/object pairs.
12659 </note>
12660 <note>
12661 Data collection continues behind the scenes after call to @c
12662 queryMetricsData. The return data can be seen as the snapshot of
12663 the current state at the time of @c queryMetricsData call. The
12664 internally kept metric values are not cleared by the call. This makes
12665 possible querying different subsets of metrics or aggregates with
12666 subsequent calls. If periodic querying is needed it is highly
12667 suggested to query the values with @c interval*count period to avoid
12668 confusion. This way a completely new set of data values will be
12669 provided by each query.
12670 </note>
12671 </desc>
12672 <param name="metricNames" type="wstring" dir="in" safearray="yes">
12673 <desc>
12674 Metric name filter. Comma-separated list of metrics with wildcard
12675 support.
12676 </desc>
12677 </param>
12678 <param name="objects" type="$unknown" dir="in" safearray="yes">
12679 <desc>
12680 Set of objects to query metrics for.
12681 </desc>
12682 </param>
12683 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
12684 <desc>
12685 Names of metrics returned in @c returnData.
12686 </desc>
12687 </param>
12688 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
12689 <desc>
12690 Objects associated with metrics returned in @c returnData.
12691 </desc>
12692 </param>
12693 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
12694 <desc>
12695 Units of measurement for each returned metric.
12696 </desc>
12697 </param>
12698 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
12699 <desc>
12700 Divisor that should be applied to return values in order to get
12701 floating point values. For example:
12702 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
12703 will retrieve the floating point value of i-th sample of the first
12704 metric.
12705 </desc>
12706 </param>
12707 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
12708 <desc>
12709 Sequence numbers of the first elements of value sequences of particular metrics
12710 returned in @c returnData. For aggregate metrics it is the sequence number of
12711 the sample the aggregate started calculation from.
12712 </desc>
12713 </param>
12714 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
12715 <desc>
12716 Indices of the first elements of value sequences of particular metrics
12717 returned in @c returnData.
12718 </desc>
12719 </param>
12720 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
12721 <desc>
12722 Lengths of value sequences of particular metrics.
12723 </desc>
12724 </param>
12725 <param name="returnData" type="long" dir="return" safearray="yes">
12726 <desc>
12727 Flattened array of all metric data containing sequences of values for
12728 each metric.
12729 </desc>
12730 </param>
12731 </method>
12732
12733 </interface>
12734
12735 <module name="VBoxSVC" context="LocalServer">
12736 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
12737 namespace="virtualbox.org">
12738 <interface name="IVirtualBox" default="yes"/>
12739 </class>
12740 </module>
12741
12742 <module name="VBoxC" context="InprocServer" threadingModel="Free">
12743 <class name="Session" uuid="3C02F46D-C9D2-4f11-A384-53F0CF917214"
12744 namespace="virtualbox.org">
12745 <interface name="ISession" default="yes"/>
12746 </class>
12747 </module>
12748
12749</library>
12750
12751</idl>
12752
12753<!-- 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