VirtualBox

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

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

Make SATA the default harddisk controller for Windows guests (Vista and up) and 2.6 Linux guests

  • Property svn:eol-style set to native
File size: 529.1 KB
Line 
1<?xml version="1.0" ?>
2
3<!--
4 * :tabSize=2:indentSize=2:noTabs=true:
5 * :folding=explicit:collapseFolds=1:
6 *
7 * Master declaration for VirtualBox's Main API, represented
8 * by COM/XPCOM and web service interfaces.
9 *
10 * From this document, the build system generates several files
11 * via XSLT that are then used during the build process.
12 *
13 * Below is the list of XSL templates that operate on this file and
14 * output files they generate. These XSL templates must be updated
15 * whenever the schema of this file changes:
16 *
17 * 1. src/VBox/Main/idl/midl.xsl =>
18 * out/<platform>/bin/sdk/idl/VirtualBox.idl
19 * (MS COM interface definition file for Main API)
20 *
21 * 2. src/VBox/Main/idl/xpidl.xsl =>
22 * out/<platform>/bin/sdk/idl/VirtualBox_XPCOM.idl
23 * (XPCOM interface definition file for Main API)
24 *
25 * 3. src/VBox/Main/idl/doxygen.xsl =>
26 * out/<platform>/obj/src/VBox/Main/VirtualBox.idl
27 * (pseudo-IDL for Doxygen to generate the official Main API
28 * documentation)
29 *
30 * 4. src/VBox/Main/webservice/*.xsl =>
31 * a bunch of WSDL and C++ files
32 * (VirtualBox web service sources and SOAP mappers;
33 * see src/VBox/Main/webservice/Makefile.kmk for details)
34 *
35 * 5. src/VBox/Frontends/VirtualBox/include/COMWrappers.xsl =>
36 * out/<platform>/obj/src/VBox/Frontends/VirtualBox/VirtualBox/include/COMWrappers.h
37 * (smart Qt-based C++ wrapper classes for COM interfaces
38 * of the Main API)
39 *
40 * 6. src/VBox/Installer/win32/VirtualBox_TypeLib.xsl =>
41 * out/<platform>/obj/src/VBox/Installer/win32/VirtualBox_TypeLib.wxi
42 * (Main API TypeLib block for the WiX installer)
43 *
44 * 7. src/VBox/Runtime/common/err/errmsgvboxcom.xsl =>
45 * out/<platform>/obj/Runtime/errmsgvboxcomdata.h
46 * (<result> extraction for the %Rhrc format specifier)
47 *
48 Copyright (C) 2006-2010 Oracle Corporation
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
59<idl>
60
61<desc>
62 Welcome to the <b>VirtualBox Main API documentation</b>. This documentation
63 describes the so-called <i>VirtualBox Main API</i> which comprises all public
64 COM interfaces and components provided by the VirtualBox server and by the
65 VirtualBox client library.
66
67 VirtualBox employs a client-server design, meaning that whenever any part of
68 VirtualBox is running -- be it the Qt GUI, the VBoxManage command-line
69 interface or any virtual machine --, a dedicated server process named
70 VBoxSVC runs in the background. This allows multiple processes working with
71 VirtualBox to cooperate without conflicts. These processes communicate to each
72 other using inter-process communication facilities provided by the COM
73 implementation of the host computer.
74
75 On Windows platforms, the VirtualBox Main API uses Microsoft COM, a native COM
76 implementation. On all other platforms, Mozilla XPCOM, an open-source COM
77 implementation, is used.
78
79 All the parts that a typical VirtualBox user interacts with (the Qt GUI,
80 the VBoxManage command-line interface and the VBoxVRDP server) are technically
81 front-ends to the Main API and only use the interfaces that are documented
82 in this Main API documentation. This ensures that, with any given release
83 version of VirtualBox, all capabilities of the product that could be useful
84 to an external client program are always exposed by way of this API.
85
86 The VirtualBox Main API (also called the <i>VirtualBox COM library</i>)
87 contains two public component classes:
88 <tt>%VirtualBox.VirtualBox</tt> and <tt>%VirtualBox.Session</tt>, which
89 implement IVirtualBox and ISession interfaces respectively. These two classes
90 are of supreme importance and will be needed in order for any front-end
91 program to do anything useful. It is recommended to read the documentation of
92 the mentioned interfaces first.
93
94 The <tt>%VirtualBox.VirtualBox</tt> class is a singleton. This means that
95 there can be only one object of this class on the local machine at any given
96 time. This object is a parent of many other objects in the VirtualBox COM
97 library and lives in the VBoxSVC process. In fact, when you create an instance
98 of the <tt>VirtualBox.VirtualBox</tt>, the COM subsystem checks if the VBoxSVC
99 process is already running, starts it if not, and returns you a reference to
100 the <tt>VirtualBox</tt> object created in this process. When the last reference
101 to this object is released, the VBoxSVC process ends (with a 5 second delay to
102 protect from too frequent restarts).
103
104 The <tt>%VirtualBox.Session</tt> class is a regular component. You can create
105 as many <tt>Session</tt> objects as you need but all of them will live in a
106 process which issues the object instantiation call. <tt>Session</tt> objects
107 represent virtual machine sessions which are used to configure virtual
108 machines and control their execution.
109</desc>
110
111<if target="midl">
112 <cpp line="enum {"/>
113 <cpp line=" kTypeLibraryMajorVersion = 1,"/>
114 <cpp line=" kTypeLibraryMinorVersion = 0"/>
115 <cpp line="};"/>
116</if>
117
118<if target="xpidl">
119 <!-- NS_IMPL_THREADSAFE_ISUPPORTSxx_CI macros are placed here, for convenience -->
120 <cpp>
121/* currently, nsISupportsImpl.h lacks the below-like macros */
122
123#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI NS_IMPL_QUERY_INTERFACE1_CI
124#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI NS_IMPL_QUERY_INTERFACE2_CI
125#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI NS_IMPL_QUERY_INTERFACE3_CI
126
127#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
128# define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
129 NS_IMPL_THREADSAFE_ADDREF(_class) \
130 NS_IMPL_THREADSAFE_RELEASE(_class) \
131 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI(_class, _interface) \
132 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
133#endif
134
135#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
136# define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
137 NS_IMPL_THREADSAFE_ADDREF(_class) \
138 NS_IMPL_THREADSAFE_RELEASE(_class) \
139 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
140 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
141#endif
142
143#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_CI
144# define NS_IMPL_THREADSAFE_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
145 NS_IMPL_THREADSAFE_ADDREF(_class) \
146 NS_IMPL_THREADSAFE_RELEASE(_class) \
147 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
148 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
149#endif
150
151#ifndef NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
152# define NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
153 NS_INTERFACE_MAP_BEGIN(_class) \
154 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
155 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
156 NS_IMPL_QUERY_CLASSINFO(_class) \
157 NS_INTERFACE_MAP_END
158#endif
159
160#ifndef NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
161# define NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
162 _i2, _ic2) \
163 NS_INTERFACE_MAP_BEGIN(_class) \
164 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
165 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
166 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
167 NS_IMPL_QUERY_CLASSINFO(_class) \
168 NS_INTERFACE_MAP_END
169#endif
170
171#ifndef NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
172# define NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
173 _i2, _ic2, _i3, _ic3) \
174 NS_INTERFACE_MAP_BEGIN(_class) \
175 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
176 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
177 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i3, _ic3) \
178 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
179 NS_IMPL_QUERY_CLASSINFO(_class) \
180 NS_INTERFACE_MAP_END
181#endif
182
183#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
184#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
185#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
186
187#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI
188# define NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI(_class, _i1, _ic1) \
189 NS_IMPL_THREADSAFE_ADDREF(_class) \
190 NS_IMPL_THREADSAFE_RELEASE(_class) \
191 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
192 NS_IMPL_CI_INTERFACE_GETTER1(_class, _i1)
193#endif
194
195#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI
196# define NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI(_class, _i1, _ic1, \
197 _i2, _ic2) \
198 NS_IMPL_THREADSAFE_ADDREF(_class) \
199 NS_IMPL_THREADSAFE_RELEASE(_class) \
200 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
201 _i2, _ic2) \
202 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
203#endif
204
205#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI
206# define NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI(_class, _i1, _ic1, \
207 _i2, _ic2, _i3, _ic3) \
208 NS_IMPL_THREADSAFE_ADDREF(_class) \
209 NS_IMPL_THREADSAFE_RELEASE(_class) \
210 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
211 _i2, _ic2, _i3, _ic3) \
212 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
213#endif
214
215 </cpp>
216</if>
217
218<library
219 name="VirtualBox"
220 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
221 version="1.3"
222 desc="VirtualBox Type Library"
223 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
224 supportsErrorInfo="yes"
225>
226
227
228 <!--
229 // COM result codes for VirtualBox
230 /////////////////////////////////////////////////////////////////////////
231 -->
232
233 <descGroup id="VirtualBox_COM_result_codes" title="VirtualBox COM result codes">
234 <desc>
235 This section describes all VirtualBox-specific COM result codes that may
236 be returned by methods of VirtualBox COM interfaces in addition to
237 standard COM result codes.
238
239 Note that along with the result code, every VirtualBox method returns
240 extended error information through the IVirtualBoxErrorInfo interface on
241 failure. This interface is a preferred way to present the error to the end
242 user because it contains a human readable description of the error. Raw
243 result codes, both standard and described in this section, are intended to
244 be used by programs to analyze the reason of a failure and select an
245 appropriate course of action without involving the end user (for example,
246 retry the operation later or make a different call).
247
248 The standard COM result codes that may originate from our methods include:
249
250 <table>
251 <tr><td>E_INVALIDARG</td>
252 <td>
253 Returned when the value of the method's argument is not within the range
254 of valid values. This should not be confused with situations when the
255 value is within the range but simply doesn't suit the current object
256 state and there is a possibility that it will be accepted later (in such
257 cases VirtualBox-specific codes are returned, for example,
258 <link to="VBOX_E_OBJECT_NOT_FOUND"/>).
259 </td>
260 </tr>
261 <tr><td>E_POINTER</td>
262 <td>
263 Returned if a memory pointer for the output argument is invalid (for
264 example, @c null). Note that when pointers representing input
265 arguments (such as strings) are invalid, E_INVALIDARG is returned.
266 </td>
267 </tr>
268 <tr><td>E_ACCESSDENIED</td>
269 <td>
270 Returned when the called object is not ready. Since the lifetime of a
271 public COM object cannot be fully controlled by the implementation,
272 VirtualBox maintains the readiness state for all objects it creates and
273 returns this code in response to any method call on the object that was
274 deactivated by VirtualBox and is not functioning any more.
275 </td>
276 </tr>
277 <tr><td>E_OUTOFMEMORY</td>
278 <td>
279 Returned when a memory allocation operation fails.
280 </td>
281 </tr>
282 </table>
283 </desc>
284 </descGroup>
285
286 <!--
287 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
288 everything in <result>/<desc> after (and including) the first dot, so express
289 the matter of the error code in the first sentence and keep it short.
290 -->
291
292 <result name="VBOX_E_OBJECT_NOT_FOUND" value="0x80BB0001">
293 <desc>
294 Object corresponding to the supplied arguments does not exist.
295 </desc>
296 </result>
297
298 <result name="VBOX_E_INVALID_VM_STATE" value="0x80BB0002">
299 <desc>
300 Current virtual machine state prevents the operation.
301 </desc>
302 </result>
303
304 <result name="VBOX_E_VM_ERROR" value="0x80BB0003">
305 <desc>
306 Virtual machine error occurred attempting the operation.
307 </desc>
308 </result>
309
310 <result name="VBOX_E_FILE_ERROR" value="0x80BB0004">
311 <desc>
312 File not accessible or erroneous file contents.
313 </desc>
314 </result>
315
316 <result name="VBOX_E_IPRT_ERROR" value="0x80BB0005">
317 <desc>
318 Runtime subsystem error.
319 </desc>
320 </result>
321
322 <result name="VBOX_E_PDM_ERROR" value="0x80BB0006">
323 <desc>
324 Pluggable Device Manager error.
325 </desc>
326 </result>
327
328 <result name="VBOX_E_INVALID_OBJECT_STATE" value="0x80BB0007">
329 <desc>
330 Current object state prohibits operation.
331 </desc>
332 </result>
333
334 <result name="VBOX_E_HOST_ERROR" value="0x80BB0008">
335 <desc>
336 Host operating system related error.
337 </desc>
338 </result>
339
340 <result name="VBOX_E_NOT_SUPPORTED" value="0x80BB0009">
341 <desc>
342 Requested operation is not supported.
343 </desc>
344 </result>
345
346 <result name="VBOX_E_XML_ERROR" value="0x80BB000A">
347 <desc>
348 Invalid XML found.
349 </desc>
350 </result>
351
352 <result name="VBOX_E_INVALID_SESSION_STATE" value="0x80BB000B">
353 <desc>
354 Current session state prohibits operation.
355 </desc>
356 </result>
357
358 <result name="VBOX_E_OBJECT_IN_USE" value="0x80BB000C">
359 <desc>
360 Object being in use prohibits operation.
361 </desc>
362 </result>
363
364 <!--
365 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
366 everything in <result>/<desc> after (and including) the first dot, so express
367 the matter of the error code in the first sentence and keep it short.
368 -->
369
370 <descGroup/>
371
372 <!--
373 // all common enums
374 /////////////////////////////////////////////////////////////////////////
375 -->
376
377 <enum name="SettingsVersion"
378 uuid="52bd6f5f-1adb-4493-975d-581a9c4b803f"
379 >
380 <desc>Settings version of VirtualBox settings files. This is written to
381 the "version" attribute of the root "VirtualBox" element in the settings
382 file XML and indicates which VirtualBox version wrote the file.
383 </desc>
384
385 <const name="Null" value="0">
386 <desc>Null value, indicates invalid version.</desc>
387 </const>
388 <const name="v1_0" value="1">
389 <desc>Legacy settings version, not currently supported.</desc>
390 </const>
391 <const name="v1_1" value="2">
392 <desc>Legacy settings version, not currently supported.</desc>
393 </const>
394 <const name="v1_2" value="3">
395 <desc>Legacy settings version, not currently supported.</desc>
396 </const>
397 <const name="v1_3pre" value="4">
398 <desc>Legacy settings version, not currently supported.</desc>
399 </const>
400 <const name="v1_3" value="5">
401 <desc>Settings version "1.3", written by VirtualBox 2.0.12.</desc>
402 <!--
403 Machine XML: Capitalization of Uart, Lpt elements and many attributes changed.
404 -->
405 </const>
406 <const name="v1_4" value="6">
407 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
408 <!--
409 VirtualBox.xml: big DiskRegistry -> MediaRegistry revamp, various HardDisk types merged
410 (was VirtualDiskImage, VMDKImage, VHDImage, ISCSIHardDisk, CustomHardDisk, DiffHardDisk)
411 -->
412 </const>
413 <const name="v1_5" value="7">
414 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
415 <!-- 2008-09-04: 2.0.0 released
416 2008-11-20: settings version 1.5 introduced
417 2008-12-17: 2.1.0 released
418 Machine changes:
419 guest OS identifiers changed;
420 Machine/Hardware/Display/MonitorCount renamed to monitorCount;
421 Machine/Hardware/Display/Accelerate3D renamed to accelerate3D;
422 Machine/Hardware/CPU/CPUCount/@count changed to CPU/@count
423 -->
424 </const>
425 <const name="v1_6" value="8">
426 <desc>Settings version "1.6", written by VirtualBox 2.1.4 (at least).</desc>
427 <!-- 2008-12-17: 2.1.0 released
428 2008-12-19: settings version 1.6 introduced (is in 2.1 branch)
429 2009-04-08: 2.2.0 released
430 Machine changes: remove all Machine/Hardware/Network/Adapter/HostInterface[@TAPSetup or @TAPTerminate]/ attributes (done)
431 -->
432 </const>
433 <const name="v1_7" value="9">
434 <desc>Settings version "1.7", written by VirtualBox 2.2.x and 3.0.x.</desc>
435 <!-- 2008-12-17: 2.1.0 released
436 2009-03-11: settings version 1.7 introduced (is in 2.2 branch)
437 2009-04-08: 2.2.0 released
438 VirtualBox.xml additions: NetserviceRegistry with DHCPServers (done)
439 Machine changes: HardDiskAttachments is now StorageControllers (done)
440 -->
441 </const>
442 <const name="v1_8" value="10">
443 <desc>Intermediate settings version "1.8", understood by VirtualBox 3.1.x.</desc>
444 <!-- Machine additions: Display/@accelerate2DVideo (done)
445 -->
446 </const>
447 <const name="v1_9" value="11">
448 <desc>Settings version "1.9", written by VirtualBox 3.1.x.</desc>
449 <!-- The big storage controller / DVD / Floppy rework (done)
450 -->
451 </const>
452 <const name="v1_10" value="12">
453 <desc>Settings version "1.10", written by VirtualBox 3.2.x.</desc>
454 <!-- Machine changes: RTC localOrUTC (done)
455 CPU hot-plug support
456 -->
457 </const>
458 <const name="Future" value="13">
459 <desc>Settings version greater than "1.10", written by a future VirtualBox version.</desc>
460 </const>
461 </enum>
462
463 <enum
464 name="AccessMode"
465 uuid="1da0007c-ddf7-4be8-bcac-d84a1558785f"
466 >
467 <desc>
468 Access mode for opening files.
469 </desc>
470
471 <const name="ReadOnly" value="1"/>
472 <const name="ReadWrite" value="2"/>
473 </enum>
474
475 <enum
476 name="MachineState"
477 uuid="36518cf6-cdf0-4d0d-ad2a-5ee9c60c7494"
478 >
479 <desc>
480 Virtual machine execution state.
481
482 This enumeration represents possible values of the <link
483 to="IMachine::state"/> attribute.
484
485 Below is the basic virtual machine state diagram. It shows how the state
486 changes during virtual machine execution. The text in square braces shows
487 a method of the IConsole interface that performs the given state
488 transition.
489
490 <pre>
491 +---------[powerDown()] &lt;- Stuck &lt;--[failure]-+
492 V |
493 +-&gt; PoweredOff --+--&gt;[powerUp()]--&gt; Starting --+ | +-----[resume()]-----+
494 | | | | V |
495 | Aborted -----+ +--&gt; Running --[pause()]--&gt; Paused
496 | | ^ | ^ |
497 | Saved -----------[powerUp()]--&gt; Restoring -+ | | | |
498 | ^ | | | |
499 | | +-----------------------------------------+-|-------------------+ +
500 | | | | |
501 | | +-- Saving &lt;--------[takeSnapshot()]&lt;-------+---------------------+
502 | | | |
503 | +-------- Saving &lt;--------[saveState()]&lt;----------+---------------------+
504 | | |
505 +-------------- Stopping -------[powerDown()]&lt;----------+---------------------+
506 </pre>
507
508 Note that states to the right from PoweredOff, Aborted and Saved in the
509 above diagram are called <i>online VM states</i>. These states
510 represent the virtual machine which is being executed in a dedicated
511 process (usually with a GUI window attached to it where you can see the
512 activity of the virtual machine and interact with it). There are two
513 special pseudo-states, FirstOnline and LastOnline, that can be used in
514 relational expressions to detect if the given machine state is online or
515 not:
516
517 <pre>
518 if (machine.GetState() &gt;= MachineState_FirstOnline &amp;&amp;
519 machine.GetState() &lt;= MachineState_LastOnline)
520 {
521 ...the machine is being executed...
522 }
523 </pre>
524
525 When the virtual machine is in one of the online VM states (that is, being
526 executed), only a few machine settings can be modified. Methods working
527 with such settings contain an explicit note about that. An attempt to
528 change any oter setting or perform a modifying operation during this time
529 will result in the <link to="VBOX_E_INVALID_VM_STATE"/> error.
530
531 All online states except Running, Paused and Stuck are transitional: they
532 represent temporary conditions of the virtual machine that will last as
533 long as the operation that initiated such a condition.
534
535 The Stuck state is a special case. It means that execution of the machine
536 has reached the "Guru Meditation" condition. This condition indicates an
537 internal VMM (virtual machine manager) failure which may happen as a
538 result of either an unhandled low-level virtual hardware exception or one
539 of the recompiler exceptions (such as the <i>too-many-traps</i>
540 condition).
541
542 Note also that any online VM state may transit to the Aborted state. This
543 happens if the process that is executing the virtual machine terminates
544 unexpectedly (for example, crashes). Other than that, the Aborted state is
545 equivalent to PoweredOff.
546
547 There are also a few additional state diagrams that do not deal with
548 virtual machine execution and therefore are shown separately. The states
549 shown on these diagrams are called <i>offline VM states</i> (this includes
550 PoweredOff, Aborted and Saved too).
551
552 The first diagram shows what happens when a lengthy setup operation is
553 being executed (such as <link to="IMachine::attachDevice"/>).
554
555 <pre>
556 +----------------------------------(same state as before the call)------+
557 | |
558 +-&gt; PoweredOff --+ |
559 | | |
560 |-&gt; Aborted -----+--&gt;[lengthy VM configuration call] --&gt; SettingUp -----+
561 | |
562 +-&gt; Saved -------+
563 </pre>
564
565 The next two diagrams demonstrate the process of taking a snapshot of a
566 powered off virtual machine, restoring the state to that as of a snapshot
567 or deleting a snapshot, respectively.
568
569 <pre>
570 +----------------------------------(same state as before the call)------+
571 | |
572 +-&gt; PoweredOff --+ |
573 | +--&gt;[takeSnapshot()] -------------------&gt; Saving ------+
574 +-&gt; Aborted -----+
575
576 +-&gt; PoweredOff --+
577 | |
578 | Aborted -----+--&gt;[restoreSnapshot() ]-------&gt; RestoringSnapshot -+
579 | | [deleteSnapshot() ]-------&gt; DeletingSnapshot --+
580 +-&gt; Saved -------+ |
581 | |
582 +---(Saved if restored from an online snapshot, PoweredOff otherwise)---+
583 </pre>
584
585 Note that the Saving state is present in both the offline state group and
586 online state group. Currently, the only way to determine what group is
587 assumed in a particular case is to remember the previous machine state: if
588 it was Running or Paused, then Saving is an online state, otherwise it is
589 an offline state. This inconsistency may be removed in one of the future
590 versions of VirtualBox by adding a new state.
591
592 <note internal="yes">
593 For whoever decides to touch this enum: In order to keep the
594 comparisons involving FirstOnline and LastOnline pseudo-states valid,
595 the numeric values of these states must be correspondingly updated if
596 needed: for any online VM state, the condition
597 <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
598 @c true. The same relates to transient states for which
599 the condition <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
600 @c true.
601 </note>
602 </desc>
603
604 <const name="Null" value="0">
605 <desc>Null value (never used by the API).</desc>
606 </const>
607 <const name="PoweredOff" value="1">
608 <desc>
609 The machine is not running and has no saved execution state; it has
610 either never been started or been shut down successfully.
611 </desc>
612 </const>
613 <const name="Saved" value="2">
614 <desc>
615 The machine is not currently running, but the execution state of the machine
616 has been saved to an external file when it was running, from where
617 it can be resumed.
618 </desc>
619 </const>
620 <const name="Teleported" value="3">
621 <desc>
622 The machine was teleported to a different host (or process) and then
623 powered off. Take care when powering it on again may corrupt resources
624 it shares with the teleportation target (e.g. disk and network).
625 </desc>
626 </const>
627 <const name="Aborted" value="4">
628 <desc>
629 The process running the machine has terminated abnormally. This may
630 indicate a crash of the VM process in host execution context, or
631 the VM process has been terminated externally.
632 </desc>
633 </const>
634 <const name="Running" value="5">
635 <desc>
636 The machine is currently being executed.
637 <note internal="yes">
638 For whoever decides to touch this enum: In order to keep the
639 comparisons in the old source code valid, this state must immediately
640 precede the Paused state.
641 TODO: Lift this spectacularly wonderful restriction.
642 </note>
643 </desc>
644 </const>
645 <const name="Paused" value="6">
646 <desc>
647 Execution of the machine has been paused.
648 <note internal="yes">
649 For whoever decides to touch this enum: In order to keep the
650 comparisons in the old source code valid, this state must immediately
651 follow the Running state.
652 TODO: Lift this spectacularly wonderful restriction.
653 </note>
654 </desc>
655 </const>
656 <const name="Stuck" value="7">
657 <desc>
658 Execution of the machine has reached the "Guru Meditation"
659 condition. This indicates a severe error in the hypervisor itself.
660 <note internal="yes">
661 bird: Why this uncool name? Could we rename it to "GuruMeditation" or
662 "Guru", perhaps? Or are there some other VMM states that are
663 intended to be lumped in here as well?
664 </note>
665 </desc>
666 </const>
667 <const name="Teleporting" value="8">
668 <desc>
669 The machine is about to be teleported to a different host or process.
670 It is possible to pause a machine in this state, but it will go to the
671 <link to="MachineState::PausedTeleporting"/> state and it will not be
672 possible to resume it again unless the teleportation fails.
673 </desc>
674 </const>
675 <const name="LiveSnapshotting" value="9">
676 <desc>
677 A live snapshot is being taken. The machine is running normally, but
678 some of the runtime configuration options are inaccessible. Also, if
679 paused while in this state it will transition to
680 <link to="MachineState::Saving"/> and it will not be resume the
681 execution until the snapshot operation has completed.
682 </desc>
683 </const>
684 <const name="Starting" value="10">
685 <desc>
686 Machine is being started after powering it on from a
687 zero execution state.
688 </desc>
689 </const>
690 <const name="Stopping" value="11">
691 <desc>
692 Machine is being normally stopped powering it off, or after the guest OS
693 has initiated a shutdown sequence.
694 </desc>
695 </const>
696 <const name="Saving" value="12">
697 <desc>
698 Machine is saving its execution state to a file, or an online
699 snapshot of the machine is being taken.
700 </desc>
701 </const>
702 <const name="Restoring" value="13">
703 <desc>
704 Execution state of the machine is being restored from a file
705 after powering it on from the saved execution state.
706 </desc>
707 </const>
708 <const name="TeleportingPausedVM" value="14">
709 <desc>
710 The machine is being teleported to another host or process, but it is
711 not running. This is the paused variant of the
712 <link to="MachineState::Teleporting"/> state.
713 </desc>
714 </const>
715 <const name="TeleportingIn" value="15">
716 <desc>
717 Teleporting the machine state in from another host or process.
718 </desc>
719 </const>
720 <const name="RestoringSnapshot" value="16">
721 <desc>
722 A machine snapshot is being restored; this typically does not take long.
723 </desc>
724 </const>
725 <const name="DeletingSnapshot" value="17">
726 <desc>
727 A machine snapshot is being deleted; this can take a long time since this
728 may require merging differencing media.
729 </desc>
730 </const>
731 <const name="SettingUp" value="18">
732 <desc>
733 Lengthy setup operation is in progress.
734 </desc>
735 </const>
736
737 <const name="FirstOnline" value="5" wsmap="suppress"> <!-- Running -->
738 <desc>
739 Pseudo-state: first online state (for use in relational expressions).
740 </desc>
741 </const>
742 <const name="LastOnline" value="15" wsmap="suppress"> <!-- TeleportingIn -->
743 <desc>
744 Pseudo-state: last online state (for use in relational expressions).
745 </desc>
746 </const>
747
748 <const name="FirstTransient" value="8" wsmap="suppress"> <!-- Teleporting -->
749 <desc>
750 Pseudo-state: first transient state (for use in relational expressions).
751 </desc>
752 </const>
753 <const name="LastTransient" value="18" wsmap="suppress"> <!-- SettingUp -->
754 <desc>
755 Pseudo-state: last transient state (for use in relational expressions).
756 </desc>
757 </const>
758
759 </enum>
760
761 <enum
762 name="SessionState"
763 uuid="cf2700c0-ea4b-47ae-9725-7810114b94d8"
764 >
765 <desc>
766 Session state. This enumeration represents possible values of
767 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
768 attributes. See individual enumerator descriptions for the meaning for
769 every value.
770 </desc>
771
772 <const name="Null" value="0">
773 <desc>Null value (never used by the API).</desc>
774 </const>
775 <const name="Closed" value="1">
776 <desc>
777 The machine has no open sessions (<link to="IMachine::sessionState"/>);
778 the session is closed (<link to="ISession::state"/>)
779 </desc>
780 </const>
781 <const name="Open" value="2">
782 <desc>
783 The machine has an open direct session (<link to="IMachine::sessionState"/>);
784 the session is open (<link to="ISession::state"/>)
785 </desc>
786 </const>
787 <const name="Spawning" value="3">
788 <desc>
789 A new (direct) session is being opened for the machine as a result of
790 <link to="IVirtualBox::openRemoteSession"/> call
791 (<link to="IMachine::sessionState"/> or <link to="ISession::state"/>).
792 This state also occurs as a short transient state when a new direct
793 session is opened by calling <link to="IVirtualBox::openSession"/>.
794 </desc>
795 </const>
796 <const name="Closing" value="4">
797 <desc>
798 The direct session is being closed (<link to="IMachine::sessionState"/>);
799 the session is being closed (<link to="ISession::state"/>)
800 </desc>
801 </const>
802 </enum>
803
804 <enum
805 name="CPUPropertyType"
806 uuid="24d356a6-2f45-4abd-b977-1cbe9c4701f5"
807 >
808 <desc>
809 Virtual CPU property type. This enumeration represents possible values of the
810 IMachine get- and setCPUProperty methods.
811 </desc>
812 <const name="Null" value="0">
813 <desc>Null value (never used by the API).</desc>
814 </const>
815 <const name="PAE" value="1">
816 <desc>
817 This setting determines whether VirtualBox will expose the Physical Address
818 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
819 is not available, it will not be reported.
820 </desc>
821 </const>
822 <const name="Synthetic" value="2">
823 <desc>
824 This setting determines whether VirtualBox will expose a synthetic CPU to the guest to allow
825 teleporting between host systems that differ significantly.
826 </desc>
827 </const>
828 </enum>
829
830
831 <enum
832 name="HWVirtExPropertyType"
833 uuid="ce81dfdd-d2b8-4a90-bbea-40ee8b7ffcee"
834 >
835 <desc>
836 Hardware virtualization property type. This enumeration represents possible values
837 for the <link to="IMachine::getHWVirtExProperty"/> and
838 <link to="IMachine::setHWVirtExProperty"/> methods.
839 </desc>
840 <const name="Null" value="0">
841 <desc>Null value (never used by the API).</desc>
842 </const>
843 <const name="Enabled" value="1">
844 <desc>
845 Whether hardware virtualization (VT-x/AMD-V) is enabled at all. If
846 such extensions are not available, they will not be used.
847 </desc>
848 </const>
849 <const name="Exclusive" value="2">
850 <desc>
851 Whether hardware virtualization is used exclusively by VirtualBox. When enabled,
852 VirtualBox assumes it can acquire full and exclusive access to the VT-x or AMD-V
853 feature of the host. To share these with other hypervisors, you must disable this property.
854 </desc>
855 </const>
856 <const name="VPID" value="3">
857 <desc>
858 Whether VT-x VPID is enabled. If this extension is not available, it will not be used.
859 </desc>
860 </const>
861 <const name="NestedPaging" value="4">
862 <desc>
863 Whether Nested Paging is enabled. If this extension is not available, it will not be used.
864 </desc>
865 </const>
866 <const name="LargePages" value="5">
867 <desc>
868 Whether large page allocation is enabled; requires nested paging and a 64 bits host.
869 </desc>
870 </const>
871 </enum>
872
873 <enum
874 name="SessionType"
875 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
876 >
877 <desc>
878 Session type. This enumeration represents possible values of the
879 <link to="ISession::type"/> attribute.
880 </desc>
881
882 <const name="Null" value="0">
883 <desc>Null value (never used by the API).</desc>
884 </const>
885 <const name="Direct" value="1">
886 <desc>
887 Direct session
888 (opened by <link to="IVirtualBox::openSession"/>)
889 </desc>
890 </const>
891 <const name="Remote" value="2">
892 <desc>
893 Remote session
894 (opened by <link to="IVirtualBox::openRemoteSession"/>)
895 </desc>
896 </const>
897 <const name="Existing" value="3">
898 <desc>
899 Existing session
900 (opened by <link to="IVirtualBox::openExistingSession"/>)
901 </desc>
902 </const>
903 </enum>
904
905 <enum
906 name="DeviceType"
907 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
908 >
909 <desc>
910 Device type.
911 </desc>
912 <const name="Null" value="0">
913 <desc>
914 Null value, may also mean "no device" (not allowed for
915 <link to="IConsole::getDeviceActivity"/>).
916 </desc>
917 </const>
918 <const name="Floppy" value="1">
919 <desc>Floppy device.</desc>
920 </const>
921 <const name="DVD" value="2">
922 <desc>CD/DVD-ROM device.</desc>
923 </const>
924 <const name="HardDisk" value="3">
925 <desc>Hard disk device.</desc>
926 </const>
927 <const name="Network" value="4">
928 <desc>Network device.</desc>
929 </const>
930 <const name="USB" value="5">
931 <desc>USB device.</desc>
932 </const>
933 <const name="SharedFolder" value="6">
934 <desc>Shared folder device.</desc>
935 </const>
936 </enum>
937
938 <enum
939 name="DeviceActivity"
940 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
941 >
942 <desc>
943 Device activity for <link to="IConsole::getDeviceActivity"/>.
944 </desc>
945
946 <const name="Null" value="0"/>
947 <const name="Idle" value="1"/>
948 <const name="Reading" value="2"/>
949 <const name="Writing" value="3"/>
950 </enum>
951
952 <enum
953 name="ClipboardMode"
954 uuid="33364716-4008-4701-8f14-be0fa3d62950"
955 >
956 <desc>
957 Host-Guest clipboard interchange mode.
958 </desc>
959
960 <const name="Disabled" value="0"/>
961 <const name="HostToGuest" value="1"/>
962 <const name="GuestToHost" value="2"/>
963 <const name="Bidirectional" value="3"/>
964 </enum>
965
966 <enum
967 name="Scope"
968 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
969 >
970 <desc>
971 Scope of the operation.
972
973 A generic enumeration used in various methods to define the action or
974 argument scope.
975 </desc>
976
977 <const name="Global" value="0"/>
978 <const name="Machine" value="1"/>
979 <const name="Session" value="2"/>
980 </enum>
981
982 <enum
983 name="BIOSBootMenuMode"
984 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
985 >
986 <desc>
987 BIOS boot menu mode.
988 </desc>
989
990 <const name="Disabled" value="0"/>
991 <const name="MenuOnly" value="1"/>
992 <const name="MessageAndMenu" value="2"/>
993 </enum>
994
995 <enum
996 name="ProcessorFeature"
997 uuid="64c38e6b-8bcf-45ad-ac03-9b406287c5bf"
998 >
999 <desc>
1000 CPU features.
1001 </desc>
1002
1003 <const name="HWVirtEx" value="0"/>
1004 <const name="PAE" value="1"/>
1005 <const name="LongMode" value="2"/>
1006 <const name="NestedPaging" value="3"/>
1007 </enum>
1008
1009 <enum
1010 name="FirmwareType"
1011 uuid="b903f264-c230-483e-ac74-2b37ce60d371"
1012 >
1013 <desc>
1014 Firmware type.
1015 </desc>
1016 <const name="BIOS" value="1">
1017 <desc>BIOS Firmware.</desc>
1018 </const>
1019 <const name="EFI" value="2">
1020 <desc>EFI Firmware, bitness detetced basing on OS type.</desc>
1021 </const>
1022 <const name="EFI32" value="3">
1023 <desc>Efi firmware, 32-bit.</desc>
1024 </const>
1025 <const name="EFI64" value="4">
1026 <desc>Efi firmware, 64-bit.</desc>
1027 </const>
1028 <const name="EFIDUAL" value="5">
1029 <desc>Efi firmware, combined 32 and 64-bit.</desc>
1030 </const>
1031 </enum>
1032
1033 <enum
1034 name="PointingHidType"
1035 uuid="0d3c17a2-821a-4b2e-ae41-890c6c60aa97"
1036 >
1037 <desc>
1038 Type of pointing device used in a virtual machine.
1039 </desc>
1040 <const name="None" value="1">
1041 <desc>No mouse.</desc>
1042 </const>
1043 <const name="PS2Mouse" value="2">
1044 <desc>PS/2 auxillary device, a.k.a. mouse.</desc>
1045 </const>
1046 <const name="USBMouse" value="3">
1047 <desc>USB mouse (relative pointer).</desc>
1048 </const>
1049 <const name="USBTablet" value="4">
1050 <desc>USB tablet (absolute pointer).</desc>
1051 </const>
1052 <const name="ComboMouse" value="5">
1053 <desc>Combined device, working as PS/2 or USB mouse, depending on guest behavior.
1054 Using of such device can have negative performance implications. </desc>
1055 </const>
1056 </enum>
1057
1058 <enum
1059 name="KeyboardHidType"
1060 uuid="5a5b0996-3a3e-44bb-9019-56979812cbcc"
1061 >
1062 <desc>
1063 Type of keyboard device used in a virtual machine.
1064 </desc>
1065 <const name="None" value="1">
1066 <desc>No keyboard.</desc>
1067 </const>
1068 <const name="PS2Keyboard" value="2">
1069 <desc>PS/2 keyboard.</desc>
1070 </const>
1071 <const name="USBKeyboard" value="3">
1072 <desc>USB keyboard.</desc>
1073 </const>
1074 <const name="ComboKeyboard" value="4">
1075 <desc>Combined device, working as PS/2 or USB keyboard, depending on guest behavior.
1076 Using of such device can have negative performance implications. </desc>
1077 </const>
1078 </enum>
1079
1080 <enum
1081 name="IoMgrType"
1082 uuid="35567419-4d2a-4256-a74e-efcae33493a2"
1083 >
1084 <desc>
1085 Type of the I/O manager used for the image files in a virtual machine.
1086 </desc>
1087 <const name="Simple" value="1">
1088 <desc>Simple manager. Normally only used if the default one runs into an
1089 error. </desc>
1090 </const>
1091 <const name="Async" value="2">
1092 <desc>Asynchronous manager using the async I/O API on the host if present.
1093 This is the default manager.</desc>
1094 </const>
1095 </enum>
1096
1097 <enum
1098 name="IoBackendType"
1099 uuid="2a7e16d1-4e6b-4d5d-b0c9-b9bbe6c5b2ad"
1100 >
1101 <desc>
1102 Type of I/O backend used for the image files in a virtual machine.
1103 </desc>
1104 <const name="Buffered" value="1">
1105 <desc>Image files will use the host cache if possible.
1106 This type does not work with the Async I/O manager on Linux hosts.
1107 Default on all hosts except Linux.</desc>
1108 </const>
1109 <const name="Unbuffered" value="2">
1110 <desc>Image files will not use the host cache.
1111 This should be used on OS X and Linux hosts if a high I/O load is expected
1112 or many virtual machines are running to prevent I/O cache
1113 related hangs. Default on Linux hosts.</desc>
1114 </const>
1115 </enum>
1116
1117 <!--
1118 // IVirtualBoxErrorInfo
1119 /////////////////////////////////////////////////////////////////////////
1120 -->
1121
1122 <interface
1123 name="IVirtualBoxErrorInfo" extends="$errorinfo"
1124 uuid="4b86d186-407e-4f9e-8be8-e50061be8725"
1125 supportsErrorInfo="no"
1126 wsmap="managed"
1127 >
1128 <desc>
1129 The IVirtualBoxErrorInfo interface represents extended error information.
1130
1131 Extended error information can be set by VirtualBox components after
1132 unsuccessful or partially successful method invocation. This information
1133 can be retrieved by the calling party as an IVirtualBoxErrorInfo object
1134 and then shown to the client in addition to the plain 32-bit result code.
1135
1136 In MS COM, this interface extends the IErrorInfo interface,
1137 in XPCOM, it extends the nsIException interface. In both cases,
1138 it provides a set of common attributes to retrieve error
1139 information.
1140
1141 Sometimes invocation of some component's method may involve methods of
1142 other components that may also fail (independently of this method's
1143 failure), or a series of non-fatal errors may precede a fatal error that
1144 causes method failure. In cases like that, it may be desirable to preserve
1145 information about all errors happened during method invocation and deliver
1146 it to the caller. The <link to="#next"/> attribute is intended
1147 specifically for this purpose and allows to represent a chain of errors
1148 through a single IVirtualBoxErrorInfo object set after method invocation.
1149
1150 Note that errors are stored to a chain in the reverse order, i.e. the
1151 initial error object you query right after method invocation is the last
1152 error set by the callee, the object it points to in the @a next attribute
1153 is the previous error and so on, up to the first error (which is the last
1154 in the chain).
1155 </desc>
1156
1157 <attribute name="resultCode" type="long" readonly="yes">
1158 <desc>
1159 Result code of the error.
1160 Usually, it will be the same as the result code returned
1161 by the method that provided this error information, but not
1162 always. For example, on Win32, CoCreateInstance() will most
1163 likely return E_NOINTERFACE upon unsuccessful component
1164 instantiation attempt, but not the value the component factory
1165 returned. Value is typed 'long', not 'result',
1166 to make interface usable from scripting languages.
1167 <note>
1168 In MS COM, there is no equivalent.
1169 In XPCOM, it is the same as nsIException::result.
1170 </note>
1171 </desc>
1172 </attribute>
1173
1174 <attribute name="interfaceID" type="uuid" mod="string" readonly="yes">
1175 <desc>
1176 UUID of the interface that defined the error.
1177 <note>
1178 In MS COM, it is the same as IErrorInfo::GetGUID, except for the
1179 data type.
1180 In XPCOM, there is no equivalent.
1181 </note>
1182 </desc>
1183 </attribute>
1184
1185 <attribute name="component" type="wstring" readonly="yes">
1186 <desc>
1187 Name of the component that generated the error.
1188 <note>
1189 In MS COM, it is the same as IErrorInfo::GetSource.
1190 In XPCOM, there is no equivalent.
1191 </note>
1192 </desc>
1193 </attribute>
1194
1195 <attribute name="text" type="wstring" readonly="yes">
1196 <desc>
1197 Text description of the error.
1198 <note>
1199 In MS COM, it is the same as IErrorInfo::GetDescription.
1200 In XPCOM, it is the same as nsIException::message.
1201 </note>
1202 </desc>
1203 </attribute>
1204
1205 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
1206 <desc>
1207 Next error object if there is any, or @c null otherwise.
1208 <note>
1209 In MS COM, there is no equivalent.
1210 In XPCOM, it is the same as nsIException::inner.
1211 </note>
1212 </desc>
1213 </attribute>
1214
1215 </interface>
1216
1217 <interface
1218 name="ILocalOwner" extends="$unknown"
1219 uuid="308FF42A-DC45-49D4-A950-B1EEE5E00BB5" wsmap="suppress"
1220 >
1221 <desc>
1222 The ILocalOwner interface allows to register local objects
1223 (created without COM calls, but with new()).
1224 Once registered, calls to methods of such objects can be made
1225 from remote COM processes.
1226 The main usecase is the event callback implementation where
1227 API clients provide callback objects.
1228 </desc>
1229 <method name="setLocalObject">
1230 <desc>
1231 Set local object.
1232 </desc>
1233 <param name="object" type="$unknown" dir="in">
1234 <desc>Local object to forward requests to.
1235 If null, clears currently set local object.</desc>
1236 </param>
1237 </method>
1238 </interface>
1239
1240 <!--
1241 // IVirtualBox
1242 /////////////////////////////////////////////////////////////////////////
1243 -->
1244
1245 <interface
1246 name="IVirtualBoxCallback" extends="$unknown"
1247 uuid="7f6a65b6-ad5d-4a67-8872-0b11cb7ea95c"
1248 wsmap="suppress"
1249 >
1250
1251 <method name="onMachineStateChange">
1252 <desc>
1253 The execution state of the given machine has changed.
1254 <see>IMachine::state</see>
1255 </desc>
1256 <param name="machineId" type="uuid" mod="string" dir="in">
1257 <desc>ID of the machine this event relates to.</desc>
1258 </param>
1259 <param name="state" type="MachineState" dir="in">
1260 <desc>New execution state.</desc>
1261 </param>
1262 </method>
1263
1264 <method name="onMachineDataChange">
1265 <desc>
1266 Any of the settings of the given machine has changed.
1267 </desc>
1268 <param name="machineId" type="uuid" mod="string" dir="in">
1269 <desc>ID of the machine this event relates to.</desc>
1270 </param>
1271 </method>
1272
1273 <method name="onExtraDataCanChange">
1274 <desc>
1275 Notification when someone tries to change extra data for
1276 either the given machine or (if @c null) global extra data.
1277 This gives the chance to veto against changes.
1278 </desc>
1279 <param name="machineId" type="uuid" mod="string" dir="in">
1280 <desc>
1281 ID of the machine this event relates to
1282 (@c null ID for global extra data change requests).
1283 </desc>
1284 </param>
1285 <param name="key" type="wstring" dir="in">
1286 <desc>
1287 Extra data key for the attempted write.
1288 </desc>
1289 </param>
1290 <param name="value" type="wstring" dir="in">
1291 <desc>
1292 Extra data value for the given key.
1293 </desc>
1294 </param>
1295 <param name="error" type="wstring" dir="out">
1296 <desc>
1297 Optional error message describing the reason of the
1298 veto (ignored if this notification returns @c true).
1299 </desc>
1300 </param>
1301 <param name="allowChange" type="boolean" dir="return">
1302 <desc>
1303 Flag to indicate whether the callee agrees (@c true)
1304 or vetoes against the change (@c false).
1305 </desc>
1306 </param>
1307 </method>
1308
1309 <method name="onExtraDataChange">
1310 <desc>
1311 Notification when machine specific or global extra data
1312 has changed.
1313 </desc>
1314 <param name="machineId" type="uuid" mod="string" dir="in">
1315 <desc>
1316 ID of the machine this event relates to.
1317 Null for global extra data changes.
1318 </desc>
1319 </param>
1320 <param name="key" type="wstring" dir="in">
1321 <desc>
1322 Extra data key that has changed.
1323 </desc>
1324 </param>
1325 <param name="value" type="wstring" dir="in">
1326 <desc>
1327 Extra data value for the given key.
1328 </desc>
1329 </param>
1330 </method>
1331
1332 <method name="onMediumRegistered">
1333 <desc>
1334 The given medium was registered or unregistered
1335 within this VirtualBox installation.
1336
1337 The @a mediumType parameter describes what type of
1338 medium the specified @a mediumId refers to. Possible
1339 values are:
1340
1341 <ul>
1342 <li><link to="DeviceType_HardDisk"/>: the medium is a hard disk
1343 that, if registered, can be obtained using the
1344 <link to="IVirtualBox::getHardDisk"/> call.</li>
1345 <li><link to="DeviceType_DVD"/>: the medium is a CD/DVD image
1346 that, if registered, can be obtained using the
1347 <link to="IVirtualBox::getDVDImage"/> call.</li>
1348 <li><link to="DeviceType_Floppy"/>: the medium is a Floppy image
1349 that, if registered, can be obtained using the
1350 <link to="IVirtualBox::getFloppyImage"/> call.</li>
1351 </ul>
1352
1353 Note that if this is a deregistration notification,
1354 there is no way to access the object representing the
1355 unregistered medium. It is supposed that the
1356 application will do required cleanup based on the
1357 @a mediumId value.
1358 </desc>
1359 <param name="mediumId" type="uuid" mod="string" dir="in">
1360 <desc>ID of the medium this event relates to.</desc>
1361 </param>
1362 <param name="mediumType" type="DeviceType" dir="in">
1363 <desc>Type of the medium this event relates to.</desc>
1364 </param>
1365 <param name="registered" type="boolean" dir="in">
1366 <desc>
1367 If @c true, the medium was registered, otherwise it was
1368 unregistered.
1369 </desc>
1370 </param>
1371 </method>
1372
1373 <method name="onMachineRegistered">
1374 <desc>
1375 The given machine was registered or unregistered
1376 within this VirtualBox installation.
1377 </desc>
1378 <param name="machineId" type="uuid" mod="string" dir="in">
1379 <desc>ID of the machine this event relates to.</desc>
1380 </param>
1381 <param name="registered" type="boolean" dir="in">
1382 <desc>
1383 If @c true, the machine was registered, otherwise it was
1384 unregistered.
1385 </desc>
1386 </param>
1387 </method>
1388
1389 <method name="onSessionStateChange">
1390 <desc>
1391 The state of the session for the given machine was changed.
1392 <see>IMachine::sessionState</see>
1393 </desc>
1394 <param name="machineId" type="uuid" mod="string" dir="in">
1395 <desc>ID of the machine this event relates to.</desc>
1396 </param>
1397 <param name="state" type="SessionState" dir="in">
1398 <desc>New session state.</desc>
1399 </param>
1400 </method>
1401
1402 <method name="onSnapshotTaken">
1403 <desc>
1404 A new snapshot of the machine has been taken.
1405 <see>ISnapshot</see>
1406 </desc>
1407 <param name="machineId" type="uuid" mod="string" dir="in">
1408 <desc>ID of the machine this event relates to.</desc>
1409 </param>
1410 <param name="snapshotId" type="uuid" mod="string" dir="in">
1411 <desc>ID of the new snapshot.</desc>
1412 </param>
1413 </method>
1414
1415 <method name="onSnapshotDeleted">
1416 <desc>
1417 Snapshot of the given machine has been deleted.
1418
1419 <note>
1420 This notification is delivered <b>after</b> the snapshot
1421 object has been uninitialized on the server (so that any
1422 attempt to call its methods will return an error).
1423 </note>
1424
1425 <see>ISnapshot</see>
1426 </desc>
1427 <param name="machineId" type="uuid" mod="string" dir="in">
1428 <desc>ID of the machine this event relates to.</desc>
1429 </param>
1430 <param name="snapshotId" type="uuid" mod="string" dir="in">
1431 <desc>
1432 ID of the deleted snapshot. @c null means the current machine
1433 state has been deleted (restored from the current snapshot).
1434 </desc>
1435 </param>
1436 </method>
1437
1438 <method name="onSnapshotChange">
1439 <desc>
1440 Snapshot properties (name and/or description) have been changed.
1441 <see>ISnapshot</see>
1442 </desc>
1443 <param name="machineId" type="uuid" mod="string" dir="in">
1444 <desc>ID of the machine this event relates to.</desc>
1445 </param>
1446 <param name="snapshotId" type="uuid" mod="string" dir="in">
1447 <desc>ID of the changed snapshot.</desc>
1448 </param>
1449 </method>
1450
1451 <method name="onGuestPropertyChange">
1452 <desc>
1453 Notification when a guest property has changed.
1454 </desc>
1455 <param name="machineId" type="uuid" mod="string" dir="in">
1456 <desc>
1457 ID of the machine this event relates to.
1458 </desc>
1459 </param>
1460 <param name="name" type="wstring" dir="in">
1461 <desc>
1462 The name of the property that has changed.
1463 </desc>
1464 </param>
1465 <param name="value" type="wstring" dir="in">
1466 <desc>
1467 The new property value.
1468 </desc>
1469 </param>
1470 <param name="flags" type="wstring" dir="in">
1471 <desc>
1472 The new property flags.
1473 </desc>
1474 </param>
1475 </method>
1476
1477 </interface>
1478
1479 <interface
1480 name="IDHCPServer" extends="$unknown"
1481 uuid="6cfe387c-74fb-4ca7-bff6-973bec8af7a3"
1482 wsmap="managed"
1483 >
1484 <desc>
1485 The IDHCPServer interface represents the vbox dhcp server configuration.
1486
1487 To enumerate all the dhcp servers on the host, use the
1488 <link to="IVirtualBox::DHCPServers"/> attribute.
1489 </desc>
1490
1491 <attribute name="enabled" type="boolean">
1492 <desc>
1493 specifies if the dhcp server is enabled
1494 </desc>
1495 </attribute>
1496
1497 <attribute name="IPAddress" type="wstring" readonly="yes">
1498 <desc>
1499 specifies server IP
1500 </desc>
1501 </attribute>
1502
1503 <attribute name="networkMask" type="wstring" readonly="yes">
1504 <desc>
1505 specifies server network mask
1506 </desc>
1507 </attribute>
1508
1509 <attribute name="networkName" type="wstring" readonly="yes">
1510 <desc>
1511 specifies internal network name the server is used for
1512 </desc>
1513 </attribute>
1514
1515 <attribute name="lowerIP" type="wstring" readonly="yes">
1516 <desc>
1517 specifies from IP adrres in server address range
1518 </desc>
1519 </attribute>
1520
1521 <attribute name="upperIP" type="wstring" readonly="yes">
1522 <desc>
1523 specifies to IP adrres in server address range
1524 </desc>
1525 </attribute>
1526
1527 <method name="setConfiguration">
1528 <desc>
1529 configures the server
1530 <result name="E_INVALIDARG">
1531 invalid configuration supplied
1532 </result>
1533 </desc>
1534 <param name="IPAddress" type="wstring" dir="in">
1535 <desc>
1536 server IP address
1537 </desc>
1538 </param>
1539 <param name="networkMask" type="wstring" dir="in">
1540 <desc>
1541 server network mask
1542 </desc>
1543 </param>
1544 <param name="FromIPAddress" type="wstring" dir="in">
1545 <desc>
1546 server From IP address for address range
1547 </desc>
1548 </param>
1549 <param name="ToIPAddress" type="wstring" dir="in">
1550 <desc>
1551 server To IP address for address range
1552 </desc>
1553 </param>
1554 </method>
1555
1556 <method name="start">
1557 <desc>
1558 Starts DHCP server process.
1559 <result name="E_FAIL">
1560 Failed to start the process.
1561 </result>
1562 </desc>
1563 <param name="networkName" type="wstring" dir="in">
1564 <desc>
1565 Name of internal network DHCP server should attach to.
1566 </desc>
1567 </param>
1568 <param name="trunkName" type="wstring" dir="in">
1569 <desc>
1570 Name of internal network trunk.
1571 </desc>
1572 </param>
1573 <param name="trunkType" type="wstring" dir="in">
1574 <desc>
1575 Type of internal network trunk.
1576 </desc>
1577 </param>
1578 </method>
1579
1580 <method name="stop">
1581 <desc>
1582 Stops DHCP server process.
1583 <result name="E_FAIL">
1584 Failed to stop the process.
1585 </result>
1586 </desc>
1587 </method>
1588 </interface>
1589
1590 <interface
1591 name="IVirtualBox" extends="$unknown"
1592 uuid="3f36e024-7fed-4f20-a02c-9158a82b44e6"
1593 wsmap="managed"
1594 >
1595 <desc>
1596 The IVirtualBox interface represents the main interface exposed by the
1597 product that provides virtual machine management.
1598
1599 An instance of IVirtualBox is required for the product to do anything
1600 useful. Even though the interface does not expose this, internally,
1601 IVirtualBox is implemented as a singleton and actually lives in the
1602 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
1603 IVirtualBox can track the state of all virtual machines on a particular
1604 host, regardless of which frontend started them.
1605
1606 To enumerate all the virtual machines on the host, use the
1607 <link to="IVirtualBox::machines"/> attribute.
1608 </desc>
1609
1610 <attribute name="version" type="wstring" readonly="yes">
1611 <desc>
1612 A string representing the version number of the product. The
1613 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
1614 last number represents the build number and will frequently change.
1615 </desc>
1616 </attribute>
1617
1618 <attribute name="revision" type="unsigned long" readonly="yes">
1619 <desc>
1620 The internal build revision number of the product.
1621 </desc>
1622 </attribute>
1623
1624 <attribute name="packageType" type="wstring" readonly="yes">
1625 <desc>
1626 A string representing the package type of this product. The
1627 format is OS_ARCH_DIST where OS is either WINDOWS, LINUX,
1628 SOLARIS, DARWIN. ARCH is either 32BITS or 64BITS. DIST
1629 is either GENERIC, UBUNTU_606, UBUNTU_710, or something like
1630 this.
1631 </desc>
1632 </attribute>
1633
1634 <attribute name="homeFolder" type="wstring" readonly="yes">
1635 <desc>
1636 Full path to the directory where the global settings file,
1637 <tt>VirtualBox.xml</tt>, is stored.
1638
1639 In this version of VirtualBox, the value of this property is
1640 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
1641 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
1642 as determined by the host OS), and cannot be changed.
1643
1644 This path is also used as the base to resolve relative paths in
1645 places where relative paths are allowed (unless otherwise
1646 expressly indicated).
1647 </desc>
1648 </attribute>
1649
1650 <attribute name="settingsFilePath" type="wstring" readonly="yes">
1651 <desc>
1652 Full name of the global settings file.
1653 The value of this property corresponds to the value of
1654 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
1655 </desc>
1656 </attribute>
1657
1658 <attribute name="host" type="IHost" readonly="yes">
1659 <desc>Associated host object.</desc>
1660 </attribute>
1661
1662 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
1663 <desc>Associated system information object.</desc>
1664 </attribute>
1665
1666 <attribute name="machines" type="IMachine" readonly="yes" safearray="yes">
1667 <desc>
1668 Array of machine objects registered within this VirtualBox instance.
1669 </desc>
1670 </attribute>
1671
1672 <attribute name="hardDisks" type="IMedium" readonly="yes" safearray="yes">
1673 <desc>
1674 Array of medium objects known to this VirtualBox installation.
1675
1676 This array contains only base media. All differencing
1677 media of the given base medium can be enumerated using
1678 <link to="IMedium::children"/>.
1679 </desc>
1680 </attribute>
1681
1682 <attribute name="DVDImages" type="IMedium" readonly="yes" safearray="yes">
1683 <desc>
1684 Array of CD/DVD image objects registered with this VirtualBox instance.
1685 </desc>
1686 </attribute>
1687
1688 <attribute name="floppyImages" type="IMedium" readonly="yes" safearray="yes">
1689 <desc>
1690 Array of floppy image objects registered with this VirtualBox instance.
1691 </desc>
1692 </attribute>
1693
1694 <attribute name="progressOperations" type="IProgress" readonly="yes" safearray="yes"/>
1695
1696 <attribute name="guestOSTypes" type="IGuestOSType" readonly="yes" safearray="yes"/>
1697
1698 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
1699 <desc>
1700 Collection of global shared folders. Global shared folders are
1701 available to all virtual machines.
1702
1703 New shared folders are added to the collection using
1704 <link to="#createSharedFolder"/>. Existing shared folders can be
1705 removed using <link to="#removeSharedFolder"/>.
1706
1707 <note>
1708 In the current version of the product, global shared folders are not
1709 implemented and therefore this collection is always empty.
1710 </note>
1711 </desc>
1712 </attribute>
1713
1714 <attribute name="performanceCollector" type="IPerformanceCollector" readonly="yes">
1715 <desc>
1716 Associated performance collector object.
1717 </desc>
1718 </attribute>
1719
1720 <attribute name="DHCPServers" type="IDHCPServer" safearray="yes" readonly="yes">
1721 <desc>
1722 dhcp server settings.
1723 </desc>
1724 </attribute>
1725
1726 <method name="createMachine">
1727 <desc>
1728 Creates a new virtual machine.
1729
1730 The new machine is created unregistered, with the initial configuration
1731 set according to the specified guest OS type. A typical sequence of
1732 actions to create a new virtual machine is as follows:
1733
1734 <ol>
1735 <li>
1736 Call this method to have a new machine created. The returned machine
1737 object will be "mutable" allowing to change any machine property.
1738 </li>
1739
1740 <li>
1741 Configure the machine using the appropriate attributes and methods.
1742 </li>
1743
1744 <li>
1745 Call <link to="IMachine::saveSettings" /> to write the settings
1746 to the machine's XML settings file. The configuration of the newly
1747 created machine will not be saved to disk until this method is
1748 called.
1749 </li>
1750
1751 <li>
1752 Call <link to="#registerMachine" /> to add the machine to the list
1753 of machines known to VirtualBox.
1754 </li>
1755 </ol>
1756
1757 You should specify valid name for the newly created machine when calling
1758 this method. See the <link to="IMachine::name"/> attribute description
1759 for more details about the machine name.
1760
1761 The specified guest OS type identifier must match an ID of one of known
1762 guest OS types listed in the <link to="IVirtualBox::guestOSTypes"/>
1763 array.
1764
1765 Every machine has a <i>settings file</i> that is used to store
1766 the machine configuration. This file is stored in a directory called the
1767 <i>machine settings subfolder</i>. Both the settings subfolder and file
1768 will have a name that corresponds to the name of the virtual machine.
1769 You can specify where to create the machine setting subfolder using the
1770 @a baseFolder argument. The base folder can be absolute (full path) or
1771 relative to the <link to="IVirtualBox::homeFolder">VirtualBox home
1772 directory</link>.
1773
1774 If @a baseFolder is a @c null or empty string (which is recommended), the
1775 <link to="ISystemProperties::defaultMachineFolder">default machine
1776 settings folder</link> will be used as a base folder for the created
1777 machine. Otherwise the given base folder will be used. In either case,
1778 the full path to the resulting settings file has the following
1779 structure:
1780 <pre>
1781 &lt;base_folder&gt;/&lt;machine_name&gt;/&lt;machine_name&gt;.xml
1782 </pre>
1783
1784 Note that if the resulting settings file already exists, this method
1785 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1786
1787 Optionally, you may specify an UUID of to assign to the created machine.
1788 However, this is not recommended and you should normally pass an empty
1789 (@c null) UUID to this method so that a new UUID will be automatically
1790 generated for every created machine. You can use UUID
1791 00000000-0000-0000-0000-000000000000 as @c null value.
1792
1793 <note>
1794 There is no way to change the name of the settings file or
1795 subfolder of the created machine directly.
1796 </note>
1797
1798 <result name="VBOX_E_OBJECT_NOT_FOUND">
1799 @a osTypeId is invalid.
1800 </result>
1801 <result name="VBOX_E_FILE_ERROR">
1802 Resulting settings file name is invalid or the settings file already
1803 exists or could not be created due to an I/O error.
1804 </result>
1805 <result name="E_INVALIDARG">
1806 @a name is empty or @c null.
1807 </result>
1808 </desc>
1809
1810 <param name="name" type="wstring" dir="in">
1811 <desc>Machine name.</desc>
1812 </param>
1813 <param name="osTypeId" type="wstring" dir="in">
1814 <desc>Guest OS Type ID.</desc>
1815 </param>
1816 <param name="baseFolder" type="wstring" dir="in">
1817 <desc>Base machine folder (optional).</desc>
1818 </param>
1819 <param name="id" type="uuid" mod="string" dir="in">
1820 <desc>Machine UUID (optional).</desc>
1821 </param>
1822 <param name="override" type="boolean" dir="in">
1823 <desc>Create the VM even if there are conflicting files.</desc>
1824 </param>
1825 <param name="machine" type="IMachine" dir="return">
1826 <desc>Created machine object.</desc>
1827 </param>
1828 </method>
1829
1830 <method name="createLegacyMachine">
1831 <desc>
1832 Creates a new virtual machine in "legacy" mode, using the specified
1833 settings file to store machine settings.
1834
1835 As opposed to machines created by <link to="#createMachine"/>,
1836 the settings file of the machine created in "legacy" mode is not
1837 automatically renamed when the machine name is changed -- it will always
1838 remain the same as specified in this method call.
1839
1840 The specified settings file name can be absolute (full path) or relative
1841 to the <link to="IVirtualBox::homeFolder">VirtualBox home
1842 directory</link>. If the file name doesn't contain an extension, the
1843 default extension (.xml) will be appended.
1844
1845 Note that the configuration of the newly created machine is not
1846 saved to disk (and therefore no settings file is created)
1847 until <link to="IMachine::saveSettings"/> is called. If the
1848 specified settings file already exists, this method
1849 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1850
1851 See <link to="#createMachine"/> for more information.
1852
1853 @deprecated This method may be removed later. Use <link
1854 to="IVirtualBox::createMachine"/> instead.
1855
1856 <note>
1857 There is no way to change the name of the settings file
1858 of the machine created in "legacy" mode.
1859 </note>
1860
1861 <result name="VBOX_E_OBJECT_NOT_FOUND">
1862 @a osTypeId is invalid.
1863 </result>
1864 <result name="VBOX_E_FILE_ERROR">
1865 @a settingsFile is invalid or the settings file already exists or
1866 could not be created due to an I/O error.
1867 </result>
1868 <result name="E_INVALIDARG">
1869 @a name or @a settingsFile is empty or @c null.
1870 </result>
1871 </desc>
1872
1873 <param name="name" type="wstring" dir="in">
1874 <desc>Machine name.</desc>
1875 </param>
1876 <param name="osTypeId" type="wstring" dir="in">
1877 <desc>Machine OS Type ID.</desc>
1878 </param>
1879 <param name="settingsFile" type="wstring" dir="in">
1880 <desc>Name of the machine settings file.</desc>
1881 </param>
1882 <param name="id" type="uuid" mod="string" dir="in">
1883 <desc>Machine UUID (optional).</desc>
1884 </param>
1885 <param name="machine" type="IMachine" dir="return">
1886 <desc>Created machine object.</desc>
1887 </param>
1888 </method>
1889
1890 <method name="openMachine">
1891 <desc>
1892 Opens a virtual machine from the existing settings file.
1893 The opened machine remains unregistered until you call
1894 <link to="#registerMachine"/>.
1895
1896 The specified settings file name can be absolute
1897 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1898 VirtualBox home directory</link>. This file must exist
1899 and must be a valid machine settings file whose contents
1900 will be used to construct the machine object.
1901
1902 @deprecated Will be removed soon.
1903 <result name="VBOX_E_FILE_ERROR">
1904 Settings file name invalid, not found or sharing violation.
1905 </result>
1906 </desc>
1907 <param name="settingsFile" type="wstring" dir="in">
1908 <desc>
1909 Name of the machine settings file.
1910 </desc>
1911 </param>
1912 <param name="machine" type="IMachine" dir="return">
1913 <desc>Opened machine object.</desc>
1914 </param>
1915 <note>
1916 <link to="IMachine::settingsModified"/> will return
1917 @c false for the created machine, until any of machine settings
1918 are changed.
1919 </note>
1920 </method>
1921
1922 <method name="registerMachine">
1923 <desc>
1924
1925 Registers the machine previously created using
1926 <link to="#createMachine"/> or opened using
1927 <link to="#openMachine"/> within this VirtualBox installation. After
1928 successful method invocation, the
1929 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1930 to all registered callbacks.
1931
1932 <note>
1933 This method implicitly calls <link to="IMachine::saveSettings"/>
1934 to save all current machine settings before registering it.
1935 </note>
1936
1937 <result name="VBOX_E_OBJECT_NOT_FOUND">
1938 No matching virtual machine found.
1939 </result>
1940 <result name="VBOX_E_INVALID_OBJECT_STATE">
1941 Virtual machine was not created within this VirtualBox instance.
1942 </result>
1943
1944 </desc>
1945 <param name="machine" type="IMachine" dir="in"/>
1946 </method>
1947
1948 <method name="getMachine">
1949 <desc>
1950 Attempts to find a virtual machine given its UUID.
1951 To look up a machine by name, use <link to="IVirtualBox::findMachine" />
1952 instead.
1953
1954 <result name="VBOX_E_OBJECT_NOT_FOUND">
1955 Could not find registered machine matching @a id.
1956 </result>
1957
1958 </desc>
1959 <param name="id" type="uuid" mod="string" dir="in"/>
1960 <param name="machine" type="IMachine" dir="return"/>
1961 </method>
1962
1963 <method name="findMachine">
1964 <desc>
1965 Attempts to find a virtual machine given its name.
1966 To look up a machine by UUID, use <link to="IVirtualBox::getMachine" />
1967 instead.
1968
1969 <result name="VBOX_E_OBJECT_NOT_FOUND">
1970 Could not find registered machine matching @a name.
1971 </result>
1972
1973 </desc>
1974 <param name="name" type="wstring" dir="in"/>
1975 <param name="machine" type="IMachine" dir="return"/>
1976 </method>
1977
1978 <method name="unregisterMachine">
1979 <desc>
1980
1981 Unregisters the machine previously registered using
1982 <link to="#registerMachine"/>. After successful method invocation, the
1983 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1984 to all registered callbacks.
1985
1986 <note>
1987 The specified machine must not be in the Saved state, have an open
1988 (or a spawning) direct session associated with it, have snapshots or
1989 have any medium attached.
1990 </note>
1991
1992 <note>
1993 This method implicitly calls <link to="IMachine::saveSettings"/> to
1994 save all current machine settings before unregistering it.
1995 </note>
1996
1997 <note>
1998 If the given machine is inaccessible (see
1999 <link to="IMachine::accessible"/>), it will be unregistered and
2000 fully uninitialized right afterwards. As a result, the returned
2001 machine object will be unusable and an attempt to call
2002 <b>any</b> method will return the "Object not ready" error.
2003 </note>
2004
2005 <result name="VBOX_E_OBJECT_NOT_FOUND">
2006 Could not find registered machine matching @a id.
2007 </result>
2008 <result name="VBOX_E_INVALID_VM_STATE">
2009 Machine is in Saved state.
2010 </result>
2011 <result name="VBOX_E_INVALID_OBJECT_STATE">
2012 Machine has snapshot or open session or medium attached.
2013 </result>
2014
2015 </desc>
2016 <param name="id" type="uuid" mod="string" dir="in">
2017 <desc>UUID of the machine to unregister.</desc>
2018 </param>
2019 <param name="machine" type="IMachine" dir="return">
2020 <desc>Unregistered machine object.</desc>
2021 </param>
2022 </method>
2023
2024 <method name="createAppliance">
2025 <desc>
2026 Creates a new appliance object, which represents an appliance in the Open Virtual Machine
2027 Format (OVF). This can then be used to import an OVF appliance into VirtualBox or to export
2028 machines as an OVF appliance; see the documentation for <link to="IAppliance" /> for details.
2029 </desc>
2030 <param name="appliance" type="IAppliance" dir="return">
2031 <desc>New appliance.</desc>
2032 </param>
2033 </method>
2034
2035 <method name="createHardDisk">
2036 <desc>
2037 Creates a new base medium object that will use the given storage
2038 format and location for medium data.
2039
2040 Note that the actual storage unit is not created by this method. In
2041 order to do it, and before you are able to attach the created medium
2042 to virtual machines, you must call one of the following methods to
2043 allocate a format-specific storage unit at the specified location:
2044 <ul>
2045 <li><link to="IMedium::createBaseStorage"/></li>
2046 <li><link to="IMedium::createDiffStorage"/></li>
2047 </ul>
2048
2049 Some medium attributes, such as <link to="IMedium::id"/>, may
2050 remain uninitialized until the medium storage unit is successfully
2051 created by one of the above methods.
2052
2053 After the storage unit is successfully created, the medium gets
2054 remembered by this VirtualBox installation and will be accessible
2055 through <link to="#getHardDisk"/> and <link to="#findHardDisk"/>
2056 methods. Remembered base medium are also returned as part of
2057 the <link to="#hardDisks"/> array. See IMedium for more details.
2058
2059 The list of all storage formats supported by this VirtualBox
2060 installation can be obtained using
2061 <link to="ISystemProperties::mediumFormats"/>. If the @a format
2062 attribute is empty or @c null then the default storage format
2063 specified by <link to="ISystemProperties::defaultHardDiskFormat"/> will
2064 be used for creating a storage unit of the medium.
2065
2066 Note that the format of the location string is storage format specific.
2067 See <link to="IMedium::location"/>, IMedium and
2068 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
2069
2070 <result name="VBOX_E_OBJECT_NOT_FOUND">
2071 @a format identifier is invalid. See
2072 <link to="ISystemProperties::mediumFormats"/>.
2073 </result>
2074 <result name="VBOX_E_FILE_ERROR">
2075 @a location is a not valid file name (for file-based formats only).
2076 </result>
2077 </desc>
2078 <param name="format" type="wstring" dir="in">
2079 <desc>
2080 Identifier of the storage format to use for the new medium.
2081 </desc>
2082 </param>
2083 <param name="location" type="wstring" dir="in">
2084 <desc>
2085 Location of the storage unit for the new medium.
2086 </desc>
2087 </param>
2088 <param name="medium" type="IMedium" dir="return">
2089 <desc>Created medium object.</desc>
2090 </param>
2091 </method>
2092
2093 <method name="openHardDisk">
2094 <desc>
2095 Opens a medium from an existing location, optionally replacing
2096 the image UUID and/or parent UUID.
2097
2098 After the medium is successfully opened by this method, it gets
2099 remembered by (known to) this VirtualBox installation and will be
2100 accessible through <link to="#getHardDisk"/> and
2101 <link to="#findHardDisk"/> methods. Remembered base media
2102 are also returned as part of the <link to="#hardDisks"/> array and can
2103 be attached to virtual machines. See IMedium for more details.
2104
2105 If a differencing medium is to be opened by this method, the
2106 operation will succeed only if its parent medium and all ancestors,
2107 if any, are already known to this VirtualBox installation (for example,
2108 were opened by this method before).
2109
2110 This method tries to guess the storage format of the specified medium
2111 by reading medium data at the specified location.
2112
2113 If @a accessMode is ReadWrite (which it should be), the image is opened
2114 for read/write access and must have according permissions, as VirtualBox
2115 may actually write status information into the disk's metadata sections.
2116
2117 Note that write access is required for all typical image usage in VirtualBox,
2118 since VirtualBox may need to write metadata such as a UUID into the image.
2119 The only exception is opening a source image temporarily for copying and
2120 cloning when the image will quickly be closed again.
2121
2122 Note that the format of the location string is storage format specific.
2123 See <link to="IMedium::location"/>, IMedium and
2124 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
2125
2126 <result name="VBOX_E_FILE_ERROR">
2127 Invalid medium storage file location or could not find the medium
2128 at the specified location.
2129 </result>
2130 <result name="VBOX_E_IPRT_ERROR">
2131 Could not get medium storage format.
2132 </result>
2133 <result name="E_INVALIDARG">
2134 Invalid medium storage format.
2135 </result>
2136
2137 </desc>
2138 <param name="location" type="wstring" dir="in">
2139 <desc>
2140 Location of the storage unit that contains medium data in one of
2141 the supported storage formats.
2142 </desc>
2143 </param>
2144 <param name="accessMode" type="AccessMode" dir="in">
2145 <desc>
2146 Determines whether to open the image in read/write or read-only mode.
2147 </desc>
2148 </param>
2149 <param name="setImageId" type="boolean" dir="in">
2150 <desc>
2151 Select whether a new image UUID is set or not.
2152 </desc>
2153 </param>
2154 <param name="imageId" type="uuid" mod="string" dir="in">
2155 <desc>
2156 New UUID for the image. If an empty string is passed, then a new
2157 UUID is automatically created. Specifying a zero UUIDs is not valid.
2158 </desc>
2159 </param>
2160 <param name="setParentId" type="boolean" dir="in">
2161 <desc>
2162 Select whether a new parent UUID is set or not.
2163 </desc>
2164 </param>
2165 <param name="parentId" type="uuid" mod="string" dir="in">
2166 <desc>
2167 New parent UUID for the image. If an empty string is passed, then a
2168 new UUID is automatically created, provided @a setParentId is
2169 @c true. A zero UUID is valid.
2170 </desc>
2171 </param>
2172 <param name="medium" type="IMedium" dir="return">
2173 <desc>Opened medium object.</desc>
2174 </param>
2175 </method>
2176
2177 <method name="getHardDisk" const="yes">
2178 <desc>
2179 Returns a medium with the given UUID.
2180
2181 The medium with the given UUID must be known to this VirtualBox
2182 installation, i.e. it must be previously created by
2183 <link to="#createHardDisk"/> or opened by <link
2184 to="#openHardDisk"/>, or attached to some known virtual machine.
2185
2186 <result name="VBOX_E_OBJECT_NOT_FOUND">
2187 No medium object matching @a id found.
2188 </result>
2189
2190 </desc>
2191 <param name="id" type="uuid" mod="string" dir="in">
2192 <desc>UUID of the medium to look for.</desc>
2193 </param>
2194 <param name="medium" type="IMedium" dir="return">
2195 <desc>Found medium object.</desc>
2196 </param>
2197 </method>
2198
2199 <method name="findHardDisk">
2200 <desc>
2201 Returns a medium that uses the given location to store medium data.
2202
2203 The given medium must be known to this VirtualBox installation, i.e.
2204 it must be previously created by
2205 <link to="#createHardDisk"/> or opened by <link
2206 to="#openHardDisk"/>, or attached to some known virtual machine.
2207
2208 The search is done by comparing the value of the @a location argument to
2209 the <link to="IMedium::location"/> attribute of each known medium.
2210
2211 For locations represented by file names in the host's file system, the
2212 requested location can be a path relative to the
2213 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2214 only a file name without any path is given, the
2215 <link to="ISystemProperties::defaultHardDiskFolder"> default medium
2216 folder</link> will be prepended to the file name before searching. Note
2217 that on case sensitive file systems, a case sensitive comparison is
2218 performed, otherwise the case of symbols in the file path is ignored.
2219
2220 <result name="VBOX_E_OBJECT_NOT_FOUND">
2221 No medium object matching @a location found.
2222 </result>
2223
2224 </desc>
2225 <param name="location" type="wstring" dir="in">
2226 <desc>Location string to search for.</desc>
2227 </param>
2228 <param name="medium" type="IMedium" dir="return">
2229 <desc>Found medium object.</desc>
2230 </param>
2231 </method>
2232
2233 <method name="openDVDImage">
2234 <desc>
2235 Opens a CD/DVD image contained in the specified file of the supported
2236 format and assigns it the given UUID.
2237
2238 After the image is successfully opened by this method, it gets
2239 remembered by (known to) this VirtualBox installation and will be
2240 accessible through <link to="#getDVDImage"/> and
2241 <link to="#findDVDImage"/> methods. Remembered images are also
2242 returned as part of the <link to="#DVDImages"/> array and can be mounted
2243 to virtual machines. See IMedium for more details.
2244
2245 See <link to="IMedium::location"/> to get more details about the format
2246 of the location string.
2247
2248 <note>
2249 Currently only ISO 9960 CD/DVD images are supported by VirtualBox.
2250 </note>
2251
2252 <result name="VBOX_E_FILE_ERROR">
2253 Invalid CD/DVD image file location or could not find the CD/DVD
2254 image at the specified location.
2255 </result>
2256 <result name="VBOX_E_INVALID_OBJECT_STATE">
2257 CD/DVD image already exists in the media registry.
2258 </result>
2259
2260 </desc>
2261 <param name="location" type="wstring" dir="in">
2262 <desc>
2263 Full path to the file that contains a valid CD/DVD image.
2264 </desc>
2265 </param>
2266 <param name="id" type="uuid" mod="string" dir="in">
2267 <desc>
2268 UUID to assign to the given image within this VirtualBox installation.
2269 If an empty (@c null) UUID is specified, the system will randomly
2270 generate a new UUID.
2271 </desc>
2272 </param>
2273 <param name="image" type="IMedium" dir="return">
2274 <desc>Opened CD/DVD image object.</desc>
2275 </param>
2276 </method>
2277
2278 <method name="getDVDImage">
2279 <desc>
2280 Returns a CD/DVD image with the given UUID.
2281
2282 The image with the given UUID must be known to this VirtualBox
2283 installation, i.e. it must be previously opened by <link
2284 to="#openDVDImage"/>, or mounted to some known virtual machine.
2285
2286 <result name="VBOX_E_OBJECT_NOT_FOUND">
2287 No matching DVD image found in the media registry.
2288 </result>
2289
2290 </desc>
2291 <param name="id" type="uuid" mod="string" dir="in">
2292 <desc>UUID of the image to look for.</desc>
2293 </param>
2294 <param name="image" type="IMedium" dir="return">
2295 <desc>Found CD/DVD image object.</desc>
2296 </param>
2297 </method>
2298
2299 <method name="findDVDImage">
2300 <desc>
2301 Returns a CD/DVD image with the given image location.
2302
2303 The image with the given UUID must be known to this VirtualBox
2304 installation, i.e. it must be previously opened by <link
2305 to="#openDVDImage"/>, or mounted to some known virtual machine.
2306
2307 The search is done by comparing the value of the @a location argument to
2308 the <link to="IMedium::location"/> attribute of each known CD/DVD image.
2309
2310 The requested location can be a path relative to the
2311 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2312 only a file name without any path is given, the
2313 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2314 folder</link> will be prepended to the file name before searching. Note
2315 that on case sensitive file systems, a case sensitive comparison is
2316 performed, otherwise the case in the file path is ignored.
2317
2318 <result name="VBOX_E_FILE_ERROR">
2319 Invalid image file location.
2320 </result>
2321 <result name="VBOX_E_OBJECT_NOT_FOUND">
2322 No matching DVD image found in the media registry.
2323 </result>
2324
2325 </desc>
2326 <param name="location" type="wstring" dir="in">
2327 <desc>CD/DVD image file path to look for.</desc>
2328 </param>
2329 <param name="image" type="IMedium" dir="return">
2330 <desc>Found CD/DVD image object.</desc>
2331 </param>
2332 </method>
2333
2334 <method name="openFloppyImage">
2335 <desc>
2336 Opens a floppy image contained in the specified file of the supported
2337 format and assigns it the given UUID.
2338
2339 After the image is successfully opened by this method, it gets
2340 remembered by (known to) this VirtualBox installation and will be
2341 accessible through <link to="#getFloppyImage"/> and
2342 <link to="#findFloppyImage"/> methods. Remembered images are also
2343 returned as part of the <link to="#floppyImages"/> array and can be
2344 mounted to virtual machines. See IMedium for more details.
2345
2346 See <link to="IMedium::location"/> to get more details about the format
2347 of the location string.
2348
2349 <result name="VBOX_E_FILE_ERROR">
2350 Invalid floppy image file location or could not find the floppy
2351 image at the specified location.
2352 </result>
2353 <result name="VBOX_E_INVALID_OBJECT_STATE">
2354 Floppy image already exists in the media registry.
2355 </result>
2356
2357 <note>
2358 Currently, only raw floppy images are supported by VirtualBox.
2359 </note>
2360 </desc>
2361 <param name="location" type="wstring" dir="in">
2362 <desc>
2363 Full path to the file that contains a valid floppy image.
2364 </desc>
2365 </param>
2366 <param name="id" type="uuid" mod="string" dir="in">
2367 <desc>
2368 UUID to assign to the given image file within this VirtualBox
2369 installation. If an empty (@c null) UUID is specified, the system will
2370 randomly generate a new UUID.
2371 </desc>
2372 </param>
2373 <param name="image" type="IMedium" dir="return">
2374 <desc>Opened floppy image object.</desc>
2375 </param>
2376 </method>
2377
2378 <method name="getFloppyImage">
2379 <desc>
2380 Returns a floppy image with the given UUID.
2381
2382 The image with the given UUID must be known to this VirtualBox
2383 installation, i.e. it must be previously opened by <link
2384 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2385
2386 <result name="VBOX_E_OBJECT_NOT_FOUND">
2387 No matching floppy image found in the media registry.
2388 </result>
2389
2390 </desc>
2391 <param name="id" type="uuid" mod="string" dir="in">
2392 <desc>UUID of the image to look for.</desc>
2393 </param>
2394 <param name="image" type="IMedium" dir="return">
2395 <desc>Found floppy image object.</desc>
2396 </param>
2397 </method>
2398
2399 <method name="findFloppyImage">
2400 <desc>
2401 Returns a floppy image with the given image location.
2402
2403 The image with the given UUID must be known to this VirtualBox
2404 installation, i.e. it must be previously opened by <link
2405 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2406
2407 The search is done by comparing the value of the @a location argument to
2408 the <link to="IMedium::location"/> attribute of each known floppy image.
2409
2410 The requested location can be a path relative to the
2411 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2412 only a file name without any path is given, the
2413 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2414 folder</link> will be prepended to the file name before searching. Note
2415 that on case sensitive file systems, a case sensitive comparison is
2416 performed, otherwise the case of symbols in the file path is ignored.
2417
2418 <result name="VBOX_E_FILE_ERROR">
2419 Invalid image file location.
2420 </result>
2421 <result name="VBOX_E_OBJECT_NOT_FOUND">
2422 No matching floppy image found in the media registry.
2423 </result>
2424
2425 </desc>
2426 <param name="location" type="wstring" dir="in">
2427 <desc>Floppy image file path to look for.</desc>
2428 </param>
2429 <param name="image" type="IMedium" dir="return">
2430 <desc>Found floppy image object.</desc>
2431 </param>
2432 </method>
2433
2434 <method name="getGuestOSType">
2435 <desc>
2436 Returns an object describing the specified guest OS type.
2437
2438 The requested guest OS type is specified using a string which is a
2439 mnemonic identifier of the guest operating system, such as
2440 <tt>"win31"</tt> or <tt>"ubuntu"</tt>. The guest OS type ID of a
2441 particular virtual machine can be read or set using the
2442 <link to="IMachine::OSTypeId"/> attribute.
2443
2444 The <link to="IVirtualBox::guestOSTypes"/> collection contains all
2445 available guest OS type objects. Each object has an
2446 <link to="IGuestOSType::id"/> attribute which contains an identifier of
2447 the guest OS this object describes.
2448
2449 <result name="E_INVALIDARG">
2450 @a id is not a valid Guest OS type.
2451 </result>
2452
2453 </desc>
2454 <param name="id" type="uuid" mod="string" dir="in">
2455 <desc>Guest OS type ID string.</desc>
2456 </param>
2457 <param name="type" type="IGuestOSType" dir="return">
2458 <desc>Guest OS type object.</desc>
2459 </param>
2460 </method>
2461
2462 <method name="createSharedFolder">
2463 <desc>
2464 Creates a new global shared folder by associating the given logical
2465 name with the given host path, adds it to the collection of shared
2466 folders and starts sharing it. Refer to the description of
2467 <link to="ISharedFolder"/> to read more about logical names.
2468 <note>
2469 In the current implementation, this operation is not
2470 implemented.
2471 </note>
2472 </desc>
2473 <param name="name" type="wstring" dir="in">
2474 <desc>Unique logical name of the shared folder.</desc>
2475 </param>
2476 <param name="hostPath" type="wstring" dir="in">
2477 <desc>Full path to the shared folder in the host file system.</desc>
2478 </param>
2479 <param name="writable" type="boolean" dir="in">
2480 <desc>Whether the share is writable or readonly</desc>
2481 </param>
2482 </method>
2483
2484 <method name="removeSharedFolder">
2485 <desc>
2486 Removes the global shared folder with the given name previously
2487 created by <link to="#createSharedFolder"/> from the collection of
2488 shared folders and stops sharing it.
2489 <note>
2490 In the current implementation, this operation is not
2491 implemented.
2492 </note>
2493 </desc>
2494 <param name="name" type="wstring" dir="in">
2495 <desc>Logical name of the shared folder to remove.</desc>
2496 </param>
2497 </method>
2498
2499 <method name="getExtraDataKeys">
2500 <desc>
2501 Returns an array representing the global extra data keys which currently
2502 have values defined.
2503 </desc>
2504 <param name="value" type="wstring" dir="return" safearray="yes">
2505 <desc>Array of extra data keys.</desc>
2506 </param>
2507 </method>
2508
2509 <method name="getExtraData">
2510 <desc>
2511 Returns associated global extra data.
2512
2513 If the requested data @a key does not exist, this function will
2514 succeed and return an empty string in the @a value argument.
2515
2516 <result name="VBOX_E_FILE_ERROR">
2517 Settings file not accessible.
2518 </result>
2519 <result name="VBOX_E_XML_ERROR">
2520 Could not parse the settings file.
2521 </result>
2522
2523 </desc>
2524 <param name="key" type="wstring" dir="in">
2525 <desc>Name of the data key to get.</desc>
2526 </param>
2527 <param name="value" type="wstring" dir="return">
2528 <desc>Value of the requested data key.</desc>
2529 </param>
2530 </method>
2531
2532 <method name="setExtraData">
2533 <desc>
2534 Sets associated global extra data.
2535
2536 If you pass @c null or empty string as a key @a value, the given @a key
2537 will be deleted.
2538
2539 <note>
2540 Before performing the actual data change, this method will ask all
2541 registered callbacks using the
2542 <link to="IVirtualBoxCallback::onExtraDataCanChange"/>
2543 notification for a permission. If one of the callbacks refuses the
2544 new value, the change will not be performed.
2545 </note>
2546 <note>
2547 On success, the
2548 <link to="IVirtualBoxCallback::onExtraDataChange"/> notification
2549 is called to inform all registered callbacks about a successful data
2550 change.
2551 </note>
2552
2553 <result name="VBOX_E_FILE_ERROR">
2554 Settings file not accessible.
2555 </result>
2556 <result name="VBOX_E_XML_ERROR">
2557 Could not parse the settings file.
2558 </result>
2559 <result name="E_ACCESSDENIED">
2560 Modification request refused.
2561 </result>
2562
2563 </desc>
2564 <param name="key" type="wstring" dir="in">
2565 <desc>Name of the data key to set.</desc>
2566 </param>
2567 <param name="value" type="wstring" dir="in">
2568 <desc>Value to assign to the key.</desc>
2569 </param>
2570 </method>
2571
2572 <method name="openSession">
2573 <desc>
2574 Opens a new direct session with the given virtual machine.
2575
2576 A direct session acts as a local lock on the given VM.
2577 There can be only one direct session open at a time for every
2578 virtual machine, protecting the VM from being manipulated by
2579 conflicting actions from different processes. Only after a
2580 direct session has been opened, one can change all VM settings
2581 and execute the VM in the process space of the session object.
2582
2583 Sessions therefore can be compared to mutex semaphores that
2584 lock a given VM for modification and execution.
2585 See <link to="ISession">ISession</link> for details.
2586
2587 <note>Unless you are writing a new VM frontend, you will not
2588 want to execute a VM in the current process. To spawn a new
2589 process that executes a VM, use
2590 <link to="IVirtualBox::openRemoteSession" />
2591 instead.</note>
2592
2593 Upon successful return, the session object can be used to
2594 get access to the machine and to the VM console.
2595
2596 In VirtualBox terminology, the machine becomes "mutable" after
2597 a session has been opened. Note that the "mutable" machine
2598 object, on which you may invoke IMachine methods to change its
2599 settings, will be a different object from the immutable IMachine
2600 objects returned by various IVirtualBox methods. To obtain a
2601 mutable IMachine object (upon which you can invoke settings methods),
2602 use the <link to="ISession::machine" /> attribute.
2603
2604 One must always call <link to="ISession::close" /> to release the
2605 lock on the machine, or the machine's state will eventually be
2606 set to "Aborted".
2607
2608 In other words, to change settings on a machine, the following
2609 sequence is typically performed:
2610
2611 <ol>
2612 <li>Call this method (openSession) to have a machine locked for
2613 the current session.</li>
2614
2615 <li>Obtain a mutable IMachine object from <link to="ISession::machine" />.</li>
2616
2617 <li>Change the settings of the machine.</li>
2618
2619 <li>Call <link to="IMachine::saveSettings" />.</li>
2620
2621 <li>Close the session by calling <link to="ISession::close"/>.</li>
2622 </ol>
2623
2624 <result name="E_UNEXPECTED">
2625 Virtual machine not registered.
2626 </result>
2627 <result name="E_ACCESSDENIED">
2628 Process not started by OpenRemoteSession.
2629 </result>
2630 <result name="VBOX_E_OBJECT_NOT_FOUND">
2631 No matching virtual machine found.
2632 </result>
2633 <result name="VBOX_E_INVALID_OBJECT_STATE">
2634 Session already open or being opened.
2635 </result>
2636 <result name="VBOX_E_VM_ERROR">
2637 Failed to assign machine to session.
2638 </result>
2639
2640 </desc>
2641 <param name="session" type="ISession" dir="in">
2642 <desc>
2643 Session object that will represent the opened session after
2644 successful method invocation. This object must not represent
2645 the already open session.
2646 <note>
2647 This session will be automatically closed if the
2648 VirtualBox server is terminated for some reason.
2649 </note>
2650 </desc>
2651 </param>
2652 <param name="machineId" type="uuid" mod="string" dir="in">
2653 <desc>ID of the virtual machine to open a session with.</desc>
2654 </param>
2655 </method>
2656
2657 <method name="openRemoteSession">
2658 <desc>
2659 Spawns a new process that executes a virtual machine (called a
2660 "remote session").
2661
2662 Opening a remote session causes the VirtualBox server to start a new
2663 process that opens a direct session with the given VM. As a result, the
2664 VM is locked by that direct session in the new process, preventing
2665 conflicting changes from other processes. Since sessions act as locks
2666 that prevent conflicting changes, one cannot open a remote session
2667 for a VM that already has another open session (direct or remote), or
2668 is currently in the process of opening one (see <link
2669 to="IMachine::sessionState"/>).
2670
2671 While the remote session still provides some level of control over the
2672 VM execution to the caller (using the <link to="IConsole" /> interface),
2673 not all VM settings are available for modification within the remote
2674 session context.
2675
2676 This operation can take some time (a new VM is started in a new process,
2677 for which memory and other resources need to be set up). Because of this,
2678 an <link to="IProgress" /> is returned to allow the caller to wait for this
2679 asynchronous operation to be completed. Until then, the remote session
2680 object remains in the closed state, and accessing the machine or its
2681 console through it is invalid. It is recommended to use
2682 <link to="IProgress::waitForCompletion" /> or similar calls to wait for
2683 completion. Completion is signalled when the VM is powered on. Error
2684 messages etc. can be queried via the progress object, if available.
2685
2686 As with all <link to="ISession" /> objects, it is recommended to call
2687 <link to="ISession::close" /> on the local session object once openRemoteSession()
2688 has been called. However, the session's state (see <link to="ISession::state" />)
2689 will not return to "Closed" until the remote session has also closed (i.e.
2690 until the VM is no longer running). In that case, however, the state of
2691 the session will automatically change back to "Closed".
2692
2693 Currently supported session types (values of the @a type
2694 argument) are:
2695 <ul>
2696 <li><tt>"gui"</tt>: VirtualBox Qt GUI session</li>
2697 <li><tt>"vrdp"</tt>: VirtualBox VRDP Server session</li>
2698 <li><tt>"sdl"</tt>: VirtualBox SDL GUI session</li>
2699 </ul>
2700
2701 The @a environment argument is a string containing definitions of
2702 environment variables in the following format:
2703 @code
2704 NAME[=VALUE]\n
2705 NAME[=VALUE]\n
2706 ...
2707 @endcode
2708 where <tt>\\n</tt> is the new line character. These environment
2709 variables will be appended to the environment of the VirtualBox server
2710 process. If an environment variable exists both in the server process
2711 and in this list, the value from this list takes precedence over the
2712 server's variable. If the value of the environment variable is
2713 omitted, this variable will be removed from the resulting environment.
2714 If the environment string is @c null or empty, the server environment
2715 is inherited by the started process as is.
2716
2717 <see>openExistingSession</see>
2718
2719 <result name="E_UNEXPECTED">
2720 Virtual machine not registered.
2721 </result>
2722 <result name="E_INVALIDARG">
2723 Invalid session type @a type.
2724 </result>
2725 <result name="VBOX_E_OBJECT_NOT_FOUND">
2726 No machine matching @a machineId found.
2727 </result>
2728 <result name="VBOX_E_INVALID_OBJECT_STATE">
2729 Session already open or being opened.
2730 </result>
2731 <result name="VBOX_E_IPRT_ERROR">
2732 Launching process for machine failed.
2733 </result>
2734 <result name="VBOX_E_VM_ERROR">
2735 Failed to assign machine to session.
2736 </result>
2737
2738 </desc>
2739 <param name="session" type="ISession" dir="in">
2740 <desc>
2741 Session object that will represent the opened remote session
2742 after successful method invocation (this object must not
2743 represent an already open session).
2744 </desc>
2745 </param>
2746 <param name="machineId" type="uuid" mod="string" dir="in">
2747 <desc>ID of the virtual machine to open a session with.</desc>
2748 </param>
2749 <param name="type" type="wstring" dir="in">
2750 <desc>
2751 Type of the remote session (case sensitive).
2752 </desc>
2753 </param>
2754 <param name="environment" type="wstring" dir="in">
2755 <desc>
2756 Environment to pass to the opened session.
2757 </desc>
2758 </param>
2759 <param name="progress" type="IProgress" dir="return">
2760 <desc>Progress object to track the operation completion.</desc>
2761 </param>
2762 </method>
2763
2764 <method name="openExistingSession">
2765 <desc>
2766 Opens a new remote session with the virtual machine for
2767 which a direct session is already open.
2768
2769 The remote session provides some level of control over the VM
2770 execution (using the IConsole interface) to the caller; however,
2771 within the remote session context, not all VM settings are available
2772 for modification.
2773
2774 As opposed to <link to="#openRemoteSession"/>, the number of
2775 remote sessions opened this way is not limited by the API
2776
2777 <note>
2778 It is an error to open a remote session with the machine that
2779 doesn't have an open direct session.
2780 </note>
2781
2782 <result name="E_UNEXPECTED">
2783 Virtual machine not registered.
2784 </result>
2785 <result name="VBOX_E_OBJECT_NOT_FOUND">
2786 No machine matching @a machineId found.
2787 </result>
2788 <result name="VBOX_E_INVALID_OBJECT_STATE">
2789 Session already open or being opened.
2790 </result>
2791 <result name="VBOX_E_INVALID_SESSION_STATE">
2792 Direct session state not Open.
2793 </result>
2794 <result name="VBOX_E_VM_ERROR">
2795 Failed to get console object from direct session or assign
2796 machine to session.
2797 </result>
2798
2799 <see>openRemoteSession</see>
2800 </desc>
2801 <param name="session" type="ISession" dir="in">
2802 <desc>
2803 Session object that will represent the open remote session
2804 after successful method invocation. This object must not
2805 represent an already open session.
2806 <note>
2807 This session will be automatically closed when the peer
2808 (direct) session dies or gets closed.
2809 </note>
2810 </desc>
2811 </param>
2812 <param name="machineId" type="uuid" mod="string" dir="in">
2813 <desc>ID of the virtual machine to open a session with.</desc>
2814 </param>
2815 </method>
2816
2817 <method name="registerCallback">
2818 <desc>
2819 Registers a new global VirtualBox callback. The methods of the given
2820 callback object will be called by VirtualBox when an appropriate
2821 event occurs.
2822
2823 <result name="E_INVALIDARG">
2824 A @c null callback cannot be registered.
2825 </result>
2826
2827 </desc>
2828 <param name="callback" type="IVirtualBoxCallback" dir="in">
2829 <desc>Callback object to register.</desc>
2830 </param>
2831 </method>
2832
2833 <method name="unregisterCallback">
2834 <desc>
2835 Unregisters the previously registered global VirtualBox callback.
2836
2837 <result name="E_INVALIDARG">
2838 Specified @a callback not registered.
2839 </result>
2840
2841 </desc>
2842 <param name="callback" type="IVirtualBoxCallback" dir="in">
2843 <desc>Callback object to unregister.</desc>
2844 </param>
2845 </method>
2846
2847 <method name="waitForPropertyChange">
2848 <desc>
2849 Blocks the caller until any of the properties represented by the
2850 @a what argument changes the value or until the given timeout interval
2851 expires.
2852
2853 The @a what argument is a comma separated list of property masks that
2854 describe properties the caller is interested in. The property mask is
2855 a string in the following format:
2856
2857 <pre>
2858 [[group.]subgroup.]name
2859 </pre>
2860
2861 where @c name is the property name and @c group, @c subgroup are zero
2862 or more property group specifiers. Each element (group or name) in
2863 the property mask may be either a Latin string or an asterisk symbol
2864 (@c "*") which is used to match any string for the given element. A
2865 property mask that doesn't contain asterisk symbols represents a
2866 single fully qualified property name.
2867
2868 Groups in the fully qualified property name go from more generic (the
2869 left-most part) to more specific (the right-most part). The first
2870 element is usually a name of the object the property belongs to. The
2871 second element may be either a property name, or a child object name,
2872 or an index if the preceding element names an object which is one of
2873 many objects of the same type. This way, property names form a
2874 hierarchy of properties. Here are some examples of property names:
2875
2876 <table>
2877 <tr>
2878 <td><tt>VirtualBox.version</tt></td>
2879 <td><link to="IVirtualBox::version"/> property</td>
2880 </tr>
2881 <tr>
2882 <td><tt>Machine.&lt;UUID&gt;.name</tt></td>
2883 <td><link to="IMachine::name"/> property of the machine with the
2884 given UUID</td>
2885 </tr>
2886 </table>
2887
2888 Most property names directly correspond to the properties of objects
2889 (components) provided by the VirtualBox library and may be used to
2890 track changes to these properties. However, there may be
2891 pseudo-property names that don't correspond to any existing object's
2892 property directly, as well as there may be object properties that
2893 don't have a corresponding property name that is understood by this
2894 method, and therefore changes to such properties cannot be
2895 tracked. See individual object's property descriptions to get a
2896 fully qualified property name that can be used with this method (if
2897 any).
2898
2899 There is a special property mask @c "*" (i.e. a string consisting of a
2900 single asterisk symbol) that can be used to match all properties.
2901 Below are more examples of property masks:
2902
2903 <table>
2904 <tr>
2905 <td><tt>VirtualBox.*</tt></td>
2906 <td>Track all properties of the VirtualBox object</td>
2907 </tr>
2908 <tr>
2909 <td><tt>Machine.*.name</tt></td>
2910 <td>Track changes to the <link to="IMachine::name"/> property of
2911 all registered virtual machines</td>
2912 </tr>
2913 </table>
2914
2915 <note>
2916 This function is not implemented in the current version of the
2917 product.
2918 </note>
2919 </desc>
2920 <param name="what" type="wstring" dir="in">
2921 <desc>Comma separated list of property masks.</desc>
2922 </param>
2923 <param name="timeout" type="unsigned long" dir="in">
2924 <desc>
2925 Wait timeout in milliseconds.
2926 Specify -1 for an indefinite wait.
2927 </desc>
2928 </param>
2929 <param name="changed" type="wstring" dir="out">
2930 <desc>
2931 Comma separated list of properties that have been changed and caused
2932 this method to return to the caller.
2933 </desc>
2934 </param>
2935 <param name="values" type="wstring" dir="out">
2936 <desc>Reserved, not currently used.</desc>
2937 </param>
2938 </method>
2939
2940 <!--method name="createDHCPServerForInterface">
2941 <desc>
2942 Creates a dhcp server settings to be used for the given interface
2943 <result name="E_INVALIDARG">
2944 Host network interface @a name already exists.
2945 </result>
2946 </desc>
2947 <param name="interface" type="IHostNetworkInterface" dir="in">
2948 <desc>Network Interface</desc>
2949 </param>
2950 <param name="server" type="IDHCPServer" dir="out">
2951 <desc>Dhcp server settings</desc>
2952 </param>
2953 </method-->
2954
2955 <method name="createDHCPServer">
2956 <desc>
2957 Creates a dhcp server settings to be used for the given internal network name
2958 <result name="E_INVALIDARG">
2959 Host network interface @a name already exists.
2960 </result>
2961 </desc>
2962 <param name="name" type="wstring" dir="in">
2963 <desc>server name</desc>
2964 </param>
2965 <param name="server" type="IDHCPServer" dir="return">
2966 <desc>Dhcp server settings</desc>
2967 </param>
2968 </method>
2969
2970 <method name="findDHCPServerByNetworkName">
2971 <desc>
2972 Searches a dhcp server settings to be used for the given internal network name
2973 <result name="E_INVALIDARG">
2974 Host network interface @a name already exists.
2975 </result>
2976
2977 </desc>
2978 <param name="name" type="wstring" dir="in">
2979 <desc>server name</desc>
2980 </param>
2981 <param name="server" type="IDHCPServer" dir="return">
2982 <desc>Dhcp server settings</desc>
2983 </param>
2984 </method>
2985
2986 <!--method name="findDHCPServerForInterface">
2987 <desc>
2988 Searches a dhcp server settings to be used for the given interface
2989 <result name="E_INVALIDARG">
2990 Host network interface @a name already exists.
2991 </result>
2992 </desc>
2993 <param name="interface" type="IHostNetworkInterface" dir="in">
2994 <desc>Network Interface</desc>
2995 </param>
2996 <param name="server" type="IDHCPServer" dir="out">
2997 <desc>Dhcp server settings</desc>
2998 </param>
2999 </method-->
3000
3001 <method name="removeDHCPServer">
3002 <desc>
3003 Removes the dhcp server settings
3004 <result name="E_INVALIDARG">
3005 Host network interface @a name already exists.
3006 </result>
3007 </desc>
3008 <param name="server" type="IDHCPServer" dir="in">
3009 <desc>Dhcp server settings to be removed</desc>
3010 </param>
3011 </method>
3012
3013
3014 <method name="checkFirmwarePresent">
3015 <desc>
3016 Check if this VirtualBox installation has a firmware
3017 of the given type available, either system-wide or per-user.
3018 Optionally, this may return a hint where this firmware can be
3019 downloaded from.
3020 </desc>
3021 <param name="firmwareType" type="FirmwareType" dir="in">
3022 <desc>
3023 Type of firmware to check.
3024 </desc>
3025 </param>
3026 <param name="version" type="wstring" dir="in">
3027 <desc>Expected version number, usually empty string (presently ignored).</desc>
3028 </param>
3029
3030 <param name="url" type="wstring" dir="out">
3031 <desc>
3032 Suggested URL to download this firmware from.
3033 </desc>
3034 </param>
3035
3036 <param name="file" type="wstring" dir="out">
3037 <desc>
3038 Filename of firmware, only valid if result == TRUE.
3039 </desc>
3040 </param>
3041
3042 <param name="result" type="boolean" dir="return">
3043 <desc>If firmware of this type and version is available.</desc>
3044 </param>
3045 </method>
3046
3047 </interface>
3048
3049 <!--
3050 // IVFSExplorer
3051 /////////////////////////////////////////////////////////////////////////
3052 -->
3053
3054 <enum
3055 name="VFSType"
3056 uuid="813999ba-b949-48a8-9230-aadc6285e2f2"
3057 >
3058 <desc>
3059 Virtual file systems supported by VFSExplorer.
3060 </desc>
3061
3062 <const name="File" value="1" />
3063 <const name="Cloud" value="2" />
3064 <const name="S3" value="3" />
3065 <const name="WebDav" value="4" />
3066 </enum>
3067
3068 <enum
3069 name="VFSFileType"
3070 uuid="714333cd-44e2-415f-a245-d378fa9b1242"
3071 >
3072 <desc>
3073 File types known by VFSExplorer.
3074 </desc>
3075
3076 <const name="Unknown" value="1" />
3077 <const name="Fifo" value="2" />
3078 <const name="DevChar" value="3" />
3079 <const name="Directory" value="4" />
3080 <const name="DevBlock" value="5" />
3081 <const name="File" value="6" />
3082 <const name="SymLink" value="7" />
3083 <const name="Socket" value="8" />
3084 <const name="WhiteOut" value="9" />
3085 </enum>
3086
3087 <interface
3088 name="IVFSExplorer" extends="$unknown"
3089 uuid="2bb864a1-02a3-4474-a1d4-fb5f23b742e1"
3090 wsmap="managed"
3091 >
3092 <desc>
3093 The VFSExplorer interface unifies access to different file system
3094 types. This includes local file systems as well remote file systems like
3095 S3. For a list of supported types see <link to="VFSType" />.
3096 An instance of this is returned by <link to="IAppliance::createVFSExplorer" />.
3097 </desc>
3098
3099 <attribute name="path" type="wstring" readonly="yes">
3100 <desc>Returns the current path in the virtual file system.</desc>
3101 </attribute>
3102
3103 <attribute name="type" type="VFSType" readonly="yes">
3104 <desc>Returns the file system type which is currently in use.</desc>
3105 </attribute>
3106
3107 <method name="update">
3108 <desc>Updates the internal list of files/directories from the
3109 current directory level. Use <link to="#entryList" /> to get the full list
3110 after a call to this method.</desc>
3111
3112 <param name="aProgress" type="IProgress" dir="return">
3113 <desc>Progress object to track the operation completion.</desc>
3114 </param>
3115 </method>
3116
3117 <method name="cd">
3118 <desc>Change the current directory level.</desc>
3119
3120 <param name="aDir" type="wstring" dir="in">
3121 <desc>The name of the directory to go in.</desc>
3122 </param>
3123
3124 <param name="aProgress" type="IProgress" dir="return">
3125 <desc>Progress object to track the operation completion.</desc>
3126 </param>
3127 </method>
3128
3129 <method name="cdUp">
3130 <desc>Go one directory upwards from the current directory level.</desc>
3131
3132 <param name="aProgress" type="IProgress" dir="return">
3133 <desc>Progress object to track the operation completion.</desc>
3134 </param>
3135 </method>
3136
3137 <method name="entryList">
3138 <desc>Returns a list of files/directories after a call to <link
3139 to="#update" />. The user is responsible for keeping this internal
3140 list up do date.</desc>
3141
3142 <param name="aNames" type="wstring" safearray="yes" dir="out">
3143 <desc>The list of names for the entries.</desc>
3144 </param>
3145
3146 <param name="aTypes" type="unsigned long" safearray="yes" dir="out">
3147 <desc>The list of types for the entries.</desc>
3148 </param>
3149 </method>
3150
3151 <method name="exists">
3152 <desc>Checks if the given file list exists in the current directory
3153 level.</desc>
3154
3155 <param name="aNames" type="wstring" safearray="yes" dir="in">
3156 <desc>The names to check.</desc>
3157 </param>
3158
3159 <param name="aExists" type="wstring" safearray="yes" dir="return">
3160 <desc>The names which exist.</desc>
3161 </param>
3162 </method>
3163
3164 <method name="remove">
3165 <desc>Deletes the given files in the current directory level.</desc>
3166
3167 <param name="aNames" type="wstring" safearray="yes" dir="in">
3168 <desc>The names to remove.</desc>
3169 </param>
3170
3171 <param name="aProgress" type="IProgress" dir="return">
3172 <desc>Progress object to track the operation completion.</desc>
3173 </param>
3174 </method>
3175
3176 </interface>
3177
3178 <!--
3179 // IAppliance
3180 /////////////////////////////////////////////////////////////////////////
3181 -->
3182
3183 <interface
3184 name="IAppliance" extends="$unknown"
3185 uuid="e3ba9ab9-ac2c-4266-8bd2-91c4bf721ceb"
3186 wsmap="managed"
3187 >
3188 <desc>
3189 Represents a platform-independent appliance in OVF format. An instance of this is returned
3190 by <link to="IVirtualBox::createAppliance" />, which can then be used to import and export
3191 virtual machines within an appliance with VirtualBox.
3192
3193 The OVF standard suggests two different physical file formats:
3194
3195 <ol>
3196 <li>If the appliance is distributed as a set of files, there must be at least one XML descriptor
3197 file that conforms to the OVF standard and carries an <tt>.ovf</tt> file extension. If
3198 this descriptor file references other files such as disk images, as OVF appliances typically
3199 do, those additional files must be in the same directory as the descriptor file.</li>
3200
3201 <li>If the appliance is distributed as a single file, it must be in TAR format and have the
3202 <tt>.ova</tt> file extension. This TAR file must then contain at least the OVF descriptor
3203 files and optionally other files.
3204
3205 At this time, VirtualBox does not not yet support the packed (TAR) variant; support will
3206 be added with a later version.</li>
3207 </ol>
3208
3209 <b>Importing</b> an OVF appliance into VirtualBox as instances of
3210 <link to="IMachine" /> involves the following sequence of API calls:
3211
3212 <ol>
3213 <li>Call <link to="IVirtualBox::createAppliance" />. This will create an empty IAppliance object.
3214 </li>
3215
3216 <li>On the new object, call <link to="#read" /> with the full path of the OVF file you
3217 would like to import. So long as this file is syntactically valid, this will succeed
3218 and fill the appliance object with the parsed data from the OVF file.
3219 </li>
3220
3221 <li>Next, call <link to="#interpret" />, which analyzes the OVF data and sets up the
3222 contents of the IAppliance attributes accordingly. These can be inspected by a
3223 VirtualBox front-end such as the GUI, and the suggestions can be displayed to the
3224 user. In particular, the <link to="#virtualSystemDescriptions" /> array contains
3225 instances of <link to="IVirtualSystemDescription" /> which represent the virtual
3226 systems in the OVF, which in turn describe the virtual hardware prescribed by the
3227 OVF (network and hardware adapters, virtual disk images, memory size and so on).
3228 The GUI can then give the user the option to confirm and/or change these suggestions.
3229 </li>
3230
3231 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
3232 virtual system to override the suggestions made by the interpret() routine.
3233 </li>
3234
3235 <li>Finally, call <link to="#importMachines" /> to create virtual machines in
3236 VirtualBox as instances of <link to="IMachine" /> that match the information in the
3237 virtual system descriptions.
3238 </li>
3239 </ol>
3240
3241 <b>Exporting</b> VirtualBox machines into an OVF appliance involves the following steps:
3242
3243 <ol>
3244 <li>As with importing, first call <link to="IVirtualBox::createAppliance" /> to create
3245 an empty IAppliance object.
3246 </li>
3247
3248 <li>For each machine you would like to export, call <link to="IMachine::export" />
3249 with the IAppliance object you just created. This creates an instance of
3250 <link to="IVirtualSystemDescription" /> inside the appliance.
3251 </li>
3252
3253 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
3254 virtual system to override the suggestions made by the export() routine.
3255 </li>
3256
3257 <li>Finally, call <link to="#write" /> with a path specification to have the OVF
3258 file written.</li>
3259 </ol>
3260
3261 </desc>
3262
3263 <attribute name="path" type="wstring" readonly="yes">
3264 <desc>Path to the main file of the OVF appliance, which is either the <tt>.ovf</tt> or
3265 the <tt>.ova</tt> file passed to <link to="#read" /> (for import) or
3266 <link to="#write" /> (for export).
3267 This attribute is empty until one of these methods has been called.
3268 </desc>
3269 </attribute>
3270
3271 <attribute name="disks" type="wstring" readonly="yes" safearray="yes">
3272 <desc>
3273 Array of virtual disk definitions. One such description exists for each
3274 disk definition in the OVF; each string array item represents one such piece of
3275 disk information, with the information fields separated by tab (\t) characters.
3276
3277 The caller should be prepared for additional fields being appended to
3278 this string in future versions of VirtualBox and therefore check for
3279 the number of tabs in the strings returned.
3280
3281 In the current version, the following eight fields are returned per string
3282 in the array:
3283
3284 <ol>
3285 <li>Disk ID (unique string identifier given to disk)</li>
3286
3287 <li>Capacity (unsigned integer indicating the maximum capacity of the disk)</li>
3288
3289 <li>Populated size (optional unsigned integer indicating the current size of the
3290 disk; can be approximate; -1 if unspecified)</li>
3291
3292 <li>Format (string identifying the disk format, typically
3293 "http://www.vmware.com/specifications/vmdk.html#sparse")</li>
3294
3295 <li>Reference (where to find the disk image, typically a file name; if empty,
3296 then the disk should be created on import)</li>
3297
3298 <li>Image size (optional unsigned integer indicating the size of the image,
3299 which need not necessarily be the same as the values specified above, since
3300 the image may be compressed or sparse; -1 if not specified)</li>
3301
3302 <li>Chunk size (optional unsigned integer if the image is split into chunks;
3303 presently unsupported and always -1)</li>
3304
3305 <li>Compression (optional string equalling "gzip" if the image is gzip-compressed)</li>
3306 </ol>
3307 </desc>
3308 </attribute>
3309
3310 <attribute name="virtualSystemDescriptions" type="IVirtualSystemDescription" readonly="yes" safearray="yes">
3311 <desc> Array of virtual system descriptions. One such description is created
3312 for each virtual system found in the OVF.
3313 This array is empty until either <link to="#interpret" /> (for import) or <link to="IMachine::export" />
3314 (for export) has been called.
3315 </desc>
3316 </attribute>
3317
3318 <method name="read">
3319 <desc>
3320 Reads an OVF file into the appliance object.
3321
3322 This method succeeds if the OVF is syntactically valid and, by itself, without errors. The
3323 mere fact that this method returns successfully does not mean that VirtualBox supports all
3324 features requested by the appliance; this can only be examined after a call to <link to="#interpret" />.
3325 </desc>
3326 <param name="file" type="wstring" dir="in">
3327 <desc>
3328 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3329 on whether the appliance is distributed as a set of files or as a single file, respectively).
3330 </desc>
3331 </param>
3332 <param name="aProgress" type="IProgress" dir="return">
3333 <desc></desc>
3334 </param>
3335 </method>
3336
3337 <method name="interpret">
3338 <desc>
3339 Interprets the OVF data that was read when the appliance was constructed. After
3340 calling this method, one can inspect the
3341 <link to="#virtualSystemDescriptions" /> array attribute, which will then contain
3342 one <link to="IVirtualSystemDescription" /> for each virtual machine found in
3343 the appliance.
3344
3345 Calling this method is the second step of importing an appliance into VirtualBox;
3346 see <link to="IAppliance" /> for an overview.
3347
3348 After calling this method, one should call <link to="#getWarnings" /> to find out
3349 if problems were encountered during the processing which might later lead to
3350 errors.
3351 </desc>
3352 </method>
3353
3354 <method name="importMachines">
3355 <desc>
3356 Imports the appliance into VirtualBox by creating instances of <link to="IMachine" />
3357 and other interfaces that match the information contained in the appliance as
3358 closely as possible, as represented by the import instructions in the
3359 <link to="#virtualSystemDescriptions" /> array.
3360
3361 Calling this method is the final step of importing an appliance into VirtualBox;
3362 see <link to="IAppliance" /> for an overview.
3363
3364 Since importing the appliance will most probably involve copying and converting
3365 disk images, which can take a long time, this method operates asynchronously and
3366 returns an IProgress object to allow the caller to monitor the progress.
3367 </desc>
3368
3369 <param name="aProgress" type="IProgress" dir="return">
3370 <desc></desc>
3371 </param>
3372 </method>
3373
3374 <method name="createVFSExplorer">
3375 <desc>Returns a <link to="IVFSExplorer" /> object for the given URI.</desc>
3376
3377 <param name="aUri" type="wstring" dir="in">
3378 <desc>The URI describing the file system to use.</desc>
3379 </param>
3380
3381 <param name="aExplorer" type="IVFSExplorer" dir="return">
3382 <desc></desc>
3383 </param>
3384 </method>
3385
3386 <method name="write">
3387 <desc>
3388 Writes the contents of the appliance exports into a new OVF file.
3389
3390 Calling this method is the final step of exporting an appliance from VirtualBox;
3391 see <link to="IAppliance" /> for an overview.
3392
3393 Since exporting the appliance will most probably involve copying and converting
3394 disk images, which can take a long time, this method operates asynchronously and
3395 returns an IProgress object to allow the caller to monitor the progress.
3396 </desc>
3397 <param name="format" type="wstring" dir="in">
3398 <desc>
3399 Output format, as a string. Currently supported formats are "ovf-0.9" and "ovf-1.0";
3400 future versions of VirtualBox may support additional formats.
3401 </desc>
3402 </param>
3403 <param name="path" type="wstring" dir="in">
3404 <desc>
3405 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3406 on whether the appliance is distributed as a set of files or as a single file, respectively).
3407 </desc>
3408 </param>
3409 <param name="aProgress" type="IProgress" dir="return">
3410 <desc>Progress object to track the operation completion.</desc>
3411 </param>
3412 </method>
3413
3414 <method name="getWarnings">
3415 <desc>Returns textual warnings which occured during execution of <link to="#interpret" />.</desc>
3416
3417 <param name="aWarnings" type="wstring" dir="return" safearray="yes">
3418 <desc></desc>
3419 </param>
3420 </method>
3421
3422 </interface>
3423
3424 <enum
3425 name="VirtualSystemDescriptionType"
3426 uuid="aacc58de-5b45-4f82-ae2e-dd9a824fc3b5"
3427 >
3428 <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
3429 a configuration value.</desc>
3430
3431 <const name="Ignore" value="1" />
3432 <const name="OS" value="2" />
3433 <const name="Name" value="3" />
3434 <const name="Product" value="4" />
3435 <const name="Vendor" value="5" />
3436 <const name="Version" value="6" />
3437 <const name="ProductUrl" value="7" />
3438 <const name="VendorUrl" value="8" />
3439 <const name="Description" value="9" />
3440 <const name="License" value="10" />
3441 <const name="Miscellaneous" value="11" />
3442 <const name="CPU" value="12" />
3443 <const name="Memory" value="13" />
3444 <const name="HardDiskControllerIDE" value="14" />
3445 <const name="HardDiskControllerSATA" value="15" />
3446 <const name="HardDiskControllerSCSI" value="16" />
3447 <const name="HardDiskImage" value="17" />
3448 <const name="Floppy" value="18" />
3449 <const name="CDROM" value="19" />
3450 <const name="NetworkAdapter" value="20" />
3451 <const name="USBController" value="21" />
3452 <const name="SoundCard" value="22" />
3453
3454 </enum>
3455
3456 <enum
3457 name="VirtualSystemDescriptionValueType"
3458 uuid="56d9403f-3425-4118-9919-36f2a9b8c77c"
3459 >
3460 <desc>Used with <link to="IVirtualSystemDescription::getValuesByType" /> to describe the value
3461 type to fetch.</desc>
3462
3463 <const name="Reference" value="1" />
3464 <const name="Original" value="2" />
3465 <const name="Auto" value="3" />
3466 <const name="ExtraConfig" value="4" />
3467
3468 </enum>
3469
3470 <interface
3471 name="IVirtualSystemDescription" extends="$unknown"
3472 uuid="d7525e6c-531a-4c51-8e04-41235083a3d8"
3473 wsmap="managed"
3474 >
3475
3476 <desc>This interface is used in the <link to="IAppliance::virtualSystemDescriptions" /> array.
3477 After <link to="IAppliance::interpret" /> has been called, that array contains
3478 information about how the virtual systems described in the OVF should best be imported into VirtualBox
3479 virtual machines. See <link to="IAppliance" /> for the steps required to import an OVF
3480 into VirtualBox.
3481 </desc>
3482
3483 <attribute name="count" type="unsigned long" readonly="yes">
3484 <desc>Return the number of virtual system description entries.</desc>
3485 </attribute>
3486
3487 <method name="getDescription">
3488 <desc>Returns information about the virtual system as arrays of instruction items. In each array, the
3489 items with the same indices correspond and jointly represent an import instruction for VirtualBox.
3490
3491 The list below identifies the value sets that are possible depending on the
3492 <link to="VirtualSystemDescriptionType" /> enum value in the array item in @a aTypes[]. In each case,
3493 the array item with the same index in @a aOvfValues[] will contain the original value as contained
3494 in the OVF file (just for informational purposes), and the corresponding item in @a aVBoxValues[]
3495 will contain a suggested value to be used for VirtualBox. Depending on the description type,
3496 the @a aExtraConfigValues[] array item may also be used.
3497
3498 <ul>
3499 <li>
3500 "OS": the guest operating system type. There must be exactly one such array item on import. The
3501 corresponding item in @a aVBoxValues[] contains the suggested guest operating system for VirtualBox.
3502 This will be one of the values listed in <link to="IVirtualBox::guestOSTypes" />. The corresponding
3503 item in @a aOvfValues[] will contain a numerical value that described the operating system in the OVF.
3504 </li>
3505 <li>
3506 "Name": the name to give to the new virtual machine. There can be at most one such array item;
3507 if none is present on import, then an automatic name will be created from the operating system
3508 type. The correponding item im @a aOvfValues[] will contain the suggested virtual machine name
3509 from the OVF file, and @a aVBoxValues[] will contain a suggestion for a unique VirtualBox
3510 <link to="IMachine" /> name that does not exist yet.
3511 </li>
3512 <li>
3513 "Description": an arbitrary description.
3514 </li>
3515 <li>
3516 "License": the EULA section from the OVF, if present. It is the responsibility of the calling
3517 code to display such a license for agreement; the Main API does not enforce any such policy.
3518 </li>
3519 <li>
3520 Miscellaneous: reserved for future use.
3521 </li>
3522 <li>
3523 "CPU": the number of CPUs. There can be at most one such item, which will presently be ignored.
3524 </li>
3525 <li>
3526 "Memory": the amount of guest RAM, in bytes. There can be at most one such array item; if none
3527 is present on import, then VirtualBox will set a meaningful default based on the operating system
3528 type.
3529 </li>
3530 <li>
3531 "HardDiskControllerIDE": an IDE hard disk controller. There can be at most two such items.
3532 An optional value in @a aOvfValues[] and @a aVBoxValues[] can be "PIIX3" or "PIIX4" to specify
3533 the type of IDE controller; this corresponds to the ResourceSubType element which VirtualBox
3534 writes into the OVF.
3535 The matching item in the @a aRefs[] array will contain an integer that items of the "Harddisk"
3536 type can use to specify which hard disk controller a virtual disk should be connected to.
3537 Note that in OVF, an IDE controller has two channels, corresponding to "master" and "slave"
3538 in traditional terminology, whereas the IDE storage controller that VirtualBox supports in
3539 its virtual machines supports four channels (primary master, primary slave, secondary master,
3540 secondary slave) and thus maps to two IDE controllers in the OVF sense.
3541 </li>
3542 <li>
3543 "HardDiskControllerSATA": an SATA hard disk controller. There can be at most one such item. This
3544 has no value in @a aOvfValues[] or @a aVBoxValues[].
3545 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
3546 </li>
3547 <li>
3548 "HardDiskControllerSCSI": a SCSI hard disk controller. There can be at most one such item.
3549 The items in @a aOvfValues[] and @a aVBoxValues[] will either be "LsiLogic" or "BusLogic".
3550 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
3551 </li>
3552 <li>
3553 "HardDiskImage": a virtual hard disk, most probably as a reference to an image file. There can be an
3554 arbitrary number of these items, one for each virtual disk image that accompanies the OVF.
3555
3556 The array item in @a aOvfValues[] will contain the file specification from the OVF file (without
3557 a path since the image file should be in the same location as the OVF file itself), whereas the
3558 item in @a aVBoxValues[] will contain a qualified path specification to where VirtualBox uses the
3559 hard disk image. This means that on import the image will be copied and converted from the
3560 "ovf" location to the "vbox" location; on export, this will be handled the other way round.
3561 On import, the target image will also be registered with VirtualBox.
3562
3563 The matching item in the @a aExtraConfigValues[] array must contain a string of the following
3564 format: "controller=&lt;index&gt;;channel=&lt;c&gt;"
3565 In this string, &lt;index&gt; must be an integer specifying the hard disk controller to connect
3566 the image to. That number must be the index of an array item with one of the hard disk controller
3567 types (HardDiskControllerSCSI, HardDiskControllerSATA, HardDiskControllerIDE).
3568 In addition, &lt;c&gt; must specify the channel to use on that controller. For IDE controllers,
3569 this can be 0 or 1 for master or slave, respectively. For compatibility with VirtualBox versions
3570 before 3.2, the values 2 and 3 (for secondary master and secondary slave) are also supported, but
3571 no longer exported. For SATA and SCSI controllers, the channel can range from 0-29.
3572 </li>
3573 <li>
3574 "CDROM": a virtual CD-ROM drive. The matching item in @a aExtraConfigValue[] contains the same
3575 attachment information as with "HardDiskImage" items.
3576 </li>
3577 <li>
3578 "CDROM": a virtual floppy drive. The matching item in @a aExtraConfigValue[] contains the same
3579 attachment information as with "HardDiskImage" items.
3580 </li>
3581 <li>
3582 "NetworkAdapter": a network adapter. The array item in @a aVBoxValues[] will specify the hardware
3583 for the network adapter, whereas the array item in @a aExtraConfigValues[] will have a string
3584 of the "type=&lt;X&gt;" format, where &lt;X&gt; must be either "NAT" or "Bridged".
3585 </li>
3586 <li>
3587 "USBController": a USB controller. There can be at most one such item. If and only if such an
3588 item ispresent, USB support will be enabled for the new virtual machine.
3589 </li>
3590 <li>
3591 "SoundCard": a sound card. There can be at most one such item. If and only if such an item is
3592 present, sound support will be enabled for the new virtual machine. Note that the virtual
3593 machine in VirtualBox will always be presented with the standard VirtualBox soundcard, which
3594 may be different from the virtual soundcard expected by the appliance.
3595 </li>
3596 </ul>
3597
3598 </desc>
3599
3600 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3601 <desc></desc>
3602 </param>
3603
3604 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3605 <desc></desc>
3606 </param>
3607
3608 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3609 <desc></desc>
3610 </param>
3611
3612 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3613 <desc></desc>
3614 </param>
3615
3616 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3617 <desc></desc>
3618 </param>
3619
3620 </method>
3621
3622 <method name="getDescriptionByType">
3623 <desc>This is the same as <link to="#getDescription" /> except that you can specify which types
3624 should be returned.</desc>
3625
3626 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3627 <desc></desc>
3628 </param>
3629
3630 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3631 <desc></desc>
3632 </param>
3633
3634 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3635 <desc></desc>
3636 </param>
3637
3638 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3639 <desc></desc>
3640 </param>
3641
3642 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3643 <desc></desc>
3644 </param>
3645
3646 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3647 <desc></desc>
3648 </param>
3649
3650 </method>
3651
3652 <method name="getValuesByType">
3653 <desc>This is the same as <link to="#getDescriptionByType" /> except that you can specify which
3654 value types should be returned. See <link to="VirtualSystemDescriptionValueType" /> for possible
3655 values.</desc>
3656
3657 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3658 <desc></desc>
3659 </param>
3660
3661 <param name="aWhich" type="VirtualSystemDescriptionValueType" dir="in">
3662 <desc></desc>
3663 </param>
3664
3665 <param name="aValues" type="wstring" dir="return" safearray="yes">
3666 <desc></desc>
3667 </param>
3668
3669 </method>
3670
3671 <method name="setFinalValues">
3672 <desc>
3673 This method allows the appliance's user to change the configuration for the virtual
3674 system descriptions. For each array item returned from <link to="#getDescription" />,
3675 you must pass in one boolean value and one configuration value.
3676
3677 Each item in the boolean array determines whether the particular configuration item
3678 should be enabled.
3679 You can only disable items of the types HardDiskControllerIDE, HardDiskControllerSATA,
3680 HardDiskControllerSCSI, HardDiskImage, CDROM, Floppy, NetworkAdapter, USBController
3681 and SoundCard.
3682
3683 For the "vbox" and "extra configuration" values, if you pass in the same arrays
3684 as returned in the aVBoxValues and aExtraConfigValues arrays from getDescription(),
3685 the configuration remains unchanged. Please see the documentation for getDescription()
3686 for valid configuration values for the individual array item types. If the
3687 corresponding item in the aEnabled array is @c false, the configuration value is ignored.
3688 </desc>
3689
3690 <param name="aEnabled" type="boolean" dir="in" safearray="yes">
3691 <desc></desc>
3692 </param>
3693
3694 <param name="aVBoxValues" type="wstring" dir="in" safearray="yes">
3695 <desc></desc>
3696 </param>
3697
3698 <param name="aExtraConfigValues" type="wstring" dir="in" safearray="yes">
3699 <desc></desc>
3700 </param>
3701 </method>
3702
3703 <method name="addDescription">
3704 <desc>
3705 This method adds an additional description entry to the stack of already
3706 available descriptions for this virtual system. This is handy for writing
3707 values which aren't directly supported by VirtualBox. One example would
3708 be the License type of <link to="VirtualSystemDescriptionType" />.
3709 </desc>
3710
3711 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3712 <desc></desc>
3713 </param>
3714
3715 <param name="aVBoxValue" type="wstring" dir="in">
3716 <desc></desc>
3717 </param>
3718
3719 <param name="aExtraConfigValue" type="wstring" dir="in">
3720 <desc></desc>
3721 </param>
3722 </method>
3723 </interface>
3724
3725
3726 <!--
3727 // IMachine
3728 /////////////////////////////////////////////////////////////////////////
3729 -->
3730
3731 <interface
3732 name="IInternalMachineControl" extends="$unknown"
3733 uuid="1b61599c-0686-451c-a7b6-96761f3f0ac5"
3734 internal="yes"
3735 wsmap="suppress"
3736 >
3737 <method name="setRemoveSavedState">
3738 <desc>
3739 Updates the flag whether saved state is removed on a machine state
3740 change from Saved to PoweredOff.
3741 </desc>
3742 <param name="aRemove" type="boolean" dir="in"/>
3743 </method>
3744
3745 <method name="updateState">
3746 <desc>
3747 Updates the VM state.
3748 <note>
3749 This operation will also update the settings file with
3750 the correct information about the saved state file
3751 and delete this file from disk when appropriate.
3752 </note>
3753 </desc>
3754 <param name="state" type="MachineState" dir="in"/>
3755 </method>
3756
3757 <method name="getIPCId">
3758 <param name="id" type="wstring" dir="return"/>
3759 </method>
3760
3761 <method name="setPowerUpInfo">
3762 <desc>
3763 Transfers success (@c null) or error information for this session.
3764 This method updates the progress object to signal completion of the
3765 <link to="IVirtualBox::openRemoteSession"/> method if appropriate,
3766 which means that the progress object returned by
3767 <link to="IConsole::powerUp"/>.
3768 </desc>
3769 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
3770 </method>
3771
3772 <method name="runUSBDeviceFilters">
3773 <desc>
3774 Asks the server to run USB devices filters of the associated
3775 machine against the given USB device and tell if there is
3776 a match.
3777 <note>
3778 Intended to be used only for remote USB devices. Local
3779 ones don't require to call this method (this is done
3780 implicitly by the Host and USBProxyService).
3781 </note>
3782 </desc>
3783 <param name="device" type="IUSBDevice" dir="in"/>
3784 <param name="matched" type="boolean" dir="out"/>
3785 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
3786 </method>
3787
3788 <method name="captureUSBDevice">
3789 <desc>
3790 Requests a capture of the given host USB device.
3791 When the request is completed, the VM process will
3792 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3793 notification.
3794 </desc>
3795 <param name="id" type="uuid" mod="string" dir="in"/>
3796 </method>
3797
3798 <method name="detachUSBDevice">
3799 <desc>
3800 Notification that a VM is going to detach (@a done = @c false) or has
3801 already detached (@a done = @c true) the given USB device.
3802 When the @a done = @c true request is completed, the VM process will
3803 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
3804 notification.
3805 <note>
3806 In the @a done = @c true case, the server must run its own filters
3807 and filters of all VMs but this one on the detached device
3808 as if it were just attached to the host computer.
3809 </note>
3810 </desc>
3811 <param name="id" type="uuid" mod="string" dir="in"/>
3812 <param name="done" type="boolean" dir="in"/>
3813 </method>
3814
3815 <method name="autoCaptureUSBDevices">
3816 <desc>
3817 Requests a capture all matching USB devices attached to the host.
3818 When the request is completed, the VM process will
3819 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3820 notification per every captured device.
3821 </desc>
3822 </method>
3823
3824 <method name="detachAllUSBDevices">
3825 <desc>
3826 Notification that a VM that is being powered down. The done
3827 parameter indicates whether which stage of the power down
3828 we're at. When @a done = @c false the VM is announcing its
3829 intentions, while when @a done = @c true the VM is reporting
3830 what it has done.
3831 <note>
3832 In the @a done = @c true case, the server must run its own filters
3833 and filters of all VMs but this one on all detach devices as
3834 if they were just attached to the host computer.
3835 </note>
3836 </desc>
3837 <param name="done" type="boolean" dir="in"/>
3838 </method>
3839
3840 <method name="onSessionEnd">
3841 <desc>
3842 Triggered by the given session object when the session is about
3843 to close normally.
3844 </desc>
3845 <param name="session" type="ISession" dir="in">
3846 <desc>Session that is being closed</desc>
3847 </param>
3848 <param name="progress" type="IProgress" dir="return">
3849 <desc>
3850 Used to wait until the corresponding machine is actually
3851 dissociated from the given session on the server.
3852 Returned only when this session is a direct one.
3853 </desc>
3854 </param>
3855 </method>
3856
3857 <method name="beginSavingState">
3858 <desc>
3859 Called by the VM process to inform the server it wants to
3860 save the current state and stop the VM execution.
3861 </desc>
3862 <param name="progress" type="IProgress" dir="in">
3863 <desc>
3864 Progress object created by the VM process to wait until
3865 the state is saved.
3866 </desc>
3867 </param>
3868 <param name="stateFilePath" type="wstring" dir="out">
3869 <desc>
3870 File path the VM process must save the execution state to.
3871 </desc>
3872 </param>
3873 </method>
3874
3875 <method name="endSavingState">
3876 <desc>
3877 Called by the VM process to inform the server that saving
3878 the state previously requested by #beginSavingState is either
3879 successfully finished or there was a failure.
3880
3881 <result name="VBOX_E_FILE_ERROR">
3882 Settings file not accessible.
3883 </result>
3884 <result name="VBOX_E_XML_ERROR">
3885 Could not parse the settings file.
3886 </result>
3887
3888 </desc>
3889
3890 <param name="success" type="boolean" dir="in">
3891 <desc>@c true to indicate success and @c false otherwise.
3892 </desc>
3893 </param>
3894 </method>
3895
3896 <method name="adoptSavedState">
3897 <desc>
3898 Gets called by IConsole::adoptSavedState.
3899 <result name="VBOX_E_FILE_ERROR">
3900 Invalid saved state file path.
3901 </result>
3902 </desc>
3903 <param name="savedStateFile" type="wstring" dir="in">
3904 <desc>Path to the saved state file to adopt.</desc>
3905 </param>
3906 </method>
3907
3908 <method name="beginTakingSnapshot">
3909 <desc>
3910 Called from the VM process to request from the server to perform the
3911 server-side actions of creating a snapshot (creating differencing images
3912 and the snapshot object).
3913
3914 <result name="VBOX_E_FILE_ERROR">
3915 Settings file not accessible.
3916 </result>
3917 <result name="VBOX_E_XML_ERROR">
3918 Could not parse the settings file.
3919 </result>
3920 </desc>
3921 <param name="initiator" type="IConsole" dir="in">
3922 <desc>The console object that initiated this call.</desc>
3923 </param>
3924 <param name="name" type="wstring" dir="in">
3925 <desc>Snapshot name.</desc>
3926 </param>
3927 <param name="description" type="wstring" dir="in">
3928 <desc>Snapshot description.</desc>
3929 </param>
3930 <param name="consoleProgress" type="IProgress" dir="in">
3931 <desc>
3932 Progress object created by the VM process tracking the
3933 snapshot's progress. This has the following sub-operations:
3934 <ul>
3935 <li>setting up (weight 1);</li>
3936 <li>one for each medium attachment that needs a differencing image (weight 1 each);</li>
3937 <li>another one to copy the VM state (if offline with saved state, weight is VM memory size in MB);</li>
3938 <li>another one to save the VM state (if online, weight is VM memory size in MB);</li>
3939 <li>finishing up (weight 1)</li>
3940 </ul>
3941 </desc>
3942 </param>
3943 <param name="fTakingSnapshotOnline" type="boolean" dir="in">
3944 <desc>
3945 Whether this is an online snapshot (i.e. the machine is running).
3946 </desc>
3947 </param>
3948 <param name="stateFilePath" type="wstring" dir="out">
3949 <desc>
3950 File path the VM process must save the execution state to.
3951 </desc>
3952 </param>
3953 </method>
3954
3955 <method name="endTakingSnapshot">
3956 <desc>
3957 Called by the VM process to inform the server that the snapshot
3958 previously requested by #beginTakingSnapshot is either
3959 successfully taken or there was a failure.
3960 </desc>
3961
3962 <param name="success" type="boolean" dir="in">
3963 <desc>@c true to indicate success and @c false otherwise</desc>
3964 </param>
3965 </method>
3966
3967 <method name="deleteSnapshot">
3968 <desc>
3969 Gets called by IConsole::deleteSnapshot.
3970 <result name="VBOX_E_INVALID_OBJECT_STATE">
3971 Snapshot has more than one child snapshot.
3972 </result>
3973 </desc>
3974 <param name="initiator" type="IConsole" dir="in">
3975 <desc>The console object that initiated this call.</desc>
3976 </param>
3977 <param name="id" type="uuid" mod="string" dir="in">
3978 <desc>UUID of the snapshot to delete.</desc>
3979 </param>
3980 <param name="machineState" type="MachineState" dir="out">
3981 <desc>New machine state after this operation is started.</desc>
3982 </param>
3983 <param name="progress" type="IProgress" dir="return">
3984 <desc>Progress object to track the operation completion.</desc>
3985 </param>
3986 </method>
3987
3988 <method name="restoreSnapshot">
3989 <desc>
3990 Gets called by IConsole::RestoreSnapshot.
3991 </desc>
3992 <param name="initiator" type="IConsole" dir="in">
3993 <desc>The console object that initiated this call.</desc>
3994 </param>
3995 <param name="snapshot" type="ISnapshot" dir="in">
3996 <desc>The snapshot to restore the VM state from.</desc>
3997 </param>
3998 <param name="machineState" type="MachineState" dir="out">
3999 <desc>New machine state after this operation is started.</desc>
4000 </param>
4001 <param name="progress" type="IProgress" dir="return">
4002 <desc>Progress object to track the operation completion.</desc>
4003 </param>
4004 </method>
4005
4006 <method name="pullGuestProperties">
4007 <desc>
4008 Get the list of the guest properties matching a set of patterns along
4009 with their values, time stamps and flags and give responsibility for
4010 managing properties to the console.
4011 </desc>
4012 <param name="name" type="wstring" dir="out" safearray="yes">
4013 <desc>
4014 The names of the properties returned.
4015 </desc>
4016 </param>
4017 <param name="value" type="wstring" dir="out" safearray="yes">
4018 <desc>
4019 The values of the properties returned. The array entries match the
4020 corresponding entries in the @a name array.
4021 </desc>
4022 </param>
4023 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
4024 <desc>
4025 The time stamps of the properties returned. The array entries match
4026 the corresponding entries in the @a name array.
4027 </desc>
4028 </param>
4029 <param name="flags" type="wstring" dir="out" safearray="yes">
4030 <desc>
4031 The flags of the properties returned. The array entries match the
4032 corresponding entries in the @a name array.
4033 </desc>
4034 </param>
4035 </method>
4036
4037 <method name="pushGuestProperty">
4038 <desc>
4039 Update a single guest property in IMachine.
4040 </desc>
4041 <param name="name" type="wstring" dir="in">
4042 <desc>
4043 The name of the property to be updated.
4044 </desc>
4045 </param>
4046 <param name="value" type="wstring" dir="in">
4047 <desc>
4048 The value of the property.
4049 </desc>
4050 </param>
4051 <param name="timestamp" type="unsigned long long" dir="in">
4052 <desc>
4053 The timestamp of the property.
4054 </desc>
4055 </param>
4056 <param name="flags" type="wstring" dir="in">
4057 <desc>
4058 The flags of the property.
4059 </desc>
4060 </param>
4061 </method>
4062
4063 <method name="lockMedia">
4064 <desc>
4065 Locks all media attached to the machine for writing and parents of
4066 attached differencing media (if any) for reading. This operation is
4067 atomic so that if it fails no media is actually locked.
4068
4069 This method is intended to be called when the machine is in Starting or
4070 Restoring state. The locked media will be automatically unlocked when
4071 the machine is powered off or crashed.
4072 </desc>
4073 </method>
4074 <method name="unlockMedia">
4075 <desc>
4076 Unlocks all media previously locked using
4077 <link to="IInternalMachineControl::lockMedia"/>.
4078
4079 This method is intended to be used with teleportation so that it is
4080 possible to teleport between processes on the same machine.
4081 </desc>
4082 </method>
4083 </interface>
4084
4085 <interface
4086 name="IBIOSSettings" extends="$unknown"
4087 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
4088 wsmap="managed"
4089 >
4090 <desc>
4091 The IBIOSSettings interface represents BIOS settings of the virtual
4092 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
4093 </desc>
4094 <attribute name="logoFadeIn" type="boolean">
4095 <desc>Fade in flag for BIOS logo animation.</desc>
4096 </attribute>
4097
4098 <attribute name="logoFadeOut" type="boolean">
4099 <desc>Fade out flag for BIOS logo animation.</desc>
4100 </attribute>
4101
4102 <attribute name="logoDisplayTime" type="unsigned long">
4103 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
4104 </attribute>
4105
4106 <attribute name="logoImagePath" type="wstring">
4107 <desc>
4108 Local file system path for external BIOS splash image. Empty string
4109 means the default image is shown on boot.
4110 </desc>
4111 </attribute>
4112
4113 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
4114 <desc>Mode of the BIOS boot device menu.</desc>
4115 </attribute>
4116
4117 <attribute name="ACPIEnabled" type="boolean">
4118 <desc>ACPI support flag.</desc>
4119 </attribute>
4120
4121 <attribute name="IOAPICEnabled" type="boolean">
4122 <desc>
4123 IO APIC support flag. If set, VirtualBox will provide an IO APIC
4124 and support IRQs above 15.
4125 </desc>
4126 </attribute>
4127
4128 <attribute name="timeOffset" type="long long">
4129 <desc>
4130 Offset in milliseconds from the host system time. This allows for
4131 guests running with a different system date/time than the host.
4132 It is equivalent to setting the system date/time in the BIOS except
4133 it is not an absolute value but a relative one. Guest Additions
4134 time synchronization honors this offset.
4135 </desc>
4136 </attribute>
4137
4138 <attribute name="PXEDebugEnabled" type="boolean">
4139 <desc>
4140 PXE debug logging flag. If set, VirtualBox will write extensive
4141 PXE trace information to the release log.
4142 </desc>
4143 </attribute>
4144
4145 </interface>
4146
4147 <interface
4148 name="IMachine" extends="$unknown"
4149 uuid="b8a9324a-1042-4c78-aff6-9d1c2bfd8cd0"
4150 wsmap="managed"
4151 >
4152 <desc>
4153 The IMachine interface represents a virtual machine, or guest, created
4154 in VirtualBox.
4155
4156 This interface is used in two contexts. First of all, a collection of
4157 objects implementing this interface is stored in the
4158 <link to="IVirtualBox::machines"/> attribute which lists all the virtual
4159 machines that are currently registered with this VirtualBox
4160 installation. Also, once a session has been opened for the given virtual
4161 machine (e.g. the virtual machine is running), the machine object
4162 associated with the open session can be queried from the session object;
4163 see <link to="ISession"/> for details.
4164
4165 The main role of this interface is to expose the settings of the virtual
4166 machine and provide methods to change various aspects of the virtual
4167 machine's configuration. For machine objects stored in the
4168 <link to="IVirtualBox::machines"/> collection, all attributes are
4169 read-only unless explicitly stated otherwise in individual attribute
4170 and method descriptions. In order to change a machine setting, a session
4171 for this machine must be opened using one of
4172 <link to="IVirtualBox::openSession"/>,
4173 <link to="IVirtualBox::openRemoteSession"/> or
4174 <link to="IVirtualBox::openExistingSession"/> methods. After the
4175 session has been successfully opened, a mutable machine object needs to
4176 be queried from the session object and then the desired settings changes
4177 can be applied to the returned object using IMachine attributes and
4178 methods. See the <link to="ISession"/> interface description for more
4179 information about sessions.
4180
4181 Note that IMachine does not provide methods to control virtual machine
4182 execution (such as start the machine, or power it down) -- these methods
4183 are grouped in a separate interface called <link to="IConsole" />.
4184
4185 <see>ISession, IConsole</see>
4186 </desc>
4187
4188 <attribute name="parent" type="IVirtualBox" readonly="yes">
4189 <desc>Associated parent object.</desc>
4190 </attribute>
4191
4192 <attribute name="accessible" type="boolean" readonly="yes">
4193 <desc>
4194 Whether this virtual machine is currently accessible or not.
4195
4196 A machine is always deemed accessible unless it is registered <i>and</i>
4197 its settings file cannot be read or parsed (either because the file itself
4198 is unavailable or has invalid XML contents).
4199
4200 Every time this property is read, the accessibility state of
4201 this machine is re-evaluated. If the returned value is @c false,
4202 the <link to="#accessError"/> property may be used to get the
4203 detailed error information describing the reason of
4204 inaccessibility, including XML error messages.
4205
4206 When the machine is inaccessible, only the following properties
4207 can be used on it:
4208 <ul>
4209 <li><link to="#parent"/></li>
4210 <li><link to="#id"/></li>
4211 <li><link to="#settingsFilePath"/></li>
4212 <li><link to="#accessible"/></li>
4213 <li><link to="#accessError"/></li>
4214 </ul>
4215
4216 An attempt to access any other property or method will return
4217 an error.
4218
4219 The only possible action you can perform on an inaccessible
4220 machine is to unregister it using the
4221 <link to="IVirtualBox::unregisterMachine"/> call (or, to check
4222 for the accessibility state once more by querying this
4223 property).
4224
4225 <note>
4226 In the current implementation, once this property returns
4227 @c true, the machine will never become inaccessible
4228 later, even if its settings file cannot be successfully
4229 read/written any more (at least, until the VirtualBox
4230 server is restarted). This limitation may be removed in
4231 future releases.
4232 </note>
4233 </desc>
4234 </attribute>
4235
4236 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
4237 <desc>
4238 Error information describing the reason of machine
4239 inaccessibility.
4240
4241 Reading this property is only valid after the last call to
4242 <link to="#accessible"/> returned @c false (i.e. the
4243 machine is currently unaccessible). Otherwise, a @c null
4244 IVirtualBoxErrorInfo object will be returned.
4245 </desc>
4246 </attribute>
4247
4248 <attribute name="name" type="wstring">
4249 <desc>
4250 Name of the virtual machine.
4251
4252 Besides being used for human-readable identification purposes
4253 everywhere in VirtualBox, the virtual machine name is also used
4254 as a name of the machine's settings file and as a name of the
4255 subdirectory this settings file resides in. Thus, every time you
4256 change the value of this property, the settings file will be
4257 renamed once you call <link to="#saveSettings"/> to confirm the
4258 change. The containing subdirectory will be also renamed, but
4259 only if it has exactly the same name as the settings file
4260 itself prior to changing this property (for backward compatibility
4261 with previous API releases). The above implies the following
4262 limitations:
4263 <ul>
4264 <li>The machine name cannot be empty.</li>
4265 <li>The machine name can contain only characters that are valid
4266 file name characters according to the rules of the file
4267 system used to store VirtualBox configuration.</li>
4268 <li>You cannot have two or more machines with the same name
4269 if they use the same subdirectory for storing the machine
4270 settings files.</li>
4271 <li>You cannot change the name of the machine if it is running,
4272 or if any file in the directory containing the settings file
4273 is being used by another running machine or by any other
4274 process in the host operating system at a time when
4275 <link to="#saveSettings"/> is called.
4276 </li>
4277 </ul>
4278 If any of the above limitations are hit, <link to="#saveSettings"/>
4279 will return an appropriate error message explaining the exact
4280 reason and the changes you made to this machine will not be
4281 saved.
4282 <note>
4283 For "legacy" machines created using the
4284 <link to="IVirtualBox::createLegacyMachine"/> call,
4285 the above naming limitations do not apply because the
4286 machine name does not affect the settings file name.
4287 The settings file name remains the same as it was specified
4288 during machine creation and never changes.
4289 </note>
4290 </desc>
4291 </attribute>
4292
4293 <attribute name="description" type="wstring">
4294 <desc>
4295 Description of the virtual machine.
4296
4297 The description attribute can contain any text and is
4298 typically used to describe the hardware and software
4299 configuration of the virtual machine in detail (i.e. network
4300 settings, versions of the installed software and so on).
4301 </desc>
4302 </attribute>
4303
4304 <attribute name="id" type="uuid" mod="string" readonly="yes">
4305 <desc>UUID of the virtual machine.</desc>
4306 </attribute>
4307
4308 <attribute name="OSTypeId" type="wstring">
4309 <desc>
4310 User-defined identifier of the Guest OS type.
4311 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
4312 an IGuestOSType object representing details about the given
4313 Guest OS type.
4314 <note>
4315 This value may differ from the value returned by
4316 <link to="IGuest::OSTypeId"/> if Guest Additions are
4317 installed to the guest OS.
4318 </note>
4319 </desc>
4320 </attribute>
4321
4322 <attribute name="HardwareVersion" type="wstring">
4323 <desc>Hardware version identifier. Internal use only for now.</desc>
4324 </attribute>
4325
4326 <attribute name="hardwareUUID" type="uuid" mod="string">
4327 <desc>
4328 The UUID presented to the guest via memory tables, hardware and guest
4329 properties. For most VMs this is the same as the @a id, but for VMs
4330 which have been cloned or teleported it may be the same as the source
4331 VM. This latter is because the guest shouldn't notice that it was
4332 cloned or teleported.
4333 </desc>
4334 </attribute>
4335
4336 <attribute name="CPUCount" type="unsigned long">
4337 <desc>Number of virtual CPUs in the VM.</desc>
4338 </attribute>
4339
4340 <attribute name="CPUHotPlugEnabled" type="boolean">
4341 <desc>
4342 This setting determines whether VirtualBox allows CPU
4343 hotplugging for this machine.</desc>
4344 </attribute>
4345
4346 <attribute name="memorySize" type="unsigned long">
4347 <desc>System memory size in megabytes.</desc>
4348 </attribute>
4349
4350 <attribute name="memoryBalloonSize" type="unsigned long">
4351 <desc>Memory balloon size in megabytes.</desc>
4352 </attribute>
4353
4354 <attribute name="VRAMSize" type="unsigned long">
4355 <desc>Video memory size in megabytes.</desc>
4356 </attribute>
4357
4358 <attribute name="accelerate3DEnabled" type="boolean" default="false">
4359 <desc>
4360 This setting determines whether VirtualBox allows this machine to make
4361 use of the 3D graphics support available on the host.</desc>
4362 </attribute>
4363
4364 <attribute name="accelerate2DVideoEnabled" type="boolean" default="false">
4365 <desc>
4366 This setting determines whether VirtualBox allows this machine to make
4367 use of the 2D video acceleration support available on the host.</desc>
4368 </attribute>
4369
4370 <attribute name="monitorCount" type="unsigned long">
4371 <desc>
4372 Number of virtual monitors.
4373 <note>
4374 Only effective on Windows XP and later guests with
4375 Guest Additions installed.
4376 </note>
4377 </desc>
4378 </attribute>
4379
4380 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
4381 <desc>Object containing all BIOS settings.</desc>
4382 </attribute>
4383
4384 <attribute name="firmwareType" type="FirmwareType">
4385 <desc>Type of firmware (such as legacy BIOS or EFI), used for initial
4386 bootstrap in this VM.</desc>
4387 </attribute>
4388
4389 <attribute name="pointingHidType" type="PointingHidType">
4390 <desc>Type of pointing HID (such as mouse or tablet) used in this VM.
4391 The default is typically "PS2Mouse" but can vary depending on the
4392 requirements of the guest operating system.</desc>
4393 </attribute>
4394
4395 <attribute name="keyboardHidType" type="KeyboardHidType">
4396 <desc>Type of keyboard HID used in this VM.
4397 The default is typically "PS2Keyboard" but can vary depending on the
4398 requirements of the guest operating system.</desc>
4399 </attribute>
4400
4401 <attribute name="hpetEnabled" type="boolean">
4402 <desc>This attribute controls if High Precision Event Timer (HPET) is
4403 enabled in this VM. Use this property if you want to provide guests
4404 with additional time source, or if guest requires HPET to function correctly.
4405 Default is false.</desc>
4406 </attribute>
4407
4408 <attribute name="snapshotFolder" type="wstring">
4409 <desc>
4410 Full path to the directory used to store snapshot data
4411 (differencing media and saved state files) of this machine.
4412
4413 The initial value of this property is
4414 <tt>&lt;</tt><link to="#settingsFilePath">
4415 path_to_settings_file</link><tt>&gt;/&lt;</tt>
4416 <link to="#id">machine_uuid</link>
4417 <tt>&gt;</tt>.
4418
4419 Currently, it is an error to try to change this property on
4420 a machine that has snapshots (because this would require to
4421 move possibly large files to a different location).
4422 A separate method will be available for this purpose later.
4423
4424 <note>
4425 Setting this property to @c null or to an empty string will restore
4426 the initial value.
4427 </note>
4428 <note>
4429 When setting this property, the specified path can be
4430 absolute (full path) or relative to the directory where the
4431 <link to="#settingsFilePath">machine settings file</link>
4432 is located. When reading this property, a full path is
4433 always returned.
4434 </note>
4435 <note>
4436 The specified path may not exist, it will be created
4437 when necessary.
4438 </note>
4439 </desc>
4440 </attribute>
4441
4442 <attribute name="VRDPServer" type="IVRDPServer" readonly="yes">
4443 <desc>VRDP server object.</desc>
4444 </attribute>
4445
4446 <attribute name="mediumAttachments" type="IMediumAttachment" readonly="yes" safearray="yes">
4447 <desc>Array of media attached to this machine.</desc>
4448 </attribute>
4449
4450 <attribute name="USBController" type="IUSBController" readonly="yes">
4451 <desc>
4452 Associated USB controller object.
4453
4454 <note>
4455 If USB functionality is not available in the given edition of
4456 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4457 </note>
4458 </desc>
4459 </attribute>
4460
4461 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
4462 <desc>Associated audio adapter, always present.</desc>
4463 </attribute>
4464
4465 <attribute name="storageControllers" type="IStorageController" readonly="yes" safearray="yes">
4466 <desc>Array of storage controllers attached to this machine.</desc>
4467 </attribute>
4468
4469 <attribute name="settingsFilePath" type="wstring" readonly="yes">
4470 <desc>
4471 Full name of the file containing machine settings data.
4472 </desc>
4473 </attribute>
4474
4475 <attribute name="settingsModified" type="boolean" readonly="yes">
4476 <desc>
4477 Whether the settings of this machine have been modified
4478 (but neither yet saved nor discarded).
4479 <note>
4480 Reading this property is only valid on instances returned
4481 by <link to="ISession::machine"/> and on new machines
4482 created by <link to="IVirtualBox::createMachine"/> or opened
4483 by <link to="IVirtualBox::openMachine"/> but not
4484 yet registered, or on unregistered machines after calling
4485 <link to="IVirtualBox::unregisterMachine"/>. For all other
4486 cases, the settings can never be modified.
4487 </note>
4488 <note>
4489 For newly created unregistered machines, the value of this
4490 property is always @c true until <link to="#saveSettings"/>
4491 is called (no matter if any machine settings have been
4492 changed after the creation or not). For opened machines
4493 the value is set to @c false (and then follows to normal rules).
4494 </note>
4495 </desc>
4496 </attribute>
4497
4498 <attribute name="sessionState" type="SessionState" readonly="yes">
4499 <desc>Current session state for this machine.</desc>
4500 </attribute>
4501
4502 <attribute name="sessionType" type="wstring" readonly="yes">
4503 <desc>
4504 Type of the session. If <link to="#sessionState"/> is
4505 SessionSpawning or SessionOpen, this attribute contains the
4506 same value as passed to the
4507 <link to="IVirtualBox::openRemoteSession"/> method in the
4508 @a type parameter. If the session was opened directly using
4509 <link to="IVirtualBox::openSession"/>, or if
4510 <link to="#sessionState"/> is SessionClosed, the value of this
4511 attribute is an empty string.
4512 </desc>
4513 </attribute>
4514
4515 <attribute name="sessionPid" type="unsigned long" readonly="yes">
4516 <desc>
4517 Identifier of the session process. This attribute contains the
4518 platform-dependent identifier of the process that has opened a
4519 direct session for this machine using the
4520 <link to="IVirtualBox::openSession"/> call. The returned value
4521 is only valid if <link to="#sessionState"/> is SessionOpen or
4522 SessionClosing (i.e. a session is currently open or being
4523 closed) by the time this property is read.
4524 </desc>
4525 </attribute>
4526
4527 <attribute name="state" type="MachineState" readonly="yes">
4528 <desc>Current execution state of this machine.</desc>
4529 </attribute>
4530
4531 <attribute name="lastStateChange" type="long long" readonly="yes">
4532 <desc>
4533 Time stamp of the last execution state change,
4534 in milliseconds since 1970-01-01 UTC.
4535 </desc>
4536 </attribute>
4537
4538 <attribute name="stateFilePath" type="wstring" readonly="yes">
4539 <desc>
4540 Full path to the file that stores the execution state of
4541 the machine when it is in the <link to="MachineState_Saved"/> state.
4542 <note>
4543 When the machine is not in the Saved state, this attribute is
4544 an empty string.
4545 </note>
4546 </desc>
4547 </attribute>
4548
4549 <attribute name="logFolder" type="wstring" readonly="yes">
4550 <desc>
4551 Full path to the folder that stores a set of rotated log files
4552 recorded during machine execution. The most recent log file is
4553 named <tt>VBox.log</tt>, the previous log file is
4554 named <tt>VBox.log.1</tt> and so on (up to <tt>VBox.log.3</tt>
4555 in the current version).
4556 </desc>
4557 </attribute>
4558
4559 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
4560 <desc>
4561 Current snapshot of this machine. This is @c null if the machine
4562 currently has no snapshots. If it is not @c null, then it was
4563 set by one of <link to="Console::takeSnapshot" />,
4564 <link to="Console::deleteSnapshot" />
4565 or <link to="Console::restoreSnapshot" />, depending on which
4566 was called last. See <link to="ISnapshot"/> for details.
4567 </desc>
4568 </attribute>
4569
4570 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
4571 <desc>
4572 Number of snapshots taken on this machine. Zero means the
4573 machine doesn't have any snapshots.
4574 </desc>
4575 </attribute>
4576
4577 <attribute name="currentStateModified" type="boolean" readonly="yes">
4578 <desc>
4579 Returns @c true if the current state of the machine is not
4580 identical to the state stored in the current snapshot.
4581
4582 The current state is identical to the current snapshot only
4583 directly after one of the following calls are made:
4584
4585 <ul>
4586 <li><link to="IConsole::restoreSnapshot"/>
4587 </li>
4588 <li><link to="IConsole::takeSnapshot"/> (issued on a
4589 "powered off" or "saved" machine, for which
4590 <link to="#settingsModified"/> returns @c false)
4591 </li>
4592 <li><link to="IMachine::setCurrentSnapshot"/>
4593 </li>
4594 </ul>
4595
4596 The current state remains identical until one of the following
4597 happens:
4598 <ul>
4599 <li>settings of the machine are changed</li>
4600 <li>the saved state is deleted</li>
4601 <li>the current snapshot is deleted</li>
4602 <li>an attempt to execute the machine is made</li>
4603 </ul>
4604
4605 <note>
4606 For machines that don't have snapshots, this property is
4607 always @c false.
4608 </note>
4609 </desc>
4610 </attribute>
4611
4612 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
4613 <desc>
4614 Collection of shared folders for this machine (permanent shared
4615 folders). These folders are shared automatically at machine startup
4616 and available only to the guest OS installed within this machine.
4617
4618 New shared folders are added to the collection using
4619 <link to="#createSharedFolder"/>. Existing shared folders can be
4620 removed using <link to="#removeSharedFolder"/>.
4621 </desc>
4622 </attribute>
4623
4624 <attribute name="clipboardMode" type="ClipboardMode">
4625 <desc>
4626 Synchronization mode between the host OS clipboard
4627 and the guest OS clipboard.
4628 </desc>
4629 </attribute>
4630
4631 <attribute name="guestPropertyNotificationPatterns" type="wstring">
4632 <desc>
4633 A comma-separated list of simple glob patterns. Changes to guest
4634 properties whose name matches one of the patterns will generate an
4635 <link to="IVirtualBoxCallback::onGuestPropertyChange"/> signal.
4636 </desc>
4637 </attribute>
4638
4639 <attribute name="teleporterEnabled" type="boolean">
4640 <desc>
4641 When set to @a true, the virtual machine becomes a target teleporter
4642 the next time it is powered on. This can only set to @a true when the
4643 VM is in the @a PoweredOff or @a Aborted state.
4644
4645 <!-- This property is automatically set to @a false when the VM is powered
4646 on. (bird: This doesn't work yet ) -->
4647 </desc>
4648 </attribute>
4649
4650 <attribute name="teleporterPort" type="unsigned long">
4651 <desc>
4652 The TCP port the target teleporter will listen for incoming
4653 teleportations on.
4654
4655 0 means the port is automatically selected upon power on. The actual
4656 value can be read from this property while the machine is waiting for
4657 incoming teleportations.
4658 </desc>
4659 </attribute>
4660
4661 <attribute name="teleporterAddress" type="wstring">
4662 <desc>
4663 The address the target teleporter will listen on. If set to an empty
4664 string, it will listen on all addresses.
4665 </desc>
4666 </attribute>
4667
4668 <attribute name="teleporterPassword" type="wstring">
4669 <desc>
4670 The password the to check for on the target teleporter. This is just a
4671 very basic measure to prevent simple hacks and operators accidentally
4672 beaming a virtual machine to the wrong place.
4673 </desc>
4674 </attribute>
4675
4676 <attribute name="RTCUseUTC" type="boolean">
4677 <desc>
4678 When set to @a true, the RTC device of the virtual machine will run
4679 in UTC time, otherwise in local time. Especially Unix guests prefer
4680 the time in UTC.
4681 </desc>
4682 </attribute>
4683
4684 <attribute name="ioMgr" type="IoMgrType">
4685 <desc>
4686 Selects the I/O manager to use for the virtual machine.
4687 </desc>
4688 </attribute>
4689
4690 <attribute name="ioBackend" type="IoBackendType">
4691 <desc>
4692 Selects the I/O backend to use for the virtual machine.
4693 </desc>
4694 </attribute>
4695
4696 <attribute name="ioCacheEnabled" type="boolean">
4697 <desc>
4698 When set to @a true, the builtin I/O cache of the virtual machine
4699 will be enabled.
4700 </desc>
4701 </attribute>
4702
4703 <attribute name="ioCacheSize" type="unsigned long">
4704 <desc>
4705 Maximum size of the I/O cache in MB.
4706 </desc>
4707 </attribute>
4708
4709 <attribute name="ioBandwidthMax" type="unsigned long">
4710 <desc>
4711 The maximum number of MB the VM is allowed to transfer per second.
4712 0 means unlimited bandwidth.
4713 </desc>
4714 </attribute>
4715
4716 <method name="setBootOrder">
4717 <desc>
4718 Puts the given device to the specified position in
4719 the boot order.
4720
4721 To indicate that no device is associated with the given position,
4722 <link to="DeviceType_Null"/> should be used.
4723
4724 @todo setHardDiskBootOrder(), setNetworkBootOrder()
4725
4726 <result name="E_INVALIDARG">
4727 Boot @a position out of range.
4728 </result>
4729 <result name="E_NOTIMPL">
4730 Booting from USB @a device currently not supported.
4731 </result>
4732
4733 </desc>
4734 <param name="position" type="unsigned long" dir="in">
4735 <desc>
4736 Position in the boot order (@c 1 to the total number of
4737 devices the machine can boot from, as returned by
4738 <link to="ISystemProperties::maxBootPosition"/>).
4739 </desc>
4740 </param>
4741 <param name="device" type="DeviceType" dir="in">
4742 <desc>
4743 The type of the device used to boot at the given position.
4744 </desc>
4745 </param>
4746 </method>
4747
4748 <method name="getBootOrder" const="yes">
4749 <desc>
4750 Returns the device type that occupies the specified
4751 position in the boot order.
4752
4753 @todo [remove?]
4754 If the machine can have more than one device of the returned type
4755 (such as hard disks), then a separate method should be used to
4756 retrieve the individual device that occupies the given position.
4757
4758 If here are no devices at the given position, then
4759 <link to="DeviceType_Null"/> is returned.
4760
4761 @todo getHardDiskBootOrder(), getNetworkBootOrder()
4762
4763 <result name="E_INVALIDARG">
4764 Boot @a position out of range.
4765 </result>
4766
4767 </desc>
4768 <param name="position" type="unsigned long" dir="in">
4769 <desc>
4770 Position in the boot order (@c 1 to the total number of
4771 devices the machine can boot from, as returned by
4772 <link to="ISystemProperties::maxBootPosition"/>).
4773 </desc>
4774 </param>
4775 <param name="device" type="DeviceType" dir="return">
4776 <desc>
4777 Device at the given position.
4778 </desc>
4779 </param>
4780 </method>
4781
4782 <method name="attachDevice">
4783 <desc>
4784 Attaches a device and optionally mounts a medium to the given storage
4785 controller (<link to="IStorageController" />, identified by @a name),
4786 at the indicated port and device.
4787
4788 This method is intended for managing storage devices in general (it works
4789 for both fixed and removable media). For storage devices supporting removable
4790 media (such as DVDs and floppies), you can also use <link to="IMedium::mountMedium"/>
4791 for changing the media while the machine is running.
4792
4793 For the IDE bus, the @a controllerPort parameter can be either
4794 @c 0 or @c 1, to specify the primary or secondary IDE controller,
4795 respectively. For each of these, @a device can then be either @c 0 or @c 1,
4796 to specify the master or the slave device, respectively. (In the
4797 default configuration of virtual machines, the secondary master is
4798 used for a CD/DVD drive.)
4799
4800 For an SATA controller, @a controllerPort must be a number ranging
4801 from @c 0 to @c 29. For a SCSI controller, @a controllerPort must
4802 be a number ranging from @c 0 to @c 15.
4803
4804 For both SCSI and SATA, the @a device parameter is unused and must
4805 be @c 0.
4806
4807 For fixed media such as hard disks, the given medium identifier cannot
4808 be a zero UUID. It may be a zero UUID for removable media such as DVDs
4809 and floppies.
4810
4811 After calling this returns successfully, a new instance of
4812 <link to="IMediumAttachment"/> will appear in the machine's list of medium
4813 attachments (<link to="IMachine::mediumAttachments"/>).
4814
4815 The specified device slot must not have a device attached to it,
4816 or this method will fail.
4817
4818 See <link to="IMedium"/> and <link to="IMediumAttachment"/> for more
4819 information about attaching media.
4820
4821 <note>
4822 You cannot attach a device to a running machine. Also, you cannot
4823 attach a device to a newly created machine until this machine's
4824 settings are saved to disk using <link to="#saveSettings"/>.
4825 </note>
4826 <note>
4827 If the medium is being attached indirectly, a new differencing medium
4828 will implicitly be created for it and attached instead. If the
4829 changes made to the machine settings (including this indirect
4830 attachment) are later cancelled using <link to="#discardSettings"/>,
4831 this implicitly created differencing medium will implicitly
4832 be deleted.
4833 </note>
4834
4835 <result name="E_INVALIDARG">
4836 SATA device, SATA port, IDE port or IDE slot out of range.
4837 </result>
4838 <result name="VBOX_E_INVALID_OBJECT_STATE">
4839 Attempt to attach medium to an unregistered virtual machine.
4840 </result>
4841 <result name="VBOX_E_INVALID_VM_STATE">
4842 Invalid machine state.
4843 </result>
4844 <result name="VBOX_E_OBJECT_IN_USE">
4845 Hard disk already attached to this or another virtual machine.
4846 </result>
4847
4848 </desc>
4849 <param name="name" type="wstring" dir="in">
4850 <desc>Name of the storage controller to attach the device to.</desc>
4851 </param>
4852 <param name="controllerPort" type="long" dir="in">
4853 <desc>Port to attach the device to.</desc>
4854 </param>
4855 <param name="device" type="long" dir="in">
4856 <desc>Device slot in the given port to attach the device to.</desc>
4857 </param>
4858 <param name="type" type="DeviceType" dir="in">
4859 <desc>Device type of the attached device.</desc>
4860 </param>
4861 <param name="id" type="uuid" mod="string" dir="in">
4862 <desc>UUID of the medium to mount. Zero UUID means do not mount any
4863 medium.</desc>
4864 </param>
4865 </method>
4866
4867 <method name="detachDevice">
4868 <desc>
4869 Detaches the device attached to a device slot of the specified bus.
4870
4871 Detaching the device from the virtual machine is deferred. This means
4872 that the medium remains associated with the machine when this method
4873 returns and gets actually de-associated only after a successful
4874 <link to="#saveSettings"/> call. See <link to="IMedium"/>
4875 for more detailed information about attaching media.
4876
4877 <note>
4878 You cannot detach a device from a running machine.
4879 </note>
4880 <note>
4881 Detaching differencing media implicitly created by <link
4882 to="#attachDevice"/> for the indirect attachment using this
4883 method will <b>not</b> implicitly delete them. The
4884 <link to="IMedium::deleteStorage"/> operation should be
4885 explicitly performed by the caller after the medium is successfully
4886 detached and the settings are saved with
4887 <link to="#saveSettings"/>, if it is the desired action.
4888 </note>
4889
4890 <result name="VBOX_E_INVALID_VM_STATE">
4891 Attempt to detach medium from a running virtual machine.
4892 </result>
4893 <result name="VBOX_E_OBJECT_NOT_FOUND">
4894 No medium attached to given slot/bus.
4895 </result>
4896 <result name="VBOX_E_NOT_SUPPORTED">
4897 Medium format does not support storage deletion.
4898 </result>
4899
4900 </desc>
4901 <param name="name" type="wstring" dir="in">
4902 <desc>Name of the storage controller to detach the medium from.</desc>
4903 </param>
4904 <param name="controllerPort" type="long" dir="in">
4905 <desc>Port number to detach the medium from.</desc>
4906 </param>
4907 <param name="device" type="long" dir="in">
4908 <desc>Device slot number to detach the medium from.</desc>
4909 </param>
4910 </method>
4911
4912 <method name="passthroughDevice">
4913 <desc>
4914 Sets the passthrough mode of an existing DVD device. Changing the
4915 setting while the VM is running is forbidden. The setting is only used
4916 if at VM start the device is configured as a host DVD drive, in all
4917 other cases it is ignored. The device must already exist; see
4918 <link to="IMachine::attachDevice"/> for how to attach a new device.
4919
4920 The @a controllerPort and @a device parameters specify the device slot and
4921 have have the same meaning as with <link to="IMachine::attachDevice" />.
4922
4923 <result name="E_INVALIDARG">
4924 SATA device, SATA port, IDE port or IDE slot out of range.
4925 </result>
4926 <result name="VBOX_E_INVALID_OBJECT_STATE">
4927 Attempt to modify an unregistered virtual machine.
4928 </result>
4929 <result name="VBOX_E_INVALID_VM_STATE">
4930 Invalid machine state.
4931 </result>
4932
4933 </desc>
4934 <param name="name" type="wstring" dir="in">
4935 <desc>Name of the storage controller.</desc>
4936 </param>
4937 <param name="controllerPort" type="long" dir="in">
4938 <desc>Storage controller port.</desc>
4939 </param>
4940 <param name="device" type="long" dir="in">
4941 <desc>Device slot in the given port.</desc>
4942 </param>
4943 <param name="passthrough" type="boolean" dir="in">
4944 <desc>New value for the passthrough setting.</desc>
4945 </param>
4946 </method>
4947
4948 <method name="mountMedium">
4949 <desc>
4950 Mounts a medium (<link to="IMedium" />, identified
4951 by the given UUID @a id) to the given storage controller
4952 (<link to="IStorageController" />, identified by @a name),
4953 at the indicated port and device. The device must already exist;
4954 see <link to="IMachine::attachDevice"/> for how to attach a new device.
4955
4956 This method is intended only for managing removable media, where the
4957 device is fixed but media is changeable at runtime (such as DVDs
4958 and floppies). It cannot be used for fixed media such as hard disks.
4959
4960 The @a controllerPort and @a device parameters specify the device slot and
4961 have have the same meaning as with <link to="IMachine::attachDevice" />.
4962
4963 The specified device slot can have a medium mounted, which will be
4964 unmounted first. Specifying a zero UUID (or an empty string) for
4965 @a medium does just an unmount.
4966
4967 See <link to="IMedium"/> for more detailed information about
4968 attaching media.
4969
4970 <result name="E_INVALIDARG">
4971 SATA device, SATA port, IDE port or IDE slot out of range.
4972 </result>
4973 <result name="VBOX_E_INVALID_OBJECT_STATE">
4974 Attempt to attach medium to an unregistered virtual machine.
4975 </result>
4976 <result name="VBOX_E_INVALID_VM_STATE">
4977 Invalid machine state.
4978 </result>
4979 <result name="VBOX_E_OBJECT_IN_USE">
4980 Medium already attached to this or another virtual machine.
4981 </result>
4982
4983 </desc>
4984 <param name="name" type="wstring" dir="in">
4985 <desc>Name of the storage controller to attach the medium to.</desc>
4986 </param>
4987 <param name="controllerPort" type="long" dir="in">
4988 <desc>Port to attach the medium to.</desc>
4989 </param>
4990 <param name="device" type="long" dir="in">
4991 <desc>Device slot in the given port to attach the medium to.</desc>
4992 </param>
4993 <param name="medium" type="uuid" mod="string" dir="in">
4994 <desc>UUID of the medium to attach. A zero UUID means unmount the
4995 currently mounted medium.</desc>
4996 </param>
4997 <param name="force" type="boolean" dir="in">
4998 <desc>Allows to force unmount/mount of a medium which is locked by
4999 theDevice slot in the given port to attach the medium to.</desc>
5000 </param>
5001 </method>
5002
5003 <method name="getMedium" const="yes">
5004 <desc>
5005 Returns the virtual medium attached to a device slot of the specified
5006 bus.
5007
5008 Note that if the medium was indirectly attached by
5009 <link to="#mountMedium"/> to the given device slot then this
5010 method will return not the same object as passed to the
5011 <link to="#mountMedium"/> call. See <link to="IMedium"/> for
5012 more detailed information about mounting a medium.
5013
5014 <result name="VBOX_E_OBJECT_NOT_FOUND">
5015 No medium attached to given slot/bus.
5016 </result>
5017
5018 </desc>
5019 <param name="name" type="wstring" dir="in">
5020 <desc>Name of the storage controller the medium is attached to.</desc>
5021 </param>
5022 <param name="controllerPort" type="long" dir="in">
5023 <desc>Port to query.</desc>
5024 </param>
5025 <param name="device" type="long" dir="in">
5026 <desc>Device slot in the given port to query.</desc>
5027 </param>
5028 <param name="medium" type="IMedium" dir="return">
5029 <desc>Attached medium object.</desc>
5030 </param>
5031 </method>
5032
5033 <method name="getMediumAttachmentsOfController" const="yes">
5034 <desc>
5035 Returns an array of medium attachments which are attached to the
5036 the controller with the given name.
5037
5038 <result name="VBOX_E_OBJECT_NOT_FOUND">
5039 A storage controller with given name doesn't exist.
5040 </result>
5041 </desc>
5042 <param name="name" type="wstring" dir="in"/>
5043 <param name="mediumAttachments" type="IMediumAttachment" safearray="yes" dir="return"/>
5044 </method>
5045
5046 <method name="getMediumAttachment" const="yes">
5047 <desc>
5048 Returns a medium attachment which corresponds to the controller with
5049 the given name, on the given port and device slot.
5050
5051 <result name="VBOX_E_OBJECT_NOT_FOUND">
5052 No attachment exists for the given controller/port/device combination.
5053 </result>
5054 </desc>
5055 <param name="name" type="wstring" dir="in"/>
5056 <param name="controllerPort" type="long" dir="in"/>
5057 <param name="device" type="long" dir="in"/>
5058 <param name="attachment" type="IMediumAttachment" dir="return"/>
5059 </method>
5060
5061 <method name="getNetworkAdapter" const="yes">
5062 <desc>
5063 Returns the network adapter associated with the given slot.
5064 Slots are numbered sequentially, starting with zero. The total
5065 number of adapters per machine is defined by the
5066 <link to="ISystemProperties::networkAdapterCount"/> property,
5067 so the maximum slot number is one less than that property's value.
5068
5069 <result name="E_INVALIDARG">
5070 Invalid @a slot number.
5071 </result>
5072
5073 </desc>
5074 <param name="slot" type="unsigned long" dir="in"/>
5075 <param name="adapter" type="INetworkAdapter" dir="return"/>
5076 </method>
5077
5078 <method name="addStorageController">
5079 <desc>
5080 Adds a new storage controller (SCSI or SATA controller) to the
5081 machine and returns it as an instance of
5082 <link to="IStorageController" />.
5083
5084 @a name identifies the controller for subsequent calls such as
5085 <link to="#getStorageControllerByName" />,
5086 <link to="#getStorageControllerByInstance" />,
5087 <link to="#removeStorageController" />,
5088 <link to="#attachDevice" /> or <link to="#mountMedium" />.
5089
5090 After the controller has been added, you can set its exact
5091 type by setting the <link to="IStorageController::controllerType" />.
5092
5093 <result name="VBOX_E_OBJECT_IN_USE">
5094 A storage controller with given name exists already.
5095 </result>
5096 <result name="E_INVALIDARG">
5097 Invalid @a controllerType.
5098 </result>
5099 </desc>
5100 <param name="name" type="wstring" dir="in"/>
5101 <param name="connectionType" type="StorageBus" dir="in"/>
5102 <param name="controller" type="IStorageController" dir="return"/>
5103 </method>
5104
5105 <method name="getStorageControllerByName" const="yes">
5106 <desc>
5107 Returns a storage controller with the given name.
5108
5109 <result name="VBOX_E_OBJECT_NOT_FOUND">
5110 A storage controller with given name doesn't exist.
5111 </result>
5112 </desc>
5113 <param name="name" type="wstring" dir="in"/>
5114 <param name="storageController" type="IStorageController" dir="return"/>
5115 </method>
5116
5117 <method name="getStorageControllerByInstance" const="yes">
5118 <desc>
5119 Returns a storage controller with the given instance number.
5120
5121 <result name="VBOX_E_OBJECT_NOT_FOUND">
5122 A storage controller with given instance number doesn't exist.
5123 </result>
5124 </desc>
5125 <param name="instance" type="unsigned long" dir="in"/>
5126 <param name="storageController" type="IStorageController" dir="return"/>
5127 </method>
5128
5129 <method name="removeStorageController">
5130 <desc>
5131 Removes a storage controller from the machine.
5132
5133 <result name="VBOX_E_OBJECT_NOT_FOUND">
5134 A storage controller with given name doesn't exist.
5135 </result>
5136 </desc>
5137 <param name="name" type="wstring" dir="in"/>
5138 </method>
5139
5140 <method name="getSerialPort" const="yes">
5141 <desc>
5142 Returns the serial port associated with the given slot.
5143 Slots are numbered sequentially, starting with zero. The total
5144 number of serial ports per machine is defined by the
5145 <link to="ISystemProperties::serialPortCount"/> property,
5146 so the maximum slot number is one less than that property's value.
5147
5148 <result name="E_INVALIDARG">
5149 Invalid @a slot number.
5150 </result>
5151
5152 </desc>
5153 <param name="slot" type="unsigned long" dir="in"/>
5154 <param name="port" type="ISerialPort" dir="return"/>
5155 </method>
5156
5157 <method name="getParallelPort" const="yes">
5158 <desc>
5159 Returns the parallel port associated with the given slot.
5160 Slots are numbered sequentially, starting with zero. The total
5161 number of parallel ports per machine is defined by the
5162 <link to="ISystemProperties::parallelPortCount"/> property,
5163 so the maximum slot number is one less than that property's value.
5164
5165 <result name="E_INVALIDARG">
5166 Invalid @a slot number.
5167 </result>
5168
5169 </desc>
5170 <param name="slot" type="unsigned long" dir="in"/>
5171 <param name="port" type="IParallelPort" dir="return"/>
5172 </method>
5173
5174 <method name="getExtraDataKeys">
5175 <desc>
5176 Returns an array representing the machine-specific extra data keys
5177 which currently have values defined.
5178 </desc>
5179 <param name="value" type="wstring" dir="return" safearray="yes">
5180 <desc>Array of extra data keys.</desc>
5181 </param>
5182 </method>
5183
5184 <method name="getExtraData">
5185 <desc>
5186 Returns associated machine-specific extra data.
5187
5188 If the requested data @a key does not exist, this function will
5189 succeed and return an empty string in the @a value argument.
5190
5191 <result name="VBOX_E_FILE_ERROR">
5192 Settings file not accessible.
5193 </result>
5194 <result name="VBOX_E_XML_ERROR">
5195 Could not parse the settings file.
5196 </result>
5197
5198 </desc>
5199 <param name="key" type="wstring" dir="in">
5200 <desc>Name of the data key to get.</desc>
5201 </param>
5202 <param name="value" type="wstring" dir="return">
5203 <desc>Value of the requested data key.</desc>
5204 </param>
5205 </method>
5206
5207 <method name="setExtraData">
5208 <desc>
5209 Sets associated machine-specific extra data.
5210
5211 If you pass @c null or an empty string as a key @a value, the given
5212 @a key will be deleted.
5213
5214 <note>
5215 Before performing the actual data change, this method will ask all
5216 registered callbacks using the
5217 <link to="IVirtualBoxCallback::onExtraDataCanChange"/>
5218 notification for a permission. If one of the callbacks refuses the
5219 new value, the change will not be performed.
5220 </note>
5221 <note>
5222 On success, the
5223 <link to="IVirtualBoxCallback::onExtraDataChange"/> notification
5224 is called to inform all registered callbacks about a successful data
5225 change.
5226 </note>
5227 <note>
5228 This method can be called outside the machine session and therefore
5229 it's a caller's responsibility to handle possible race conditions
5230 when several clients change the same key at the same time.
5231 </note>
5232
5233 <result name="VBOX_E_FILE_ERROR">
5234 Settings file not accessible.
5235 </result>
5236 <result name="VBOX_E_XML_ERROR">
5237 Could not parse the settings file.
5238 </result>
5239
5240 </desc>
5241 <param name="key" type="wstring" dir="in">
5242 <desc>Name of the data key to set.</desc>
5243 </param>
5244 <param name="value" type="wstring" dir="in">
5245 <desc>Value to assign to the key.</desc>
5246 </param>
5247 </method>
5248
5249 <method name="getCPUProperty" const="yes">
5250 <desc>
5251 Returns the virtual CPU boolean value of the specified property.
5252
5253 <result name="E_INVALIDARG">
5254 Invalid property.
5255 </result>
5256
5257 </desc>
5258 <param name="property" type="CPUPropertyType" dir="in">
5259 <desc>
5260 Property type to query.
5261 </desc>
5262 </param>
5263 <param name="value" type="boolean" dir="return">
5264 <desc>
5265 Property value.
5266 </desc>
5267 </param>
5268 </method>
5269
5270 <method name="setCPUProperty">
5271 <desc>
5272 Sets the virtual CPU boolean value of the specified property.
5273
5274 <result name="E_INVALIDARG">
5275 Invalid property.
5276 </result>
5277
5278 </desc>
5279 <param name="property" type="CPUPropertyType" dir="in">
5280 <desc>
5281 Property type to query.
5282 </desc>
5283 </param>
5284 <param name="value" type="boolean" dir="in">
5285 <desc>
5286 Property value.
5287 </desc>
5288 </param>
5289 </method>
5290
5291 <method name="getCPUIDLeaf" const="yes">
5292 <desc>
5293 Returns the virtual CPU cpuid information for the specified leaf.
5294
5295 Currently supported index values for cpuid:
5296 Standard CPUID leafs: 0 - 0xA
5297 Extended CPUID leafs: 0x80000000 - 0x8000000A
5298
5299 See the Intel and AMD programmer's manuals for detailed information
5300 about the cpuid instruction and its leafs.
5301 <result name="E_INVALIDARG">
5302 Invalid id.
5303 </result>
5304
5305 </desc>
5306 <param name="id" type="unsigned long" dir="in">
5307 <desc>
5308 CPUID leaf index.
5309 </desc>
5310 </param>
5311 <param name="valEax" type="unsigned long" dir="out">
5312 <desc>
5313 CPUID leaf value for register eax.
5314 </desc>
5315 </param>
5316 <param name="valEbx" type="unsigned long" dir="out">
5317 <desc>
5318 CPUID leaf value for register ebx.
5319 </desc>
5320 </param>
5321 <param name="valEcx" type="unsigned long" dir="out">
5322 <desc>
5323 CPUID leaf value for register ecx.
5324 </desc>
5325 </param>
5326 <param name="valEdx" type="unsigned long" dir="out">
5327 <desc>
5328 CPUID leaf value for register edx.
5329 </desc>
5330 </param>
5331 </method>
5332
5333 <method name="setCPUIDLeaf">
5334 <desc>
5335 Sets the virtual CPU cpuid information for the specified leaf. Note that these values
5336 are not passed unmodified. VirtualBox clears features that it doesn't support.
5337
5338 Currently supported index values for cpuid:
5339 Standard CPUID leafs: 0 - 0xA
5340 Extended CPUID leafs: 0x80000000 - 0x8000000A
5341
5342 See the Intel and AMD programmer's manuals for detailed information
5343 about the cpuid instruction and its leafs.
5344
5345 Do not use this method unless you know exactly what you're doing. Misuse can lead to
5346 random crashes inside VMs.
5347 <result name="E_INVALIDARG">
5348 Invalid id.
5349 </result>
5350
5351 </desc>
5352 <param name="id" type="unsigned long" dir="in">
5353 <desc>
5354 CPUID leaf index.
5355 </desc>
5356 </param>
5357 <param name="valEax" type="unsigned long" dir="in">
5358 <desc>
5359 CPUID leaf value for register eax.
5360 </desc>
5361 </param>
5362 <param name="valEbx" type="unsigned long" dir="in">
5363 <desc>
5364 CPUID leaf value for register ebx.
5365 </desc>
5366 </param>
5367 <param name="valEcx" type="unsigned long" dir="in">
5368 <desc>
5369 CPUID leaf value for register ecx.
5370 </desc>
5371 </param>
5372 <param name="valEdx" type="unsigned long" dir="in">
5373 <desc>
5374 CPUID leaf value for register edx.
5375 </desc>
5376 </param>
5377 </method>
5378
5379 <method name="removeCPUIDLeaf">
5380 <desc>
5381 Removes the virtual CPU cpuid leaf for the specified index
5382
5383 <result name="E_INVALIDARG">
5384 Invalid id.
5385 </result>
5386
5387 </desc>
5388 <param name="id" type="unsigned long" dir="in">
5389 <desc>
5390 CPUID leaf index.
5391 </desc>
5392 </param>
5393 </method>
5394
5395 <method name="removeAllCPUIDLeaves">
5396 <desc>
5397 Removes all the virtual CPU cpuid leaves
5398 </desc>
5399 </method>
5400
5401 <method name="getHWVirtExProperty" const="yes">
5402 <desc>
5403 Returns the value of the specified hardware virtualization boolean property.
5404
5405 <result name="E_INVALIDARG">
5406 Invalid property.
5407 </result>
5408
5409 </desc>
5410 <param name="property" type="HWVirtExPropertyType" dir="in">
5411 <desc>
5412 Property type to query.
5413 </desc>
5414 </param>
5415 <param name="value" type="boolean" dir="return">
5416 <desc>
5417 Property value.
5418 </desc>
5419 </param>
5420 </method>
5421
5422 <method name="setHWVirtExProperty">
5423 <desc>
5424 Sets a new value for the specified hardware virtualization boolean property.
5425
5426 <result name="E_INVALIDARG">
5427 Invalid property.
5428 </result>
5429
5430 </desc>
5431 <param name="property" type="HWVirtExPropertyType" dir="in">
5432 <desc>
5433 Property type to set.
5434 </desc>
5435 </param>
5436 <param name="value" type="boolean" dir="in">
5437 <desc>
5438 New property value.
5439 </desc>
5440 </param>
5441 </method>
5442
5443 <method name="saveSettings">
5444 <desc>
5445 Saves any changes to machine settings made since the session
5446 has been opened or a new machine has been created, or since the
5447 last call to <link to="#saveSettings"/> or <link to="#discardSettings"/>.
5448 For registered machines, new settings become visible to all
5449 other VirtualBox clients after successful invocation of this
5450 method.
5451 <note>
5452 The method sends <link to="IVirtualBoxCallback::onMachineDataChange"/>
5453 notification event after the configuration has been successfully
5454 saved (only for registered machines).
5455 </note>
5456 <note>
5457 Calling this method is only valid on instances returned
5458 by <link to="ISession::machine"/> and on new machines
5459 created by <link to="IVirtualBox::createMachine"/> but not
5460 yet registered, or on unregistered machines after calling
5461 <link to="IVirtualBox::unregisterMachine"/>.
5462 </note>
5463
5464 <result name="VBOX_E_FILE_ERROR">
5465 Settings file not accessible.
5466 </result>
5467 <result name="VBOX_E_XML_ERROR">
5468 Could not parse the settings file.
5469 </result>
5470 <result name="E_ACCESSDENIED">
5471 Modification request refused.
5472 </result>
5473
5474 </desc>
5475 </method>
5476
5477 <method name="discardSettings">
5478 <desc>
5479 Discards any changes to the machine settings made since the session
5480 has been opened or since the last call to <link to="#saveSettings"/>
5481 or <link to="#discardSettings"/>.
5482 <note>
5483 Calling this method is only valid on instances returned
5484 by <link to="ISession::machine"/> and on new machines
5485 created by <link to="IVirtualBox::createMachine"/> or
5486 opened by <link to="IVirtualBox::openMachine"/> but not
5487 yet registered, or on unregistered machines after calling
5488 <link to="IVirtualBox::unregisterMachine"/>.
5489 </note>
5490
5491 <result name="VBOX_E_INVALID_VM_STATE">
5492 Virtual machine is not mutable.
5493 </result>
5494
5495 </desc>
5496 </method>
5497
5498 <method name="deleteSettings">
5499 <desc>
5500 Deletes the settings file of this machine from disk.
5501 The machine must not be registered in order for this operation
5502 to succeed.
5503 <note>
5504 <link to="#settingsModified"/> will return @c true after this
5505 method successfully returns.
5506 </note>
5507 <note>
5508 Calling this method is only valid on instances returned
5509 by <link to="ISession::machine"/> and on new machines
5510 created by <link to="IVirtualBox::createMachine"/> or
5511 opened by <link to="IVirtualBox::openMachine"/> but not
5512 yet registered, or on unregistered machines after calling
5513 <link to="IVirtualBox::unregisterMachine"/>.
5514 </note>
5515 <note>
5516 The deleted machine settings file can be restored (saved again)
5517 by calling <link to="#saveSettings"/>.
5518 </note>
5519
5520 <result name="VBOX_E_INVALID_VM_STATE">
5521 Cannot delete settings of a registered machine or
5522 machine not mutable.
5523 </result>
5524 <result name="VBOX_E_IPRT_ERROR">
5525 Could not delete the settings file.
5526 </result>
5527
5528 </desc>
5529 </method>
5530
5531 <method name="export">
5532 <desc>Exports the machine to an OVF appliance. See <link to="IAppliance" /> for the
5533 steps required to export VirtualBox machines to OVF.
5534 </desc>
5535
5536 <param name="aAppliance" type="IAppliance" dir="in">
5537 <desc>Appliance to export this machine to.</desc>
5538 </param>
5539 <param name="aDescription" type="IVirtualSystemDescription" dir="return">
5540 <desc>VirtualSystemDescription object which is created for this machine.</desc>
5541 </param>
5542 </method >
5543
5544 <method name="getSnapshot">
5545 <desc>
5546 Returns a snapshot of this machine with the given UUID.
5547 A @c null UUID can be used to obtain the first snapshot
5548 taken on this machine. This is useful if you want to traverse
5549 the whole tree of snapshots starting from the root.
5550
5551 <result name="VBOX_E_OBJECT_NOT_FOUND">
5552 Virtual machine has no snapshots or snapshot not found.
5553 </result>
5554
5555 </desc>
5556 <param name="id" type="uuid" mod="string" dir="in">
5557 <desc>UUID of the snapshot to get</desc>
5558 </param>
5559 <param name="snapshot" type="ISnapshot" dir="return">
5560 <desc>Snapshot object with the given UUID.</desc>
5561 </param>
5562 </method>
5563
5564 <method name="findSnapshot">
5565 <desc>
5566 Returns a snapshot of this machine with the given name.
5567
5568 <result name="VBOX_E_OBJECT_NOT_FOUND">
5569 Virtual machine has no snapshots or snapshot not found.
5570 </result>
5571
5572 </desc>
5573 <param name="name" type="wstring" dir="in">
5574 <desc>Name of the snapshot to find</desc>
5575 </param>
5576 <param name="snapshot" type="ISnapshot" dir="return">
5577 <desc>Snapshot object with the given name.</desc>
5578 </param>
5579 </method>
5580
5581 <method name="setCurrentSnapshot">
5582 <desc>
5583 Sets the current snapshot of this machine.
5584 <note>
5585 In the current implementation, this operation is not
5586 implemented.
5587 </note>
5588 </desc>
5589 <param name="id" type="uuid" mod="string" dir="in">
5590 <desc>UUID of the snapshot to set as the current snapshot.</desc>
5591 </param>
5592 </method>
5593
5594 <method name="createSharedFolder">
5595 <desc>
5596 Creates a new permanent shared folder by associating the given logical
5597 name with the given host path, adds it to the collection of shared
5598 folders and starts sharing it. Refer to the description of
5599 <link to="ISharedFolder"/> to read more about logical names.
5600
5601 <result name="VBOX_E_OBJECT_IN_USE">
5602 Shared folder already exists.
5603 </result>
5604 <result name="VBOX_E_FILE_ERROR">
5605 Shared folder @a hostPath not accessible.
5606 </result>
5607
5608 </desc>
5609 <param name="name" type="wstring" dir="in">
5610 <desc>Unique logical name of the shared folder.</desc>
5611 </param>
5612 <param name="hostPath" type="wstring" dir="in">
5613 <desc>Full path to the shared folder in the host file system.</desc>
5614 </param>
5615 <param name="writable" type="boolean" dir="in">
5616 <desc>Whether the share is writable or readonly</desc>
5617 </param>
5618 </method>
5619
5620 <method name="removeSharedFolder">
5621 <desc>
5622 Removes the permanent shared folder with the given name previously
5623 created by <link to="#createSharedFolder"/> from the collection of
5624 shared folders and stops sharing it.
5625
5626 <result name="VBOX_E_INVALID_VM_STATE">
5627 Virtual machine is not mutable.
5628 </result>
5629 <result name="VBOX_E_OBJECT_NOT_FOUND">
5630 Shared folder @a name does not exist.
5631 </result>
5632
5633 </desc>
5634 <param name="name" type="wstring" dir="in">
5635 <desc>Logical name of the shared folder to remove.</desc>
5636 </param>
5637 </method>
5638
5639 <method name="canShowConsoleWindow">
5640 <desc>
5641 Returns @c true if the VM console process can activate the
5642 console window and bring it to foreground on the desktop of
5643 the host PC.
5644 <note>
5645 This method will fail if a session for this machine is not
5646 currently open.
5647 </note>
5648
5649 <result name="VBOX_E_INVALID_VM_STATE">
5650 Machine session is not open.
5651 </result>
5652
5653 </desc>
5654 <param name="canShow" type="boolean" dir="return">
5655 <desc>
5656 @c true if the console window can be shown and @c false otherwise.
5657 </desc>
5658 </param>
5659 </method>
5660
5661 <method name="showConsoleWindow">
5662 <desc>
5663 Activates the console window and brings it to foreground on
5664 the desktop of the host PC. Many modern window managers on
5665 many platforms implement some sort of focus stealing
5666 prevention logic, so that it may be impossible to activate
5667 a window without the help of the currently active
5668 application. In this case, this method will return a non-zero
5669 identifier that represents the top-level window of the VM
5670 console process. The caller, if it represents a currently
5671 active process, is responsible to use this identifier (in a
5672 platform-dependent manner) to perform actual window
5673 activation.
5674 <note>
5675 This method will fail if a session for this machine is not
5676 currently open.
5677 </note>
5678
5679 <result name="VBOX_E_INVALID_VM_STATE">
5680 Machine session is not open.
5681 </result>
5682
5683 </desc>
5684 <param name="winId" type="unsigned long long" dir="return">
5685 <desc>
5686 Platform-dependent identifier of the top-level VM console
5687 window, or zero if this method has performed all actions
5688 necessary to implement the <i>show window</i> semantics for
5689 the given platform and/or VirtualBox front-end.
5690 </desc>
5691 </param>
5692 </method>
5693
5694 <method name="getGuestProperty" const="yes">
5695 <desc>
5696 Reads an entry from the machine's guest property store.
5697
5698 <result name="VBOX_E_INVALID_VM_STATE">
5699 Machine session is not open.
5700 </result>
5701
5702 </desc>
5703 <param name="name" type="wstring" dir="in">
5704 <desc>
5705 The name of the property to read.
5706 </desc>
5707 </param>
5708 <param name="value" type="wstring" dir="out">
5709 <desc>
5710 The value of the property. If the property does not exist then this
5711 will be empty.
5712 </desc>
5713 </param>
5714 <param name="timestamp" type="unsigned long long" dir="out">
5715 <desc>
5716 The time at which the property was last modified, as seen by the
5717 server process.
5718 </desc>
5719 </param>
5720 <param name="flags" type="wstring" dir="out">
5721 <desc>
5722 Additional property parameters, passed as a comma-separated list of
5723 "name=value" type entries.
5724 </desc>
5725 </param>
5726 </method>
5727
5728 <method name="getGuestPropertyValue" const="yes">
5729 <desc>
5730 Reads a value from the machine's guest property store.
5731
5732 <result name="VBOX_E_INVALID_VM_STATE">
5733 Machine session is not open.
5734 </result>
5735
5736 </desc>
5737 <param name="property" type="wstring" dir="in">
5738 <desc>
5739 The name of the property to read.
5740 </desc>
5741 </param>
5742 <param name="value" type="wstring" dir="return">
5743 <desc>
5744 The value of the property. If the property does not exist then this
5745 will be empty.
5746 </desc>
5747 </param>
5748 </method>
5749
5750 <method name="getGuestPropertyTimestamp" const="yes">
5751 <desc>
5752 Reads a property timestamp from the machine's guest property store.
5753
5754 <result name="VBOX_E_INVALID_VM_STATE">
5755 Machine session is not open.
5756 </result>
5757
5758 </desc>
5759 <param name="property" type="wstring" dir="in">
5760 <desc>
5761 The name of the property to read.
5762 </desc>
5763 </param>
5764 <param name="value" type="unsigned long long" dir="return">
5765 <desc>
5766 The timestamp. If the property does not exist then this will be
5767 empty.
5768 </desc>
5769 </param>
5770 </method>
5771
5772 <method name="setGuestProperty">
5773 <desc>
5774 Sets, changes or deletes an entry in the machine's guest property
5775 store.
5776
5777 <result name="E_ACCESSDENIED">
5778 Property cannot be changed.
5779 </result>
5780 <result name="E_INVALIDARG">
5781 Invalid @a flags.
5782 </result>
5783 <result name="VBOX_E_INVALID_VM_STATE">
5784 Virtual machine is not mutable or session not open.
5785 </result>
5786 <result name="VBOX_E_INVALID_OBJECT_STATE">
5787 Cannot set transient property when machine not running.
5788 </result>
5789
5790 </desc>
5791 <param name="property" type="wstring" dir="in">
5792 <desc>
5793 The name of the property to set, change or delete.
5794 </desc>
5795 </param>
5796 <param name="value" type="wstring" dir="in">
5797 <desc>
5798 The new value of the property to set, change or delete. If the
5799 property does not yet exist and value is non-empty, it will be
5800 created. If the value is @c null or empty, the property will be
5801 deleted if it exists.
5802 </desc>
5803 </param>
5804 <param name="flags" type="wstring" dir="in">
5805 <desc>
5806 Additional property parameters, passed as a comma-separated list of
5807 "name=value" type entries.
5808 </desc>
5809 </param>
5810 </method>
5811
5812 <method name="setGuestPropertyValue">
5813 <desc>
5814 Sets, changes or deletes a value in the machine's guest property
5815 store. The flags field will be left unchanged or created empty for a
5816 new property.
5817
5818 <result name="E_ACCESSDENIED">
5819 Property cannot be changed.
5820 </result>
5821 <result name="VBOX_E_INVALID_VM_STATE">
5822 Virtual machine is not mutable or session not open.
5823 </result>
5824 <result name="VBOX_E_INVALID_OBJECT_STATE">
5825 Cannot set transient property when machine not running.
5826 </result>
5827 </desc>
5828
5829 <param name="property" type="wstring" dir="in">
5830 <desc>
5831 The name of the property to set, change or delete.
5832 </desc>
5833 </param>
5834 <param name="value" type="wstring" dir="in">
5835 <desc>
5836 The new value of the property to set, change or delete. If the
5837 property does not yet exist and value is non-empty, it will be
5838 created. If the value is @c null or empty, the property will be
5839 deleted if it exists.
5840 </desc>
5841 </param>
5842 </method>
5843
5844 <method name="enumerateGuestProperties">
5845 <desc>
5846 Return a list of the guest properties matching a set of patterns along
5847 with their values, time stamps and flags.
5848 </desc>
5849 <param name="patterns" type="wstring" dir="in">
5850 <desc>
5851 The patterns to match the properties against, separated by '|'
5852 characters. If this is empty or @c null, all properties will match.
5853 </desc>
5854 </param>
5855 <param name="name" type="wstring" dir="out" safearray="yes">
5856 <desc>
5857 The names of the properties returned.
5858 </desc>
5859 </param>
5860 <param name="value" type="wstring" dir="out" safearray="yes">
5861 <desc>
5862 The values of the properties returned. The array entries match the
5863 corresponding entries in the @a name array.
5864 </desc>
5865 </param>
5866 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
5867 <desc>
5868 The time stamps of the properties returned. The array entries match
5869 the corresponding entries in the @a name array.
5870 </desc>
5871 </param>
5872 <param name="flags" type="wstring" dir="out" safearray="yes">
5873 <desc>
5874 The flags of the properties returned. The array entries match the
5875 corresponding entries in the @a name array.
5876 </desc>
5877 </param>
5878 </method>
5879
5880 <method name="querySavedThumbnailSize">
5881 <desc>
5882 Returns size in bytes and dimensions in pixels of a saved thumbnail bitmap from saved state.
5883 </desc>
5884 <param name="size" type="unsigned long" dir="out">
5885 <desc>
5886 Size of buffer required to store the bitmap.
5887 </desc>
5888 </param>
5889 <param name="width" type="unsigned long" dir="out">
5890 <desc>
5891 Bitmap width.
5892 </desc>
5893 </param>
5894 <param name="height" type="unsigned long" dir="out">
5895 <desc>
5896 Bitmap height.
5897 </desc>
5898 </param>
5899 </method>
5900
5901 <method name="readSavedThumbnailToArray">
5902 <desc>
5903 Thumbnail is retrieved to an array of bytes in uncompressed 32-bit BGRA or RGBA format.
5904 </desc>
5905 <param name="BGR" type="boolean" dir="in">
5906 <desc>
5907 How to order bytes in the pixel. A pixel consists of 4 bytes. If this parameter is true, then
5908 bytes order is: B, G, R, 0xFF. If this parameter is false, then bytes order is: R, G, B, 0xFF.
5909 </desc>
5910 </param>
5911 <param name="width" type="unsigned long" dir="out">
5912 <desc>
5913 Bitmap width.
5914 </desc>
5915 </param>
5916 <param name="height" type="unsigned long" dir="out">
5917 <desc>
5918 Bitmap height.
5919 </desc>
5920 </param>
5921 <param name="data" type="octet" dir="return" safearray="yes">
5922 <desc>
5923 Array with resulting bitmap data.
5924 </desc>
5925 </param>
5926 </method>
5927
5928 <method name="querySavedScreenshotPNGSize">
5929 <desc>
5930 Returns size in bytes and dimensions of a saved PNG image of screenshot from saved state.
5931 </desc>
5932 <param name="size" type="unsigned long" dir="out">
5933 <desc>
5934 Size of buffer required to store the PNG binary data.
5935 </desc>
5936 </param>
5937 <param name="width" type="unsigned long" dir="out">
5938 <desc>
5939 Image width.
5940 </desc>
5941 </param>
5942 <param name="height" type="unsigned long" dir="out">
5943 <desc>
5944 Image height.
5945 </desc>
5946 </param>
5947 </method>
5948
5949 <method name="readSavedScreenshotPNGToArray">
5950 <desc>
5951 Screenshot in PNG format is retrieved to an array of bytes.
5952 </desc>
5953 <param name="width" type="unsigned long" dir="out">
5954 <desc>
5955 Image width.
5956 </desc>
5957 </param>
5958 <param name="height" type="unsigned long" dir="out">
5959 <desc>
5960 Image height.
5961 </desc>
5962 </param>
5963 <param name="data" type="octet" dir="return" safearray="yes">
5964 <desc>
5965 Array with resulting PNG data.
5966 </desc>
5967 </param>
5968 </method>
5969
5970 <method name="hotPlugCPU">
5971 <desc>
5972 Plugs a CPU into the machine.
5973 </desc>
5974 <param name="cpu" type="unsigned long" dir="in">
5975 <desc>
5976 The CPU id to insert.
5977 </desc>
5978 </param>
5979 </method>
5980
5981 <method name="hotUnplugCPU">
5982 <desc>
5983 Removes a CPU from the machine.
5984 </desc>
5985 <param name="cpu" type="unsigned long" dir="in">
5986 <desc>
5987 The CPU id to remove.
5988 </desc>
5989 </param>
5990 </method>
5991
5992 <method name="getCPUStatus">
5993 <desc>
5994 Returns the current status of the given CPU.
5995 </desc>
5996 <param name="cpu" type="unsigned long" dir="in">
5997 <desc>
5998 The CPU id to check for.
5999 </desc>
6000 </param>
6001 <param name="attached" type="boolean" dir="return">
6002 <desc>
6003 Status of the CPU.
6004 </desc>
6005 </param>
6006 </method>
6007
6008 <method name="queryLogFilename">
6009 <desc>
6010 Queries for the VM log file name of an given index. Returns an empty
6011 string if a log file with that index doesn't exists.
6012 </desc>
6013 <param name="idx" type="unsigned long" dir="in">
6014 <desc>
6015 Which log file name to query. 0=current log file.
6016 </desc>
6017 </param>
6018 <param name="filename" type="wstring" dir="return">
6019 <desc>
6020 On return the full path to the log file or an empty string on error.
6021 </desc>
6022 </param>
6023 </method>
6024
6025 <method name="readLog">
6026 <desc>
6027 Reads the VM log file. The chunk size is limited, so even if you
6028 ask for a big piece there might be less data returned.
6029 </desc>
6030 <param name="idx" type="unsigned long" dir="in">
6031 <desc>
6032 Which log file to read. 0=current log file.
6033 </desc>
6034 </param>
6035 <param name="offset" type="unsigned long long" dir="in">
6036 <desc>
6037 Offset in the log file.
6038 </desc>
6039 </param>
6040 <param name="size" type="unsigned long long" dir="in">
6041 <desc>
6042 Chunk size to read in the log file.
6043 </desc>
6044 </param>
6045 <param name="data" type="octet" dir="return" safearray="yes">
6046 <desc>
6047 Data read from the log file. A data size of 0 means end of file
6048 if the requested chunk size was not 0. This is the unprocessed
6049 file data, i.e. the line ending style depends on the platform of
6050 the system the server is running on.
6051 </desc>
6052 </param>
6053 </method>
6054 </interface>
6055
6056 <!--
6057 // IConsole
6058 /////////////////////////////////////////////////////////////////////////
6059 -->
6060
6061 <interface
6062 name="IConsoleCallback" extends="$unknown"
6063 uuid="60703f8d-81e4-4b45-a147-dcfd07692b19"
6064 wsmap="suppress"
6065 >
6066
6067 <desc>
6068 This interface is used by a client of the Main API that need to
6069 be notified of events. For example, a graphical user interface
6070 can use this to learn about machine state changes so they can
6071 update the list of virtual machines without having to rely
6072 on polling.
6073
6074 Whenever relevant events occur in VirtualBox, the callbacks in
6075 objects of this interface are called. In order for this to be
6076 useful, a client needs to create its own subclass that implements
6077 this interface in which the methods for the relevant callbacks
6078 are overridden. An instance of this subclass interface can then
6079 be passed to <link to="IConsole::registerCallback" />.
6080 </desc>
6081
6082 <method name="onMousePointerShapeChange">
6083 <desc>
6084 Notification when the guest mouse pointer shape has
6085 changed. The new shape data is given.
6086 </desc>
6087 <param name="visible" type="boolean" dir="in">
6088 <desc>
6089 Flag whether the pointer is visible.
6090 </desc>
6091 </param>
6092 <param name="alpha" type="boolean" dir="in">
6093 <desc>
6094 Flag whether the pointer has an alpha channel.
6095 </desc>
6096 </param>
6097 <param name="xHot" type="unsigned long" dir="in">
6098 <desc>
6099 The pointer hot spot x coordinate.
6100 </desc>
6101 </param>
6102 <param name="yHot" type="unsigned long" dir="in">
6103 <desc>
6104 The pointer hot spot y coordinate.
6105 </desc>
6106 </param>
6107 <param name="width" type="unsigned long" dir="in">
6108 <desc>
6109 Width of the pointer shape in pixels.
6110 </desc>
6111 </param>
6112 <param name="height" type="unsigned long" dir="in">
6113 <desc>
6114 Height of the pointer shape in pixels.
6115 </desc>
6116 </param>
6117 <param name="shape" type="octet" mod="ptr" dir="in">
6118 <desc>
6119 Address of the shape buffer.
6120
6121 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
6122 followed by a 32-bpp XOR (color) mask.
6123
6124 For pointers without alpha channel the XOR mask pixels are 32
6125 bit values: (lsb)BGR0(msb). For pointers with alpha channel
6126 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
6127
6128 An AND mask is used for pointers with alpha channel, so if the
6129 callback does not support alpha, the pointer could be
6130 displayed as a normal color pointer.
6131
6132 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
6133 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
6134 height</tt>. The padding bits at the end of each scanline are
6135 undefined.
6136
6137 The XOR mask follows the AND mask on the next 4-byte aligned
6138 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
6139 Bytes in the gap between the AND and the XOR mask are undefined.
6140 The XOR mask scanlines have no gap between them and the size of
6141 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
6142
6143 <note>
6144 If @a shape is 0, only the pointer visibility is changed.
6145 </note>
6146 </desc>
6147 </param>
6148 </method>
6149
6150 <method name="onMouseCapabilityChange">
6151 <desc>
6152 Notification when the mouse capabilities reported by the
6153 guest have changed. The new capabilities are passed.
6154 </desc>
6155 <param name="supportsAbsolute" type="boolean" dir="in"/>
6156 <param name="supportsRelative" type="boolean" dir="in"/>
6157 <param name="needsHostCursor" type="boolean" dir="in"/>
6158 </method>
6159
6160 <method name="onKeyboardLedsChange">
6161 <desc>
6162 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
6163 to alter the state of the keyboard LEDs.
6164 </desc>
6165 <param name="numLock" type="boolean" dir="in"/>
6166 <param name="capsLock" type="boolean" dir="in"/>
6167 <param name="scrollLock" type="boolean" dir="in"/>
6168 </method>
6169
6170 <method name="onStateChange">
6171 <desc>
6172 Notification when the execution state of the machine has changed.
6173 The new state will be given.
6174 </desc>
6175 <param name="state" type="MachineState" dir="in"/>
6176 </method>
6177
6178 <method name="onAdditionsStateChange">
6179 <desc>
6180 Notification when a Guest Additions property changes.
6181 Interested callees should query IGuest attributes to
6182 find out what has changed.
6183 </desc>
6184 </method>
6185
6186 <method name="onNetworkAdapterChange">
6187 <desc>
6188 Notification when a property of one of the
6189 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
6190 changes. Interested callees should use INetworkAdapter methods and
6191 attributes to find out what has changed.
6192 </desc>
6193 <param name="networkAdapter" type="INetworkAdapter" dir="in">
6194 <desc>Network adapter that is subject to change.</desc>
6195 </param>
6196 </method>
6197
6198 <method name="onSerialPortChange">
6199 <desc>
6200 Notification when a property of one of the
6201 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
6202 Interested callees should use ISerialPort methods and attributes
6203 to find out what has changed.
6204 </desc>
6205 <param name="serialPort" type="ISerialPort" dir="in">
6206 <desc>Serial port that is subject to change.</desc>
6207 </param>
6208 </method>
6209
6210 <method name="onParallelPortChange">
6211 <desc>
6212 Notification when a property of one of the
6213 virtual <link to="IMachine::getParallelPort">parallel ports</link>
6214 changes. Interested callees should use ISerialPort methods and
6215 attributes to find out what has changed.
6216 </desc>
6217 <param name="parallelPort" type="IParallelPort" dir="in">
6218 <desc>Parallel port that is subject to change.</desc>
6219 </param>
6220 </method>
6221
6222 <method name="onStorageControllerChange">
6223 <desc>
6224 Notification when a property of one of the
6225 virtual <link to="IMachine::storageControllers">storage controllers</link>
6226 changes. Interested callees should query the corresponding collections
6227 to find out what has changed.
6228 </desc>
6229 </method>
6230
6231 <method name="onMediumChange">
6232 <desc>
6233 Notification when a
6234 <link to="IMachine::mediumAttachments">medium attachment</link>
6235 changes.
6236 </desc>
6237 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
6238 <desc>Medium attachment that is subject to change.</desc>
6239 </param>
6240 </method>
6241
6242 <method name="onCPUChange">
6243 <desc>
6244 Notification when a CPU changes.
6245 </desc>
6246 <param name="cpu" type="unsigned long" dir="in">
6247 <desc>The CPU which changed</desc>
6248 </param>
6249 <param name="add" type="boolean" dir="in">
6250 <desc>Flag whether the CPU was added or removed</desc>
6251 </param>
6252 </method>
6253
6254 <method name="onVRDPServerChange">
6255 <desc>
6256 Notification when a property of the
6257 <link to="IMachine::VRDPServer">VRDP server</link> changes.
6258 Interested callees should use IVRDPServer methods and attributes to
6259 find out what has changed.
6260 </desc>
6261 </method>
6262
6263 <method name="onRemoteDisplayInfoChange">
6264 <desc>
6265 Notification when the status of the VRDP server changes. Interested callees
6266 should use <link to="IConsole::RemoteDisplayInfo">IRemoteDisplayInfo</link>
6267 attributes to find out what is the current status.
6268 </desc>
6269 </method>
6270
6271 <method name="onUSBControllerChange">
6272 <desc>
6273 Notification when a property of the virtual
6274 <link to="IMachine::USBController">USB controller</link> changes.
6275 Interested callees should use IUSBController methods and attributes to
6276 find out what has changed.
6277 </desc>
6278 </method>
6279
6280 <method name="onUSBDeviceStateChange">
6281 <desc>
6282 Notification when a USB device is attached to or detached from
6283 the virtual USB controller.
6284
6285 This notification is sent as a result of the indirect
6286 request to attach the device because it matches one of the
6287 machine USB filters, or as a result of the direct request
6288 issued by <link to="IConsole::attachUSBDevice"/> or
6289 <link to="IConsole::detachUSBDevice"/>.
6290
6291 This notification is sent in case of both a succeeded and a
6292 failed request completion. When the request succeeds, the
6293 @a error parameter is @c null, and the given device has been
6294 already added to (when @a attached is @c true) or removed from
6295 (when @a attached is @c false) the collection represented by
6296 <link to="IConsole::USBDevices"/>. On failure, the collection
6297 doesn't change and the @a error parameter represents the error
6298 message describing the failure.
6299
6300 </desc>
6301 <param name="device" type="IUSBDevice" dir="in">
6302 <desc>Device that is subject to state change.</desc>
6303 </param>
6304 <param name="attached" type="boolean" dir="in">
6305 <desc>
6306 @c true if the device was attached and @c false otherwise.
6307 </desc>
6308 </param>
6309 <param name="error" type="IVirtualBoxErrorInfo" dir="in">
6310 <desc>
6311 @c null on success or an error message object on failure.
6312 </desc>
6313 </param>
6314 </method>
6315
6316 <method name="onSharedFolderChange">
6317 <desc>
6318 Notification when a shared folder is added or removed.
6319 The @a scope argument defines one of three scopes:
6320 <link to="IVirtualBox::sharedFolders">global shared folders</link>
6321 (<link to="Scope_Global">Global</link>),
6322 <link to="IMachine::sharedFolders">permanent shared folders</link> of
6323 the machine (<link to="Scope_Machine">Machine</link>) or <link
6324 to="IConsole::sharedFolders">transient shared folders</link> of the
6325 machine (<link to="Scope_Session">Session</link>). Interested callees
6326 should use query the corresponding collections to find out what has
6327 changed.
6328 </desc>
6329 <param name="scope" type="Scope" dir="in">
6330 <desc>Scope of the notification.</desc>
6331 </param>
6332 </method>
6333
6334 <method name="onRuntimeError">
6335 <desc>
6336 Notification when an error happens during the virtual
6337 machine execution.
6338
6339 There are three kinds of runtime errors:
6340 <ul>
6341 <li><i>fatal</i></li>
6342 <li><i>non-fatal with retry</i></li>
6343 <li><i>non-fatal warnings</i></li>
6344 </ul>
6345
6346 <b>Fatal</b> errors are indicated by the @a fatal parameter set
6347 to @c true. In case of fatal errors, the virtual machine
6348 execution is always paused before calling this notification, and
6349 the notification handler is supposed either to immediately save
6350 the virtual machine state using <link to="IConsole::saveState"/>
6351 or power it off using <link to="IConsole::powerDown"/>.
6352 Resuming the execution can lead to unpredictable results.
6353
6354 <b>Non-fatal</b> errors and warnings are indicated by the
6355 @a fatal parameter set to @c false. If the virtual machine
6356 is in the Paused state by the time the error notification is
6357 received, it means that the user can <i>try to resume</i> the machine
6358 execution after attempting to solve the problem that caused the
6359 error. In this case, the notification handler is supposed
6360 to show an appropriate message to the user (depending on the
6361 value of the @a id parameter) that offers several actions such
6362 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
6363 wants to retry, the notification handler should continue
6364 the machine execution using the <link to="IConsole::resume"/>
6365 call. If the machine execution is not Paused during this
6366 notification, then it means this notification is a <i>warning</i>
6367 (for example, about a fatal condition that can happen very soon);
6368 no immediate action is required from the user, the machine
6369 continues its normal execution.
6370
6371 Note that in either case the notification handler
6372 <b>must not</b> perform any action directly on a thread
6373 where this notification is called. Everything it is allowed to
6374 do is to post a message to another thread that will then talk
6375 to the user and take the corresponding action.
6376
6377 Currently, the following error identifiers are known:
6378 <ul>
6379 <li><tt>"HostMemoryLow"</tt></li>
6380 <li><tt>"HostAudioNotResponding"</tt></li>
6381 <li><tt>"VDIStorageFull"</tt></li>
6382 <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
6383 </ul>
6384
6385 <note>
6386 This notification is not designed to be implemented by
6387 more than one callback at a time. If you have multiple
6388 IConsoleCallback instances registered on the given
6389 IConsole object, make sure you simply do nothing but
6390 return @c S_OK from all but one of them that does actual
6391 user notification and performs necessary actions.
6392 </note>
6393
6394 </desc>
6395 <param name="fatal" type="boolean" dir="in">
6396 <desc>Whether the error is fatal or not</desc>
6397 </param>
6398 <param name="id" type="wstring" dir="in">
6399 <desc>Error identifier</desc>
6400 </param>
6401 <param name="message" type="wstring" dir="in">
6402 <desc>Optional error message</desc>
6403 </param>
6404 </method>
6405
6406 <method name="onCanShowWindow">
6407 <desc>
6408 Notification when a call to
6409 <link to="IMachine::canShowConsoleWindow"/> is made by a
6410 front-end to check if a subsequent call to
6411 <link to="IMachine::showConsoleWindow"/> can succeed.
6412
6413 The callee should give an answer appropriate to the current
6414 machine state in the @a canShow argument. This answer must
6415 remain valid at least until the next
6416 <link to="IConsole::state">machine state</link> change.
6417
6418 <note>
6419 This notification is not designed to be implemented by
6420 more than one callback at a time. If you have multiple
6421 IConsoleCallback instances registered on the given
6422 IConsole object, make sure you simply do nothing but
6423 return @c true and @c S_OK from all but one of them that
6424 actually manages console window activation.
6425 </note>
6426 </desc>
6427 <param name="canShow" type="boolean" dir="return">
6428 <desc>
6429 @c true if the console window can be shown and @c false otherwise.
6430 </desc>
6431 </param>
6432 </method>
6433
6434 <method name="onShowWindow">
6435 <desc>
6436 Notification when a call to
6437 <link to="IMachine::showConsoleWindow"/>
6438 requests the console window to be activated and brought to
6439 foreground on the desktop of the host PC.
6440
6441 This notification should cause the VM console process to
6442 perform the requested action as described above. If it is
6443 impossible to do it at a time of this notification, this
6444 method should return a failure.
6445
6446 Note that many modern window managers on many platforms
6447 implement some sort of focus stealing prevention logic, so
6448 that it may be impossible to activate a window without the
6449 help of the currently active application (which is supposedly
6450 an initiator of this notification). In this case, this method
6451 must return a non-zero identifier that represents the
6452 top-level window of the VM console process. The caller, if it
6453 represents a currently active process, is responsible to use
6454 this identifier (in a platform-dependent manner) to perform
6455 actual window activation.
6456
6457 This method must set @a winId to zero if it has performed all
6458 actions necessary to complete the request and the console
6459 window is now active and in foreground, to indicate that no
6460 further action is required on the caller's side.
6461
6462 <note>
6463 This notification is not designed to be implemented by
6464 more than one callback at a time. If you have multiple
6465 IConsoleCallback instances registered on the given
6466 IConsole object, make sure you simply do nothing but
6467 return @c S_OK from all but one of them that actually
6468 manages console window activation.
6469 </note>
6470 </desc>
6471 <param name="winId" type="unsigned long long" dir="return">
6472 <desc>
6473 Platform-dependent identifier of the top-level VM console
6474 window, or zero if this method has performed all actions
6475 necessary to implement the <i>show window</i> semantics for
6476 the given platform and/or this VirtualBox front-end.
6477 </desc>
6478 </param>
6479 </method>
6480
6481 </interface>
6482
6483 <interface
6484 name="IRemoteDisplayInfo" extends="$unknown"
6485 uuid="b3741084-806f-4c3b-8c42-ebad1a81e45a"
6486 wsmap="struct"
6487 >
6488 <desc>
6489 Contains information about the remote display (VRDP) capabilities and status.
6490 This is used in the <link to="IConsole::remoteDisplayInfo" /> attribute.
6491 </desc>
6492
6493 <attribute name="active" type="boolean" readonly="yes">
6494 <desc>
6495 Whether the remote display connection is active.
6496 </desc>
6497 </attribute>
6498
6499 <attribute name="port" type="long" readonly="yes">
6500 <desc>
6501 VRDP server port number. If this property is equal to <tt>0</tt>, then
6502 the VRDP server failed to start, usually because there are no free TCP
6503 ports to bind to. If this property is equal to <tt>-1</tt>, then the VRDP
6504 server has not yet been started.
6505 </desc>
6506 </attribute>
6507
6508 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
6509 <desc>
6510 How many times a client connected.
6511 </desc>
6512 </attribute>
6513
6514 <attribute name="beginTime" type="long long" readonly="yes">
6515 <desc>
6516 When the last connection was established, in milliseconds since 1970-01-01 UTC.
6517 </desc>
6518 </attribute>
6519
6520 <attribute name="endTime" type="long long" readonly="yes">
6521 <desc>
6522 When the last connection was terminated or the current time, if
6523 connection is still active, in milliseconds since 1970-01-01 UTC.
6524 </desc>
6525 </attribute>
6526
6527 <attribute name="bytesSent" type="unsigned long long" readonly="yes">
6528 <desc>
6529 How many bytes were sent in last or current, if still active, connection.
6530 </desc>
6531 </attribute>
6532
6533 <attribute name="bytesSentTotal" type="unsigned long long" readonly="yes">
6534 <desc>
6535 How many bytes were sent in all connections.
6536 </desc>
6537 </attribute>
6538
6539 <attribute name="bytesReceived" type="unsigned long long" readonly="yes">
6540 <desc>
6541 How many bytes were received in last or current, if still active, connection.
6542 </desc>
6543 </attribute>
6544
6545 <attribute name="bytesReceivedTotal" type="unsigned long long" readonly="yes">
6546 <desc>
6547 How many bytes were received in all connections.
6548 </desc>
6549 </attribute>
6550
6551 <attribute name="user" type="wstring" readonly="yes">
6552 <desc>
6553 Login user name supplied by the client.
6554 </desc>
6555 </attribute>
6556
6557 <attribute name="domain" type="wstring" readonly="yes">
6558 <desc>
6559 Login domain name supplied by the client.
6560 </desc>
6561 </attribute>
6562
6563 <attribute name="clientName" type="wstring" readonly="yes">
6564 <desc>
6565 The client name supplied by the client.
6566 </desc>
6567 </attribute>
6568
6569 <attribute name="clientIP" type="wstring" readonly="yes">
6570 <desc>
6571 The IP address of the client.
6572 </desc>
6573 </attribute>
6574
6575 <attribute name="clientVersion" type="unsigned long" readonly="yes">
6576 <desc>
6577 The client software version number.
6578 </desc>
6579 </attribute>
6580
6581 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
6582 <desc>
6583 Public key exchange method used when connection was established.
6584 Values: 0 - RDP4 public key exchange scheme.
6585 1 - X509 certificates were sent to client.
6586 </desc>
6587 </attribute>
6588
6589 </interface>
6590
6591 <interface
6592 name="IConsole" extends="$unknown"
6593 uuid="6375231a-c17c-464b-92cb-ae9e128d71c3"
6594 wsmap="managed"
6595 >
6596 <desc>
6597 The IConsole interface represents an interface to control virtual
6598 machine execution.
6599
6600 The console object that implements the IConsole interface is obtained
6601 from a session object after the session for the given machine has been
6602 opened using one of <link to="IVirtualBox::openSession"/>,
6603 <link to="IVirtualBox::openRemoteSession"/> or
6604 <link to="IVirtualBox::openExistingSession"/> methods.
6605
6606 Methods of the IConsole interface allow the caller to query the current
6607 virtual machine execution state, pause the machine or power it down, save
6608 the machine state or take a snapshot, attach and detach removable media
6609 and so on.
6610
6611 <see>ISession</see>
6612 </desc>
6613
6614 <attribute name="machine" type="IMachine" readonly="yes">
6615 <desc>
6616 Machine object this console is sessioned with.
6617 <note>
6618 This is a convenience property, it has the same value as
6619 <link to="ISession::machine"/> of the corresponding session
6620 object.
6621 </note>
6622 </desc>
6623 </attribute>
6624
6625 <attribute name="state" type="MachineState" readonly="yes">
6626 <desc>
6627 Current execution state of the machine.
6628 <note>
6629 This property always returns the same value as the corresponding
6630 property of the IMachine object this console is sessioned with.
6631 For the process that owns (executes) the VM, this is the
6632 preferable way of querying the VM state, because no IPC
6633 calls are made.
6634 </note>
6635 </desc>
6636 </attribute>
6637
6638 <attribute name="guest" type="IGuest" readonly="yes">
6639 <desc>Guest object.</desc>
6640 </attribute>
6641
6642 <attribute name="keyboard" type="IKeyboard" readonly="yes">
6643 <desc>
6644 Virtual keyboard object.
6645 <note>
6646 If the machine is not running, any attempt to use
6647 the returned object will result in an error.
6648 </note>
6649 </desc>
6650 </attribute>
6651
6652 <attribute name="mouse" type="IMouse" readonly="yes">
6653 <desc>
6654 Virtual mouse object.
6655 <note>
6656 If the machine is not running, any attempt to use
6657 the returned object will result in an error.
6658 </note>
6659 </desc>
6660 </attribute>
6661
6662 <attribute name="display" type="IDisplay" readonly="yes">
6663 <desc>Virtual display object.
6664 <note>
6665 If the machine is not running, any attempt to use
6666 the returned object will result in an error.
6667 </note>
6668 </desc>
6669 </attribute>
6670
6671 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
6672 <desc>Debugging interface.</desc>
6673 </attribute>
6674
6675 <attribute name="USBDevices" type="IUSBDevice" readonly="yes" safearray="yes">
6676 <desc>
6677 Collection of USB devices currently attached to the virtual
6678 USB controller.
6679 <note>
6680 The collection is empty if the machine is not running.
6681 </note>
6682 </desc>
6683 </attribute>
6684
6685 <attribute name="remoteUSBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
6686 <desc>
6687 List of USB devices currently attached to the remote VRDP client.
6688 Once a new device is physically attached to the remote host computer,
6689 it appears in this list and remains there until detached.
6690 </desc>
6691 </attribute>
6692
6693 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
6694 <desc>
6695 Collection of shared folders for the current session. These folders
6696 are called transient shared folders because they are available to the
6697 guest OS running inside the associated virtual machine only for the
6698 duration of the session (as opposed to
6699 <link to="IMachine::sharedFolders"/> which represent permanent shared
6700 folders). When the session is closed (e.g. the machine is powered down),
6701 these folders are automatically discarded.
6702
6703 New shared folders are added to the collection using
6704 <link to="#createSharedFolder"/>. Existing shared folders can be
6705 removed using <link to="#removeSharedFolder"/>.
6706 </desc>
6707 </attribute>
6708
6709 <attribute name="remoteDisplayInfo" type="IRemoteDisplayInfo" readonly="yes">
6710 <desc>
6711 Interface that provides information on Remote Display (VRDP) connection.
6712 </desc>
6713 </attribute>
6714
6715 <method name="powerUp">
6716 <desc>
6717 Starts the virtual machine execution using the current machine
6718 state (that is, its current execution state, current settings and
6719 current storage devices).
6720
6721 If the machine is powered off or aborted, the execution will
6722 start from the beginning (as if the real hardware were just
6723 powered on).
6724
6725 If the machine is in the <link to="MachineState_Saved"/> state,
6726 it will continue its execution the point where the state has
6727 been saved.
6728
6729 <note>
6730 Unless you are trying to write a new VirtualBox front-end that
6731 performs direct machine execution (like the VirtualBox or VBoxSDL
6732 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
6733 session opened by <link to="IVirtualBox::openSession"/> and use this
6734 session only to change virtual machine settings. If you simply want to
6735 start virtual machine execution using one of the existing front-ends
6736 (for example the VirtualBox GUI or headless server), simply use
6737 <link to="IVirtualBox::openRemoteSession"/>; these front-ends will
6738 power up the machine automatically for you.
6739 </note>
6740
6741 <see>#saveState</see>
6742 <result name="VBOX_E_INVALID_VM_STATE">
6743 Virtual machine already running.
6744 </result>
6745 <result name="VBOX_E_HOST_ERROR">
6746 Host interface does not exist or name not set.
6747 </result>
6748 <result name="VBOX_E_FILE_ERROR">
6749 Invalid saved state file.
6750 </result>
6751 </desc>
6752 <param name="progress" type="IProgress" dir="return">
6753 <desc>Progress object to track the operation completion.</desc>
6754 </param>
6755 </method>
6756
6757 <method name="powerUpPaused">
6758 <desc>
6759 Identical to powerUp except that the VM will enter the
6760 <link to="MachineState_Paused"/> state, instead of
6761 <link to="MachineState_Running"/>.
6762
6763 <see>#powerUp</see>
6764 <result name="VBOX_E_INVALID_VM_STATE">
6765 Virtual machine already running.
6766 </result>
6767 <result name="VBOX_E_HOST_ERROR">
6768 Host interface does not exist or name not set.
6769 </result>
6770 <result name="VBOX_E_FILE_ERROR">
6771 Invalid saved state file.
6772 </result>
6773 </desc>
6774 <param name="progress" type="IProgress" dir="return">
6775 <desc>Progress object to track the operation completion.</desc>
6776 </param>
6777 </method>
6778
6779 <method name="powerDown">
6780 <desc>
6781 Initiates the power down procedure to stop the virtual machine
6782 execution.
6783
6784 The completion of the power down procedure is tracked using the returned
6785 IProgress object. After the operation is complete, the machine will go
6786 to the PoweredOff state.
6787 <result name="VBOX_E_INVALID_VM_STATE">
6788 Virtual machine must be Running, Paused or Stuck to be powered down.
6789 </result>
6790 </desc>
6791 <param name="progress" type="IProgress" dir="return">
6792 <desc>Progress object to track the operation completion.</desc>
6793 </param>
6794 </method>
6795
6796 <method name="reset">
6797 <desc>Resets the virtual machine.
6798 <result name="VBOX_E_INVALID_VM_STATE">
6799 Virtual machine not in Running state.
6800 </result>
6801 <result name="VBOX_E_VM_ERROR">
6802 Virtual machine error in reset operation.
6803 </result>
6804 </desc>
6805 </method>
6806
6807 <method name="pause">
6808 <desc>Pauses the virtual machine execution.
6809 <result name="VBOX_E_INVALID_VM_STATE">
6810 Virtual machine not in Running state.
6811 </result>
6812 <result name="VBOX_E_VM_ERROR">
6813 Virtual machine error in suspend operation.
6814 </result>
6815 </desc>
6816 </method>
6817
6818 <method name="resume">
6819 <desc>Resumes the virtual machine execution.
6820 <result name="VBOX_E_INVALID_VM_STATE">
6821 Virtual machine not in Paused state.
6822 </result>
6823 <result name="VBOX_E_VM_ERROR">
6824 Virtual machine error in resume operation.
6825 </result>
6826 </desc>
6827 </method>
6828
6829 <method name="powerButton">
6830 <desc>Sends the ACPI power button event to the guest.
6831 <result name="VBOX_E_INVALID_VM_STATE">
6832 Virtual machine not in Running state.
6833 </result>
6834 <result name="VBOX_E_PDM_ERROR">
6835 Controlled power off failed.
6836 </result>
6837 </desc>
6838 </method>
6839
6840 <method name="sleepButton">
6841 <desc>Sends the ACPI sleep button event to the guest.
6842 <result name="VBOX_E_INVALID_VM_STATE">
6843 Virtual machine not in Running state.
6844 </result>
6845 <result name="VBOX_E_PDM_ERROR">
6846 Sending sleep button event failed.
6847 </result>
6848 </desc>
6849 </method>
6850
6851 <method name="getPowerButtonHandled">
6852 <desc>Checks if the last power button event was handled by guest.
6853 <result name="VBOX_E_PDM_ERROR">
6854 Checking if the event was handled by the guest OS failed.
6855 </result>
6856 </desc>
6857 <param name="handled" type="boolean" dir="return"/>
6858 </method>
6859
6860 <method name="getGuestEnteredACPIMode">
6861 <desc>Checks if the guest entered the ACPI mode G0 (working) or
6862 G1 (sleeping). If this method returns @c false, the guest will
6863 most likely not respond to external ACPI events.
6864 <result name="VBOX_E_INVALID_VM_STATE">
6865 Virtual machine not in Running state.
6866 </result>
6867 </desc>
6868 <param name="entered" type="boolean" dir="return"/>
6869 </method>
6870
6871 <method name="saveState">
6872 <desc>
6873 Saves the current execution state of a running virtual machine
6874 and stops its execution.
6875
6876 After this operation completes, the machine will go to the
6877 Saved state. Next time it is powered up, this state will
6878 be restored and the machine will continue its execution from
6879 the place where it was saved.
6880
6881 This operation differs from taking a snapshot to the effect
6882 that it doesn't create new differencing media. Also, once
6883 the machine is powered up from the state saved using this method,
6884 the saved state is deleted, so it will be impossible to return
6885 to this state later.
6886
6887 <note>
6888 On success, this method implicitly calls
6889 <link to="IMachine::saveSettings"/> to save all current machine
6890 settings (including runtime changes to the DVD medium, etc.).
6891 Together with the impossibility to change any VM settings when it is
6892 in the Saved state, this guarantees adequate hardware
6893 configuration of the machine when it is restored from the saved
6894 state file.
6895 </note>
6896
6897 <note>
6898 The machine must be in the Running or Paused state, otherwise
6899 the operation will fail.
6900 </note>
6901 <result name="VBOX_E_INVALID_VM_STATE">
6902 Virtual machine state neither Running nor Paused.
6903 </result>
6904 <result name="VBOX_E_FILE_ERROR">
6905 Failed to create directory for saved state file.
6906 </result>
6907
6908 <see><link to="#takeSnapshot"/></see>
6909 </desc>
6910 <param name="progress" type="IProgress" dir="return">
6911 <desc>Progress object to track the operation completion.</desc>
6912 </param>
6913 </method>
6914
6915 <method name="adoptSavedState">
6916 <desc>
6917 Associates the given saved state file to the virtual machine.
6918
6919 On success, the machine will go to the Saved state. Next time it is
6920 powered up, it will be restored from the adopted saved state and
6921 continue execution from the place where the saved state file was
6922 created.
6923
6924 The specified saved state file path may be absolute or relative to the
6925 folder the VM normally saves the state to (usually,
6926 <link to="IMachine::snapshotFolder"/>).
6927
6928 <note>
6929 It's a caller's responsibility to make sure the given saved state
6930 file is compatible with the settings of this virtual machine that
6931 represent its virtual hardware (memory size, storage disk configuration
6932 etc.). If there is a mismatch, the behavior of the virtual machine
6933 is undefined.
6934 </note>
6935 <result name="VBOX_E_INVALID_VM_STATE">
6936 Virtual machine state neither PoweredOff nor Aborted.
6937 </result>
6938 </desc>
6939 <param name="savedStateFile" type="wstring" dir="in">
6940 <desc>Path to the saved state file to adopt.</desc>
6941 </param>
6942 </method>
6943
6944 <method name="forgetSavedState">
6945 <desc>
6946 Forgets the saved state of the virtual machine previously created
6947 by <link to="#saveState"/>. Next time the machine is powered up, a
6948 clean boot will occur. If @a remove is @c true the saved state file
6949 is deleted.
6950 <note>
6951 This operation is equivalent to resetting or powering off
6952 the machine without doing a proper shutdown in the guest OS.
6953 </note>
6954 <result name="VBOX_E_INVALID_VM_STATE">
6955 Virtual machine not in state Saved.
6956 </result>
6957 </desc>
6958 <param name="remove" type="boolean" dir="in">
6959 <desc>If @c true remove the saved state file.</desc>
6960 </param>
6961 </method>
6962
6963 <method name="getDeviceActivity">
6964 <desc>
6965 Gets the current activity type of a given device or device group.
6966 <result name="E_INVALIDARG">
6967 Invalid device type.
6968 </result>
6969 </desc>
6970 <param name="type" type="DeviceType" dir="in"/>
6971 <param name="activity" type="DeviceActivity" dir="return"/>
6972 </method>
6973
6974 <method name="attachUSBDevice">
6975 <desc>
6976 Attaches a host USB device with the given UUID to the
6977 USB controller of the virtual machine.
6978
6979 The device needs to be in one of the following states:
6980 <link to="USBDeviceState_Busy"/>,
6981 <link to="USBDeviceState_Available"/> or
6982 <link to="USBDeviceState_Held"/>,
6983 otherwise an error is immediately returned.
6984
6985 When the device state is
6986 <link to="USBDeviceState_Busy">Busy</link>, an error may also
6987 be returned if the host computer refuses to release it for some reason.
6988
6989 <see>IUSBController::deviceFilters, USBDeviceState</see>
6990 <result name="VBOX_E_INVALID_VM_STATE">
6991 Virtual machine state neither Running nor Paused.
6992 </result>
6993 <result name="VBOX_E_PDM_ERROR">
6994 Virtual machine does not have a USB controller.
6995 </result>
6996 </desc>
6997 <param name="id" type="uuid" mod="string" dir="in">
6998 <desc>UUID of the host USB device to attach.</desc>
6999 </param>
7000 </method>
7001
7002 <method name="detachUSBDevice">
7003 <desc>
7004 Detaches an USB device with the given UUID from the USB controller
7005 of the virtual machine.
7006
7007 After this method succeeds, the VirtualBox server re-initiates
7008 all USB filters as if the device were just physically attached
7009 to the host, but filters of this machine are ignored to avoid
7010 a possible automatic re-attachment.
7011
7012 <see>IUSBController::deviceFilters, USBDeviceState</see>
7013
7014 <result name="VBOX_E_PDM_ERROR">
7015 Virtual machine does not have a USB controller.
7016 </result>
7017 <result name="E_INVALIDARG">
7018 USB device not attached to this virtual machine.
7019 </result>
7020 </desc>
7021 <param name="id" type="uuid" mod="string" dir="in">
7022 <desc>UUID of the USB device to detach.</desc>
7023 </param>
7024 <param name="device" type="IUSBDevice" dir="return">
7025 <desc>Detached USB device.</desc>
7026 </param>
7027 </method>
7028
7029 <method name="findUSBDeviceByAddress">
7030 <desc>
7031 Searches for a USB device with the given host address.
7032
7033 <result name="VBOX_E_OBJECT_NOT_FOUND">
7034 Given @c name does not correspond to any USB device.
7035 </result>
7036
7037 <see>IUSBDevice::address</see>
7038 </desc>
7039 <param name="name" type="wstring" dir="in">
7040 <desc>
7041 Address of the USB device (as assigned by the host) to
7042 search for.
7043 </desc>
7044 </param>
7045 <param name="device" type="IUSBDevice" dir="return">
7046 <desc>Found USB device object.</desc>
7047 </param>
7048 </method>
7049
7050 <method name="findUSBDeviceById">
7051 <desc>
7052 Searches for a USB device with the given UUID.
7053
7054 <result name="VBOX_E_OBJECT_NOT_FOUND">
7055 Given @c id does not correspond to any USB device.
7056 </result>
7057
7058 <see>IUSBDevice::id</see>
7059 </desc>
7060 <param name="id" type="uuid" mod="string" dir="in">
7061 <desc>UUID of the USB device to search for.</desc>
7062 </param>
7063 <param name="device" type="IUSBDevice" dir="return">
7064 <desc>Found USB device object.</desc>
7065 </param>
7066 </method>
7067
7068 <method name="createSharedFolder">
7069 <desc>
7070 Creates a transient new shared folder by associating the given logical
7071 name with the given host path, adds it to the collection of shared
7072 folders and starts sharing it. Refer to the description of
7073 <link to="ISharedFolder"/> to read more about logical names.
7074
7075 <result name="VBOX_E_INVALID_VM_STATE">
7076 Virtual machine in Saved state or currently changing state.
7077 </result>
7078 <result name="VBOX_E_FILE_ERROR">
7079 Shared folder already exists or not accessible.
7080 </result>
7081 </desc>
7082 <param name="name" type="wstring" dir="in">
7083 <desc>Unique logical name of the shared folder.</desc>
7084 </param>
7085 <param name="hostPath" type="wstring" dir="in">
7086 <desc>Full path to the shared folder in the host file system.</desc>
7087 </param>
7088 <param name="writable" type="boolean" dir="in">
7089 <desc>Whether the share is writable or readonly</desc>
7090 </param>
7091 </method>
7092
7093 <method name="removeSharedFolder">
7094 <desc>
7095 Removes a transient shared folder with the given name previously
7096 created by <link to="#createSharedFolder"/> from the collection of
7097 shared folders and stops sharing it.
7098 <result name="VBOX_E_INVALID_VM_STATE">
7099 Virtual machine in Saved state or currently changing state.
7100 </result>
7101 <result name="VBOX_E_FILE_ERROR">
7102 Shared folder does not exists.
7103 </result>
7104 </desc>
7105 <param name="name" type="wstring" dir="in">
7106 <desc>Logical name of the shared folder to remove.</desc>
7107 </param>
7108 </method>
7109
7110 <method name="takeSnapshot">
7111 <desc>
7112 Saves the current execution state
7113 and all settings of the machine and creates differencing images
7114 for all normal (non-independent) media.
7115 See <link to="ISnapshot" /> for an introduction to snapshots.
7116
7117 This method can be called for a PoweredOff, Saved (see
7118 <link to="#saveState"/>), Running or
7119 Paused virtual machine. When the machine is PoweredOff, an
7120 offline snapshot is created. When the machine is Running a live
7121 snapshot is created, and an online snapshot is is created when Paused.
7122
7123 The taken snapshot is always based on the
7124 <link to="IMachine::currentSnapshot">current snapshot</link>
7125 of the associated virtual machine and becomes a new current snapshot.
7126
7127 <note>
7128 This method implicitly calls <link to="IMachine::saveSettings"/> to
7129 save all current machine settings before taking an offline snapshot.
7130 </note>
7131
7132 <result name="VBOX_E_INVALID_VM_STATE">
7133 Virtual machine currently changing state.
7134 </result>
7135 </desc>
7136 <param name="name" type="wstring" dir="in">
7137 <desc>Short name for the snapshot.</desc>
7138 </param>
7139 <param name="description" type="wstring" dir="in">
7140 <desc>Optional description of the snapshot.</desc>
7141 </param>
7142 <param name="progress" type="IProgress" dir="return">
7143 <desc>Progress object to track the operation completion.</desc>
7144 </param>
7145 </method>
7146
7147 <method name="deleteSnapshot">
7148 <desc>
7149 Starts deleting the specified snapshot asynchronously.
7150 See <link to="ISnapshot" /> for an introduction to snapshots.
7151
7152 The execution state and settings of the associated machine stored in
7153 the snapshot will be deleted. The contents of all differencing media of
7154 this snapshot will be merged with the contents of their dependent child
7155 media to keep the medium chain valid (in other words, all changes
7156 represented by media being deleted will be propagated to their child
7157 medium). After that, this snapshot's differencing medium will be
7158 deleted. The parent of this snapshot will become a new parent for all
7159 its child snapshots.
7160
7161 If the deleted snapshot is the current one, its parent snapshot will
7162 become a new current snapshot. The current machine state is not directly
7163 affected in this case, except that currently attached differencing
7164 media based on media of the deleted snapshot will be also merged as
7165 described above.
7166
7167 If the deleted snapshot is the first or current snapshot, then the
7168 respective IMachine attributes will be adjusted. Deleting the current
7169 snapshot will also implicitly call <link to="IMachine::saveSettings"/>
7170 to make all current machine settings permanent.
7171
7172 Deleting a snapshot has the following preconditions:
7173
7174 <ul>
7175 <li>Child media of all normal media of the deleted snapshot
7176 must be accessible (see <link to="IMedium::state"/>) for this
7177 operation to succeed. In particular, this means that all virtual
7178 machines, whose media are directly or indirectly based on the
7179 media of deleted snapshot, must be powered off.</li>
7180
7181 <li>You cannot delete the snapshot if a medium attached to it has
7182 more than once child medium (differencing images) because otherwise
7183 merging would be impossible. This might be the case if there is
7184 more than one child snapshot or differencing images were created
7185 for other reason (e.g. implicitly because of multiple machine
7186 attachments).</li>
7187 </ul>
7188
7189
7190 The virtual machine's <link to="IMachine::state">state</link> is changed to "DeletingSnapshot"
7191 while this operation is in progress.
7192
7193 <note>
7194 Merging medium contents can be very time and disk space
7195 consuming, if these media are big in size and have many
7196 children. However, if the snapshot being deleted is the last
7197 (head) snapshot on the branch, the operation will be rather
7198 quick.
7199 </note>
7200 <result name="VBOX_E_INVALID_VM_STATE">
7201 Virtual machine is running.
7202 </result>
7203 </desc>
7204 <param name="id" type="uuid" mod="string" dir="in">
7205 <desc>UUID of the snapshot to delete.</desc>
7206 </param>
7207 <param name="progress" type="IProgress" dir="return">
7208 <desc>Progress object to track the operation completion.</desc>
7209 </param>
7210 </method>
7211
7212 <method name="restoreSnapshot">
7213 <desc>
7214 Starts resetting the machine's current state to the state contained
7215 in the given snapshot, asynchronously. All current settings of the
7216 machine will be reset and changes stored in differencing media
7217 will be lost.
7218 See <link to="ISnapshot" /> for an introduction to snapshots.
7219
7220 After this operation is successfully completed, new empty differencing
7221 media are created for all normal media of the machine.
7222
7223 If the given snapshot is an online snapshot, the machine will go to
7224 the <link to="MachineState_Saved"> saved state</link>, so that the
7225 next time it is powered on, the execution state will be restored
7226 from the state of the snapshot.
7227
7228 <note>
7229 The machine must not be running, otherwise the operation will fail.
7230 </note>
7231
7232 <note>
7233 If the machine state is <link to="MachineState_Saved">Saved</link>
7234 prior to this operation, the saved state file will be implicitly
7235 deleted (as if <link to="IConsole::forgetSavedState"/> were
7236 called).
7237 </note>
7238
7239 <result name="VBOX_E_INVALID_VM_STATE">
7240 Virtual machine is running.
7241 </result>
7242 </desc>
7243 <param name="snapshot" type="ISnapshot" dir="in">
7244 <desc>The snapshot to restore the VM state from.</desc>
7245 </param>
7246 <param name="progress" type="IProgress" dir="return">
7247 <desc>Progress object to track the operation completion.</desc>
7248 </param>
7249 </method>
7250
7251 <method name="teleport">
7252 <desc>
7253 Teleport the VM to a different host machine or process.
7254
7255 TODO explain the details.
7256
7257 <result name="VBOX_E_INVALID_VM_STATE">
7258 Virtual machine not running or paused.
7259 </result>
7260 </desc>
7261 <param name="hostname" type="wstring" dir="in">
7262 <desc>The name or IP of the host to teleport to.</desc>
7263 </param>
7264 <param name="tcpport" type="unsigned long" dir="in">
7265 <desc>The TCP port to connect to (1..65535).</desc>
7266 </param>
7267 <param name="password" type="wstring" dir="in">
7268 <desc>The password.</desc>
7269 </param>
7270 <param name="maxDowntime" type="unsigned long" dir="in">
7271 <desc>
7272 The maximum allowed downtime given as milliseconds. 0 is not a valid
7273 value. Recommended value: 250 ms.
7274
7275 The higher the value is, the greater the chance for a successful
7276 teleportation. A small value may easily result in the teleportation
7277 process taking hours and eventually fail.
7278
7279 <note>
7280 The current implementation treats this a guideline, not as an
7281 absolute rule.
7282 </note>
7283 </desc>
7284 </param>
7285 <param name="progress" type="IProgress" dir="return">
7286 <desc>Progress object to track the operation completion.</desc>
7287 </param>
7288 </method>
7289
7290 <method name="registerCallback">
7291 <desc>
7292 Registers a new console callback on this instance. The methods of the
7293 callback interface will be called by this instance when the appropriate
7294 event occurs.
7295 </desc>
7296 <param name="callback" type="IConsoleCallback" dir="in"/>
7297 </method>
7298
7299 <method name="unregisterCallback">
7300 <desc>
7301 Unregisters the console callback previously registered using
7302 <link to="#registerCallback"/>.
7303 <result name="E_INVALIDARG">
7304 Given @a callback handler is not registered.
7305 </result>
7306 </desc>
7307 <param name="callback" type="IConsoleCallback" dir="in"/>
7308 </method>
7309 </interface>
7310
7311 <!--
7312 // IHost
7313 /////////////////////////////////////////////////////////////////////////
7314 -->
7315
7316 <enum
7317 name="HostNetworkInterfaceMediumType"
7318 uuid="1aa54aaf-2497-45a2-bfb1-8eb225e93d5b"
7319 >
7320 <desc>
7321 Type of encapsulation. Ethernet encapsulation includes both wired and
7322 wireless Ethernet connections.
7323 <see>IHostNetworkInterface</see>
7324 </desc>
7325
7326 <const name="Unknown" value="0">
7327 <desc>
7328 The type of interface cannot be determined.
7329 </desc>
7330 </const>
7331 <const name="Ethernet" value="1">
7332 <desc>
7333 Ethernet frame encapsulation.
7334 </desc>
7335 </const>
7336 <const name="PPP" value="2">
7337 <desc>
7338 Point-to-point protocol encapsulation.
7339 </desc>
7340 </const>
7341 <const name="SLIP" value="3">
7342 <desc>
7343 Serial line IP encapsulation.
7344 </desc>
7345 </const>
7346 </enum>
7347
7348 <enum
7349 name="HostNetworkInterfaceStatus"
7350 uuid="CC474A69-2710-434B-8D99-C38E5D5A6F41"
7351 >
7352 <desc>
7353 Current status of the interface.
7354 <see>IHostNetworkInterface</see>
7355 </desc>
7356
7357 <const name="Unknown" value="0">
7358 <desc>
7359 The state of interface cannot be determined.
7360 </desc>
7361 </const>
7362 <const name="Up" value="1">
7363 <desc>
7364 The interface is fully operational.
7365 </desc>
7366 </const>
7367 <const name="Down" value="2">
7368 <desc>
7369 The interface is not functioning.
7370 </desc>
7371 </const>
7372 </enum>
7373
7374 <enum
7375 name="HostNetworkInterfaceType"
7376 uuid="67431b00-9946-48a2-bc02-b25c5919f4f3"
7377 >
7378 <desc>
7379 Network interface type.
7380 </desc>
7381 <const name="Bridged" value="1"/>
7382 <const name="HostOnly" value="2"/>
7383 </enum>
7384
7385 <interface
7386 name="IHostNetworkInterface" extends="$unknown"
7387 uuid="ce6fae58-7642-4102-b5db-c9005c2320a8"
7388 wsmap="managed"
7389 >
7390 <desc>
7391 Represents one of host's network interfaces. IP V6 address and network
7392 mask are strings of 32 hexdecimal digits grouped by four. Groups are
7393 separated by colons.
7394 For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
7395 </desc>
7396 <attribute name="name" type="wstring" readonly="yes">
7397 <desc>Returns the host network interface name.</desc>
7398 </attribute>
7399
7400 <attribute name="id" type="uuid" mod="string" readonly="yes">
7401 <desc>Returns the interface UUID.</desc>
7402 </attribute>
7403
7404 <attribute name="networkName" type="wstring" readonly="yes">
7405 <desc>Returns the name of a virtual network the interface gets attached to.</desc>
7406 </attribute>
7407
7408 <attribute name="dhcpEnabled" type="boolean" readonly="yes">
7409 <desc>Specifies whether the DHCP is enabled for the interface.</desc>
7410 </attribute>
7411
7412 <attribute name="IPAddress" type="wstring" readonly="yes">
7413 <desc>Returns the IP V4 address of the interface.</desc>
7414 </attribute>
7415
7416 <attribute name="networkMask" type="wstring" readonly="yes">
7417 <desc>Returns the network mask of the interface.</desc>
7418 </attribute>
7419
7420 <attribute name="IPV6Supported" type="boolean" readonly="yes">
7421 <desc>Specifies whether the IP V6 is supported/enabled for the interface.</desc>
7422 </attribute>
7423
7424 <attribute name="IPV6Address" type="wstring" readonly="yes">
7425 <desc>Returns the IP V6 address of the interface.</desc>
7426 </attribute>
7427
7428 <attribute name="IPV6NetworkMaskPrefixLength" type="unsigned long" readonly="yes">
7429 <desc>Returns the length IP V6 network mask prefix of the interface.</desc>
7430 </attribute>
7431
7432 <attribute name="hardwareAddress" type="wstring" readonly="yes">
7433 <desc>Returns the hardware address. For Ethernet it is MAC address.</desc>
7434 </attribute>
7435
7436 <attribute name="mediumType" type="HostNetworkInterfaceMediumType" readonly="yes">
7437 <desc>Type of protocol encapsulation used.</desc>
7438 </attribute>
7439
7440 <attribute name="status" type="HostNetworkInterfaceStatus" readonly="yes">
7441 <desc>Status of the interface.</desc>
7442 </attribute>
7443
7444 <attribute name="interfaceType" type="HostNetworkInterfaceType" readonly="yes">
7445 <desc>specifies the host interface type.</desc>
7446 </attribute>
7447
7448 <method name="enableStaticIpConfig">
7449 <desc>sets and enables the static IP V4 configuration for the given interface.</desc>
7450 <param name="IPAddress" type="wstring" dir="in">
7451 <desc>
7452 IP address.
7453 </desc>
7454 </param>
7455 <param name="networkMask" type="wstring" dir="in">
7456 <desc>
7457 network mask.
7458 </desc>
7459 </param>
7460 </method>
7461
7462 <method name="enableStaticIpConfigV6">
7463 <desc>sets and enables the static IP V6 configuration for the given interface.</desc>
7464 <param name="IPV6Address" type="wstring" dir="in">
7465 <desc>
7466 IP address.
7467 </desc>
7468 </param>
7469 <param name="IPV6NetworkMaskPrefixLength" type="unsigned long" dir="in">
7470 <desc>
7471 network mask.
7472 </desc>
7473 </param>
7474 </method>
7475
7476 <method name="enableDynamicIpConfig">
7477 <desc>enables the dynamic IP configuration.</desc>
7478 </method>
7479
7480 <method name="dhcpRediscover">
7481 <desc>refreshes the IP configuration for dhcp-enabled interface.</desc>
7482 </method>
7483
7484 </interface>
7485
7486 <interface
7487 name="IHost" extends="$unknown"
7488 uuid="e380cbfc-ae65-4fa6-899e-45ded6b3132a"
7489 wsmap="managed"
7490 >
7491 <desc>
7492 The IHost interface represents the physical machine that this VirtualBox
7493 installation runs on.
7494
7495 An object implementing this interface is returned by the
7496 <link to="IVirtualBox::host" /> attribute. This interface contains
7497 read-only information about the host's physical hardware (such as what
7498 processors and disks are available, what the host operating system is,
7499 and so on) and also allows for manipulating some of the host's hardware,
7500 such as global USB device filters and host interface networking.
7501
7502 </desc>
7503 <attribute name="DVDDrives" type="IMedium" readonly="yes" safearray="yes">
7504 <desc>List of DVD drives available on the host.</desc>
7505 </attribute>
7506
7507 <attribute name="floppyDrives" type="IMedium" readonly="yes" safearray="yes">
7508 <desc>List of floppy drives available on the host.</desc>
7509 </attribute>
7510
7511 <attribute name="USBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
7512 <desc>
7513 List of USB devices currently attached to the host.
7514 Once a new device is physically attached to the host computer,
7515 it appears in this list and remains there until detached.
7516
7517 <note>
7518 If USB functionality is not available in the given edition of
7519 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7520 </note>
7521 </desc>
7522 </attribute>
7523
7524 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilter" readonly="yes" safearray="yes">
7525 <desc>
7526 List of USB device filters in action.
7527 When a new device is physically attached to the host computer,
7528 filters from this list are applied to it (in order they are stored
7529 in the list). The first matched filter will determine the
7530 <link to="IHostUSBDeviceFilter::action">action</link>
7531 performed on the device.
7532
7533 Unless the device is ignored by these filters, filters of all
7534 currently running virtual machines
7535 (<link to="IUSBController::deviceFilters"/>) are applied to it.
7536
7537 <note>
7538 If USB functionality is not available in the given edition of
7539 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7540 </note>
7541
7542 <see>IHostUSBDeviceFilter, USBDeviceState</see>
7543 </desc>
7544 </attribute>
7545
7546 <attribute name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" readonly="yes">
7547 <desc>List of host network interfaces currently defined on the host.</desc>
7548 </attribute>
7549
7550 <attribute name="processorCount" type="unsigned long" readonly="yes">
7551 <desc>Number of (logical) CPUs installed in the host system.</desc>
7552 </attribute>
7553
7554 <attribute name="processorOnlineCount" type="unsigned long" readonly="yes">
7555 <desc>Number of (logical) CPUs online in the host system.</desc>
7556 </attribute>
7557
7558 <method name="getProcessorSpeed">
7559 <desc>Query the (approximate) maximum speed of a specified host CPU in
7560 Megahertz.
7561 </desc>
7562 <param name="cpuId" type="unsigned long" dir="in">
7563 <desc>
7564 Identifier of the CPU.
7565 </desc>
7566 </param>
7567 <param name="speed" type="unsigned long" dir="return">
7568 <desc>
7569 Speed value. 0 is returned if value is not known or @a cpuId is
7570 invalid.
7571 </desc>
7572 </param>
7573 </method>
7574
7575 <method name="getProcessorFeature">
7576 <desc>Query whether a CPU feature is supported or not.</desc>
7577 <param name="feature" type="ProcessorFeature" dir="in">
7578 <desc>
7579 CPU Feature identifier.
7580 </desc>
7581 </param>
7582 <param name="supported" type="boolean" dir="return">
7583 <desc>
7584 Feature is supported or not.
7585 </desc>
7586 </param>
7587 </method>
7588
7589 <method name="getProcessorDescription">
7590 <desc>Query the model string of a specified host CPU.
7591 </desc>
7592 <param name="cpuId" type="unsigned long" dir="in">
7593 <desc>
7594 Identifier of the CPU.
7595 <note>
7596 The current implementation might not necessarily return the
7597 description for this exact CPU.
7598 </note>
7599 </desc>
7600 </param>
7601 <param name="description" type="wstring" dir="return">
7602 <desc>
7603 Model string. An empty string is returned if value is not known or
7604 @a cpuId is invalid.
7605 </desc>
7606 </param>
7607 </method>
7608
7609 <method name="getProcessorCPUIDLeaf">
7610 <desc>
7611 Returns the CPU cpuid information for the specified leaf.
7612 </desc>
7613 <param name="cpuId" type="unsigned long" dir="in">
7614 <desc>
7615 Identifier of the CPU. The CPU most be online.
7616 <note>
7617 The current implementation might not necessarily return the
7618 description for this exact CPU.
7619 </note>
7620 </desc>
7621 </param>
7622 <param name="leaf" type="unsigned long" dir="in">
7623 <desc>
7624 CPUID leaf index (eax).
7625 </desc>
7626 </param>
7627 <param name="subLeaf" type="unsigned long" dir="in">
7628 <desc>
7629 CPUID leaf sub index (ecx). This currently only applies to cache
7630 information on Intel CPUs. Use 0 if retriving values for
7631 <link to="IMachine::setCPUIDLeaf"/>.
7632 </desc>
7633 </param>
7634 <param name="valEax" type="unsigned long" dir="out">
7635 <desc>
7636 CPUID leaf value for register eax.
7637 </desc>
7638 </param>
7639 <param name="valEbx" type="unsigned long" dir="out">
7640 <desc>
7641 CPUID leaf value for register ebx.
7642 </desc>
7643 </param>
7644 <param name="valEcx" type="unsigned long" dir="out">
7645 <desc>
7646 CPUID leaf value for register ecx.
7647 </desc>
7648 </param>
7649 <param name="valEdx" type="unsigned long" dir="out">
7650 <desc>
7651 CPUID leaf value for register edx.
7652 </desc>
7653 </param>
7654 </method>
7655
7656 <attribute name="memorySize" type="unsigned long" readonly="yes">
7657 <desc>Amount of system memory in megabytes installed in the host system.</desc>
7658 </attribute>
7659
7660 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
7661 <desc>Available system memory in the host system.</desc>
7662 </attribute>
7663
7664 <attribute name="operatingSystem" type="wstring" readonly="yes">
7665 <desc>Name of the host system's operating system.</desc>
7666 </attribute>
7667
7668 <attribute name="OSVersion" type="wstring" readonly="yes">
7669 <desc>Host operating system's version string.</desc>
7670 </attribute>
7671
7672 <attribute name="UTCTime" type="long long" readonly="yes">
7673 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
7674 </attribute>
7675
7676 <attribute name="Acceleration3DAvailable" type="boolean" readonly="yes">
7677 <desc>Returns @c true when the host supports 3D hardware acceleration.</desc>
7678 </attribute>
7679
7680 <method name="createHostOnlyNetworkInterface">
7681 <desc>
7682 Creates a new adapter for Host Only Networking.
7683 <result name="E_INVALIDARG">
7684 Host network interface @a name already exists.
7685 </result>
7686 </desc>
7687 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
7688 <desc>
7689 Created host interface object.
7690 </desc>
7691 </param>
7692 <param name="progress" type="IProgress" dir="return">
7693 <desc>
7694 Progress object to track the operation completion.
7695 </desc>
7696 </param>
7697 </method>
7698
7699 <method name="removeHostOnlyNetworkInterface">
7700 <desc>
7701 Removes the given Host Only Networking interface.
7702 <result name="VBOX_E_OBJECT_NOT_FOUND">
7703 No host network interface matching @a id found.
7704 </result>
7705 </desc>
7706 <param name="id" type="uuid" mod="string" dir="in">
7707 <desc>
7708 Adapter GUID.
7709 </desc>
7710 </param>
7711 <param name="progress" type="IProgress" dir="return">
7712 <desc>
7713 Progress object to track the operation completion.
7714 </desc>
7715 </param>
7716 </method>
7717
7718 <method name="createUSBDeviceFilter">
7719 <desc>
7720 Creates a new USB device filter. All attributes except
7721 the filter name are set to empty (any match),
7722 <i>active</i> is @c false (the filter is not active).
7723
7724 The created filter can be added to the list of filters using
7725 <link to="#insertUSBDeviceFilter"/>.
7726
7727 <see>#USBDeviceFilters</see>
7728 </desc>
7729 <param name="name" type="wstring" dir="in">
7730 <desc>
7731 Filter name. See <link to="IHostUSBDeviceFilter::name"/>
7732 for more info.
7733 </desc>
7734 </param>
7735 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
7736 <desc>Created filter object.</desc>
7737 </param>
7738 </method>
7739
7740 <method name="insertUSBDeviceFilter">
7741 <desc>
7742 Inserts the given USB device to the specified position
7743 in the list of filters.
7744
7745 Positions are numbered starting from @c 0. If the specified
7746 position is equal to or greater than the number of elements in
7747 the list, the filter is added at the end of the collection.
7748
7749 <note>
7750 Duplicates are not allowed, so an attempt to insert a
7751 filter already in the list is an error.
7752 </note>
7753 <note>
7754 If USB functionality is not available in the given edition of
7755 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7756 </note>
7757
7758 <see>#USBDeviceFilters</see>
7759
7760 <result name="VBOX_E_INVALID_OBJECT_STATE">
7761 USB device filter is not created within this VirtualBox instance.
7762 </result>
7763 <result name="E_INVALIDARG">
7764 USB device filter already in list.
7765 </result>
7766
7767 </desc>
7768 <param name="position" type="unsigned long" dir="in">
7769 <desc>Position to insert the filter to.</desc>
7770 </param>
7771 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
7772 <desc>USB device filter to insert.</desc>
7773 </param>
7774 </method>
7775
7776 <method name="removeUSBDeviceFilter">
7777 <desc>
7778 Removes a USB device filter from the specified position in the
7779 list of filters.
7780
7781 Positions are numbered starting from @c 0. Specifying a
7782 position equal to or greater than the number of elements in
7783 the list will produce an error.
7784
7785 <note>
7786 If USB functionality is not available in the given edition of
7787 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7788 </note>
7789
7790 <see>#USBDeviceFilters</see>
7791
7792 <result name="E_INVALIDARG">
7793 USB device filter list empty or invalid @a position.
7794 </result>
7795
7796 </desc>
7797 <param name="position" type="unsigned long" dir="in">
7798 <desc>Position to remove the filter from.</desc>
7799 </param>
7800 </method>
7801
7802 <method name="findHostDVDDrive">
7803 <desc>
7804 Searches for a host DVD drive with the given @c name.
7805
7806 <result name="VBOX_E_OBJECT_NOT_FOUND">
7807 Given @c name does not correspond to any host drive.
7808 </result>
7809
7810 </desc>
7811 <param name="name" type="wstring" dir="in">
7812 <desc>Name of the host drive to search for</desc>
7813 </param>
7814 <param name="drive" type="IMedium" dir="return">
7815 <desc>Found host drive object</desc>
7816 </param>
7817 </method>
7818
7819 <method name="findHostFloppyDrive">
7820 <desc>
7821 Searches for a host floppy drive with the given @c name.
7822
7823 <result name="VBOX_E_OBJECT_NOT_FOUND">
7824 Given @c name does not correspond to any host floppy drive.
7825 </result>
7826
7827 </desc>
7828 <param name="name" type="wstring" dir="in">
7829 <desc>Name of the host floppy drive to search for</desc>
7830 </param>
7831 <param name="drive" type="IMedium" dir="return">
7832 <desc>Found host floppy drive object</desc>
7833 </param>
7834 </method>
7835
7836 <method name="findHostNetworkInterfaceByName">
7837 <desc>
7838 Searches through all host network interfaces for an interface with
7839 the given @c name.
7840 <note>
7841 The method returns an error if the given @c name does not
7842 correspond to any host network interface.
7843 </note>
7844 </desc>
7845 <param name="name" type="wstring" dir="in">
7846 <desc>Name of the host network interface to search for.</desc>
7847 </param>
7848 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7849 <desc>Found host network interface object.</desc>
7850 </param>
7851 </method>
7852 <method name="findHostNetworkInterfaceById">
7853 <desc>
7854 Searches through all host network interfaces for an interface with
7855 the given GUID.
7856 <note>
7857 The method returns an error if the given GUID does not
7858 correspond to any host network interface.
7859 </note>
7860 </desc>
7861 <param name="id" type="uuid" mod="string" dir="in">
7862 <desc>GUID of the host network interface to search for.</desc>
7863 </param>
7864 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7865 <desc>Found host network interface object.</desc>
7866 </param>
7867 </method>
7868 <method name="findHostNetworkInterfacesOfType">
7869 <desc>
7870 Searches through all host network interfaces and returns a list of interfaces of the specified type
7871 </desc>
7872 <param name="type" type="HostNetworkInterfaceType" dir="in">
7873 <desc>type of the host network interfaces to search for.</desc>
7874 </param>
7875 <param name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" dir="return">
7876 <desc>Found host network interface objects.</desc>
7877 </param>
7878 </method>
7879
7880 <method name="findUSBDeviceById">
7881 <desc>
7882 Searches for a USB device with the given UUID.
7883
7884 <result name="VBOX_E_OBJECT_NOT_FOUND">
7885 Given @c id does not correspond to any USB device.
7886 </result>
7887
7888 <see>IHostUSBDevice::id</see>
7889 </desc>
7890 <param name="id" type="uuid" mod="string" dir="in">
7891 <desc>UUID of the USB device to search for.</desc>
7892 </param>
7893 <param name="device" type="IHostUSBDevice" dir="return">
7894 <desc>Found USB device object.</desc>
7895 </param>
7896 </method>
7897
7898 <method name="findUSBDeviceByAddress">
7899 <desc>
7900 Searches for a USB device with the given host address.
7901
7902 <result name="VBOX_E_OBJECT_NOT_FOUND">
7903 Given @c name does not correspond to any USB device.
7904 </result>
7905
7906 <see>IHostUSBDevice::address</see>
7907 </desc>
7908 <param name="name" type="wstring" dir="in">
7909 <desc>
7910 Address of the USB device (as assigned by the host) to
7911 search for.
7912 </desc>
7913 </param>
7914 <param name="device" type="IHostUSBDevice" dir="return">
7915 <desc>Found USB device object.</desc>
7916 </param>
7917 </method>
7918
7919 </interface>
7920
7921 <!--
7922 // ISystemProperties
7923 /////////////////////////////////////////////////////////////////////////
7924 -->
7925
7926 <interface
7927 name="ISystemProperties"
7928 extends="$unknown"
7929 uuid="07c3ffd8-8f59-49cc-b608-53a332e85cc3"
7930 wsmap="managed"
7931 >
7932 <desc>
7933 The ISystemProperties interface represents global properties of the given
7934 VirtualBox installation.
7935
7936 These properties define limits and default values for various attributes
7937 and parameters. Most of the properties are read-only, but some can be
7938 changed by a user.
7939 </desc>
7940
7941 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
7942 <desc>Minimum guest system memory in Megabytes.</desc>
7943 </attribute>
7944
7945 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
7946 <desc>Maximum guest system memory in Megabytes.</desc>
7947 </attribute>
7948
7949 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
7950 <desc>Minimum guest video memory in Megabytes.</desc>
7951 </attribute>
7952
7953 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
7954 <desc>Maximum guest video memory in Megabytes.</desc>
7955 </attribute>
7956
7957 <attribute name="minGuestCPUCount" type="unsigned long" readonly="yes">
7958 <desc>Minimum CPU count.</desc>
7959 </attribute>
7960
7961 <attribute name="maxGuestCPUCount" type="unsigned long" readonly="yes">
7962 <desc>Maximum CPU count.</desc>
7963 </attribute>
7964
7965 <attribute name="maxGuestMonitors" type="unsigned long" readonly="yes">
7966 <desc>Maximum of monitors which could be connected.</desc>
7967 </attribute>
7968
7969 <attribute name="maxVDISize" type="unsigned long long" readonly="yes">
7970 <desc>Maximum size of a virtual disk image in Megabytes.</desc>
7971 </attribute>
7972
7973 <attribute name="networkAdapterCount" type="unsigned long" readonly="yes">
7974 <desc>
7975 Number of network adapters associated with every
7976 <link to="IMachine"/> instance.
7977 </desc>
7978 </attribute>
7979
7980 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
7981 <desc>
7982 Number of serial ports associated with every
7983 <link to="IMachine"/> instance.
7984 </desc>
7985 </attribute>
7986
7987 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
7988 <desc>
7989 Number of parallel ports associated with every
7990 <link to="IMachine"/> instance.
7991 </desc>
7992 </attribute>
7993
7994 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
7995 <desc>
7996 Maximum device position in the boot order. This value corresponds
7997 to the total number of devices a machine can boot from, to make it
7998 possible to include all possible devices to the boot list.
7999 <see><link to="IMachine::setBootOrder"/></see>
8000 </desc>
8001 </attribute>
8002
8003 <attribute name="defaultMachineFolder" type="wstring">
8004 <desc>
8005 Full path to the default directory used to create new or open
8006 existing machines when a settings file name contains no
8007 path.
8008
8009 The initial value of this property is
8010 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
8011 VirtualBox_home</link><tt>&gt;/Machines</tt>.
8012
8013 <note>
8014 Setting this property to @c null or an empty string will restore the
8015 initial value.
8016 </note>
8017 <note>
8018 When settings this property, the specified path can be
8019 absolute (full path) or relative
8020 to the <link to="IVirtualBox::homeFolder">
8021 VirtualBox home directory</link>.
8022 When reading this property, a full path is
8023 always returned.
8024 </note>
8025 <note>
8026 The specified path may not exist, it will be created
8027 when necessary.
8028 </note>
8029
8030 <see>
8031 <link to="IVirtualBox::createMachine"/>,
8032 <link to="IVirtualBox::openMachine"/>
8033 </see>
8034 </desc>
8035 </attribute>
8036
8037 <attribute name="defaultHardDiskFolder" type="wstring">
8038 <desc>
8039 Full path to the default directory used to create new or open existing
8040 virtual disks.
8041
8042 This path is used when the storage unit of a hard disk is a regular file
8043 in the host's file system and only a file name that contains no path is
8044 given.
8045
8046 The initial value of this property is
8047 <tt>&lt;</tt>
8048 <link to="IVirtualBox::homeFolder">VirtualBox_home</link>
8049 <tt>&gt;/HardDisks</tt>.
8050
8051 <note>
8052 Setting this property to @c null or empty string will restore the
8053 initial value.
8054 </note>
8055 <note>
8056 When settings this property, the specified path can be relative
8057 to the
8058 <link to="IVirtualBox::homeFolder">VirtualBox home directory</link> or
8059 absolute. When reading this property, a full path is
8060 always returned.
8061 </note>
8062 <note>
8063 The specified path may not exist, it will be created
8064 when necessary.
8065 </note>
8066
8067 <see>
8068 IMedium,
8069 <link to="IVirtualBox::createHardDisk"/>,
8070 <link to="IVirtualBox::openHardDisk"/>,
8071 <link to="IMedium::location"/>
8072 </see>
8073 </desc>
8074 </attribute>
8075
8076 <attribute name="mediumFormats" type="IMediumFormat" safearray="yes" readonly="yes">
8077 <desc>
8078 List of all medium storage formats supported by this VirtualBox
8079 installation.
8080
8081 Keep in mind that the medium format identifier
8082 (<link to="IMediumFormat::id"/>) used in other API calls like
8083 <link to="IVirtualBox::createHardDisk"/> to refer to a particular
8084 medium format is a case-insensitive string. This means that, for
8085 example, all of the following strings:
8086 <pre>
8087 "VDI"
8088 "vdi"
8089 "VdI"</pre>
8090 refer to the same medium format.
8091
8092 Note that the virtual medium framework is backend-based, therefore
8093 the list of supported formats depends on what backends are currently
8094 installed.
8095
8096 <see>
8097 <link to="IMediumFormat"/>,
8098 </see>
8099 </desc>
8100 </attribute>
8101
8102 <attribute name="defaultHardDiskFormat" type="wstring">
8103 <desc>
8104 Identifier of the default medium format used by VirtualBox.
8105
8106 The medium format set by this attribute is used by VirtualBox
8107 when the medium format was not specified explicitly. One example is
8108 <link to="IVirtualBox::createHardDisk"/> with the empty
8109 format argument. A more complex example is implicit creation of
8110 differencing media when taking a snapshot of a virtual machine:
8111 this operation will try to use a format of the parent medium first
8112 and if this format does not support differencing media the default
8113 format specified by this argument will be used.
8114
8115 The list of supported medium formats may be obtained by the
8116 <link to="#mediaFormats"/> call. Note that the default medium
8117 format must have a capability to create differencing media;
8118 otherwise operations that create media implicitly may fail
8119 unexpectedly.
8120
8121 The initial value of this property is <tt>"VDI"</tt> in the current
8122 version of the VirtualBox product, but may change in the future.
8123
8124 <note>
8125 Setting this property to @c null or empty string will restore the
8126 initial value.
8127 </note>
8128
8129 <see>
8130 <link to="#mediaFormats"/>,
8131 <link to="IMediumFormat::id"/>,
8132 <link to="IVirtualBox::createHardDisk"/>
8133 </see>
8134 </desc>
8135 </attribute>
8136
8137 <attribute name="freeDiskSpaceWarning" type="unsigned long long">
8138 <desc>Issue a warning if the free disk space is below (or in some disk
8139 intensive operation is expected to go below) the given size in
8140 Megabytes.</desc>
8141 </attribute>
8142
8143 <attribute name="freeDiskSpacePercentWarning" type="unsigned long">
8144 <desc>Issue a warning if the free disk space is below (or in some disk
8145 intensive operation is expected to go below) the given percentage.</desc>
8146 </attribute>
8147
8148 <attribute name="freeDiskSpaceError" type="unsigned long long">
8149 <desc>Issue an error if the free disk space is below (or in some disk
8150 intensive operation is expected to go below) the given size in
8151 Megabytes.</desc>
8152 </attribute>
8153
8154 <attribute name="freeDiskSpacePercentError" type="unsigned long">
8155 <desc>Issue an error if the free disk space is below (or in some disk
8156 intensive operation is expected to go below) the given percentage.</desc>
8157 </attribute>
8158
8159 <attribute name="remoteDisplayAuthLibrary" type="wstring">
8160 <desc>
8161 Library that provides authentication for VRDP clients. The library
8162 is used if a virtual machine's authentication type is set to "external"
8163 in the VM RemoteDisplay configuration.
8164
8165 The system library extension (".DLL" or ".so") must be omitted.
8166 A full path can be specified; if not, then the library must reside on the
8167 system's default library path.
8168
8169 The default value of this property is <tt>"VRDPAuth"</tt>. There is a library
8170 of that name in one of the default VirtualBox library directories.
8171
8172 For details about VirtualBox authentication libraries and how to implement
8173 them, please refer to the VirtualBox manual.
8174
8175 <note>
8176 Setting this property to @c null or empty string will restore the
8177 initial value.
8178 </note>
8179 </desc>
8180 </attribute>
8181
8182 <attribute name="webServiceAuthLibrary" type="wstring">
8183 <desc>
8184 Library that provides authentication for webservice clients. The library
8185 is used if a virtual machine's authentication type is set to "external"
8186 in the VM RemoteDisplay configuration and will be called from
8187 within the <link to="IWebsessionManager::logon" /> implementation.
8188
8189 As opposed to <link to="ISystemProperties::remoteDisplayAuthLibrary" />,
8190 there is no per-VM setting for this, as the webservice is a global
8191 resource (if it is running). Only for this setting (for the webservice),
8192 setting this value to a literal <tt>"null"</tt> string disables authentication,
8193 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
8194 no matter what user name and password are supplied.
8195
8196 The initial value of this property is <tt>"VRDPAuth"</tt>,
8197 meaning that the webservice will use the same authentication
8198 library that is used by default for VBoxVRDP (again, see
8199 <link to="ISystemProperties::remoteDisplayAuthLibrary" />).
8200 The format and calling convention of authentication libraries
8201 is the same for the webservice as it is for VBoxVRDP.
8202
8203 <note>
8204 Setting this property to @c null or empty string will restore the
8205 initial value.
8206 </note>
8207 </desc>
8208 </attribute>
8209
8210 <attribute name="LogHistoryCount" type="unsigned long">
8211 <desc>
8212 This value specifies how many old release log files are kept.
8213 </desc>
8214 </attribute>
8215
8216 <attribute name="defaultAudioDriver" type="AudioDriverType" readonly="yes">
8217 <desc>This value hold the default audio driver for the current
8218 system.</desc>
8219 </attribute>
8220
8221 <method name="getMaxDevicesPerPortForStorageBus">
8222 <desc>Returns the maximum number of devices which can be attached to a port
8223 for the given storage bus.</desc>
8224
8225 <param name="bus" type="StorageBus" dir="in">
8226 <desc>The storage bus type to get the value for.</desc>
8227 </param>
8228
8229 <param name="maxDevicesPerPort" type="unsigned long" dir="return">
8230 <desc>The maximum number of devices which can eb attached to the port for the given
8231 storage bus.</desc>
8232 </param>
8233 </method>
8234
8235 <method name="getMinPortCountForStorageBus">
8236 <desc>Returns the minimum number of ports the given storage bus supports.</desc>
8237
8238 <param name="bus" type="StorageBus" dir="in">
8239 <desc>The storage bus type to get the value for.</desc>
8240 </param>
8241
8242 <param name="minPortCount" type="unsigned long" dir="return">
8243 <desc>The minimum number of ports for the given storage bus.</desc>
8244 </param>
8245 </method>
8246
8247 <method name="getMaxPortCountForStorageBus">
8248 <desc>Returns the maximum number of ports the given storage bus supports.</desc>
8249
8250 <param name="bus" type="StorageBus" dir="in">
8251 <desc>The storage bus type to get the value for.</desc>
8252 </param>
8253
8254 <param name="maxPortCount" type="unsigned long" dir="return">
8255 <desc>The maximum number of ports for the given storage bus.</desc>
8256 </param>
8257 </method>
8258
8259 <method name="getMaxInstancesOfStorageBus">
8260 <desc>Returns the maximum number of storage bus instances which
8261 can be configured for each VM. This corresponds to the number of
8262 storage controllers one can have.</desc>
8263
8264 <param name="bus" type="StorageBus" dir="in">
8265 <desc>The storage bus type to get the value for.</desc>
8266 </param>
8267
8268 <param name="maxInstances" type="unsigned long" dir="return">
8269 <desc>The maximum number of instances for the given storage bus.</desc>
8270 </param>
8271 </method>
8272
8273 <method name="getDeviceTypesForStorageBus">
8274 <desc>Returns list of all the supported device types
8275 (<link to="DeviceType"/>) for the given type of storage
8276 bus.</desc>
8277
8278 <param name="bus" type="StorageBus" dir="in">
8279 <desc>The storage bus type to get the value for.</desc>
8280 </param>
8281
8282 <param name="deviceTypes" type="DeviceType" safearray="yes" dir="return">
8283 <desc>The list of all supported device types for the given storage bus.</desc>
8284 </param>
8285 </method>
8286 </interface>
8287
8288 <!--
8289 // IGuest
8290 /////////////////////////////////////////////////////////////////////////
8291 -->
8292
8293 <interface
8294 name="IGuestOSType" extends="$unknown"
8295 uuid="8aa950f6-668c-4388-b251-3809b404e862"
8296 wsmap="struct"
8297 >
8298 <desc>
8299 </desc>
8300
8301 <attribute name="familyId" type="wstring" readonly="yes">
8302 <desc>Guest OS family identifier string.</desc>
8303 </attribute>
8304
8305 <attribute name="familyDescription" type="wstring" readonly="yes">
8306 <desc>Human readable description of the guest OS family.</desc>
8307 </attribute>
8308
8309 <attribute name="id" type="wstring" readonly="yes">
8310 <desc>Guest OS identifier string.</desc>
8311 </attribute>
8312
8313 <attribute name="description" type="wstring" readonly="yes">
8314 <desc>Human readable description of the guest OS.</desc>
8315 </attribute>
8316
8317 <attribute name="is64Bit" type="boolean" readonly="yes">
8318 <desc>Returns @c true if the given OS is 64-bit</desc>
8319 </attribute>
8320
8321 <attribute name="recommendedIOAPIC" type="boolean" readonly="yes">
8322 <desc>Returns @c true if IO APIC recommended for this OS type.</desc>
8323 </attribute>
8324
8325 <attribute name="recommendedVirtEx" type="boolean" readonly="yes">
8326 <desc>Returns @c true if VT-x or AMD-V recommended for this OS type.</desc>
8327 </attribute>
8328
8329 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
8330 <desc>Recommended RAM size in Megabytes.</desc>
8331 </attribute>
8332
8333 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
8334 <desc>Recommended video RAM size in Megabytes.</desc>
8335 </attribute>
8336
8337 <attribute name="recommendedHDD" type="unsigned long" readonly="yes">
8338 <desc>Recommended hard disk size in Megabytes.</desc>
8339 </attribute>
8340
8341 <attribute name="adapterType" type="NetworkAdapterType" readonly="yes">
8342 <desc>Returns recommended network adapter for this OS type.</desc>
8343 </attribute>
8344
8345 <attribute name="recommendedPae" type="boolean" readonly="yes">
8346 <desc>Returns @c true if using PAE is recommended for this OS type.</desc>
8347 </attribute>
8348
8349 <attribute name="recommendedDvdStorageController" type="StorageControllerType" readonly="yes">
8350 <desc>Recommended storage controller type for DVD/CD drives.</desc>
8351 </attribute>
8352
8353 <attribute name="recommendedDvdStorageBus" type="StorageBus" readonly="yes">
8354 <desc>Recommended storage bus type for DVD/CD drives.</desc>
8355 </attribute>
8356
8357 <attribute name="recommendedHdStorageController" type="StorageControllerType" readonly="yes">
8358 <desc>Recommended storage controller type for HD drives.</desc>
8359 </attribute>
8360
8361 <attribute name="recommendedHdStorageBus" type="StorageBus" readonly="yes">
8362 <desc>Recommended storage bus type for HD drives.</desc>
8363 </attribute>
8364
8365 <attribute name="recommendedFirmware" type="FirmwareType" readonly="yes">
8366 <desc>Recommended firmware type.</desc>
8367 </attribute>
8368
8369 <attribute name="recommendedUsbHid" type="boolean" readonly="yes">
8370 <desc>Returns @c true if using USB Human Interface Devices, such as keyboard and mouse recommended.</desc>
8371 </attribute>
8372
8373 <attribute name="recommendedHpet" type="boolean" readonly="yes">
8374 <desc>Returns @c true if using HPET is recommended for this OS type.</desc>
8375 </attribute>
8376
8377 <attribute name="recommendedUsbTablet" type="boolean" readonly="yes">
8378 <desc>Returns @c true if using a USB Tablet is recommended.</desc>
8379 </attribute>
8380
8381 <attribute name="recommendedRtcUseUtc" type="boolean" readonly="yes">
8382 <desc>Returns @c true if the RTC of this VM should be set to UTC</desc>
8383 </attribute>
8384
8385 </interface>
8386
8387 <interface
8388 name="IGuest" extends="$unknown"
8389 uuid="d073545f-9635-489e-b36f-d468a10f8987"
8390 wsmap="managed"
8391 >
8392 <desc>
8393 The IGuest interface represents information about the operating system
8394 running inside the virtual machine. Used in
8395 <link to="IConsole::guest"/>.
8396
8397 IGuest provides information about the guest operating system, whether
8398 Guest Additions are installed and other OS-specific virtual machine
8399 properties.
8400 </desc>
8401
8402 <attribute name="OSTypeId" type="wstring" readonly="yes">
8403 <desc>
8404 Identifier of the Guest OS type as reported by the Guest
8405 Additions.
8406 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
8407 an IGuestOSType object representing details about the given
8408 Guest OS type.
8409 <note>
8410 If Guest Additions are not installed, this value will be
8411 the same as <link to="IMachine::OSTypeId"/>.
8412 </note>
8413 </desc>
8414 </attribute>
8415
8416 <attribute name="additionsActive" type="boolean" readonly="yes">
8417 <desc>
8418 Flag whether the Guest Additions are installed and active
8419 in which case their version will be returned by the
8420 <link to="#additionsVersion"/> property.
8421 </desc>
8422 </attribute>
8423
8424 <attribute name="additionsVersion" type="wstring" readonly="yes">
8425 <desc>
8426 Version of the Guest Additions (3 decimal numbers separated
8427 by dots) or empty when the Additions are not installed. The
8428 Additions may also report a version but yet not be active as
8429 the version might be refused by VirtualBox (incompatible) or
8430 other failures occurred.
8431 </desc>
8432 </attribute>
8433
8434 <attribute name="supportsSeamless" type="boolean" readonly="yes">
8435 <desc>
8436 Flag whether seamless guest display rendering (seamless desktop
8437 integration) is supported.
8438 </desc>
8439 </attribute>
8440
8441 <attribute name="supportsGraphics" type="boolean" readonly="yes">
8442 <desc>
8443 Flag whether the guest is in graphics mode. If it is not, then
8444 seamless rendering will not work, resize hints are not immediately
8445 acted on and guest display resizes are probably not initiated by
8446 the guest additions.
8447 </desc>
8448 </attribute>
8449
8450 <attribute name="memoryBalloonSize" type="unsigned long">
8451 <desc>Guest system memory balloon size in megabytes (transient property).</desc>
8452 </attribute>
8453
8454 <attribute name="statisticsUpdateInterval" type="unsigned long">
8455 <desc>Interval to update guest statistics in seconds.</desc>
8456 </attribute>
8457
8458 <method name="internalGetStatistics">
8459 <desc>
8460 Internal method; do not use as it might change at any time
8461 </desc>
8462 <param name="cpuUser" type="unsigned long" dir="out">
8463 <desc>Percentage of processor time spent in user mode as seen by the guest</desc>
8464 </param>
8465 <param name="cpuKernel" type="unsigned long" dir="out">
8466 <desc>Percentage of processor time spent in kernel mode as seen by the guest</desc>
8467 </param>
8468 <param name="cpuIdle" type="unsigned long" dir="out">
8469 <desc>Percentage of processor time spent idling as seen by the guest</desc>
8470 </param>
8471 <param name="memTotal" type="unsigned long" dir="out">
8472 <desc>Total amount of physical guest RAM</desc>
8473 </param>
8474 <param name="memFree" type="unsigned long" dir="out">
8475 <desc>Free amount of physical guest RAM</desc>
8476 </param>
8477 <param name="memBalloon" type="unsigned long" dir="out">
8478 <desc>Amount of ballooned physical guest RAM</desc>
8479 </param>
8480 <param name="memCache" type="unsigned long" dir="out">
8481 <desc>Total amount of guest (disk) cache memory</desc>
8482 </param>
8483 <param name="pagedTotal" type="unsigned long" dir="out">
8484 <desc>Total amount of space in the page file</desc>
8485 </param>
8486 <param name="memAllocTotal" type="unsigned long" dir="out">
8487 <desc>Total amount of memory allocated by the hypervisor</desc>
8488 </param>
8489 <param name="memFreeTotal" type="unsigned long" dir="out">
8490 <desc>Total amount of free memory available in the hypervisor</desc>
8491 </param>
8492 <param name="memBalloonTotal" type="unsigned long" dir="out">
8493 <desc>Total amount of memory ballooned by the hypervisor</desc>
8494 </param>
8495 </method>
8496
8497 <method name="setCredentials">
8498 <desc>
8499 Store login credentials that can be queried by guest operating
8500 systems with Additions installed. The credentials are transient
8501 to the session and the guest may also choose to erase them. Note
8502 that the caller cannot determine whether the guest operating system
8503 has queried or made use of the credentials.
8504
8505 <result name="VBOX_E_VM_ERROR">
8506 VMM device is not available.
8507 </result>
8508
8509 </desc>
8510 <param name="userName" type="wstring" dir="in">
8511 <desc>User name string, can be empty</desc>
8512 </param>
8513 <param name="password" type="wstring" dir="in">
8514 <desc>Password string, can be empty</desc>
8515 </param>
8516 <param name="domain" type="wstring" dir="in">
8517 <desc>Domain name (guest logon scheme specific), can be empty</desc>
8518 </param>
8519 <param name="allowInteractiveLogon" type="boolean" dir="in">
8520 <desc>
8521 Flag whether the guest should alternatively allow the user to
8522 interactively specify different credentials. This flag might
8523 not be supported by all versions of the Additions.
8524 </desc>
8525 </param>
8526 </method>
8527
8528 <method name="executeProcess">
8529 <desc>
8530 Executes an existing program inside the guest VM.
8531
8532 <result name="VBOX_E_IPRT_ERROR">
8533 Could not execute process.
8534 </result>
8535
8536 </desc>
8537 <param name="execName" type="wstring" dir="in">
8538 <desc>
8539 Full path name of the command to execute on the guest; the
8540 commands has to exists in the guest VM in order to be executed.
8541 </desc>
8542 </param>
8543 <param name="flags" type="unsigned long" dir="in">
8544 <desc>
8545 Execution flags - currently not supported and therefore
8546 has to be set to 0.
8547 </desc>
8548 </param>
8549 <param name="arguments" type="wstring" safearray="yes" dir="in">
8550 <desc>
8551 Array of arguments passed to the execution command.
8552 </desc>
8553 </param>
8554 <param name="environment" type="wstring" safearray="yes" dir="in">
8555 <desc>
8556 Environment variables that can be set while the command is being
8557 executed, in form of "NAME=VALUE"; one pair per entry. To unset a
8558 variable just set its name ("NAME") without a value.
8559 </desc>
8560 </param>
8561 <param name="stdIn" type="wstring" dir="in">
8562 <desc>
8563 What to do with the standard input (stdin) of the command being
8564 executed. Currently not used and has to be set to an empty value.
8565 </desc>
8566 </param>
8567 <param name="stdOut" type="wstring" dir="in">
8568 <desc>
8569 What to do with the standard output (stdout) of the command being
8570 executed. Currently not used and has to be set to an empty value.
8571 </desc>
8572 </param>
8573 <param name="stdErr" type="wstring" dir="in">
8574 <desc>
8575 What to do with the standard error (stderr) of the command being
8576 executed. Currently not used and has to be set to an empty value.
8577 </desc>
8578 </param>
8579 <param name="userName" type="wstring" dir="in">
8580 <desc>
8581 User name under which the command will be executed; has to exist
8582 and have the appropriate rights to execute programs in the VM.
8583 </desc>
8584 </param>
8585 <param name="password" type="wstring" dir="in">
8586 <desc>
8587 Password of the user account specified.
8588 </desc>
8589 </param>
8590 <param name="timeoutMS" type="unsigned long" dir="in">
8591 <desc>
8592 The maximum timeout value (in msec) to wait for finished program
8593 execution. Pass 0 for an infinite timeout.
8594 </desc>
8595 </param>
8596 <param name="pid" type="unsigned long" dir="out">
8597 <desc>
8598 The PID (process ID) of the started command for later reference.
8599 </desc>
8600 </param>
8601 <param name="progress" type="IProgress" dir="return">
8602 <desc>Progress object to track the operation completion.</desc>
8603 </param>
8604 </method>
8605
8606 <method name="getProcessOutput">
8607 <desc>
8608 Retrieves output of a formerly started process.
8609
8610 <result name="VBOX_E_IPRT_ERROR">
8611 Could not retrieve output.
8612 </result>
8613
8614 </desc>
8615 <param name="pid" type="unsigned long" dir="in">
8616 <desc>
8617 Process id returned by earlier executeProcess() call.
8618 </desc>
8619 </param>
8620 <param name="flags" type="unsigned long" dir="in">
8621 <desc>
8622 Flags describing which output to retrieve.
8623 </desc>
8624 </param>
8625 <param name="timeoutMS" type="unsigned long" dir="in">
8626 <desc>
8627 The maximum timeout value (in msec) to wait for output
8628 data. Pass 0 for an infinite timeout.
8629 </desc>
8630 </param>
8631 <param name="size" type="unsigned long long" dir="in">
8632 <desc>
8633 Size in bytes to read in the buffer.
8634 </desc>
8635 </param>
8636 <param name="data" type="octet" dir="return" safearray="yes">
8637 <desc>
8638 Buffer for retrieving the actual output. A data size of 0 means end of file
8639 if the requested size was not 0. This is the unprocessed
8640 output data, i.e. the line ending style depends on the platform of
8641 the system the server is running on.
8642 </desc>
8643 </param>
8644 </method>
8645
8646 <method name="getProcessStatus">
8647 <desc>
8648 Retrieves status, exit code and the exit reason of a formerly started process.
8649
8650 <result name="VBOX_E_IPRT_ERROR">
8651 Process with specified PID was not found.
8652 </result>
8653
8654 </desc>
8655 <param name="pid" type="unsigned long" dir="in">
8656 <desc>
8657 Process id returned by earlier executeProcess() call.
8658 </desc>
8659 </param>
8660 <param name="exitcode" type="unsigned long" dir="out">
8661 <desc>
8662 The exit code (if available).
8663 </desc>
8664 </param>
8665 <param name="flags" type="unsigned long" dir="out">
8666 <desc>
8667 Additional flags of process status (not used at the moment).
8668 </desc>
8669 </param>
8670 <param name="reason" type="unsigned long" dir="return">
8671 <desc>
8672 The current process status.
8673 </desc>
8674 </param>
8675 </method>
8676
8677 </interface>
8678
8679
8680 <!--
8681 // IProgress
8682 /////////////////////////////////////////////////////////////////////////
8683 -->
8684
8685 <interface
8686 name="IProgress" extends="$unknown"
8687 uuid="856aa038-853f-42e2-acf7-6e7b02dbe294"
8688 wsmap="managed"
8689 >
8690 <desc>
8691 The IProgress interface is used to track and control
8692 asynchronous tasks within VirtualBox.
8693
8694 An instance of this is returned every time VirtualBox starts
8695 an asynchronous task (in other words, a separate thread) which
8696 continues to run after a method call returns. For example,
8697 <link to="IConsole::saveState" />, which saves the state of
8698 a running virtual machine, can take a long time to complete.
8699 To be able to display a progress bar, a user interface such as
8700 the VirtualBox graphical user interface can use the IProgress
8701 object returned by that method.
8702
8703 Note that IProgress is a "read-only" interface in the sense
8704 that only the VirtualBox internals behind the Main API can
8705 create and manipulate progress objects, whereas client code
8706 can only use the IProgress object to monitor a task's
8707 progress and, if <link to="#cancelable" /> is @c true,
8708 cancel the task by calling <link to="#cancel" />.
8709
8710 A task represented by IProgress consists of either one or
8711 several sub-operations that run sequentially, one by one (see
8712 <link to="#operation" /> and <link to="#operationCount" />).
8713 Every operation is identified by a number (starting from 0)
8714 and has a separate description.
8715
8716 You can find the individual percentage of completion of the current
8717 operation in <link to="#operationPercent" /> and the
8718 percentage of completion of the task as a whole
8719 in <link to="#percent" />.
8720
8721 Similarly, you can wait for the completion of a particular
8722 operation via <link to="#waitForOperationCompletion" /> or
8723 for the completion of the whole task via
8724 <link to="#waitForCompletion" />.
8725 </desc>
8726
8727 <attribute name="id" type="uuid" mod="string" readonly="yes">
8728 <desc>ID of the task.</desc>
8729 </attribute>
8730
8731 <attribute name="description" type="wstring" readonly="yes">
8732 <desc>Description of the task.</desc>
8733 </attribute>
8734
8735 <attribute name="initiator" type="$unknown" readonly="yes">
8736 <desc>Initiator of the task.</desc>
8737 </attribute>
8738
8739 <attribute name="cancelable" type="boolean" readonly="yes">
8740 <desc>Whether the task can be interrupted.</desc>
8741 </attribute>
8742
8743 <attribute name="percent" type="unsigned long" readonly="yes">
8744 <desc>
8745 Current progress value of the task as a whole, in percent.
8746 This value depends on how many operations are already complete.
8747 Returns 100 if <link to="#completed" /> is @c true.
8748 </desc>
8749 </attribute>
8750
8751 <attribute name="timeRemaining" type="long" readonly="yes">
8752 <desc>
8753 Estimated remaining time until the task completes, in
8754 seconds. Returns 0 once the task has completed; returns -1
8755 if the remaining time cannot be computed, in particular if
8756 the current progress is 0.
8757
8758 Even if a value is returned, the estimate will be unreliable
8759 for low progress values. It will become more reliable as the
8760 task progresses; it is not recommended to display an ETA
8761 before at least 20% of a task have completed.
8762 </desc>
8763 </attribute>
8764
8765 <attribute name="completed" type="boolean" readonly="yes">
8766 <desc>Whether the task has been completed.</desc>
8767 </attribute>
8768
8769 <attribute name="canceled" type="boolean" readonly="yes">
8770 <desc>Whether the task has been canceled.</desc>
8771 </attribute>
8772
8773 <attribute name="resultCode" type="long" readonly="yes">
8774 <desc>
8775 Result code of the progress task.
8776 Valid only if <link to="#completed"/> is @c true.
8777 </desc>
8778 </attribute>
8779
8780 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
8781 <desc>
8782 Extended information about the unsuccessful result of the
8783 progress operation. May be @c null if no extended information
8784 is available.
8785 Valid only if <link to="#completed"/> is @c true and
8786 <link to="#resultCode"/> indicates a failure.
8787 </desc>
8788 </attribute>
8789
8790 <attribute name="operationCount" type="unsigned long" readonly="yes">
8791 <desc>
8792 Number of sub-operations this task is divided into.
8793 Every task consists of at least one suboperation.
8794 </desc>
8795 </attribute>
8796
8797 <attribute name="operation" type="unsigned long" readonly="yes">
8798 <desc>Number of the sub-operation being currently executed.</desc>
8799 </attribute>
8800
8801 <attribute name="operationDescription" type="wstring" readonly="yes">
8802 <desc>
8803 Description of the sub-operation being currently executed.
8804 </desc>
8805 </attribute>
8806
8807 <attribute name="operationPercent" type="unsigned long" readonly="yes">
8808 <desc>Progress value of the current sub-operation only, in percent.</desc>
8809 </attribute>
8810
8811 <attribute name="timeout" type="unsigned long">
8812 <desc>
8813 When non-zero, this specifies the number of milliseconds after which
8814 the operation will automatically be canceled. This can only be set on
8815 cancelable objects.
8816 </desc>
8817 </attribute>
8818
8819 <method name="setCurrentOperationProgress">
8820 <desc>Internal method, not to be called externally.</desc>
8821 <param name="percent" type="unsigned long" dir="in" />
8822 </method>
8823 <method name="setNextOperation">
8824 <desc>Internal method, not to be called externally.</desc>
8825 <param name="nextOperationDescription" type="wstring" dir="in" />
8826 <param name="nextOperationsWeight" type="unsigned long" dir="in" />
8827 </method>
8828
8829 <method name="waitForCompletion">
8830 <desc>
8831 Waits until the task is done (including all sub-operations)
8832 with a given timeout in milliseconds; specify -1 for an indefinite wait.
8833
8834 <result name="VBOX_E_IPRT_ERROR">
8835 Failed to wait for task completion.
8836 </result>
8837 </desc>
8838
8839 <param name="timeout" type="long" dir="in">
8840 <desc>
8841 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8842 </desc>
8843 </param>
8844 </method>
8845
8846 <method name="waitForOperationCompletion">
8847 <desc>
8848 Waits until the given operation is done with a given timeout in
8849 milliseconds; specify -1 for an indefinite wait.
8850
8851 <result name="VBOX_E_IPRT_ERROR">
8852 Failed to wait for operation completion.
8853 </result>
8854
8855 </desc>
8856 <param name="operation" type="unsigned long" dir="in">
8857 <desc>
8858 Number of the operation to wait for.
8859 Must be less than <link to="#operationCount"/>.
8860 </desc>
8861 </param>
8862 <param name="timeout" type="long" dir="in">
8863 <desc>
8864 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8865 </desc>
8866 </param>
8867 </method>
8868
8869 <method name="cancel">
8870 <desc>
8871 Cancels the task.
8872 <note>
8873 If <link to="#cancelable"/> is @c false, then this method will fail.
8874 </note>
8875
8876 <result name="VBOX_E_INVALID_OBJECT_STATE">
8877 Operation cannot be canceled.
8878 </result>
8879
8880 </desc>
8881 </method>
8882
8883 </interface>
8884
8885
8886 <!--
8887 // ISnapshot
8888 /////////////////////////////////////////////////////////////////////////
8889 -->
8890
8891 <interface
8892 name="ISnapshot" extends="$unknown"
8893 uuid="1a2d0551-58a4-4107-857e-ef414fc42ffc"
8894 wsmap="managed"
8895 >
8896 <desc>
8897 The ISnapshot interface represents a snapshot of the virtual
8898 machine.
8899
8900 Together with the differencing media that are created
8901 when a snapshot is taken, a machine can be brought back to
8902 the exact state it was in when the snapshot was taken.
8903
8904 The ISnapshot interface has no methods, only attributes; snapshots
8905 are controlled through methods of the <link to="IConsole" /> interface
8906 which also manage the media associated with the snapshot.
8907 The following operations exist:
8908
8909 <ul>
8910 <li><link to="IConsole::takeSnapshot"/>: creates a new snapshot
8911 by creating new, empty differencing images for the machine's
8912 media and saving the VM settings and (if the VM is running)
8913 the current VM state in the snapshot.
8914
8915 The differencing images will then receive all data written to
8916 the machine's media, while their parent (base) images
8917 remain unmodified after the snapshot has been taken (see
8918 <link to="IMedium" /> for details about differencing images).
8919 This simplifies restoring a machine to the state of a snapshot:
8920 only the differencing images need to be deleted.
8921
8922 The current machine state is not changed by taking a snapshot.
8923 If the machine is running, it will resume execution after the
8924 snapshot has been taken.
8925 </li>
8926
8927 <li><link to="IConsole::restoreSnapshot"/>: this goes back to
8928 a previous snapshot. This resets the machine's state to that of
8929 the previous snapshot by deleting the differencing image of each
8930 of the machine's media and setting the machine's settings
8931 and state to the state that was saved in the snapshot (if any).
8932
8933 This destroys the machine's current state.
8934 </li>
8935
8936 <li><link to="IConsole::deleteSnapshot"/>: deletes a snapshot
8937 without affecting the current machine state.
8938
8939 This does not change the machine, but instead frees the resources
8940 allocated when the snapshot was taken: the settings and machine state
8941 is deleted (if any), and the snapshot's differencing image for each
8942 of the machine's media gets merged with its parent image.
8943
8944 Neither the current machine state nor other snapshots are affected
8945 by this operation, except that parent media will be modified
8946 to contain the disk data associated with the snapshot being deleted.
8947 </li>
8948 </ul>
8949
8950 Each snapshot contains the settings of the virtual machine (hardware
8951 configuration etc.). In addition, if the machine was running when the
8952 snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>),
8953 the current VM state is saved in the snapshot (similarly to what happens
8954 when a VM's state is saved). The snapshot is then said to
8955 be <i>online</i> because when restoring it, the VM will be running.
8956
8957 If the machine is saved (<link to="MachineState_Saved"/>), the snapshot
8958 receives a copy of the execution state file (<link to="IMachine::stateFilePath"/>).
8959
8960 Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/>
8961 or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>;
8962 it then contains a so-called "zero execution state", representing a
8963 machine that is powered off.
8964
8965 <h3>Snapshot branches and the "current" snapshot</h3>
8966
8967 Snapshots can be chained, whereby every next snapshot is based on the
8968 previous one. This chaining is related to medium branching
8969 (see the <link to="IMedium"/> description) in that every time
8970 a new snapshot is created, a new differencing medium is implicitly
8971 created for all normal media attached to the machine.
8972
8973 Each virtual machine has a "current snapshot", identified by
8974 <link to="IMachine::currentSnapshot"/>. Presently, this is always set
8975 to the last snapshot in the chain. In a future version of VirtualBox,
8976 it will be possible to reset a machine's current state to that of an
8977 earlier snapshot without deleting the current state so that it will be
8978 possible to create alternative snapshot paths in a snapshot tree.
8979
8980 In the current implementation, multiple snapshot branches within one
8981 virtual machine are not allowed. Every machine has a single branch,
8982 and <link to="IConsole::takeSnapshot"/> operation adds a new
8983 snapshot to the top of that branch.
8984 </desc>
8985
8986 <attribute name="id" type="uuid" mod="string" readonly="yes">
8987 <desc>UUID of the snapshot.</desc>
8988 </attribute>
8989
8990 <attribute name="name" type="wstring">
8991 <desc>Short name of the snapshot.</desc>
8992 </attribute>
8993
8994 <attribute name="description" type="wstring">
8995 <desc>Optional description of the snapshot.</desc>
8996 </attribute>
8997
8998 <attribute name="timeStamp" type="long long" readonly="yes">
8999 <desc>
9000 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
9001 </desc>
9002 </attribute>
9003
9004 <attribute name="online" type="boolean" readonly="yes">
9005 <desc>
9006 @c true if this snapshot is an online snapshot and @c false otherwise.
9007
9008 When this attribute is @c true, the
9009 <link to="IMachine::stateFilePath"/> attribute of the
9010 <link to="#machine"/> object associated with this snapshot
9011 will point to the saved state file. Otherwise, it will be
9012 an empty string.
9013 </desc>
9014 </attribute>
9015
9016 <attribute name="machine" type="IMachine" readonly="yes">
9017 <desc>
9018 Virtual machine this snapshot is taken on. This object
9019 stores all settings the machine had when taking this snapshot.
9020 <note>
9021 The returned machine object is immutable, i.e. no
9022 any settings can be changed.
9023 </note>
9024 </desc>
9025 </attribute>
9026
9027 <attribute name="parent" type="ISnapshot" readonly="yes">
9028 <desc>
9029 Parent snapshot (a snapshot this one is based on), or
9030 @c null if the snapshot has no parent (i.e. is the first snapshot).
9031 </desc>
9032 </attribute>
9033
9034 <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes">
9035 <desc>
9036 Child snapshots (all snapshots having this one as a parent).
9037 </desc>
9038 </attribute>
9039
9040 </interface>
9041
9042
9043 <!--
9044 // IMedium
9045 /////////////////////////////////////////////////////////////////////////
9046 -->
9047
9048 <enum
9049 name="MediumState"
9050 uuid="ef41e980-e012-43cd-9dea-479d4ef14d13"
9051 >
9052 <desc>
9053 Virtual medium state.
9054 <see>IMedium</see>
9055 </desc>
9056
9057 <const name="NotCreated" value="0">
9058 <desc>
9059 Associated medium storage does not exist (either was not created yet or
9060 was deleted).
9061 </desc>
9062 </const>
9063 <const name="Created" value="1">
9064 <desc>
9065 Associated storage exists and accessible; this gets set if the
9066 accessibility check performed by <link to="IMedium::refreshState" />
9067 was successful.
9068 </desc>
9069 </const>
9070 <const name="LockedRead" value="2">
9071 <desc>
9072 Medium is locked for reading (see <link to="IMedium::lockRead"/>),
9073 no data modification is possible.
9074 </desc>
9075 </const>
9076 <const name="LockedWrite" value="3">
9077 <desc>
9078 Medium is locked for writing (see <link to="IMedium::lockWrite"/>),
9079 no concurrent data reading or modification is possible.
9080 </desc>
9081 </const>
9082 <const name="Inaccessible" value="4">
9083 <desc>
9084 Medium accessiblity check (see <link to="IMedium::refreshState" />) has
9085 not yet been performed, or else, associated medium storage is not
9086 accessible. In the first case, <link to="IMedium::lastAccessError"/>
9087 is empty, in the second case, it describes the error that occured.
9088 </desc>
9089 </const>
9090 <const name="Creating" value="5">
9091 <desc>
9092 Associated medium storage is being created.
9093 </desc>
9094 </const>
9095 <const name="Deleting" value="6">
9096 <desc>
9097 Associated medium storage is being deleted.
9098 </desc>
9099 </const>
9100 </enum>
9101
9102 <enum
9103 name="MediumType"
9104 uuid="11f6f7a5-0327-409a-9d42-7db6a0cec578"
9105 >
9106 <desc>
9107 Virtual medium type.
9108 <see>IMedium</see>
9109 </desc>
9110
9111 <const name="Normal" value="0">
9112 <desc>
9113 Normal medium (attached directly or indirectly, preserved
9114 when taking snapshots).
9115 </desc>
9116 </const>
9117 <const name="Immutable" value="1">
9118 <desc>
9119 Immutable medium (attached indirectly, changes are wiped out
9120 the next time the virtual machine is started).
9121 </desc>
9122 </const>
9123 <const name="Writethrough" value="2">
9124 <desc>
9125 Write through medium (attached directly, ignored when
9126 taking snapshots).
9127 </desc>
9128 </const>
9129 </enum>
9130
9131 <enum
9132 name="MediumVariant"
9133 uuid="584ea502-143b-4ab0-ad14-d1028fdf0316"
9134 >
9135 <desc>
9136 Virtual medium image variant. More than one flag may be set.
9137 <see>IMedium</see>
9138 </desc>
9139
9140 <const name="Standard" value="0">
9141 <desc>
9142 No particular variant requested, results in using the backend default.
9143 </desc>
9144 </const>
9145 <const name="VmdkSplit2G" value="0x01">
9146 <desc>
9147 VMDK image split in chunks of less than 2GByte.
9148 </desc>
9149 </const>
9150 <const name="VmdkStreamOptimized" value="0x04">
9151 <desc>
9152 VMDK streamOptimized image. Special import/export format which is
9153 read-only/append-only.
9154 </desc>
9155 </const>
9156 <const name="VmdkESX" value="0x08">
9157 <desc>
9158 VMDK format variant used on ESX products.
9159 </desc>
9160 </const>
9161 <const name="Fixed" value="0x10000">
9162 <desc>
9163 Fixed image. Only allowed for base images.
9164 </desc>
9165 </const>
9166 <const name="Diff" value="0x20000">
9167 <desc>
9168 Fixed image. Only allowed for base images.
9169 </desc>
9170 </const>
9171 </enum>
9172
9173 <interface
9174 name="IMediumAttachment" extends="$unknown"
9175 uuid="e58eb3eb-8627-428b-bdf8-34487c848de5"
9176 wsmap="struct"
9177 >
9178 <desc>
9179 The IMediumAttachment interface represents the attachment
9180 of a storage medium to a virtual machine. Each machine contains
9181 an array of its medium attachments in <link to="IMachine::mediumAttachments"/>.
9182
9183 Each medium attachment specifies a storage controller as well as a port
9184 and device number. Fixed media (hard disks) will always also specify
9185 an instance of IMedium in <link to="#medium" />, referring to the hard disk
9186 medium. For removeable media, the IMedia instance is optional; it can be
9187 @c null if no media is mounted (see <link to="IMachine::mountMedium" />).
9188 </desc>
9189
9190 <attribute name="medium" type="IMedium" readonly="yes">
9191 <desc>Medium object associated with this attachment; it
9192 can be @c null for removable devices.</desc>
9193 </attribute>
9194
9195 <attribute name="controller" type="wstring" readonly="yes">
9196 <desc>Name of the storage controller of this attachment; this
9197 refers to one of the controllers in <link to="IMachine::storageControllers" />
9198 by name.</desc>
9199 </attribute>
9200
9201 <attribute name="port" type="long" readonly="yes">
9202 <desc>Port number of this attachment.</desc>
9203 </attribute>
9204
9205 <attribute name="device" type="long" readonly="yes">
9206 <desc>Device slot number of this attachment.</desc>
9207 </attribute>
9208
9209 <attribute name="type" type="DeviceType" readonly="yes">
9210 <desc>Device type of this attachment.</desc>
9211 </attribute>
9212
9213 <attribute name="passthrough" type="boolean" readonly="yes">
9214 <desc>Pass I/O requests through to a device on the host.</desc>
9215 </attribute>
9216
9217 </interface>
9218
9219 <interface
9220 name="IMedium" extends="$unknown"
9221 uuid="d709160c-303f-4ead-b7ef-53ffa26aa861"
9222 wsmap="managed"
9223 >
9224 <desc>
9225 The IMedium interface represents virtual storage for a machine's
9226 hard disks, CD/DVD or floppy drives. It will typically represent
9227 a disk image on the host, for example a VDI or VMDK file representing
9228 a virtual hard disk, or an ISO or RAW file representing virtual
9229 removable media, but can also point to a network location (e.g.
9230 for iSCSI targets).
9231
9232 Instances of IMedium are connected to virtual machines by way of
9233 medium attachments (see <link to="IMediumAttachment" />), which link
9234 the storage medium to a particular device slot of a storage controller
9235 of the virtual machine.
9236 In the VirtualBox API, virtual storage is therefore always represented
9237 by the following chain of object links:
9238
9239 <ul>
9240 <li><link to="IMachine::storageControllers"/> contains an array of
9241 storage controllers (IDE, SATA, SCSI or a floppy controller;
9242 these are instances of <link to="IStorageController"/>).</li>
9243 <li><link to="IMachine::mediumAttachments"/> contains an array of
9244 medium attachments (instances of <link to="IMediumAttachment"/>),
9245 each containing a storage controller from the above array, a
9246 port/device specification, and an instance of IMedium representing
9247 the medium storage (image file).
9248
9249 For removable media, the storage medium is optional; a medium
9250 attachment with no medium represents a CD/DVD or floppy drive
9251 with no medium inserted. By contrast, hard disk attachments
9252 will always have an IMedium object attached.</li>
9253 <li>Each IMedium in turn points to a storage unit (such as a file
9254 on the host computer or a network resource) that holds actual
9255 data. This location is represented by the <link to="#location"/>
9256 attribute.</li>
9257 </ul>
9258
9259 Existing media are opened using the following methods, depending on the
9260 media type:
9261 <ul>
9262 <li><link to="IVirtualBox::openHardDisk"/></li>
9263 <li><link to="IVirtualBox::openDVDImage"/></li>
9264 <li><link to="IVirtualBox::openFloppyImage"/></li>
9265 </ul>
9266
9267 New hard disk media can be created with the VirtualBox API using the
9268 <link to="IVirtualBox::createHardDisk"/> method.
9269
9270 CD/DVD and floppy images (ISO and RAW files) are usually created outside
9271 VirtualBox, e.g. by storing a copy of the real medium of the corresponding
9272 type in a regular file.
9273
9274 Only for CD/DVDs and floppies, an IMedium instance can also represent a host
9275 drive; in that case the <link to="#id" /> attribute contains the UUID of
9276 one of the drives in <link to="IHost::DVDDrives" /> or <link to="IHost::floppyDrives" />.
9277
9278 <h3>Known media</h3>
9279
9280 When an existing medium is opened for the first time, it is automatically
9281 remembered by the given VirtualBox installation or, in other words, becomes
9282 a <i>known medium</i>. Known media are stored in the media
9283 registry transparently maintained by VirtualBox and stored in settings
9284 files so that this registry is preserved when VirtualBox is not running.
9285
9286 Newly created virtual media are remembered only when the associated
9287 storage unit is actually created.
9288
9289 All known media can be enumerated using
9290 <link to="IVirtualBox::hardDisks"/>,
9291 <link to="IVirtualBox::DVDImages"/> and
9292 <link to="IVirtualBox::floppyImages"/> attributes. Individual media can be
9293 quickly found by UUID using <link to="IVirtualBox::getHardDisk"/>
9294 and similar methods or by location using
9295 <link to="IVirtualBox::findHardDisk"/> and similar methods.
9296
9297 Only known media can be attached to virtual machines.
9298
9299 Removing known media from the media registry is performed when the given
9300 medium is closed using the <link to="#close"/> method or when its
9301 associated storage unit is deleted.
9302
9303 <h3>Accessibility checks</h3>
9304
9305 VirtualBox defers media accessibility checks until the <link to="#refreshState" />
9306 method is called explicitly on a medium. This is done to make the VirtualBox object
9307 ready for serving requests as fast as possible and let the end-user
9308 application decide if it needs to check media accessibility right away or not.
9309
9310 As a result, when VirtualBox starts up (e.g. the VirtualBox
9311 object gets created for the first time), all known media are in the
9312 "Inaccessible" state, but the value of the <link to="#lastAccessError"/>
9313 attribute is an empty string because no actual accessibility check has
9314 been made yet.
9315
9316 After calling <link to="#refreshState" />, a medium is considered
9317 <i>accessible</i> if its storage unit can be read. In that case, the
9318 <link to="#state"/> attribute has a value of "Created". If the storage
9319 unit cannot be read (for example, because it is located on a disconnected
9320 network resource, or was accidentally deleted outside VirtualBox),
9321 the medium is considered <i>inaccessible</i>, which is indicated by the
9322 "Inaccessible" state. The exact reason why the medium is inaccessible can be
9323 obtained by reading the <link to="#lastAccessError"/> attribute.
9324
9325 <h3>Medium types</h3>
9326
9327 There are three types of medium behavior (see <link to="MediumType" />):
9328 "normal", "immutable" and "writethrough", represented by the
9329 <link to="#type"/> attribute. The type of the medium defines how the
9330 medium is attached to a virtual machine and what happens when a
9331 <link to="ISnapshot">snapshot</link> of the virtual machine with the
9332 attached medium is taken. At the moment DVD and floppy media are always
9333 of type "writethrough".
9334
9335 All media can be also divided in two groups: <i>base</i> media and
9336 <i>differencing</i> media. A base medium contains all sectors of the
9337 medium data in its own storage and therefore can be used independently.
9338 In contrast, a differencing mediun is a "delta" to some other medium and
9339 contains only those sectors which differ from that other medium, which is
9340 then called a <i>parent</i>. The differencing medium is said to be
9341 <i>linked to</i> that parent. The parent may be itself a differencing
9342 medium, thus forming a chain of linked media. The last element in that
9343 chain must always be a base medium. Note that several differencing
9344 media may be linked to the same parent medium.
9345
9346 Differencing media can be distinguished from base media by querying the
9347 <link to="#parent"/> attribute: base media do not have parents they would
9348 depend on, so the value of this attribute is always @c null for them.
9349 Using this attribute, it is possible to walk up the medium tree (from the
9350 child medium to its parent). It is also possible to walk down the tree
9351 using the <link to="#children"/> attribute.
9352
9353 Note that the type of all differencing media is "Normal"; all other
9354 values are meaningless for them. Base media may be of any type.
9355
9356 <h3>Creating hard disks</h3>
9357
9358 New base hard disks are created using
9359 <link to="IVirtualBox::createHardDisk"/>. Existing hard disks are
9360 opened using <link to="IVirtualBox::openHardDisk"/>. Differencing hard
9361 disks are usually implicitly created by VirtualBox when needed but may
9362 also be created explicitly using <link to="#createDiffStorage"/>.
9363
9364 After the hard disk is successfully created (including the storage unit)
9365 or opened, it becomes a known hard disk (remembered in the internal media
9366 registry). Known hard disks can be attached to a virtual machine, accessed
9367 through <link to="IVirtualBox::getHardDisk"/> and
9368 <link to="IVirtualBox::findHardDisk"/> methods or enumerated using the
9369 <link to="IVirtualBox::hardDisks"/> array (only for base hard disks).
9370
9371 The following methods, besides <link to="IMedium::close"/>,
9372 automatically remove the hard disk from the media registry:
9373 <ul>
9374 <li><link to="#deleteStorage"/></li>
9375 <li><link to="#mergeTo"/></li>
9376 </ul>
9377
9378 If the storage unit of the hard disk is a regular file in the host's
9379 file system then the rules stated in the description of the
9380 <link to="IMedium::location"/> attribute apply when setting its value. In
9381 addition, a plain file name without any path may be given, in which case
9382 the <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
9383 folder</link> will be prepended to it.
9384
9385 <h4>Automatic composition of the file name part</h4>
9386
9387 Another extension to the <link to="IMedium::location"/> attribute is that
9388 there is a possibility to cause VirtualBox to compose a unique value for
9389 the file name part of the location using the UUID of the hard disk. This
9390 applies only to hard disks in <link to="MediumState_NotCreated"/> state,
9391 e.g. before the storage unit is created, and works as follows. You set the
9392 value of the <link to="IMedium::location"/> attribute to a location
9393 specification which only contains the path specification but not the file
9394 name part and ends with either a forward slash or a backslash character.
9395 In response, VirtualBox will generate a new UUID for the hard disk and
9396 compose the file name using the following pattern:
9397 <pre>
9398 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
9399 </pre>
9400 where <tt>&lt;path&gt;</tt> is the supplied path specification,
9401 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
9402 is the default extension for the storage format of this hard disk. After
9403 that, you may call any of the methods that create a new hard disk storage
9404 unit and they will use the generated UUID and file name.
9405
9406 <h3>Attaching Hard Disks</h3>
9407
9408 Hard disks are attached to virtual machines using the
9409 <link to="IMachine::attachDevice"/> method and detached using the
9410 <link to="IMachine::detachDevice"/> method. Depending on their
9411 <link to="#type"/>, hard disks are attached either
9412 <i>directly</i> or <i>indirectly</i>.
9413
9414 When a hard disk is being attached directly, it is associated with the
9415 virtual machine and used for hard disk operations when the machine is
9416 running. When a hard disk is being attached indirectly, a new differencing
9417 hard disk linked to it is implicitly created and this differencing hard
9418 disk is associated with the machine and used for hard disk operations.
9419 This also means that if <link to="IMachine::attachDevice"/> performs
9420 a direct attachment then the same hard disk will be returned in response
9421 to the subsequent <link to="IMachine::getMedium"/> call; however if
9422 an indirect attachment is performed then
9423 <link to="IMachine::getMedium"/> will return the implicitly created
9424 differencing hard disk, not the original one passed to <link
9425 to="IMachine::attachDevice"/>. In detail:
9426
9427 <ul>
9428 <li><b>Normal base</b> hard disks that do not have children (i.e.
9429 differencing hard disks linked to them) and that are not already
9430 attached to virtual machines in snapshots are attached <b>directly</b>.
9431 Otherwise, they are attached <b>indirectly</b> because having
9432 dependent children or being part of the snapshot makes it impossible
9433 to modify hard disk contents without breaking the integrity of the
9434 dependent party. The <link to="#readOnly"/> attribute allows to
9435 quickly determine the kind of the attachment for the given hard
9436 disk. Note that if a normal base hard disk is to be indirectly
9437 attached to a virtual machine with snapshots then a special
9438 procedure called <i>smart attachment</i> is performed (see below).</li>
9439 <li><b>Normal differencing</b> hard disks are like normal base hard disks:
9440 they are attached <b>directly</b> if they do not have children and are
9441 not attached to virtual machines in snapshots, and <b>indirectly</b>
9442 otherwise. Note that the smart attachment procedure is never performed
9443 for differencing hard disks.</li>
9444 <li><b>Immutable</b> hard disks are always attached <b>indirectly</b> because
9445 they are designed to be non-writable. If an immutable hard disk is
9446 attached to a virtual machine with snapshots then a special
9447 procedure called smart attachment is performed (see below).</li>
9448 <li><b>Writethrough</b> hard disks are always attached <b>directly</b>,
9449 also as designed. This also means that writethrough hard disks cannot
9450 have other hard disks linked to them at all.</li>
9451 </ul>
9452
9453 Note that the same hard disk, regardless of its type, may be attached to
9454 more than one virtual machine at a time. In this case, the machine that is
9455 started first gains exclusive access to the hard disk and attempts to
9456 start other machines having this hard disk attached will fail until the
9457 first machine is powered down.
9458
9459 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
9460 that the given hard disk remains associated with the given machine after a
9461 successful <link to="IMachine::detachDevice"/> call until
9462 <link to="IMachine::saveSettings"/> is called to save all changes to
9463 machine settings to disk. This deferring is necessary to guarantee that
9464 the hard disk configuration may be restored at any time by a call to
9465 <link to="IMachine::discardSettings"/> before the settings
9466 are saved (committed).
9467
9468 Note that if <link to="IMachine::discardSettings"/> is called after
9469 indirectly attaching some hard disks to the machine but before a call to
9470 <link to="IMachine::saveSettings"/> is made, it will implicitly delete
9471 all differencing hard disks implicitly created by
9472 <link to="IMachine::attachDevice"/> for these indirect attachments.
9473 Such implicitly created hard disks will also be immediately deleted when
9474 detached explicitly using the <link to="IMachine::detachDevice"/>
9475 call if it is made before <link to="IMachine::saveSettings"/>. This
9476 implicit deletion is safe because newly created differencing hard
9477 disks do not contain any user data.
9478
9479 However, keep in mind that detaching differencing hard disks that were
9480 implicitly created by <link to="IMachine::attachDevice"/>
9481 before the last <link to="IMachine::saveSettings"/> call will
9482 <b>not</b> implicitly delete them as they may already contain some data
9483 (for example, as a result of virtual machine execution). If these hard
9484 disks are no more necessary, the caller can always delete them explicitly
9485 using <link to="#deleteStorage"/> after they are actually de-associated
9486 from this machine by the <link to="IMachine::saveSettings"/> call.
9487
9488 <h3>Smart Attachment</h3>
9489
9490 When normal base or immutable hard disks are indirectly attached to a
9491 virtual machine then some additional steps are performed to make sure the
9492 virtual machine will have the most recent "view" of the hard disk being
9493 attached. These steps include walking through the machine's snapshots
9494 starting from the current one and going through ancestors up to the first
9495 snapshot. Hard disks attached to the virtual machine in all
9496 of the encountered snapshots are checked whether they are descendants of
9497 the given normal base or immutable hard disk. The first found child (which
9498 is the differencing hard disk) will be used instead of the normal base or
9499 immutable hard disk as a parent for creating a new differencing hard disk
9500 that will be actually attached to the machine. And only if no descendants
9501 are found or if the virtual machine does not have any snapshots then the
9502 normal base or immutable hard disk will be used itself as a parent for
9503 this differencing hard disk.
9504
9505 It is easier to explain what smart attachment does using the
9506 following example:
9507 <pre>
9508BEFORE attaching B.vdi: AFTER attaching B.vdi:
9509
9510Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
9511 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
9512 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
9513 Snapshot 4 (none) Snapshot 4 (none)
9514 CurState (none) CurState (D3->D2.vdi)
9515
9516 NOT
9517 ...
9518 CurState (D3->B.vdi)
9519 </pre>
9520 The first column is the virtual machine configuration before the base hard
9521 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
9522 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
9523 mean that the hard disk that is actually attached to the machine is a
9524 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
9525 another hard disk, <tt>B.vdi</tt>.
9526
9527 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
9528 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
9529 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
9530 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
9531 it cannot be attached directly and needs an indirect attachment (i.e.
9532 implicit creation of a new differencing hard disk). Due to the smart
9533 attachment procedure, the new differencing hard disk
9534 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
9535 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
9536 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
9537 machine.
9538
9539 Note that if there is more than one descendant hard disk of the given base
9540 hard disk found in a snapshot, and there is an exact device, channel and
9541 bus match, then this exact match will be used. Otherwise, the youngest
9542 descendant will be picked up.
9543
9544 There is one more important aspect of the smart attachment procedure which
9545 is not related to snapshots at all. Before walking through the snapshots
9546 as described above, the backup copy of the current list of hard disk
9547 attachment is searched for descendants. This backup copy is created when
9548 the hard disk configuration is changed for the first time after the last
9549 <link to="IMachine::saveSettings"/> call and used by
9550 <link to="IMachine::discardSettings"/> to undo the recent hard disk
9551 changes. When such a descendant is found in this backup copy, it will be
9552 simply re-attached back, without creating a new differencing hard disk for
9553 it. This optimization is necessary to make it possible to re-attach the
9554 base or immutable hard disk to a different bus, channel or device slot
9555 without losing the contents of the differencing hard disk actually
9556 attached to the machine in place of it.
9557 </desc>
9558
9559 <attribute name="id" type="uuid" mod="string" readonly="yes">
9560 <desc>
9561 UUID of the medium. For a newly created medium, this value is a randomly
9562 generated UUID.
9563
9564 <note>
9565 For media in one of MediumState_NotCreated, MediumState_Creating or
9566 MediumState_Deleting states, the value of this property is undefined
9567 and will most likely be an empty UUID.
9568 </note>
9569 </desc>
9570 </attribute>
9571
9572 <attribute name="description" type="wstring">
9573 <desc>
9574 Optional description of the medium. For a newly created medium the value
9575 of this attribute is an empty string.
9576
9577 Medium types that don't support this attribute will return E_NOTIMPL in
9578 attempt to get or set this attribute's value.
9579
9580 <note>
9581 For some storage types, reading this attribute may return an outdated
9582 (last known) value when <link to="#state"/> is <link
9583 to="MediumState_Inaccessible"/> or <link
9584 to="MediumState_LockedWrite"/> because the value of this attribute is
9585 stored within the storage unit itself. Also note that changing the
9586 attribute value is not possible in such case, as well as when the
9587 medium is the <link to="MediumState_LockedRead"/> state.
9588 </note>
9589 </desc>
9590 </attribute>
9591
9592 <attribute name="state" type="MediumState" readonly="yes">
9593 <desc>
9594 Returns the current medium state, which is the last state set by
9595 the accessibility check performed by <link to="#refreshState"/>.
9596 If that method has not yet been called on the medium, the state
9597 is "Inaccessible"; as opposed to truly inaccessible media, the
9598 value of <link to="#lastAccessError"/> will be an empty string in
9599 that case.
9600
9601 <note>As of version 3.1, this no longer performs an accessibility check
9602 automatically; call <link to="#refreshState"/> for that.
9603 </note>
9604 </desc>
9605 </attribute>
9606
9607 <attribute name="location" type="wstring">
9608 <desc>
9609 Location of the storage unit holding medium data.
9610
9611 The format of the location string is medium type specific. For medium
9612 types using regular files in a host's file system, the location
9613 string is the full file name.
9614
9615 Some medium types may support changing the storage unit location by
9616 simply changing the value of this property. If this operation is not
9617 supported, the implementation will return E_NOTIMPL in attempt to set
9618 this attribute's value.
9619
9620 When setting a value of the location attribute which is a regular file
9621 in the host's file system, the given file name may be either relative to
9622 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
9623 absolute. Note that if the given location specification does not contain
9624 the file extension part then a proper default extension will be
9625 automatically appended by the implementation depending on the medium type.
9626 </desc>
9627 </attribute>
9628
9629 <attribute name="name" type="wstring" readonly="yes">
9630 <desc>
9631 Name of the storage unit holding medium data.
9632
9633 The returned string is a short version of the <link to="#location"/>
9634 attribute that is suitable for representing the medium in situations
9635 where the full location specification is too long (such as lists
9636 and comboboxes in GUI frontends). This string is also used by frontends
9637 to sort the media list alphabetically when needed.
9638
9639 For example, for locations that are regular files in the host's file
9640 system, the value of this attribute is just the file name (+ extension),
9641 without the path specification.
9642
9643 Note that as opposed to the <link to="#location"/> attribute, the name
9644 attribute will not necessary be unique for a list of media of the
9645 given type and format.
9646 </desc>
9647 </attribute>
9648
9649 <attribute name="deviceType" type="DeviceType" readonly="yes">
9650 <desc>Kind of device (DVD/Floppy/HardDisk) which is applicable to this
9651 medium.</desc>
9652 </attribute>
9653
9654 <attribute name="hostDrive" type="boolean" readonly="yes">
9655 <desc>True if this corresponds to a drive on the host.</desc>
9656 </attribute>
9657
9658 <attribute name="size" type="unsigned long long" readonly="yes">
9659 <desc>
9660 Physical size of the storage unit used to hold medium data (in bytes).
9661
9662 <note>
9663 For media whose <link to="#state"/> is <link
9664 to="MediumState_Inaccessible"/>, the value of this property is the
9665 last known size. For <link to="MediumState_NotCreated"/> media,
9666 the returned value is zero.
9667 </note>
9668 </desc>
9669 </attribute>
9670
9671 <attribute name="format" type="wstring" readonly="yes">
9672 <desc>
9673 Storage format of this medium.
9674
9675 The value of this attribute is a string that specifies a backend used
9676 to store medium data. The storage format is defined when you create a
9677 new medium or automatically detected when you open an existing medium,
9678 and cannot be changed later.
9679
9680 The list of all storage formats supported by this VirtualBox
9681 installation can be obtained using
9682 <link to="ISystemProperties::mediumFormats"/>.
9683 </desc>
9684 </attribute>
9685
9686 <attribute name="type" type="MediumType">
9687 <desc>
9688 Type (role) of this medium.
9689
9690 The following constraints apply when changing the value of this
9691 attribute:
9692 <ul>
9693 <li>If a medium is attached to a virtual machine (either in the
9694 current state or in one of the snapshots), its type cannot be
9695 changed.
9696 </li>
9697 <li>As long as the medium has children, its type cannot be set
9698 to <link to="MediumType_Writethrough"/>.
9699 </li>
9700 <li>The type of all differencing media is
9701 <link to="MediumType_Normal"/> and cannot be changed.
9702 </li>
9703 </ul>
9704
9705 The type of a newly created or opened medium is set to
9706 <link to="MediumType_Normal"/>, except for DVD and floppy media,
9707 which have a type of <link to="MediumType_Writethrough"/>.
9708 </desc>
9709 </attribute>
9710
9711 <attribute name="parent" type="IMedium" readonly="yes">
9712 <desc>
9713 Parent of this medium (the medium this medium is directly based
9714 on).
9715
9716 Only differencing media have parents. For base (non-differencing)
9717 media, @c null is returned.
9718 </desc>
9719 </attribute>
9720
9721 <attribute name="children" type="IMedium" safearray="yes" readonly="yes">
9722 <desc>
9723 Children of this medium (all differencing media directly based
9724 on this medium). A @c null array is returned if this medium
9725 does not have any children.
9726 </desc>
9727 </attribute>
9728
9729 <attribute name="base" type="IMedium" readonly="yes">
9730 <desc>
9731 Base medium of this medium.
9732
9733 If this is a differencing medium, its base medium is the medium
9734 the given medium branch starts from. For all other types of media, this
9735 property returns the medium object itself (i.e. the same object this
9736 property is read on).
9737 </desc>
9738 </attribute>
9739
9740 <attribute name="readOnly" type="boolean" readonly="yes">
9741 <desc>
9742 Returns @c true if this medium is read-only and @c false otherwise.
9743
9744 A medium is considered to be read-only when its contents cannot be
9745 modified without breaking the integrity of other parties that depend on
9746 this medium such as its child media or snapshots of virtual machines
9747 where this medium is attached to these machines. If there are no
9748 children and no such snapshots then there is no dependency and the
9749 medium is not read-only.
9750
9751 The value of this attribute can be used to determine the kind of the
9752 attachment that will take place when attaching this medium to a
9753 virtual machine. If the value is @c false then the medium will
9754 be attached directly. If the value is @c true then the medium
9755 will be attached indirectly by creating a new differencing child
9756 medium for that. See the interface description for more information.
9757
9758 Note that all <link to="MediumType_Immutable">Immutable</link> media
9759 are always read-only while all
9760 <link to="MediumType_Writethrough">Writethrough</link> media are
9761 always not.
9762
9763 <note>
9764 The read-only condition represented by this attribute is related to
9765 the medium type and usage, not to the current
9766 <link to="IMedium::state">medium state</link> and not to the read-only
9767 state of the storage unit.
9768 </note>
9769 </desc>
9770 </attribute>
9771
9772 <attribute name="logicalSize" type="unsigned long long" readonly="yes">
9773 <desc>
9774 Logical size of this medium (in megabytes), as reported to the
9775 guest OS running inside the virtual machine this medium is
9776 attached to. The logical size is defined when the medium is created
9777 and cannot be changed later.
9778
9779 <note>
9780 Reading this property on a differencing medium will return the size
9781 of its <link to="#base"/> medium.
9782 </note>
9783 <note>
9784 For media whose state is <link to="#state"/> is <link
9785 to="MediumState_Inaccessible"/>, the value of this property is the
9786 last known logical size. For <link to="MediumaState_NotCreated"/>
9787 media, the returned value is zero.
9788 </note>
9789 </desc>
9790 </attribute>
9791
9792 <attribute name="autoReset" type="boolean">
9793 <desc>
9794 Whether this differencing medium will be automatically reset each
9795 time a virtual machine it is attached to is powered up. This
9796 attribute is automatically set to @c true for the last
9797 differencing image of an "immutable" medium (see
9798 <link to="MediumType" />).
9799
9800 See <link to="#reset"/> for more information about resetting
9801 differencing media.
9802
9803 <note>
9804 Reading this property on a base (non-differencing) medium will
9805 always @c false. Changing the value of this property in this
9806 case is not supported.
9807 </note>
9808
9809 <result name="VBOX_E_NOT_SUPPORTED">
9810 This is not a differencing medium (when changing the attribute
9811 value).
9812 </result>
9813 </desc>
9814 </attribute>
9815
9816 <attribute name="lastAccessError" type="wstring" readonly="yes">
9817 <desc>
9818 Text message that represents the result of the last accessibility
9819 check performed by <link to="#refreshState"/>.
9820
9821 An empty string is returned if the last accessibility check
9822 was successful or has not yet been called. As a result, if
9823 <link to="#state" /> is "Inaccessible" and this attribute is empty,
9824 then <link to="#refreshState"/> has yet to be called; this is the
9825 default value of media after VirtualBox initialization.
9826 A non-empty string indicates a failure and should normally describe
9827 a reason of the failure (for example, a file read error).
9828 </desc>
9829 </attribute>
9830
9831 <attribute name="machineIds" type="uuid" mod="string" safearray="yes" readonly="yes">
9832 <desc>
9833 Array of UUIDs of all machines this medium is attached to.
9834
9835 A @c null array is returned if this medium is not attached to any
9836 machine or to any machine's snapshot.
9837
9838 <note>
9839 The returned array will include a machine even if this medium is not
9840 attached to that machine in the current state but attached to it in
9841 one of the machine's snapshots. See <link to="#getSnapshotIds"/> for
9842 details.
9843 </note>
9844 </desc>
9845 </attribute>
9846
9847 <method name="refreshState">
9848 <desc>
9849 If the current medium state (see <link to="MediumState"/>) is one of
9850 "Created", "Inaccessible" or "LockedRead", then this performs an
9851 accessibility check on the medium and sets the value of the <link to="#state"/>
9852 attribute accordingly; that value is also returned for convenience.
9853
9854 For all other state values, this does not perform a refresh but returns
9855 the state only.
9856
9857 The refresh, if performed, may take a long time (several seconds or even
9858 minutes, depending on the storage unit location and format) because it performs an
9859 accessibility check of the storage unit. This check may cause a significant
9860 delay if the storage unit of the given medium is, for example, a file located
9861 on a network share which is not currently accessible due to connectivity
9862 problems. In that case, the call will not return until a timeout
9863 interval defined by the host OS for this operation expires. For this reason,
9864 it is recommended to never read this attribute on the main UI thread to avoid
9865 making the UI unresponsive.
9866
9867 If the last known state of the medium is "Created" and the accessibility
9868 check fails, then the state would be set to "Inaccessible", and
9869 <link to="#lastAccessError"/> may be used to get more details about the
9870 failure. If the state of the medium is "LockedRead", then it remains the
9871 same, and a non-empty value of <link to="#lastAccessError"/> will
9872 indicate a failed accessibility check in this case.
9873
9874 Note that not all medium states are applicable to all medium types.
9875 </desc>
9876 <param name="state" type="MediumState" dir="return">
9877 <desc>
9878 New medium state.
9879 </desc>
9880 </param>
9881 </method>
9882
9883 <method name="getSnapshotIds">
9884 <desc>
9885 Returns an array of UUIDs of all snapshots of the given machine where
9886 this medium is attached to.
9887
9888 If the medium is attached to the machine in the current state, then the
9889 first element in the array will always be the ID of the queried machine
9890 (i.e. the value equal to the @c machineId argument), followed by
9891 snapshot IDs (if any).
9892
9893 If the medium is not attached to the machine in the current state, then
9894 the array will contain only snapshot IDs.
9895
9896 The returned array may be @c null if this medium is not attached
9897 to the given machine at all, neither in the current state nor in one of
9898 the snapshots.
9899 </desc>
9900 <param name="machineId" type="uuid" mod="string" dir="in">
9901 <desc>
9902 UUID of the machine to query.
9903 </desc>
9904 </param>
9905 <param name="snapshotIds" type="uuid" mod="string" safearray="yes" dir="return">
9906 <desc>
9907 Array of snapshot UUIDs of the given machine using this medium.
9908 </desc>
9909 </param>
9910 </method>
9911
9912 <method name="lockRead">
9913 <desc>
9914 Locks this medium for reading.
9915
9916 A read lock is shared: many clients can simultaneously lock the
9917 same medium for reading unless it is already locked for writing (see
9918 <link to="#lockWrite"/>) in which case an error is returned.
9919
9920 When the medium is locked for reading, it cannot be modified
9921 from within VirtualBox. This means that any method that changes
9922 the properties of this medium or contents of the storage unit
9923 will return an error (unless explicitly stated otherwise). That
9924 includes an attempt to start a virtual machine that wants to
9925 write to the the medium.
9926
9927 When the virtual machine is started up, it locks for reading all
9928 media it uses in read-only mode. If some medium cannot be locked
9929 for reading, the startup procedure will fail.
9930 A medium is typically locked for reading while it is used by a running
9931 virtual machine but has a depending differencing image that receives
9932 the actual write operations. This way one base medium can have
9933 multiple child differencing images which can be written to
9934 simultaneously. Read-only media such as DVD and floppy images are
9935 also locked for reading only (so they can be in use by multiple
9936 machines simultaneously).
9937
9938 A medium is also locked for reading when it is the source of a
9939 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
9940
9941 The medium locked for reading must be unlocked using the <link
9942 to="#unlockRead"/> method. Calls to <link to="#lockRead"/>
9943 can be nested and must be followed by the same number of paired
9944 <link to="#unlockRead"/> calls.
9945
9946 This method sets the medium state (see <link to="#state"/>) to
9947 "LockedRead" on success. The medium's previous state must be
9948 one of "Created", "Inaccessible" or "LockedRead".
9949
9950 Locking an inaccessible medium is not an error; this method performs
9951 a logical lock that prevents modifications of this medium through
9952 the VirtualBox API, not a physical file-system lock of the underlying
9953 storage unit.
9954
9955 This method returns the current state of the medium
9956 <i>before</i> the operation.
9957
9958 <result name="VBOX_E_INVALID_OBJECT_STATE">
9959 Invalid medium state (e.g. not created, locked, inaccessible,
9960 creating, deleting).
9961 </result>
9962
9963 </desc>
9964 <param name="state" type="MediumState" dir="return">
9965 <desc>
9966 State of the medium after the operation.
9967 </desc>
9968 </param>
9969 </method>
9970
9971 <method name="unlockRead">
9972 <desc>
9973 Cancels the read lock previously set by <link to="#lockRead"/>.
9974
9975 For both success and failure, this method returns the current state
9976 of the medium <i>after</i> the operation.
9977
9978 See <link to="#lockRead"/> for more details.
9979
9980 <result name="VBOX_E_INVALID_OBJECT_STATE">
9981 Medium not locked for reading.
9982 </result>
9983
9984 </desc>
9985 <param name="state" type="MediumState" dir="return">
9986 <desc>
9987 State of the medium after the operation.
9988 </desc>
9989 </param>
9990 </method>
9991
9992 <method name="lockWrite">
9993 <desc>
9994 Locks this medium for writing.
9995
9996 A write lock, as opposed to <link to="#lockRead"/>, is
9997 exclusive: there may be only one client holding a write lock,
9998 and there may be no read locks while the write lock is held.
9999 As a result, read-locking fails if a write lock is held, and
10000 write-locking fails if either a read or another write lock is held.
10001
10002 When a medium is locked for writing, it cannot be modified
10003 from within VirtualBox, and it is not guaranteed that the values
10004 of its properties are up-to-date. Any method that changes the
10005 properties of this medium or contents of the storage unit will
10006 return an error (unless explicitly stated otherwise).
10007
10008 When a virtual machine is started up, it locks for writing all
10009 media it uses to write data to. If any medium could not be locked
10010 for writing, the startup procedure will fail. If a medium has
10011 differencing images, then while the machine is running, only
10012 the last ("leaf") differencing image is locked for writing,
10013 whereas its parents are locked for reading only.
10014
10015 A medium is also locked for writing when it is the target of a
10016 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
10017
10018 The medium locked for writing must be unlocked using the <link
10019 to="#unlockWrite"/> method. Write locks <i>cannot</i> be nested.
10020
10021 This method sets the medium state (see <link to="#state"/>) to
10022 "LockedWrite" on success. The medium's previous state must be
10023 either "Created" or "Inaccessible".
10024
10025 Locking an inaccessible medium is not an error; this method performs
10026 a logical lock that prevents modifications of this medium through
10027 the VirtualBox API, not a physical file-system lock of the underlying
10028 storage unit.
10029
10030 For both, success and failure, this method returns the current
10031 state of the medium <i>before</i> the operation.
10032
10033 <result name="VBOX_E_INVALID_OBJECT_STATE">
10034 Invalid medium state (e.g. not created, locked, inaccessible,
10035 creating, deleting).
10036 </result>
10037
10038 </desc>
10039 <param name="state" type="MediumState" dir="return">
10040 <desc>
10041 State of the medium after the operation.
10042 </desc>
10043 </param>
10044 </method>
10045
10046 <method name="unlockWrite">
10047 <desc>
10048 Cancels the write lock previously set by <link to="#lockWrite"/>.
10049
10050 For both success and failure, this method returns the current
10051 state of the medium <i>after</i> the operation.
10052
10053 See <link to="#lockWrite"/> for more details.
10054
10055 <result name="VBOX_E_INVALID_OBJECT_STATE">
10056 Medium not locked for writing.
10057 </result>
10058
10059 </desc>
10060 <param name="state" type="MediumState" dir="return">
10061 <desc>
10062 State of the medium after the operation.
10063 </desc>
10064 </param>
10065 </method>
10066
10067 <method name="close">
10068 <desc>
10069 Closes this medium.
10070
10071 The medium must not be attached to any known virtual machine
10072 and must not have any known child media, otherwise the
10073 operation will fail.
10074
10075 When the medium is successfully closed, it gets removed from
10076 the list of remembered media, but its storage unit is not
10077 deleted. In particular, this means that this medium can be
10078 later opened again using the <link
10079 to="IVirtualBox::openHardDisk"/> call.
10080
10081 Note that after this method successfully returns, the given medium
10082 object becomes uninitialized. This means that any attempt
10083 to call any of its methods or attributes will fail with the
10084 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
10085
10086 <result name="VBOX_E_INVALID_OBJECT_STATE">
10087 Invalid medium state (other than not created, created or
10088 inaccessible).
10089 </result>
10090 <result name="VBOX_E_OBJECT_IN_USE">
10091 Medium attached to virtual machine.
10092 </result>
10093 <result name="VBOX_E_FILE_ERROR">
10094 Settings file not accessible.
10095 </result>
10096 <result name="VBOX_E_XML_ERROR">
10097 Could not parse the settings file.
10098 </result>
10099
10100 </desc>
10101 </method>
10102
10103 <!-- storage methods -->
10104
10105 <method name="getProperty">
10106 <desc>
10107 Returns the value of the custom medium property with the given name.
10108
10109 The list of all properties supported by the given medium format can
10110 be obtained with <link to="IMediumFormat::describeProperties"/>.
10111
10112 Note that if this method returns an empty string in @a value, the
10113 requested property is supported but currently not assigned any value.
10114
10115 <result name="VBOX_E_OBJECT_NOT_FOUND">
10116 Requested property does not exist (not supported by the format).
10117 </result>
10118 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
10119 </desc>
10120 <param name="name" type="wstring" dir="in">
10121 <desc>Name of the property to get.</desc>
10122 </param>
10123 <param name="value" type="wstring" dir="return">
10124 <desc>Current property value.</desc>
10125 </param>
10126 </method>
10127
10128 <method name="setProperty">
10129 <desc>
10130 Sets the value of the custom medium property with the given name.
10131
10132 The list of all properties supported by the given medium format can
10133 be obtained with <link to="IMediumFormat::describeProperties"/>.
10134
10135 Note that setting the property value to @c null or an empty string is
10136 equivalent to deleting the existing value. A default value (if it is
10137 defined for this property) will be used by the format backend in this
10138 case.
10139
10140 <result name="VBOX_E_OBJECT_NOT_FOUND">
10141 Requested property does not exist (not supported by the format).
10142 </result>
10143 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
10144 </desc>
10145 <param name="name" type="wstring" dir="in">
10146 <desc>Name of the property to set.</desc>
10147 </param>
10148 <param name="value" type="wstring" dir="in">
10149 <desc>Property value to set.</desc>
10150 </param>
10151 </method>
10152
10153 <method name="getProperties">
10154 <desc>
10155 Returns values for a group of properties in one call.
10156
10157 The names of the properties to get are specified using the @a names
10158 argument which is a list of comma-separated property names or
10159 an empty string if all properties are to be returned. Note that currently
10160 the value of this argument is ignored and the method always returns all
10161 existing properties.
10162
10163 The list of all properties supported by the given medium format can
10164 be obtained with <link to="IMediumFormat::describeProperties"/>.
10165
10166 The method returns two arrays, the array of property names corresponding
10167 to the @a names argument and the current values of these properties.
10168 Both arrays have the same number of elements with each elemend at the
10169 given index in the first array corresponds to an element at the same
10170 index in the second array.
10171
10172 Note that for properties that do not have assigned values,
10173 an empty string is returned at the appropriate index in the
10174 @a returnValues array.
10175
10176 </desc>
10177 <param name="names" type="wstring" dir="in">
10178 <desc>
10179 Names of properties to get.
10180 </desc>
10181 </param>
10182 <param name="returnNames" type="wstring" safearray="yes" dir="out">
10183 <desc>Names of returned properties.</desc>
10184 </param>
10185 <param name="returnValues" type="wstring" safearray="yes" dir="return">
10186 <desc>Values of returned properties.</desc>
10187 </param>
10188 </method>
10189
10190 <method name="setProperties">
10191 <desc>
10192 Sets values for a group of properties in one call.
10193
10194 The names of the properties to set are passed in the @a names
10195 array along with the new values for them in the @a values array. Both
10196 arrays have the same number of elements with each elemend at the given
10197 index in the first array corresponding to an element at the same index
10198 in the second array.
10199
10200 If there is at least one property name in @a names that is not valid,
10201 the method will fail before changing the values of any other properties
10202 from the @a names array.
10203
10204 Using this method over <link to="#setProperty"/> is preferred if you
10205 need to set several properties at once since it will result into less
10206 IPC calls.
10207
10208 The list of all properties supported by the given medium format can
10209 be obtained with <link to="IMediumFormat::describeProperties"/>.
10210
10211 Note that setting the property value to @c null or an empty string is
10212 equivalent to deleting the existing value. A default value (if it is
10213 defined for this property) will be used by the format backend in this
10214 case.
10215 </desc>
10216 <param name="names" type="wstring" safearray="yes" dir="in">
10217 <desc>Names of properties to set.</desc>
10218 </param>
10219 <param name="values" type="wstring" safearray="yes" dir="in">
10220 <desc>Values of properties to set.</desc>
10221 </param>
10222 </method>
10223
10224 <!-- storage methods -->
10225
10226 <method name="createBaseStorage">
10227 <desc>
10228 Starts creating a hard disk storage unit (fixed/dynamic, according
10229 to the variant flags) in in the background. The previous storage unit
10230 created for this object, if any, must first be deleted using
10231 <link to="#deleteStorage"/>, otherwise the operation will fail.
10232
10233 Before the operation starts, the medium is placed in
10234 <link to="MediumState_Creating"/> state. If the create operation
10235 fails, the medium will be placed back in <link to="MediumState_NotCreated"/>
10236 state.
10237
10238 After the returned progress object reports that the operation has
10239 successfully completed, the medium state will be set to <link
10240 to="MediumState_Created"/>, the medium will be remembered by this
10241 VirtualBox installation and may be attached to virtual machines.
10242
10243 <result name="VBOX_E_NOT_SUPPORTED">
10244 The variant of storage creation operation is not supported. See <link
10245 to="IMediumFormat::capabilities"/>.
10246 </result>
10247 </desc>
10248 <param name="logicalSize" type="unsigned long long" dir="in">
10249 <desc>Maximum logical size of the medium in megabytes.</desc>
10250 </param>
10251 <param name="variant" type="MediumVariant" dir="in">
10252 <desc>Exact image variant which should be created.</desc>
10253 </param>
10254 <param name="progress" type="IProgress" dir="return">
10255 <desc>Progress object to track the operation completion.</desc>
10256 </param>
10257 </method>
10258
10259 <method name="deleteStorage">
10260 <desc>
10261 Starts deleting the storage unit of this medium.
10262
10263 The medium must not be attached to any known virtual machine and must
10264 not have any known child media, otherwise the operation will fail.
10265 It will also fail if there is no storage unit to delete or if deletion
10266 is already in progress, or if the medium is being in use (locked for
10267 read or for write) or inaccessible. Therefore, the only valid state for
10268 this operation to succeed is <link to="MediumState_Created"/>.
10269
10270 Before the operation starts, the medium is placed in
10271 <link to="MediumState_Deleting"/> state and gets removed from the list
10272 of remembered hard disks (media registry). If the delete operation
10273 fails, the medium will be remembered again and placed back to
10274 <link to="MediumState_Created"/> state.
10275
10276 After the returned progress object reports that the operation is
10277 complete, the medium state will be set to
10278 <link to="MediumState_NotCreated"/> and you will be able to use one of
10279 the storage creation methods to create it again.
10280
10281 <see>#close()</see>
10282
10283 <result name="VBOX_E_OBJECT_IN_USE">
10284 Medium is attached to a virtual machine.
10285 </result>
10286 <result name="VBOX_E_NOT_SUPPORTED">
10287 Storage deletion is not allowed because neither of storage creation
10288 operations are supported. See
10289 <link to="IMediumFormat::capabilities"/>.
10290 </result>
10291
10292 <note>
10293 If the deletion operation fails, it is not guaranteed that the storage
10294 unit still exists. You may check the <link to="IMedium::state"/> value
10295 to answer this question.
10296 </note>
10297 </desc>
10298 <param name="progress" type="IProgress" dir="return">
10299 <desc>Progress object to track the operation completion.</desc>
10300 </param>
10301 </method>
10302
10303 <!-- diff methods -->
10304
10305 <method name="createDiffStorage">
10306 <desc>
10307 Starts creating an empty differencing storage unit based on this
10308 medium in the format and at the location defined by the @a target
10309 argument.
10310
10311 The target medium must be in <link to="MediumState_NotCreated"/>
10312 state (i.e. must not have an existing storage unit). Upon successful
10313 completion, this operation will set the type of the target medium to
10314 <link to="MediumType_Normal"/> and create a storage unit necessary to
10315 represent the differencing medium data in the given format (according
10316 to the storage format of the target object).
10317
10318 After the returned progress object reports that the operation is
10319 successfully complete, the target medium gets remembered by this
10320 VirtualBox installation and may be attached to virtual machines.
10321
10322 <note>
10323 The medium will be set to <link to="MediumState_LockedRead"/>
10324 state for the duration of this operation.
10325 </note>
10326 <result name="VBOX_E_OBJECT_IN_USE">
10327 Medium not in @c NotCreated state.
10328 </result>
10329 </desc>
10330 <param name="target" type="IMedium" dir="in">
10331 <desc>Target medium.</desc>
10332 </param>
10333 <param name="variant" type="MediumVariant" dir="in">
10334 <desc>Exact image variant which should be created.</desc>
10335 </param>
10336 <param name="progress" type="IProgress" dir="return">
10337 <desc>Progress object to track the operation completion.</desc>
10338 </param>
10339 </method>
10340
10341 <method name="mergeTo">
10342 <desc>
10343 Starts merging the contents of this medium and all intermediate
10344 differencing media in the chain to the given target medium.
10345
10346 The target medium must be either a descendant of this medium or
10347 its ancestor (otherwise this method will immediately return a failure).
10348 It follows that there are two logical directions of the merge operation:
10349 from ancestor to descendant (<i>forward merge</i>) and from descendant to
10350 ancestor (<i>backward merge</i>). Let us consider the following medium
10351 chain:
10352
10353 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
10354
10355 Here, calling this method on the <tt>Base</tt> medium object with
10356 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
10357 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
10358 merge. Note that in both cases the contents of the resulting medium
10359 will be the same, the only difference is the medium object that takes
10360 the result of the merge operation. In case of the forward merge in the
10361 above example, the result will be written to <tt>Diff_2</tt>; in case of
10362 the backward merge, the result will be written to <tt>Base</tt>. In
10363 other words, the result of the operation is always stored in the target
10364 medium.
10365
10366 Upon successful operation completion, the storage units of all media in
10367 the chain between this (source) medium and the target medium, including
10368 the source medium itself, will be automatically deleted and the
10369 relevant medium objects (including this medium) will become
10370 uninitialized. This means that any attempt to call any of
10371 their methods or attributes will fail with the
10372 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
10373 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
10374 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> media.
10375 Note that <tt>Diff_2</tt> in this case will become a base medium
10376 itself since it will no longer be based on any other medium.
10377
10378 Considering the above, all of the following conditions must be met in
10379 order for the merge operation to succeed:
10380 <ul>
10381 <li>
10382 Neither this (source) medium nor any intermediate
10383 differencing medium in the chain between it and the target
10384 medium is attached to any virtual machine.
10385 </li>
10386 <li>
10387 Neither the source medium nor the target medium is an
10388 <link to="MediumType_Immutable"/> medium.
10389 </li>
10390 <li>
10391 The part of the medium tree from the source medium to the
10392 target medium is a linear chain, i.e. all medium in this
10393 chain have exactly one child which is the next medium in this
10394 chain. The only exception from this rule is the target medium in
10395 the forward merge operation; it is allowed to have any number of
10396 child media because the merge operation will not change its
10397 logical contents (as it is seen by the guest OS or by children).
10398 </li>
10399 <li>
10400 None of the involved media are in
10401 <link to="MediumState_LockedRead"/> or
10402 <link to="MediumState_LockedWrite"/> state.
10403 </li>
10404 </ul>
10405
10406 <note>
10407 This (source) medium and all intermediates will be placed to <link
10408 to="MediumState_Deleting"/> state and the target medium will be
10409 placed to <link to="MediumState_LockedWrite"/> state and for the
10410 duration of this operation.
10411 </note>
10412 </desc>
10413 <param name="target" type="IMedium" dir="in">
10414 <desc>Target medium.</desc>
10415 </param>
10416 <param name="progress" type="IProgress" dir="return">
10417 <desc>Progress object to track the operation completion.</desc>
10418 </param>
10419 </method>
10420
10421 <!-- clone method -->
10422
10423 <method name="cloneTo">
10424 <desc>
10425 Starts creating a clone of this medium in the format and at the
10426 location defined by the @a target argument.
10427
10428 The target medium must be either in <link to="MediumState_NotCreated"/>
10429 state (i.e. must not have an existing storage unit) or in
10430 <link to="MediumState_Created"/> state (i.e. created and not locked, and
10431 big enough to hold the data or else the copy will be partial). Upon
10432 successful completion, the cloned medium will contain exactly the
10433 same sector data as the medium being cloned, except that in the
10434 first case a new UUID for the clone will be randomly generated, and in
10435 the second case the UUID will remain unchanged.
10436
10437 The @a parent argument defines which medium will be the parent
10438 of the clone. Passing a @c null reference indicates that the clone will
10439 be a base image, i.e. completely independent. It is possible to specify
10440 an arbitrary medium for this parameter, including the parent of the
10441 medium which is being cloned. Even cloning to a child of the source
10442 medium is possible. Note that when cloning to an existing image, the
10443 @a parent irgument is ignored.
10444
10445 After the returned progress object reports that the operation is
10446 successfully complete, the target medium gets remembered by this
10447 VirtualBox installation and may be attached to virtual machines.
10448
10449 <note>
10450 This medium will be placed to <link to="MediumState_LockedRead"/>
10451 state for the duration of this operation.
10452 </note>
10453 <result name="E_NOTIMPL">
10454 The specified cloning variant is not supported at the moment.
10455 </result>
10456 </desc>
10457 <param name="target" type="IMedium" dir="in">
10458 <desc>Target medium.</desc>
10459 </param>
10460 <param name="variant" type="MediumVariant" dir="in">
10461 <desc>Exact image variant which should be created.</desc>
10462 </param>
10463 <param name="parent" type="IMedium" dir="in">
10464 <desc>Parent of the cloned medium.</desc>
10465 </param>
10466 <param name="progress" type="IProgress" dir="return">
10467 <desc>Progress object to track the operation completion.</desc>
10468 </param>
10469 </method>
10470
10471 <!-- other methods -->
10472
10473 <method name="compact">
10474 <desc>
10475 Starts compacting of this medium. This means that the medium is
10476 transformed into a possibly more compact storage representation.
10477 This potentially creates temporary images, which can require a
10478 substantial amount of additional disk space.
10479
10480 This medium will be placed to <link to="MediumState_LockedWrite"/>
10481 state and all its parent media (if any) will be placed to
10482 <link to="MediumState_LockedRead"/> state for the duration of this
10483 operation.
10484
10485 Please note that the results can be either returned straight away,
10486 or later as the result of the background operation via the object
10487 returned via the @a progress parameter.
10488
10489 <result name="VBOX_E_NOT_SUPPORTED">
10490 Medium format does not support compacting (but potentially
10491 needs it).
10492 </result>
10493 </desc>
10494 <param name="progress" type="IProgress" dir="return">
10495 <desc>Progress object to track the operation completion.</desc>
10496 </param>
10497 </method>
10498
10499 <method name="resize">
10500 <desc>
10501 Starts resizing this medium. This means that the nominal size of the
10502 medium is set to the new value. Both increasing and decreasing the
10503 size is possible, and there are no safety checks, since VirtualBox
10504 does not make any assumptions about the medium contents.
10505
10506 Resizing usually needs additional disk space, and possibly also
10507 some temporary disk space. Note that resize does not create a full
10508 temporary copy of the medium, so the additional disk space requirement
10509 is usually much lower than using the clone operation.
10510
10511 This medium will be placed to <link to="MediumState_LockedWrite"/>
10512 state for the duration of this operation.
10513
10514 Please note that the results can be either returned straight away,
10515 or later as the result of the background operation via the object
10516 returned via the @a progress parameter.
10517
10518 <result name="VBOX_E_NOT_SUPPORTED">
10519 Medium format does not support resizing.
10520 </result>
10521 </desc>
10522 <param name="logicalSize" type="unsigned long long" dir="in">
10523 <desc>New nominal capacity of the medium in megabytes.</desc>
10524 </param>
10525 <param name="progress" type="IProgress" dir="return">
10526 <desc>Progress object to track the operation completion.</desc>
10527 </param>
10528 </method>
10529
10530 <method name="reset">
10531 <desc>
10532 Starts erasing the contents of this differencing medium.
10533
10534 This operation will reset the differencing medium to its initial
10535 state when it does not contain any sector data and any read operation is
10536 redirected to its parent medium. This automatically gets called
10537 during VM power-up for every medium whose <link to="#autoReset" />
10538 attribute is @c true.
10539
10540 The medium will be write-locked for the duration of this operation (see
10541 <link to="#lockWrite" />).
10542
10543 <result name="VBOX_E_NOT_SUPPORTED">
10544 This is not a differencing medium.
10545 </result>
10546 <result name="VBOX_E_INVALID_OBJECT_STATE">
10547 Medium is not in <link to="MediumState_Created"/> or
10548 <link to="MediumState_Inaccessible"/> state.
10549 </result>
10550 </desc>
10551 <param name="progress" type="IProgress" dir="return">
10552 <desc>Progress object to track the operation completion.</desc>
10553 </param>
10554 </method>
10555
10556 </interface>
10557
10558
10559 <!--
10560 // IMediumFormat
10561 /////////////////////////////////////////////////////////////////////////
10562 -->
10563
10564 <enum
10565 name="DataType"
10566 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
10567 >
10568 <const name="Int32" value="0"/>
10569 <const name="Int8" value="1"/>
10570 <const name="String" value="2"/>
10571 </enum>
10572
10573 <enum
10574 name="DataFlags"
10575 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
10576 >
10577 <const name="None" value="0x00"/>
10578 <const name="Mandatory" value="0x01"/>
10579 <const name="Expert" value="0x02"/>
10580 <const name="Array" value="0x04"/>
10581 <const name="FlagMask" value="0x07"/>
10582 </enum>
10583
10584 <enum
10585 name="MediumFormatCapabilities"
10586 uuid="70fcf810-99e8-4edc-aee4-7f51d489e657"
10587 >
10588 <desc>
10589 Medium format capability flags.
10590 </desc>
10591
10592 <const name="Uuid" value="0x01">
10593 <desc>
10594 Supports UUIDs as expected by VirtualBox code.
10595 </desc>
10596 </const>
10597
10598 <const name="CreateFixed" value="0x02">
10599 <desc>
10600 Supports creating fixed size images, allocating all space instantly.
10601 </desc>
10602 </const>
10603
10604 <const name="CreateDynamic" value="0x04">
10605 <desc>
10606 Supports creating dynamically growing images, allocating space on
10607 demand.
10608 </desc>
10609 </const>
10610
10611 <const name="CreateSplit2G" value="0x08">
10612 <desc>
10613 Supports creating images split in chunks of a bit less than 2 GBytes.
10614 </desc>
10615 </const>
10616
10617 <const name="Differencing" value="0x10">
10618 <desc>
10619 Supports being used as a format for differencing media (see <link
10620 to="IMedium::createDiffStorage"/>).
10621 </desc>
10622 </const>
10623
10624 <const name="Asynchronous" value="0x20">
10625 <desc>
10626 Supports asynchronous I/O operations for at least some configurations.
10627 </desc>
10628 </const>
10629
10630 <const name="File" value="0x40">
10631 <desc>
10632 The format backend operates on files (the <link to="IMedium::location"/>
10633 attribute of the medium specifies a file used to store medium
10634 data; for a list of supported file extensions see
10635 <link to="IMediumFormat::fileExtensions"/>).
10636 </desc>
10637 </const>
10638
10639 <const name="Properties" value="0x80">
10640 <desc>
10641 The format backend uses the property interface to configure the storage
10642 location and properties (the <link to="IMediumFormat::describeProperties"/>
10643 method is used to get access to properties supported by the given medium format).
10644 </desc>
10645 </const>
10646
10647 <const name="CapabilityMask" value="0xFF"/>
10648 </enum>
10649
10650 <interface
10651 name="IMediumFormat" extends="$unknown"
10652 uuid="89f52554-d469-4799-9fad-1705e86a08b1"
10653 wsmap="managed"
10654 >
10655 <desc>
10656 The IMediumFormat interface represents a medium format.
10657
10658 Each medium format has an associated backend which is used to handle
10659 media stored in this format. This interface provides information
10660 about the properties of the associated backend.
10661
10662 Each medium format is identified by a string represented by the
10663 <link to="#id"/> attribute. This string is used in calls like
10664 <link to="IVirtualBox::createHardDisk"/> to specify the desired
10665 format.
10666
10667 The list of all supported medium formats can be obtained using
10668 <link to="ISystemProperties::mediaFormats"/>.
10669
10670 <see>IMedium</see>
10671 </desc>
10672
10673 <attribute name="id" type="wstring" readonly="yes">
10674 <desc>
10675 Identifier of this format.
10676
10677 The format identifier is a non-@c null non-empty ASCII string. Note that
10678 this string is case-insensitive. This means that, for example, all of
10679 the following strings:
10680 <pre>
10681 "VDI"
10682 "vdi"
10683 "VdI"</pre>
10684 refer to the same medium format.
10685
10686 This string is used in methods of other interfaces where it is necessary
10687 to specify a medium format, such as
10688 <link to="IVirtualBox::createHardDisk"/>.
10689 </desc>
10690 </attribute>
10691
10692 <attribute name="name" type="wstring" readonly="yes">
10693 <desc>
10694 Human readable description of this format.
10695
10696 Mainly for use in file open dialogs.
10697 </desc>
10698 </attribute>
10699
10700 <attribute name="fileExtensions" type="wstring" safearray="yes" readonly="yes">
10701 <desc>
10702 Array of strings containing the supported file extensions.
10703
10704 The first extension in the array is the extension preferred by the
10705 backend. It is recommended to use this extension when specifying a
10706 location of the storage unit for a new medium.
10707
10708 Note that some backends do not work on files, so this array may be
10709 empty.
10710
10711 <see>IMediumFormat::capabilities</see>
10712 </desc>
10713 </attribute>
10714
10715 <attribute name="capabilities" type="unsigned long" readonly="yes">
10716 <desc>
10717 Capabilities of the format as a set of bit flags.
10718
10719 For the meaning of individual capability flags see
10720 <link to="MediumFormatCapabilities"/>.
10721 </desc>
10722 </attribute>
10723
10724 <method name="describeProperties">
10725 <desc>
10726 Returns several arrays describing the properties supported by this
10727 format.
10728
10729 An element with the given index in each array describes one
10730 property. Thus, the number of elements in each returned array is the
10731 same and corresponds to the number of supported properties.
10732
10733 The returned arrays are filled in only if the
10734 <link to="MediumFormatCapabilities_Properties"/> flag is set.
10735 All arguments must be non-@c null.
10736
10737 <see>DataType</see>
10738 <see>DataFlags</see>
10739 </desc>
10740
10741 <param name="names" type="wstring" safearray="yes" dir="out">
10742 <desc>Array of property names.</desc>
10743 </param>
10744 <param name="description" type="wstring" safearray="yes" dir="out">
10745 <desc>Array of property descriptions.</desc>
10746 </param>
10747 <param name="types" type="DataType" safearray="yes" dir="out">
10748 <desc>Array of property types.</desc>
10749 </param>
10750 <param name="flags" type="unsigned long" safearray="yes" dir="out">
10751 <desc>Array of property flags.</desc>
10752 </param>
10753 <param name="defaults" type="wstring" safearray="yes" dir="out">
10754 <desc>Array of default property values.</desc>
10755 </param>
10756 </method>
10757
10758 </interface>
10759
10760
10761 <!--
10762 // IKeyboard
10763 /////////////////////////////////////////////////////////////////////////
10764 -->
10765
10766 <interface
10767 name="IKeyboard" extends="$unknown"
10768 uuid="2d1a531b-4c6e-49cc-8af6-5c857b78b5d7"
10769 wsmap="managed"
10770 >
10771 <desc>
10772 The IKeyboard interface represents the virtual machine's keyboard. Used
10773 in <link to="IConsole::keyboard"/>.
10774
10775 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
10776 to the virtual machine.
10777
10778 </desc>
10779 <method name="putScancode">
10780 <desc>Sends a scancode to the keyboard.
10781
10782 <result name="VBOX_E_IPRT_ERROR">
10783 Could not send scan code to virtual keyboard.
10784 </result>
10785
10786 </desc>
10787 <param name="scancode" type="long" dir="in"/>
10788 </method>
10789
10790 <method name="putScancodes">
10791 <desc>Sends an array of scancodes to the keyboard.
10792
10793 <result name="VBOX_E_IPRT_ERROR">
10794 Could not send all scan codes to virtual keyboard.
10795 </result>
10796
10797 </desc>
10798 <param name="scancodes" type="long" dir="in" safearray="yes"/>
10799 <param name="codesStored" type="unsigned long" dir="return"/>
10800 </method>
10801
10802 <method name="putCAD">
10803 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
10804 function is nothing special, it is just a convenience function
10805 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
10806
10807 <result name="VBOX_E_IPRT_ERROR">
10808 Could not send all scan codes to virtual keyboard.
10809 </result>
10810
10811 </desc>
10812 </method>
10813
10814 </interface>
10815
10816
10817 <!--
10818 // IMouse
10819 /////////////////////////////////////////////////////////////////////////
10820 -->
10821
10822 <enum
10823 name="MouseButtonState"
10824 uuid="9ee094b8-b28a-4d56-a166-973cb588d7f8"
10825 >
10826 <desc>
10827 Mouse button state.
10828 </desc>
10829
10830 <const name="LeftButton" value="0x01"/>
10831 <const name="RightButton" value="0x02"/>
10832 <const name="MiddleButton" value="0x04"/>
10833 <const name="WheelUp" value="0x08"/>
10834 <const name="WheelDown" value="0x10"/>
10835 <const name="XButton1" value="0x20"/>
10836 <const name="XButton2" value="0x40"/>
10837 <const name="MouseStateMask" value="0x7F"/>
10838 </enum>
10839
10840 <interface
10841 name="IMouse" extends="$unknown"
10842 uuid="7c0f2eae-f92d-498c-b802-e1a3763774dc"
10843 wsmap="managed"
10844 >
10845 <desc>
10846 The IMouse interface represents the virtual machine's mouse. Used in
10847 <link to="IConsole::mouse"/>.
10848
10849 Through this interface, the virtual machine's virtual mouse can be
10850 controlled.
10851 </desc>
10852
10853 <attribute name="absoluteSupported" type="boolean" readonly="yes">
10854 <desc>
10855 Whether the guest OS supports absolute mouse pointer positioning
10856 or not.
10857 <note>
10858 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10859 callback to be instantly informed about changes of this attribute
10860 during virtual machine execution.
10861 </note>
10862 <see><link to="#putMouseEventAbsolute"/></see>
10863 </desc>
10864 </attribute>
10865
10866 <attribute name="relativeSupported" type="boolean" readonly="yes">
10867 <desc>
10868 Whether the guest OS supports relative mouse pointer positioning
10869 or not.
10870 <note>
10871 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10872 callback to be instantly informed about changes of this attribute
10873 during virtual machine execution.
10874 </note>
10875 <see><link to="#putMouseEvent"/></see>
10876 </desc>
10877 </attribute>
10878
10879 <attribute name="needsHostCursor" type="boolean" readonly="yes">
10880 <desc>
10881 Whether the guest OS can currently switch to drawing it's own mouse
10882 cursor on demand.
10883 <note>
10884 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
10885 callback to be instantly informed about changes of this attribute
10886 during virtual machine execution.
10887 </note>
10888 <see><link to="#putMouseEvent"/></see>
10889 </desc>
10890 </attribute>
10891
10892 <method name="putMouseEvent">
10893 <desc>
10894 Initiates a mouse event using relative pointer movements
10895 along x and y axis.
10896
10897 <result name="E_ACCESSDENIED">
10898 Console not powered up.
10899 </result>
10900 <result name="VBOX_E_IPRT_ERROR">
10901 Could not send mouse event to virtual mouse.
10902 </result>
10903
10904 </desc>
10905
10906 <param name="dx" type="long" dir="in">
10907 <desc>
10908 Amount of pixels the mouse should move to the right.
10909 Negative values move the mouse to the left.
10910 </desc>
10911 </param>
10912 <param name="dy" type="long" dir="in">
10913 <desc>
10914 Amount of pixels the mouse should move downwards.
10915 Negative values move the mouse upwards.
10916 </desc>
10917 </param>
10918 <param name="dz" type="long" dir="in">
10919 <desc>
10920 Amount of mouse wheel moves.
10921 Positive values describe clockwise wheel rotations,
10922 negative values describe counterclockwise rotations.
10923 </desc>
10924 </param>
10925 <param name="dw" type="long" dir="in">
10926 <desc>
10927 Amount of horizontal mouse wheel moves.
10928 Positive values describe a movement to the left,
10929 negative values describe a movement to the right.
10930 </desc>
10931 </param>
10932 <param name="buttonState" type="long" dir="in">
10933 <desc>
10934 The current state of mouse buttons. Every bit represents
10935 a mouse button as follows:
10936 <table>
10937 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10938 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
10939 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
10940 </table>
10941 A value of <tt>1</tt> means the corresponding button is pressed.
10942 otherwise it is released.
10943 </desc>
10944 </param>
10945 </method>
10946
10947 <method name="putMouseEventAbsolute">
10948 <desc>
10949 Positions the mouse pointer using absolute x and y coordinates.
10950 These coordinates are expressed in pixels and
10951 start from <tt>[1,1]</tt> which corresponds to the top left
10952 corner of the virtual display.
10953
10954 <result name="E_ACCESSDENIED">
10955 Console not powered up.
10956 </result>
10957 <result name="VBOX_E_IPRT_ERROR">
10958 Could not send mouse event to virtual mouse.
10959 </result>
10960
10961 <note>
10962 This method will have effect only if absolute mouse
10963 positioning is supported by the guest OS.
10964 </note>
10965
10966 <see><link to="#absoluteSupported"/></see>
10967 </desc>
10968
10969 <param name="x" type="long" dir="in">
10970 <desc>
10971 X coordinate of the pointer in pixels, starting from @c 1.
10972 </desc>
10973 </param>
10974 <param name="y" type="long" dir="in">
10975 <desc>
10976 Y coordinate of the pointer in pixels, starting from @c 1.
10977 </desc>
10978 </param>
10979 <param name="dz" type="long" dir="in">
10980 <desc>
10981 Amount of mouse wheel moves.
10982 Positive values describe clockwise wheel rotations,
10983 negative values describe counterclockwise rotations.
10984 </desc>
10985 </param>
10986 <param name="dw" type="long" dir="in">
10987 <desc>
10988 Amount of horizontal mouse wheel moves.
10989 Positive values describe a movement to the left,
10990 negative values describe a movement to the right.
10991 </desc>
10992 </param>
10993 <param name="buttonState" type="long" dir="in">
10994 <desc>
10995 The current state of mouse buttons. Every bit represents
10996 a mouse button as follows:
10997 <table>
10998 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10999 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
11000 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
11001 </table>
11002 A value of @c 1 means the corresponding button is pressed.
11003 otherwise it is released.
11004 </desc>
11005 </param>
11006 </method>
11007
11008 </interface>
11009
11010 <!--
11011 // IDisplay
11012 /////////////////////////////////////////////////////////////////////////
11013 -->
11014
11015 <enum
11016 name="FramebufferPixelFormat"
11017 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
11018 >
11019 <desc>
11020 Format of the video memory buffer. Constants represented by this enum can
11021 be used to test for particular values of <link
11022 to="IFramebuffer::pixelFormat"/>. See also <link
11023 to="IFramebuffer::requestResize"/>.
11024
11025 See also www.fourcc.org for more information about FOURCC pixel formats.
11026 </desc>
11027
11028 <const name="Opaque" value="0">
11029 <desc>
11030 Unknown buffer format (the user may not assume any particular format of
11031 the buffer).
11032 </desc>
11033 </const>
11034 <const name="FOURCC_RGB" value="0x32424752">
11035 <desc>
11036 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
11037 bit layout).
11038 </desc>
11039 </const>
11040 </enum>
11041
11042 <interface
11043 name="IFramebuffer" extends="$unknown"
11044 uuid="b7ed347a-5765-40a0-ae1c-f543eb4ddeaf"
11045 wsmap="suppress"
11046 >
11047 <attribute name="address" type="octet" mod="ptr" readonly="yes">
11048 <desc>Address of the start byte of the frame buffer.</desc>
11049 </attribute>
11050
11051 <attribute name="width" type="unsigned long" readonly="yes">
11052 <desc>Frame buffer width, in pixels.</desc>
11053 </attribute>
11054
11055 <attribute name="height" type="unsigned long" readonly="yes">
11056 <desc>Frame buffer height, in pixels.</desc>
11057 </attribute>
11058
11059 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
11060 <desc>
11061 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
11062 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
11063 are: 8, 15, 16, 24 and 32.
11064 </desc>
11065 </attribute>
11066
11067 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
11068 <desc>
11069 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
11070 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
11071 size of the scan line must be aligned to 32 bits.
11072 </desc>
11073 </attribute>
11074
11075 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
11076 <desc>
11077 Frame buffer pixel format. It's either one of the values defined by <link
11078 to="FramebufferPixelFormat"/> or a raw FOURCC code.
11079 <note>
11080 This attribute must never return <link
11081 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
11082 <link to="#address"/> points to must be always known.
11083 </note>
11084 </desc>
11085 </attribute>
11086
11087 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
11088 <desc>
11089 Defines whether this frame buffer uses the virtual video card's memory
11090 buffer (guest VRAM) directly or not. See <link
11091 to="IFramebuffer::requestResize"/> for more information.
11092 </desc>
11093 </attribute>
11094
11095 <attribute name="heightReduction" type="unsigned long" readonly="yes">
11096 <desc>
11097 Hint from the frame buffer about how much of the standard
11098 screen height it wants to use for itself. This information is
11099 exposed to the guest through the VESA BIOS and VMMDev interface
11100 so that it can use it for determining its video mode table. It
11101 is not guaranteed that the guest respects the value.
11102 </desc>
11103 </attribute>
11104
11105 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
11106 <desc>
11107 An alpha-blended overlay which is superposed over the frame buffer.
11108 The initial purpose is to allow the display of icons providing
11109 information about the VM state, including disk activity, in front
11110 ends which do not have other means of doing that. The overlay is
11111 designed to controlled exclusively by IDisplay. It has no locking
11112 of its own, and any changes made to it are not guaranteed to be
11113 visible until the affected portion of IFramebuffer is updated. The
11114 overlay can be created lazily the first time it is requested. This
11115 attribute can also return @c null to signal that the overlay is not
11116 implemented.
11117 </desc>
11118 </attribute>
11119
11120 <attribute name="winId" type="unsigned long long" readonly="yes">
11121 <desc>
11122 Platform-dependent identifier of the window where context of this
11123 frame buffer is drawn, or zero if there's no such window.
11124 </desc>
11125 </attribute>
11126
11127 <method name="lock">
11128 <desc>
11129 Locks the frame buffer.
11130 Gets called by the IDisplay object where this frame buffer is
11131 bound to.
11132 </desc>
11133 </method>
11134
11135 <method name="unlock">
11136 <desc>
11137 Unlocks the frame buffer.
11138 Gets called by the IDisplay object where this frame buffer is
11139 bound to.
11140 </desc>
11141 </method>
11142
11143 <method name="notifyUpdate">
11144 <desc>
11145 Informs about an update.
11146 Gets called by the display object where this buffer is
11147 registered.
11148 </desc>
11149 <param name="x" type="unsigned long" dir="in"/>
11150 <param name="y" type="unsigned long" dir="in"/>
11151 <param name="width" type="unsigned long" dir="in"/>
11152 <param name="height" type="unsigned long" dir="in"/>
11153 </method>
11154
11155 <method name="requestResize">
11156 <desc>
11157 Requests a size and pixel format change.
11158
11159 There are two modes of working with the video buffer of the virtual
11160 machine. The <i>indirect</i> mode implies that the IFramebuffer
11161 implementation allocates a memory buffer for the requested display mode
11162 and provides it to the virtual machine. In <i>direct</i> mode, the
11163 IFramebuffer implementation uses the memory buffer allocated and owned
11164 by the virtual machine. This buffer represents the video memory of the
11165 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
11166 usually faster because the implementation gets a raw pointer to the
11167 guest VRAM buffer which it can directly use for visualizing the contents
11168 of the virtual display, as opposed to the indirect mode where the
11169 contents of guest VRAM are copied to the memory buffer provided by
11170 the implementation every time a display update occurs.
11171
11172 It is important to note that the direct mode is really fast only when
11173 the implementation uses the given guest VRAM buffer directly, for
11174 example, by blitting it to the window representing the virtual machine's
11175 display, which saves at least one copy operation comparing to the
11176 indirect mode. However, using the guest VRAM buffer directly is not
11177 always possible: the format and the color depth of this buffer may be
11178 not supported by the target window, or it may be unknown (opaque) as in
11179 case of text or non-linear multi-plane VGA video modes. In this case,
11180 the indirect mode (that is always available) should be used as a
11181 fallback: when the guest VRAM contents are copied to the
11182 implementation-provided memory buffer, color and format conversion is
11183 done automatically by the underlying code.
11184
11185 The @a pixelFormat parameter defines whether the direct mode is
11186 available or not. If @a pixelFormat is <link
11187 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
11188 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and
11189 @a bytesPerLine parameters must be ignored and the implementation must use
11190 the indirect mode (where it provides its own buffer in one of the
11191 supported formats). In all other cases, @a pixelFormat together with
11192 @a bitsPerPixel and @a bytesPerLine define the format of the video memory
11193 buffer pointed to by the @a VRAM parameter and the implementation is
11194 free to choose which mode to use. To indicate that this frame buffer uses
11195 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
11196 attribute must return @c true and <link to="#address"/> must
11197 return exactly the same address that is passed in the @a VRAM parameter
11198 of this method; otherwise it is assumed that the indirect strategy is
11199 chosen.
11200
11201 The @a width and @a height parameters represent the size of the
11202 requested display mode in both modes. In case of indirect mode, the
11203 provided memory buffer should be big enough to store data of the given
11204 display mode. In case of direct mode, it is guaranteed that the given
11205 @a VRAM buffer contains enough space to represent the display mode of the
11206 given size. Note that this frame buffer's <link to="#width"/> and <link
11207 to="#height"/> attributes must return exactly the same values as
11208 passed to this method after the resize is completed (see below).
11209
11210 The @a finished output parameter determines if the implementation has
11211 finished resizing the frame buffer or not. If, for some reason, the
11212 resize cannot be finished immediately during this call, @a finished
11213 must be set to @c false, and the implementation must call
11214 <link to="IDisplay::resizeCompleted"/> after it has returned from
11215 this method as soon as possible. If @a finished is @c false, the
11216 machine will not call any frame buffer methods until
11217 <link to="IDisplay::resizeCompleted"/> is called.
11218
11219 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
11220 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
11221 this frame buffer must return exactly the same values as specified in the
11222 parameters of this method, after the resize is completed. If the
11223 indirect mode is chosen, these attributes must return values describing
11224 the format of the implementation's own memory buffer <link
11225 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
11226 value must always correlate with <link to="#pixelFormat"/>. Note that
11227 the <link to="#pixelFormat"/> attribute must never return <link
11228 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
11229
11230 <note>
11231 This method is called by the IDisplay object under the
11232 <link to="#lock"/> provided by this IFramebuffer
11233 implementation. If this method returns @c false in @a finished, then
11234 this lock is not released until
11235 <link to="IDisplay::resizeCompleted"/> is called.
11236 </note>
11237 </desc>
11238 <param name="screenId" type="unsigned long" dir="in">
11239 <desc>
11240 Logical screen number. Must be used in the corresponding call to
11241 <link to="IDisplay::resizeCompleted"/> if this call is made.
11242 </desc>
11243 </param>
11244 <param name="pixelFormat" type="unsigned long" dir="in">
11245 <desc>
11246 Pixel format of the memory buffer pointed to by @a VRAM.
11247 See also <link to="FramebufferPixelFormat"/>.
11248 </desc>
11249 </param>
11250 <param name="VRAM" type="octet" mod="ptr" dir="in">
11251 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
11252 </param>
11253 <param name="bitsPerPixel" type="unsigned long" dir="in">
11254 <desc>Color depth, bits per pixel.</desc>
11255 </param>
11256 <param name="bytesPerLine" type="unsigned long" dir="in">
11257 <desc>Size of one scan line, in bytes.</desc>
11258 </param>
11259 <param name="width" type="unsigned long" dir="in">
11260 <desc>Width of the guest display, in pixels.</desc>
11261 </param>
11262 <param name="height" type="unsigned long" dir="in">
11263 <desc>Height of the guest display, in pixels.</desc>
11264 </param>
11265 <param name="finished" type="boolean" dir="return">
11266 <desc>
11267 Can the VM start using the new frame buffer immediately
11268 after this method returns or it should wait for
11269 <link to="IDisplay::resizeCompleted"/>.
11270 </desc>
11271 </param>
11272 </method>
11273
11274 <method name="videoModeSupported">
11275 <desc>
11276 Returns whether the frame buffer implementation is willing to
11277 support a given video mode. In case it is not able to render
11278 the video mode (or for some reason not willing), it should
11279 return @c false. Usually this method is called when the guest
11280 asks the VMM device whether a given video mode is supported
11281 so the information returned is directly exposed to the guest.
11282 It is important that this method returns very quickly.
11283 </desc>
11284 <param name="width" type="unsigned long" dir="in"/>
11285 <param name="height" type="unsigned long" dir="in"/>
11286 <param name="bpp" type="unsigned long" dir="in"/>
11287 <param name="supported" type="boolean" dir="return"/>
11288 </method>
11289
11290 <method name="getVisibleRegion">
11291 <desc>
11292 Returns the visible region of this frame buffer.
11293
11294 If the @a rectangles parameter is @c null then the value of the
11295 @a count parameter is ignored and the number of elements necessary to
11296 describe the current visible region is returned in @a countCopied.
11297
11298 If @a rectangles is not @c null but @a count is less
11299 than the required number of elements to store region data, the method
11300 will report a failure. If @a count is equal or greater than the
11301 required number of elements, then the actual number of elements copied
11302 to the provided array will be returned in @a countCopied.
11303
11304 <note>
11305 The address of the provided array must be in the process space of
11306 this IFramebuffer object.
11307 </note>
11308 <note>
11309 Method not yet implemented.
11310 </note>
11311 </desc>
11312 <param name="rectangles" type="octet" mod="ptr" dir="in">
11313 <desc>Pointer to the @c RTRECT array to receive region data.</desc>
11314 </param>
11315 <param name="count" type="unsigned long" dir="in">
11316 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
11317 </param>
11318 <param name="countCopied" type="unsigned long" dir="return">
11319 <desc>Number of elements copied to the @a rectangles array.</desc>
11320 </param>
11321 </method>
11322
11323 <method name="setVisibleRegion">
11324 <desc>
11325 Suggests a new visible region to this frame buffer. This region
11326 represents the area of the VM display which is a union of regions of
11327 all top-level windows of the guest operating system running inside the
11328 VM (if the Guest Additions for this system support this
11329 functionality). This information may be used by the frontends to
11330 implement the seamless desktop integration feature.
11331
11332 <note>
11333 The address of the provided array must be in the process space of
11334 this IFramebuffer object.
11335 </note>
11336 <note>
11337 The IFramebuffer implementation must make a copy of the provided
11338 array of rectangles.
11339 </note>
11340 <note>
11341 Method not yet implemented.
11342 </note>
11343 </desc>
11344 <param name="rectangles" type="octet" mod="ptr" dir="in">
11345 <desc>Pointer to the @c RTRECT array.</desc>
11346 </param>
11347 <param name="count" type="unsigned long" dir="in">
11348 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
11349 </param>
11350 </method>
11351
11352 <method name="processVHWACommand">
11353 <desc>
11354 Posts a Video HW Acceleration Command to the frame buffer for processing.
11355 The commands used for 2D video acceleration (DDraw surface creation/destroying, blitting, scaling, color covnersion, overlaying, etc.)
11356 are posted from quest to the host to be processed by the host hardware.
11357
11358 <note>
11359 The address of the provided command must be in the process space of
11360 this IFramebuffer object.
11361 </note>
11362 </desc>
11363
11364 <param name="command" type="octet" mod="ptr" dir="in">
11365 <desc>Pointer to VBOXVHWACMD containing the command to execute.</desc>
11366 </param>
11367 </method>
11368
11369 </interface>
11370
11371 <interface
11372 name="IFramebufferOverlay" extends="IFramebuffer"
11373 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
11374 wsmap="suppress"
11375 >
11376 <desc>
11377 The IFramebufferOverlay interface represents an alpha blended overlay
11378 for displaying status icons above an IFramebuffer. It is always created
11379 not visible, so that it must be explicitly shown. It only covers a
11380 portion of the IFramebuffer, determined by its width, height and
11381 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
11382 that order) format, and may be written to directly. Do re-read the
11383 width though, after setting it, as it may be adjusted (increased) to
11384 make it more suitable for the front end.
11385 </desc>
11386 <attribute name="x" type="unsigned long" readonly="yes">
11387 <desc>X position of the overlay, relative to the frame buffer.</desc>
11388 </attribute>
11389
11390 <attribute name="y" type="unsigned long" readonly="yes">
11391 <desc>Y position of the overlay, relative to the frame buffer.</desc>
11392 </attribute>
11393
11394 <attribute name="visible" type="boolean" readonly="no">
11395 <desc>
11396 Whether the overlay is currently visible.
11397 </desc>
11398 </attribute>
11399
11400 <attribute name="alpha" type="unsigned long" readonly="no">
11401 <desc>
11402 The global alpha value for the overlay. This may or may not be
11403 supported by a given front end.
11404 </desc>
11405 </attribute>
11406
11407 <method name="move">
11408 <desc>
11409 Changes the overlay's position relative to the IFramebuffer.
11410 </desc>
11411 <param name="x" type="unsigned long" dir="in"/>
11412 <param name="y" type="unsigned long" dir="in"/>
11413 </method>
11414
11415 </interface>
11416
11417 <interface
11418 name="IDisplay" extends="$unknown"
11419 uuid="1fa79e39-0cc9-4ab3-9df3-ed3e96b42496"
11420 wsmap="managed"
11421 >
11422 <desc>
11423 The IDisplay interface represents the virtual machine's display.
11424
11425 The object implementing this interface is contained in each
11426 <link to="IConsole::display"/> attribute and represents the visual
11427 output of the virtual machine.
11428
11429 The virtual display supports pluggable output targets represented by the
11430 IFramebuffer interface. Examples of the output target are a window on
11431 the host computer or an RDP session's display on a remote computer.
11432 </desc>
11433 <method name="getScreenResolution">
11434 <desc>Queries display width, height and color depth for given screen.</desc>
11435 <param name="screenId" type="unsigned long" dir="in"/>
11436 <param name="width" type="unsigned long" dir="out"/>
11437 <param name="height" type="unsigned long" dir="out"/>
11438 <param name="bitsPerPixel" type="unsigned long" dir="out"/>
11439 </method>
11440
11441 <method name="setFramebuffer">
11442 <desc>
11443 Sets the framebuffer for given screen.
11444 </desc>
11445 <param name="screenId" type="unsigned long" dir="in"/>
11446 <param name="framebuffer" type="IFramebuffer" dir="in"/>
11447 </method>
11448
11449 <method name="getFramebuffer">
11450 <desc>
11451 Queries the framebuffer for given screen.
11452 </desc>
11453 <param name="screenId" type="unsigned long" dir="in"/>
11454 <param name="framebuffer" type="IFramebuffer" dir="out"/>
11455 <param name="xOrigin" type="long" dir="out"/>
11456 <param name="yOrigin" type="long" dir="out"/>
11457 </method>
11458
11459 <method name="setVideoModeHint">
11460 <desc>
11461 Asks VirtualBox to request the given video mode from
11462 the guest. This is just a hint and it cannot be guaranteed
11463 that the requested resolution will be used. Guest Additions
11464 are required for the request to be seen by guests. The caller
11465 should issue the request and wait for a resolution change and
11466 after a timeout retry.
11467
11468 Specifying @c 0 for either @a width, @a height or @a bitsPerPixel
11469 parameters means that the corresponding values should be taken from the
11470 current video mode (i.e. left unchanged).
11471
11472 If the guest OS supports multi-monitor configuration then the @a display
11473 parameter specifies the number of the guest display to send the hint to:
11474 @c 0 is the primary display, @c 1 is the first secondary and
11475 so on. If the multi-monitor configuration is not supported, @a display
11476 must be @c 0.
11477
11478 <result name="E_INVALIDARG">
11479 The @a display is not associated with any monitor.
11480 </result>
11481
11482 </desc>
11483 <param name="width" type="unsigned long" dir="in"/>
11484 <param name="height" type="unsigned long" dir="in"/>
11485 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
11486 <param name="display" type="unsigned long" dir="in"/>
11487 </method>
11488
11489 <method name="setSeamlessMode">
11490 <desc>
11491 Enables or disables seamless guest display rendering (seamless desktop
11492 integration) mode.
11493 <note>
11494 Calling this method has no effect if <link
11495 to="IGuest::supportsSeamless"/> returns @c false.
11496 </note>
11497 </desc>
11498 <param name="enabled" type="boolean" dir="in"/>
11499 </method>
11500
11501 <method name="takeScreenShot">
11502 <desc>
11503 Takes a screen shot of the requested size and copies it to the
11504 32-bpp buffer allocated by the caller and pointed to by @a address.
11505 A pixel consists of 4 bytes in order: B, G, R, 0.
11506
11507 <note>This API can be used only by the COM/XPCOM C++ API as it
11508 requires pointer support. Use <link to="#takeScreenShotToArray" />
11509 with other language bindings.
11510 </note>
11511
11512 <result name="E_NOTIMPL">
11513 Feature not implemented.
11514 </result>
11515 <result name="VBOX_E_IPRT_ERROR">
11516 Could not take a screenshot.
11517 </result>
11518
11519 </desc>
11520 <param name="screenId" type="unsigned long" dir="in"/>
11521 <param name="address" type="octet" mod="ptr" dir="in"/>
11522 <param name="width" type="unsigned long" dir="in"/>
11523 <param name="height" type="unsigned long" dir="in"/>
11524 </method>
11525
11526 <method name="takeScreenShotToArray">
11527 <desc>
11528 Takes a guest screen shot of the requested size and returns it as
11529 an array of bytes in uncompressed 32-bit RGBA format.
11530 A pixel consists of 4 bytes in order: R, G, B, 0xFF.
11531
11532 This API is slow, but could be the only option to get guest screenshot
11533 for scriptable languages not allowed to manipulate with addresses
11534 directly.
11535
11536 <result name="E_NOTIMPL">
11537 Feature not implemented.
11538 </result>
11539 <result name="VBOX_E_IPRT_ERROR">
11540 Could not take a screenshot.
11541 </result>
11542 </desc>
11543 <param name="screenId" type="unsigned long" dir="in">
11544 <desc>
11545 Monitor to take screenshot from.
11546 </desc>
11547 </param>
11548 <param name="width" type="unsigned long" dir="in">
11549 <desc>
11550 Desired image width.
11551 </desc>
11552 </param>
11553 <param name="height" type="unsigned long" dir="in">
11554 <desc>
11555 Desired image height.
11556 </desc>
11557 </param>
11558 <param name="screenData" type="octet" dir="return" safearray="yes">
11559 <desc>
11560 Array with resulting screen data.
11561 </desc>
11562 </param>
11563 </method>
11564
11565 <method name="drawToScreen">
11566 <desc>
11567 Draws a 32-bpp image of the specified size from the given buffer
11568 to the given point on the VM display.
11569
11570 <result name="E_NOTIMPL">
11571 Feature not implemented.
11572 </result>
11573 <result name="VBOX_E_IPRT_ERROR">
11574 Could not draw to screen.
11575 </result>
11576
11577 </desc>
11578 <param name="screenId" type="unsigned long" dir="in"/>
11579 <param name="address" type="octet" mod="ptr" dir="in"/>
11580 <param name="x" type="unsigned long" dir="in">
11581 <desc>Relative to the screen top left corner.</desc>
11582 </param>
11583 <param name="y" type="unsigned long" dir="in">
11584 <desc>Relative to the screen top left corner.</desc>
11585 </param>
11586 <param name="width" type="unsigned long" dir="in"/>
11587 <param name="height" type="unsigned long" dir="in"/>
11588 </method>
11589
11590 <method name="invalidateAndUpdate">
11591 <desc>
11592 Does a full invalidation of the VM display and instructs the VM
11593 to update it.
11594
11595 <result name="VBOX_E_IPRT_ERROR">
11596 Could not invalidate and update screen.
11597 </result>
11598
11599 </desc>
11600 </method>
11601
11602 <method name="resizeCompleted">
11603 <desc>
11604 Signals that a framebuffer has completed the resize operation.
11605
11606 <result name="VBOX_E_NOT_SUPPORTED">
11607 Operation only valid for external frame buffers.
11608 </result>
11609
11610 </desc>
11611 <param name="screenId" type="unsigned long" dir="in"/>
11612 </method>
11613
11614 <method name="completeVHWACommand">
11615 <desc>
11616 Signals that the Video HW Acceleration command has completed.
11617 </desc>
11618
11619 <param name="command" type="octet" mod="ptr" dir="in">
11620 <desc>Pointer to VBOXVHWACMD containing the completed command.</desc>
11621 </param>
11622 </method>
11623
11624 </interface>
11625
11626 <!--
11627 // INetworkAdapter
11628 /////////////////////////////////////////////////////////////////////////
11629 -->
11630
11631 <enum
11632 name="NetworkAttachmentType"
11633 uuid="44bce1ee-99f7-4e8e-89fc-80597fd9eeaf"
11634 >
11635 <desc>
11636 Network attachment type.
11637 </desc>
11638
11639 <const name="Null" value="0">
11640 <desc>Null value, also means "not attached".</desc>
11641 </const>
11642 <const name="NAT" value="1"/>
11643 <const name="Bridged" value="2"/>
11644 <const name="Internal" value="3"/>
11645 <const name="HostOnly" value="4"/>
11646 <const name="VDE" value="5"/>
11647 </enum>
11648
11649 <enum
11650 name="NetworkAdapterType"
11651 uuid="3c2281e4-d952-4e87-8c7d-24379cb6a81c"
11652 >
11653 <desc>
11654 Network adapter type.
11655 </desc>
11656
11657 <const name="Null" value="0">
11658 <desc>Null value (never used by the API).</desc>
11659 </const>
11660 <const name="Am79C970A" value="1">
11661 <desc>AMD PCNet-PCI II network card (Am79C970A).</desc>
11662 </const>
11663 <const name="Am79C973" value="2">
11664 <desc>AMD PCNet-FAST III network card (Am79C973).</desc>
11665 </const>
11666 <const name="I82540EM" value="3">
11667 <desc>Intel PRO/1000 MT Desktop network card (82540EM).</desc>
11668 </const>
11669 <const name="I82543GC" value="4">
11670 <desc>Intel PRO/1000 T Server network card (82543GC).</desc>
11671 </const>
11672 <const name="I82545EM" value="5">
11673 <desc>Intel PRO/1000 MT Server network card (82545EM).</desc>
11674 </const>
11675 <const name="Virtio" value="6">
11676 <desc>Virtio network device.</desc>
11677 </const>
11678 </enum>
11679
11680 <interface
11681 name="INetworkAdapter" extends="$unknown"
11682 uuid="5bdb9df8-a5e1-4322-a139-b7a4a734c790"
11683 wsmap="managed"
11684 >
11685 <desc>
11686 Represents a virtual network adapter that is attached to a virtual machine.
11687 Each virtual machine has a fixed number of network adapter slots with one
11688 instance of this attached to each of them. Call
11689 <link to="IMachine::getNetworkAdapter" /> to get the network adapter that
11690 is attached to a given slot in a given machine.
11691
11692 Each network adapter can be in one of five attachment modes, which are
11693 represented by the <link to="NetworkAttachmentType" /> enumeration;
11694 see the <link to="#attachmentType" /> attribute.
11695 </desc>
11696
11697 <attribute name="adapterType" type="NetworkAdapterType">
11698 <desc>
11699 Type of the virtual network adapter. Depending on this value,
11700 VirtualBox will provide a different virtual network hardware
11701 to the guest.
11702 </desc>
11703 </attribute>
11704
11705 <attribute name="slot" type="unsigned long" readonly="yes">
11706 <desc>
11707 Slot number this adapter is plugged into. Corresponds to
11708 the value you pass to <link to="IMachine::getNetworkAdapter"/>
11709 to obtain this instance.
11710 </desc>
11711 </attribute>
11712
11713 <attribute name="enabled" type="boolean">
11714 <desc>
11715 Flag whether the network adapter is present in the
11716 guest system. If disabled, the virtual guest hardware will
11717 not contain this network adapter. Can only be changed when
11718 the VM is not running.
11719 </desc>
11720 </attribute>
11721
11722 <attribute name="MACAddress" type="wstring">
11723 <desc>
11724 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
11725 it to @c null or an empty string, VirtualBox will generate a unique MAC address.
11726 </desc>
11727 </attribute>
11728
11729 <attribute name="attachmentType" type="NetworkAttachmentType" readonly="yes"/>
11730
11731 <attribute name="hostInterface" type="wstring">
11732 <desc>
11733 Name of the host network interface the VM is attached to.
11734 </desc>
11735 </attribute>
11736
11737 <attribute name="internalNetwork" type="wstring">
11738 <desc>
11739 Name of the internal network the VM is attached to.
11740 </desc>
11741 </attribute>
11742
11743 <attribute name="NATNetwork" type="wstring">
11744 <desc>
11745 Name of the NAT network the VM is attached to.
11746 </desc>
11747 </attribute>
11748
11749 <attribute name="VDENetwork" type="wstring">
11750 <desc>
11751 Name of the VDE switch the VM is attached to.
11752 </desc>
11753 </attribute>
11754
11755 <attribute name="cableConnected" type="boolean">
11756 <desc>
11757 Flag whether the adapter reports the cable as connected or not.
11758 It can be used to report offline situations to a VM.
11759 </desc>
11760 </attribute>
11761
11762 <attribute name="lineSpeed" type="unsigned long">
11763 <desc>
11764 Line speed reported by custom drivers, in units of 1 kbps.
11765 </desc>
11766 </attribute>
11767
11768 <attribute name="traceEnabled" type="boolean">
11769 <desc>
11770 Flag whether network traffic from/to the network card should be traced.
11771 Can only be toggled when the VM is turned off.
11772 </desc>
11773 </attribute>
11774
11775 <attribute name="traceFile" type="wstring">
11776 <desc>
11777 Filename where a network trace will be stored. If not set, VBox-pid.pcap
11778 will be used.
11779 </desc>
11780 </attribute>
11781
11782 <attribute name="natDriver" type="INATEngine" readonly="yes">
11783 <desc>
11784 Points to the NAT engine which handles the network address translation
11785 for this interface. This is active only when the interface actually uses
11786 NAT (see <link to="#attachToNAT" />).
11787 </desc>
11788 </attribute>
11789
11790 <attribute name="bootPriority" type="unsigned long">
11791 <desc>
11792 Network boot priority of the adapter. Priority 1 is highest. If not set,
11793 the priority is considered to be at the lowest possible setting.
11794 </desc>
11795 </attribute>
11796
11797 <method name="attachToNAT">
11798 <desc>
11799 Attach the network adapter to the Network Address Translation (NAT) interface.
11800 </desc>
11801 </method>
11802
11803 <method name="attachToBridgedInterface">
11804 <desc>
11805 Attach the network adapter to a bridged host interface.
11806 </desc>
11807 </method>
11808
11809 <method name="attachToInternalNetwork">
11810 <desc>
11811 Attach the network adapter to an internal network.
11812 </desc>
11813 </method>
11814
11815 <method name="attachToHostOnlyInterface">
11816 <desc>
11817 Attach the network adapter to the host-only network.
11818 </desc>
11819 </method>
11820
11821 <method name="attachToVDE">
11822 <desc>
11823 Attach the network adapter to a VDE network.
11824 </desc>
11825 </method>
11826
11827 <method name="detach">
11828 <desc>
11829 Detach the network adapter
11830 </desc>
11831 </method>
11832 </interface>
11833
11834
11835 <!--
11836 // ISerialPort
11837 /////////////////////////////////////////////////////////////////////////
11838 -->
11839
11840 <enum
11841 name="PortMode"
11842 uuid="533b5fe3-0185-4197-86a7-17e37dd39d76"
11843 >
11844 <desc>
11845 The PortMode enumeration represents possible communication modes for
11846 the virtual serial port device.
11847 </desc>
11848
11849 <const name="Disconnected" value="0">
11850 <desc>Virtual device is not attached to any real host device.</desc>
11851 </const>
11852 <const name="HostPipe" value="1">
11853 <desc>Virtual device is attached to a host pipe.</desc>
11854 </const>
11855 <const name="HostDevice" value="2">
11856 <desc>Virtual device is attached to a host device.</desc>
11857 </const>
11858 <const name="RawFile" value="3">
11859 <desc>Virtual device is attached to a raw file.</desc>
11860 </const>
11861 </enum>
11862
11863 <interface
11864 name="ISerialPort" extends="$unknown"
11865 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
11866 wsmap="managed"
11867 >
11868
11869 <desc>
11870 The ISerialPort interface represents the virtual serial port device.
11871
11872 The virtual serial port device acts like an ordinary serial port
11873 inside the virtual machine. This device communicates to the real
11874 serial port hardware in one of two modes: host pipe or host device.
11875
11876 In host pipe mode, the #path attribute specifies the path to the pipe on
11877 the host computer that represents a serial port. The #server attribute
11878 determines if this pipe is created by the virtual machine process at
11879 machine startup or it must already exist before starting machine
11880 execution.
11881
11882 In host device mode, the #path attribute specifies the name of the
11883 serial port device on the host computer.
11884
11885 There is also a third communication mode: the disconnected mode. In this
11886 mode, the guest OS running inside the virtual machine will be able to
11887 detect the serial port, but all port write operations will be discarded
11888 and all port read operations will return no data.
11889
11890 <see>IMachine::getSerialPort</see>
11891 </desc>
11892
11893 <attribute name="slot" type="unsigned long" readonly="yes">
11894 <desc>
11895 Slot number this serial port is plugged into. Corresponds to
11896 the value you pass to <link to="IMachine::getSerialPort"/>
11897 to obtain this instance.
11898 </desc>
11899 </attribute>
11900
11901 <attribute name="enabled" type="boolean">
11902 <desc>
11903 Flag whether the serial port is enabled. If disabled,
11904 the serial port will not be reported to the guest OS.
11905 </desc>
11906 </attribute>
11907
11908 <attribute name="IOBase" type="unsigned long">
11909 <desc>Base I/O address of the serial port.</desc>
11910 </attribute>
11911
11912 <attribute name="IRQ" type="unsigned long">
11913 <desc>IRQ number of the serial port.</desc>
11914 </attribute>
11915
11916 <attribute name="hostMode" type="PortMode">
11917 <desc>
11918 How is this port connected to the host.
11919 <note>
11920 Changing this attribute may fail if the conditions for
11921 <link to="#path"/> are not met.
11922 </note>
11923 </desc>
11924 </attribute>
11925
11926 <attribute name="server" type="boolean">
11927 <desc>
11928 Flag whether this serial port acts as a server (creates a new pipe on
11929 the host) or as a client (uses the existing pipe). This attribute is
11930 used only when <link to="#hostMode"/> is PortMode_HostPipe.
11931 </desc>
11932 </attribute>
11933
11934 <attribute name="path" type="wstring">
11935 <desc>
11936 Path to the serial port's pipe on the host when <link to="ISerialPort::hostMode"/> is
11937 PortMode_HostPipe, or the host serial device name when
11938 <link to="ISerialPort::hostMode"/> is PortMode_HostDevice. For both
11939 cases, setting a @c null or empty string as the attribute's value
11940 is an error. Otherwise, the value of this property is ignored.
11941 </desc>
11942 </attribute>
11943
11944 </interface>
11945
11946 <!--
11947 // IParallelPort
11948 /////////////////////////////////////////////////////////////////////////
11949 -->
11950
11951 <interface
11952 name="IParallelPort" extends="$unknown"
11953 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
11954 wsmap="managed"
11955 >
11956
11957 <desc>
11958 The IParallelPort interface represents the virtual parallel port device.
11959
11960 The virtual parallel port device acts like an ordinary parallel port
11961 inside the virtual machine. This device communicates to the real
11962 parallel port hardware using the name of the parallel device on the host
11963 computer specified in the #path attribute.
11964
11965 Each virtual parallel port device is assigned a base I/O address and an
11966 IRQ number that will be reported to the guest operating system and used
11967 to operate the given parallel port from within the virtual machine.
11968
11969 <see>IMachine::getParallelPort</see>
11970 </desc>
11971
11972 <attribute name="slot" type="unsigned long" readonly="yes">
11973 <desc>
11974 Slot number this parallel port is plugged into. Corresponds to
11975 the value you pass to <link to="IMachine::getParallelPort"/>
11976 to obtain this instance.
11977 </desc>
11978 </attribute>
11979
11980 <attribute name="enabled" type="boolean">
11981 <desc>
11982 Flag whether the parallel port is enabled. If disabled,
11983 the parallel port will not be reported to the guest OS.
11984 </desc>
11985 </attribute>
11986
11987 <attribute name="IOBase" type="unsigned long">
11988 <desc>Base I/O address of the parallel port.</desc>
11989 </attribute>
11990
11991 <attribute name="IRQ" type="unsigned long">
11992 <desc>IRQ number of the parallel port.</desc>
11993 </attribute>
11994
11995 <attribute name="path" type="wstring">
11996 <desc>
11997 Host parallel device name. If this parallel port is enabled, setting a
11998 @c null or an empty string as this attribute's value will result into
11999 an error.
12000 </desc>
12001 </attribute>
12002
12003 </interface>
12004
12005
12006 <!--
12007 // IMachineDebugger
12008 /////////////////////////////////////////////////////////////////////////
12009 -->
12010
12011 <interface
12012 name="IMachineDebugger" extends="$unknown"
12013 uuid="b0b2a2dd-0627-4502-91c2-ddc5e77609e0"
12014 wsmap="suppress"
12015 >
12016 <method name="resetStats">
12017 <desc>
12018 Reset VM statistics.
12019 </desc>
12020 <param name="pattern" type="wstring" dir="in">
12021 <desc>The selection pattern. A bit similar to filename globbing.</desc>
12022 </param>
12023 </method>
12024
12025 <method name="dumpStats">
12026 <desc>
12027 Dumps VM statistics.
12028 </desc>
12029 <param name="pattern" type="wstring" dir="in">
12030 <desc>The selection pattern. A bit similar to filename globbing.</desc>
12031 </param>
12032 </method>
12033
12034 <method name="getStats">
12035 <desc>
12036 Get the VM statistics in a XMLish format.
12037 </desc>
12038 <param name="pattern" type="wstring" dir="in">
12039 <desc>The selection pattern. A bit similar to filename globbing.</desc>
12040 </param>
12041 <param name="withDescriptions" type="boolean" dir="in">
12042 <desc>Whether to include the descriptions.</desc>
12043 </param>
12044 <param name="stats" type="wstring" dir="out">
12045 <desc>The XML document containing the statistics.</desc>
12046 </param>
12047 </method>
12048
12049 <method name="injectNMI">
12050 <desc>
12051 Inject an NMI into a running VT-x/AMD-V VM.
12052 </desc>
12053 </method>
12054
12055 <attribute name="singlestep" type="boolean">
12056 <desc>Switch for enabling singlestepping.</desc>
12057 </attribute>
12058
12059 <attribute name="recompileUser" type="boolean">
12060 <desc>Switch for forcing code recompilation for user mode code.</desc>
12061 </attribute>
12062
12063 <attribute name="recompileSupervisor" type="boolean">
12064 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
12065 </attribute>
12066
12067 <attribute name="PATMEnabled" type="boolean">
12068 <desc>Switch for enabling and disabling the PATM component.</desc>
12069 </attribute>
12070
12071 <attribute name="CSAMEnabled" type="boolean">
12072 <desc>Switch for enabling and disabling the CSAM component.</desc>
12073 </attribute>
12074
12075 <attribute name="logEnabled" type="boolean">
12076 <desc>Switch for enabling and disabling logging.</desc>
12077 </attribute>
12078
12079 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
12080 <desc>
12081 Flag indicating whether the VM is currently making use of CPU hardware
12082 virtualization extensions.
12083 </desc>
12084 </attribute>
12085
12086 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
12087 <desc>
12088 Flag indicating whether the VM is currently making use of the nested paging
12089 CPU hardware virtualization extension.
12090 </desc>
12091 </attribute>
12092
12093 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
12094 <desc>
12095 Flag indicating whether the VM is currently making use of the VPID
12096 VT-x extension.
12097 </desc>
12098 </attribute>
12099
12100 <attribute name="PAEEnabled" type="boolean" readonly="yes">
12101 <desc>
12102 Flag indicating whether the VM is currently making use of the Physical
12103 Address Extension CPU feature.
12104 </desc>
12105 </attribute>
12106
12107 <attribute name="virtualTimeRate" type="unsigned long">
12108 <desc>
12109 The rate at which the virtual time runs expressed as a percentage.
12110 The accepted range is 2% to 20000%.
12111 </desc>
12112 </attribute>
12113
12114 <!-- @todo method for setting log flags, groups and destination! -->
12115
12116 <attribute name="VM" type="unsigned long long" readonly="yes">
12117 <desc>
12118 Gets the VM handle. This is only for internal use while
12119 we carve the details of this interface.
12120 </desc>
12121 </attribute>
12122
12123 </interface>
12124
12125 <!--
12126 // IUSBController
12127 /////////////////////////////////////////////////////////////////////////
12128 -->
12129
12130 <interface
12131 name="IUSBController" extends="$unknown"
12132 uuid="6fdcccc5-abd3-4fec-9387-2ad3914fc4a8"
12133 wsmap="managed"
12134 >
12135 <attribute name="enabled" type="boolean">
12136 <desc>
12137 Flag whether the USB controller is present in the
12138 guest system. If disabled, the virtual guest hardware will
12139 not contain any USB controller. Can only be changed when
12140 the VM is powered off.
12141 </desc>
12142 </attribute>
12143
12144 <attribute name="enabledEhci" type="boolean">
12145 <desc>
12146 Flag whether the USB EHCI controller is present in the
12147 guest system. If disabled, the virtual guest hardware will
12148 not contain a USB EHCI controller. Can only be changed when
12149 the VM is powered off.
12150 </desc>
12151 </attribute>
12152
12153 <attribute name="proxyAvailable" type="boolean" readonly="yes">
12154 <desc>
12155 Flag whether there is an USB proxy available.
12156 </desc>
12157 </attribute>
12158
12159 <attribute name="USBStandard" type="unsigned short" readonly="yes">
12160 <desc>
12161 USB standard version which the controller implements.
12162 This is a BCD which means that the major version is in the
12163 high byte and minor version is in the low byte.
12164 </desc>
12165 </attribute>
12166
12167 <attribute name="deviceFilters" type="IUSBDeviceFilter" readonly="yes" safearray="yes">
12168 <desc>
12169 List of USB device filters associated with the machine.
12170
12171 If the machine is currently running, these filters are activated
12172 every time a new (supported) USB device is attached to the host
12173 computer that was not ignored by global filters
12174 (<link to="IHost::USBDeviceFilters"/>).
12175
12176 These filters are also activated when the machine is powered up.
12177 They are run against a list of all currently available USB
12178 devices (in states
12179 <link to="USBDeviceState_Available"/>,
12180 <link to="USBDeviceState_Busy"/>,
12181 <link to="USBDeviceState_Held"/>) that were not previously
12182 ignored by global filters.
12183
12184 If at least one filter matches the USB device in question, this
12185 device is automatically captured (attached to) the virtual USB
12186 controller of this machine.
12187
12188 <see>IUSBDeviceFilter, ::IUSBController</see>
12189 </desc>
12190 </attribute>
12191
12192 <method name="createDeviceFilter">
12193 <desc>
12194 Creates a new USB device filter. All attributes except
12195 the filter name are set to empty (any match),
12196 <i>active</i> is @c false (the filter is not active).
12197
12198 The created filter can then be added to the list of filters using
12199 <link to="#insertDeviceFilter"/>.
12200
12201 <result name="VBOX_E_INVALID_VM_STATE">
12202 The virtual machine is not mutable.
12203 </result>
12204
12205 <see>#deviceFilters</see>
12206 </desc>
12207 <param name="name" type="wstring" dir="in">
12208 <desc>
12209 Filter name. See <link to="IUSBDeviceFilter::name"/>
12210 for more info.
12211 </desc>
12212 </param>
12213 <param name="filter" type="IUSBDeviceFilter" dir="return">
12214 <desc>Created filter object.</desc>
12215 </param>
12216 </method>
12217
12218 <method name="insertDeviceFilter">
12219 <desc>
12220 Inserts the given USB device to the specified position
12221 in the list of filters.
12222
12223 Positions are numbered starting from <tt>0</tt>. If the specified
12224 position is equal to or greater than the number of elements in
12225 the list, the filter is added to the end of the collection.
12226
12227 <note>
12228 Duplicates are not allowed, so an attempt to insert a
12229 filter that is already in the collection, will return an
12230 error.
12231 </note>
12232
12233 <result name="VBOX_E_INVALID_VM_STATE">
12234 Virtual machine is not mutable.
12235 </result>
12236 <result name="E_INVALIDARG">
12237 USB device filter not created within this VirtualBox instance.
12238 </result>
12239 <result name="VBOX_E_INVALID_OBJECT_STATE">
12240 USB device filter already in list.
12241 </result>
12242
12243 <see>#deviceFilters</see>
12244 </desc>
12245 <param name="position" type="unsigned long" dir="in">
12246 <desc>Position to insert the filter to.</desc>
12247 </param>
12248 <param name="filter" type="IUSBDeviceFilter" dir="in">
12249 <desc>USB device filter to insert.</desc>
12250 </param>
12251 </method>
12252
12253 <method name="removeDeviceFilter">
12254 <desc>
12255 Removes a USB device filter from the specified position in the
12256 list of filters.
12257
12258 Positions are numbered starting from <tt>0</tt>. Specifying a
12259 position equal to or greater than the number of elements in
12260 the list will produce an error.
12261
12262 <see>#deviceFilters</see>
12263
12264 <result name="VBOX_E_INVALID_VM_STATE">
12265 Virtual machine is not mutable.
12266 </result>
12267 <result name="E_INVALIDARG">
12268 USB device filter list empty or invalid @a position.
12269 </result>
12270
12271 </desc>
12272 <param name="position" type="unsigned long" dir="in">
12273 <desc>Position to remove the filter from.</desc>
12274 </param>
12275 <param name="filter" type="IUSBDeviceFilter" dir="return">
12276 <desc>Removed USB device filter.</desc>
12277 </param>
12278 </method>
12279
12280 </interface>
12281
12282
12283 <!--
12284 // IUSBDevice
12285 /////////////////////////////////////////////////////////////////////////
12286 -->
12287
12288 <interface
12289 name="IUSBDevice" extends="$unknown"
12290 uuid="f8967b0b-4483-400f-92b5-8b675d98a85b"
12291 wsmap="managed"
12292 >
12293 <desc>
12294 The IUSBDevice interface represents a virtual USB device attached to the
12295 virtual machine.
12296
12297 A collection of objects implementing this interface is stored in the
12298 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
12299 attached to a running virtual machine's USB controller.
12300 </desc>
12301
12302 <attribute name="id" type="uuid" mod="string" readonly="yes">
12303 <desc>
12304 Unique USB device ID. This ID is built from #vendorId,
12305 #productId, #revision and #serialNumber.
12306 </desc>
12307 </attribute>
12308
12309 <attribute name="vendorId" type="unsigned short" readonly="yes">
12310 <desc>Vendor ID.</desc>
12311 </attribute>
12312
12313 <attribute name="productId" type="unsigned short" readonly="yes">
12314 <desc>Product ID.</desc>
12315 </attribute>
12316
12317 <attribute name="revision" type="unsigned short" readonly="yes">
12318 <desc>
12319 Product revision number. This is a packed BCD represented as
12320 unsigned short. The high byte is the integer part and the low
12321 byte is the decimal.
12322 </desc>
12323 </attribute>
12324
12325 <attribute name="manufacturer" type="wstring" readonly="yes">
12326 <desc>Manufacturer string.</desc>
12327 </attribute>
12328
12329 <attribute name="product" type="wstring" readonly="yes">
12330 <desc>Product string.</desc>
12331 </attribute>
12332
12333 <attribute name="serialNumber" type="wstring" readonly="yes">
12334 <desc>Serial number string.</desc>
12335 </attribute>
12336
12337 <attribute name="address" type="wstring" readonly="yes">
12338 <desc>Host specific address of the device.</desc>
12339 </attribute>
12340
12341 <attribute name="port" type="unsigned short" readonly="yes">
12342 <desc>
12343 Host USB port number the device is physically
12344 connected to.
12345 </desc>
12346 </attribute>
12347
12348 <attribute name="version" type="unsigned short" readonly="yes">
12349 <desc>
12350 The major USB version of the device - 1 or 2.
12351 </desc>
12352 </attribute>
12353
12354 <attribute name="portVersion" type="unsigned short" readonly="yes">
12355 <desc>
12356 The major USB version of the host USB port the device is
12357 physically connected to - 1 or 2. For devices not connected to
12358 anything this will have the same value as the version attribute.
12359 </desc>
12360 </attribute>
12361
12362 <attribute name="remote" type="boolean" readonly="yes">
12363 <desc>
12364 Whether the device is physically connected to a remote VRDP
12365 client or to a local host machine.
12366 </desc>
12367 </attribute>
12368
12369 </interface>
12370
12371
12372 <!--
12373 // IUSBDeviceFilter
12374 /////////////////////////////////////////////////////////////////////////
12375 -->
12376
12377 <interface
12378 name="IUSBDeviceFilter" extends="$unknown"
12379 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
12380 wsmap="managed"
12381 >
12382 <desc>
12383 The IUSBDeviceFilter interface represents an USB device filter used
12384 to perform actions on a group of USB devices.
12385
12386 This type of filters is used by running virtual machines to
12387 automatically capture selected USB devices once they are physically
12388 attached to the host computer.
12389
12390 A USB device is matched to the given device filter if and only if all
12391 attributes of the device match the corresponding attributes of the
12392 filter (that is, attributes are joined together using the logical AND
12393 operation). On the other hand, all together, filters in the list of
12394 filters carry the semantics of the logical OR operation. So if it is
12395 desirable to create a match like "this vendor id OR this product id",
12396 one needs to create two filters and specify "any match" (see below)
12397 for unused attributes.
12398
12399 All filter attributes used for matching are strings. Each string
12400 is an expression representing a set of values of the corresponding
12401 device attribute, that will match the given filter. Currently, the
12402 following filtering expressions are supported:
12403
12404 <ul>
12405 <li><i>Interval filters</i>. Used to specify valid intervals for
12406 integer device attributes (Vendor ID, Product ID and Revision).
12407 The format of the string is:
12408
12409 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
12410
12411 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
12412 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
12413 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
12414 is omitted before a dash (<tt>-</tt>), the minimum possible integer
12415 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
12416 possible integer is assumed.
12417 </li>
12418 <li><i>Boolean filters</i>. Used to specify acceptable values for
12419 boolean device attributes. The format of the string is:
12420
12421 <tt>true|false|yes|no|0|1</tt>
12422
12423 </li>
12424 <li><i>Exact match</i>. Used to specify a single value for the given
12425 device attribute. Any string that doesn't start with <tt>int:</tt>
12426 represents the exact match. String device attributes are compared to
12427 this string including case of symbols. Integer attributes are first
12428 converted to a string (see individual filter attributes) and then
12429 compared ignoring case.
12430
12431 </li>
12432 <li><i>Any match</i>. Any value of the corresponding device attribute
12433 will match the given filter. An empty or @c null string is
12434 used to construct this type of filtering expressions.
12435
12436 </li>
12437 </ul>
12438
12439 <note>
12440 On the Windows host platform, interval filters are not currently
12441 available. Also all string filter attributes
12442 (<link to="#manufacturer"/>, <link to="#product"/>,
12443 <link to="#serialNumber"/>) are ignored, so they behave as
12444 <i>any match</i> no matter what string expression is specified.
12445 </note>
12446
12447 <see>IUSBController::deviceFilters, IHostUSBDeviceFilter</see>
12448 </desc>
12449
12450 <attribute name="name" type="wstring">
12451 <desc>
12452 Visible name for this filter.
12453 This name is used to visually distinguish one filter from another,
12454 so it can neither be @c null nor an empty string.
12455 </desc>
12456 </attribute>
12457
12458 <attribute name="active" type="boolean">
12459 <desc>Whether this filter active or has been temporarily disabled.</desc>
12460 </attribute>
12461
12462 <attribute name="vendorId" type="wstring">
12463 <desc>
12464 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
12465 The string representation for the <i>exact matching</i>
12466 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
12467 (including leading zeroes).
12468 </desc>
12469 </attribute>
12470
12471 <attribute name="productId" type="wstring">
12472 <desc>
12473 <link to="IUSBDevice::productId">Product ID</link> filter.
12474 The string representation for the <i>exact matching</i>
12475 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
12476 (including leading zeroes).
12477 </desc>
12478 </attribute>
12479
12480 <attribute name="revision" type="wstring">
12481 <desc>
12482 <link to="IUSBDevice::productId">Product revision number</link>
12483 filter. The string representation for the <i>exact matching</i>
12484 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
12485 of the integer part of the revision, and <tt>F</tt> is the
12486 decimal digit of its fractional part (including leading and
12487 trailing zeros).
12488 Note that for interval filters, it's best to use the hexadecimal
12489 form, because the revision is stored as a 16 bit packed BCD value;
12490 so the expression <tt>int:0x0100-0x0199</tt> will match any
12491 revision from <tt>1.0</tt> to <tt>1.99</tt>.
12492 </desc>
12493 </attribute>
12494
12495 <attribute name="manufacturer" type="wstring">
12496 <desc>
12497 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
12498 </desc>
12499 </attribute>
12500
12501 <attribute name="product" type="wstring">
12502 <desc>
12503 <link to="IUSBDevice::product">Product</link> filter.
12504 </desc>
12505 </attribute>
12506
12507 <attribute name="serialNumber" type="wstring">
12508 <desc>
12509 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
12510 </desc>
12511 </attribute>
12512
12513 <attribute name="port" type="wstring">
12514 <desc>
12515 <link to="IUSBDevice::port">Host USB port</link> filter.
12516 </desc>
12517 </attribute>
12518
12519 <attribute name="remote" type="wstring">
12520 <desc>
12521 <link to="IUSBDevice::remote">Remote state</link> filter.
12522 <note>
12523 This filter makes sense only for machine USB filters,
12524 i.e. it is ignored by IHostUSBDeviceFilter objects.
12525 </note>
12526 </desc>
12527 </attribute>
12528
12529 <attribute name="maskedInterfaces" type="unsigned long">
12530 <desc>
12531 This is an advanced option for hiding one or more USB interfaces
12532 from the guest. The value is a bit mask where the bits that are set
12533 means the corresponding USB interface should be hidden, masked off
12534 if you like.
12535 This feature only works on Linux hosts.
12536 </desc>
12537 </attribute>
12538
12539 </interface>
12540
12541
12542 <!--
12543 // IHostUSBDevice
12544 /////////////////////////////////////////////////////////////////////////
12545 -->
12546
12547 <enum
12548 name="USBDeviceState"
12549 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
12550 >
12551 <desc>
12552 USB device state. This enumeration represents all possible states
12553 of the USB device physically attached to the host computer regarding
12554 its state on the host computer and availability to guest computers
12555 (all currently running virtual machines).
12556
12557 Once a supported USB device is attached to the host, global USB
12558 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
12559 either ignore the device, or put it to USBDeviceState_Held state, or do
12560 nothing. Unless the device is ignored by global filters, filters of all
12561 currently running guests (<link to="IUSBController::deviceFilters"/>) are
12562 activated that can put it to USBDeviceState_Captured state.
12563
12564 If the device was ignored by global filters, or didn't match
12565 any filters at all (including guest ones), it is handled by the host
12566 in a normal way. In this case, the device state is determined by
12567 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
12568 or USBDeviceState_Available, depending on the current device usage.
12569
12570 Besides auto-capturing based on filters, the device can be manually
12571 captured by guests (<link to="IConsole::attachUSBDevice"/>) if its
12572 state is USBDeviceState_Busy, USBDeviceState_Available or
12573 USBDeviceState_Held.
12574
12575 <note>
12576 Due to differences in USB stack implementations in Linux and Win32,
12577 states USBDeviceState_Busy and USBDeviceState_vailable are applicable
12578 only to the Linux version of the product. This also means that (<link
12579 to="IConsole::attachUSBDevice"/>) can only succeed on Win32 if the
12580 device state is USBDeviceState_Held.
12581 </note>
12582
12583 <see>IHostUSBDevice, IHostUSBDeviceFilter</see>
12584 </desc>
12585
12586 <const name="NotSupported" value="0">
12587 <desc>
12588 Not supported by the VirtualBox server, not available to guests.
12589 </desc>
12590 </const>
12591 <const name="Unavailable" value="1">
12592 <desc>
12593 Being used by the host computer exclusively,
12594 not available to guests.
12595 </desc>
12596 </const>
12597 <const name="Busy" value="2">
12598 <desc>
12599 Being used by the host computer, potentially available to guests.
12600 </desc>
12601 </const>
12602 <const name="Available" value="3">
12603 <desc>
12604 Not used by the host computer, available to guests (the host computer
12605 can also start using the device at any time).
12606 </desc>
12607 </const>
12608 <const name="Held" value="4">
12609 <desc>
12610 Held by the VirtualBox server (ignored by the host computer),
12611 available to guests.
12612 </desc>
12613 </const>
12614 <const name="Captured" value="5">
12615 <desc>
12616 Captured by one of the guest computers, not available
12617 to anybody else.
12618 </desc>
12619 </const>
12620 </enum>
12621
12622 <interface
12623 name="IHostUSBDevice" extends="IUSBDevice"
12624 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
12625 wsmap="managed"
12626 >
12627 <desc>
12628 The IHostUSBDevice interface represents a physical USB device attached
12629 to the host computer.
12630
12631 Besides properties inherited from IUSBDevice, this interface adds the
12632 <link to="#state"/> property that holds the current state of the USB
12633 device.
12634
12635 <see>IHost::USBDevices, IHost::USBDeviceFilters</see>
12636 </desc>
12637
12638 <attribute name="state" type="USBDeviceState" readonly="yes">
12639 <desc>
12640 Current state of the device.
12641 </desc>
12642 </attribute>
12643
12644 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
12645
12646 </interface>
12647
12648
12649 <!--
12650 // IHostUSBDeviceFilter
12651 /////////////////////////////////////////////////////////////////////////
12652 -->
12653
12654 <enum
12655 name="USBDeviceFilterAction"
12656 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
12657 >
12658 <desc>
12659 Actions for host USB device filters.
12660 <see>IHostUSBDeviceFilter, USBDeviceState</see>
12661 </desc>
12662
12663 <const name="Null" value="0">
12664 <desc>Null value (never used by the API).</desc>
12665 </const>
12666 <const name="Ignore" value="1">
12667 <desc>Ignore the matched USB device.</desc>
12668 </const>
12669 <const name="Hold" value="2">
12670 <desc>Hold the matched USB device.</desc>
12671 </const>
12672 </enum>
12673
12674 <interface
12675 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
12676 uuid="4cc70246-d74a-400f-8222-3900489c0374"
12677 wsmap="managed"
12678 >
12679 <desc>
12680 The IHostUSBDeviceFilter interface represents a global filter for a
12681 physical USB device used by the host computer. Used indirectly in
12682 <link to="IHost::USBDeviceFilters"/>.
12683
12684 Using filters of this type, the host computer determines the initial
12685 state of the USB device after it is physically attached to the
12686 host's USB controller.
12687
12688 <note>
12689 The <link to="#remote"/> attribute is ignored by this type of
12690 filters, because it makes sense only for
12691 <link to="IUSBController::deviceFilters">machine USB filters</link>.
12692 </note>
12693
12694 <see>IHost::USBDeviceFilters</see>
12695 </desc>
12696
12697 <attribute name="action" type="USBDeviceFilterAction">
12698 <desc>
12699 Action performed by the host when an attached USB device
12700 matches this filter.
12701 </desc>
12702 </attribute>
12703
12704 </interface>
12705
12706 <!--
12707 // IAudioAdapter
12708 /////////////////////////////////////////////////////////////////////////
12709 -->
12710
12711 <enum
12712 name="AudioDriverType"
12713 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
12714 >
12715 <desc>
12716 Host audio driver type.
12717 </desc>
12718
12719 <const name="Null" value="0">
12720 <desc>Null value, also means "dummy audio driver".</desc>
12721 </const>
12722 <const name="WinMM" value="1">
12723 <desc>Windows multimedia (Windows hosts only).</desc>
12724 </const>
12725 <const name="OSS" value="2">
12726 <desc>Open Sound System (Linux hosts only).</desc>
12727 </const>
12728 <const name="ALSA" value="3">
12729 <desc>Advanced Linux Sound Architecture (Linux hosts only).</desc>
12730 </const>
12731 <const name="DirectSound" value="4">
12732 <desc>DirectSound (Windows hosts only).</desc>
12733 </const>
12734 <const name="CoreAudio" value="5">
12735 <desc>CoreAudio (Mac hosts only).</desc>
12736 </const>
12737 <const name="MMPM" value="6">
12738 <desc>Reserved for historical reasons.</desc>
12739 </const>
12740 <const name="Pulse" value="7">
12741 <desc>PulseAudio (Linux hosts only).</desc>
12742 </const>
12743 <const name="SolAudio" value="8">
12744 <desc>Solaris audio (Solaris hosts only).</desc>
12745 </const>
12746 </enum>
12747
12748 <enum
12749 name="AudioControllerType"
12750 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
12751 >
12752 <desc>
12753 Virtual audio controller type.
12754 </desc>
12755
12756 <const name="AC97" value="0"/>
12757 <const name="SB16" value="1"/>
12758 </enum>
12759
12760 <interface
12761 name="IAudioAdapter" extends="$unknown"
12762 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
12763 wsmap="managed"
12764 >
12765 <desc>
12766 The IAudioAdapter interface represents the virtual audio adapter of
12767 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
12768 </desc>
12769 <attribute name="enabled" type="boolean">
12770 <desc>
12771 Flag whether the audio adapter is present in the
12772 guest system. If disabled, the virtual guest hardware will
12773 not contain any audio adapter. Can only be changed when
12774 the VM is not running.
12775 </desc>
12776 </attribute>
12777 <attribute name="audioController" type="AudioControllerType">
12778 <desc>
12779 The audio hardware we emulate.
12780 </desc>
12781 </attribute>
12782 <attribute name="audioDriver" type="AudioDriverType">
12783 <desc>
12784 Audio driver the adapter is connected to. This setting
12785 can only be changed when the VM is not running.
12786 </desc>
12787 </attribute>
12788 </interface>
12789
12790 <!--
12791 // IVRDPServer
12792 /////////////////////////////////////////////////////////////////////////
12793 -->
12794
12795 <enum
12796 name="VRDPAuthType"
12797 uuid="3d91887a-b67f-4b33-85bf-2da7ab1ea83a"
12798 >
12799 <desc>
12800 VRDP authentication type.
12801 </desc>
12802
12803 <const name="Null" value="0">
12804 <desc>Null value, also means "no authentication".</desc>
12805 </const>
12806 <const name="External" value="1"/>
12807 <const name="Guest" value="2"/>
12808 </enum>
12809
12810 <interface
12811 name="IVRDPServer" extends="$unknown"
12812 uuid="7aeeb530-0b08-41fe-835d-9be9ec1dbe5c"
12813 wsmap="managed"
12814 >
12815 <attribute name="enabled" type="boolean">
12816 <desc>VRDP server status.</desc>
12817 </attribute>
12818
12819 <attribute name="ports" type="wstring">
12820 <desc>
12821 VRDP server port numbers. The server will try to bind to one of free ports from the list.
12822 <note>
12823 This is a string of comma separated TCP port numbers or port number ranges.
12824 Example <tt>5000,5010-5012,5015</tt>
12825 </note>
12826 </desc>
12827 </attribute>
12828
12829 <attribute name="netAddress" type="wstring">
12830 <desc>VRDP server address.</desc>
12831 </attribute>
12832
12833 <attribute name="authType" type="VRDPAuthType">
12834 <desc>VRDP authentication method.</desc>
12835 </attribute>
12836
12837 <attribute name="authTimeout" type="unsigned long">
12838 <desc>Timeout for guest authentication. Milliseconds.</desc>
12839 </attribute>
12840
12841 <attribute name="allowMultiConnection" type="boolean">
12842 <desc>
12843 Flag whether multiple simultaneous connections to the VM are permitted.
12844 Note that this will be replaced by a more powerful mechanism in the future.
12845 </desc>
12846 </attribute>
12847
12848 <attribute name="reuseSingleConnection" type="boolean">
12849 <desc>
12850 Flag whether the existing connection must be dropped and a new connection
12851 must be established by the VRDP server, when a new client connects in single
12852 connection mode.
12853 </desc>
12854 </attribute>
12855
12856 <attribute name="videoChannel" type="boolean">
12857 <desc>
12858 Flag whether RDP video channel is supported.
12859 </desc>
12860 </attribute>
12861
12862 <attribute name="videoChannelQuality" type="unsigned long">
12863 <desc>
12864 Image quality in percents.
12865 </desc>
12866 </attribute>
12867
12868 </interface>
12869
12870
12871 <!--
12872 // ISharedFolder
12873 /////////////////////////////////////////////////////////////////////////
12874 -->
12875
12876 <interface
12877 name="ISharedFolder" extends="$unknown"
12878 uuid="64637bb2-9e17-471c-b8f3-f8968dd9884e"
12879 wsmap="struct"
12880 >
12881 <desc>
12882 The ISharedFolder interface represents a folder in the host computer's
12883 file system accessible from the guest OS running inside a virtual
12884 machine using an associated logical name.
12885
12886 There are three types of shared folders:
12887 <ul>
12888 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
12889 folders available to all virtual machines.</li>
12890 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
12891 VM-specific shared folders available to the given virtual machine at
12892 startup.</li>
12893 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
12894 VM-specific shared folders created in the session context (for
12895 example, when the virtual machine is running) and automatically
12896 discarded when the session is closed (the VM is powered off).</li>
12897 </ul>
12898
12899 Logical names of shared folders must be unique within the given scope
12900 (global, permanent or transient). However, they do not need to be unique
12901 across scopes. In this case, the definition of the shared folder in a
12902 more specific scope takes precedence over definitions in all other
12903 scopes. The order of precedence is (more specific to more general):
12904 <ol>
12905 <li>Transient definitions</li>
12906 <li>Permanent definitions</li>
12907 <li>Global definitions</li>
12908 </ol>
12909
12910 For example, if MyMachine has a shared folder named
12911 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
12912 transient shared folder named <tt>C_DRIVE</tt> (that points
12913 to <tt>C:\\\\WINDOWS</tt>) will change the definition
12914 of <tt>C_DRIVE</tt> in the guest OS so
12915 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
12916 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
12917 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
12918 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
12919 to <tt>C:\\</tt> if it still exists.
12920
12921 Note that permanent and transient shared folders of different machines
12922 are in different name spaces, so they don't overlap and don't need to
12923 have unique logical names.
12924
12925 <note>
12926 Global shared folders are not implemented in the current version of the
12927 product.
12928 </note>
12929 </desc>
12930
12931 <attribute name="name" type="wstring" readonly="yes">
12932 <desc>Logical name of the shared folder.</desc>
12933 </attribute>
12934
12935 <attribute name="hostPath" type="wstring" readonly="yes">
12936 <desc>Full path to the shared folder in the host file system.</desc>
12937 </attribute>
12938
12939 <attribute name="accessible" type="boolean" readonly="yes">
12940 <desc>
12941 Whether the folder defined by the host path is currently
12942 accessible or not.
12943 For example, the folder can be unaccessible if it is placed
12944 on the network share that is not available by the time
12945 this property is read.
12946 </desc>
12947 </attribute>
12948
12949 <attribute name="writable" type="boolean" readonly="yes">
12950 <desc>
12951 Whether the folder defined by the host path is writable or
12952 not.
12953 </desc>
12954 </attribute>
12955
12956 <attribute name="lastAccessError" type="wstring" readonly="yes">
12957 <desc>
12958 Text message that represents the result of the last accessibility
12959 check.
12960
12961 Accessibility checks are performed each time the <link to="#accessible"/>
12962 attribute is read. An empty string is returned if the last
12963 accessibility check was successful. A non-empty string indicates a
12964 failure and should normally describe a reason of the failure (for
12965 example, a file read error).
12966 </desc>
12967 </attribute>
12968
12969 </interface>
12970
12971 <!--
12972 // ISession
12973 /////////////////////////////////////////////////////////////////////////
12974 -->
12975
12976 <interface
12977 name="IInternalSessionControl" extends="$unknown"
12978 uuid="f9aac6d0-41b3-46b7-bea4-6370b4036de6"
12979 internal="yes"
12980 wsmap="suppress"
12981 >
12982 <method name="getPID">
12983 <desc>PID of the process that has created this Session object.
12984 </desc>
12985 <param name="pid" type="unsigned long" dir="return"/>
12986 </method>
12987
12988 <method name="getRemoteConsole">
12989 <desc>
12990 Returns the console object suitable for remote control.
12991
12992 <result name="VBOX_E_INVALID_VM_STATE">
12993 Session state prevents operation.
12994 </result>
12995 <result name="VBOX_E_INVALID_OBJECT_STATE">
12996 Session type prevents operation.
12997 </result>
12998
12999 </desc>
13000 <param name="console" type="IConsole" dir="return"/>
13001 </method>
13002
13003 <method name="assignMachine">
13004 <desc>
13005 Assigns the machine object associated with this direct-type
13006 session or informs the session that it will be a remote one
13007 (if @a machine == @c null).
13008
13009 <result name="VBOX_E_INVALID_VM_STATE">
13010 Session state prevents operation.
13011 </result>
13012 <result name="VBOX_E_INVALID_OBJECT_STATE">
13013 Session type prevents operation.
13014 </result>
13015
13016 </desc>
13017 <param name="machine" type="IMachine" dir="in"/>
13018 </method>
13019
13020 <method name="assignRemoteMachine">
13021 <desc>
13022 Assigns the machine and the (remote) console object associated with
13023 this remote-type session.
13024
13025 <result name="VBOX_E_INVALID_VM_STATE">
13026 Session state prevents operation.
13027 </result>
13028
13029 </desc>
13030 <param name="machine" type="IMachine" dir="in"/>
13031 <param name="console" type="IConsole" dir="in"/>
13032 </method>
13033
13034 <method name="updateMachineState">
13035 <desc>
13036 Updates the machine state in the VM process.
13037 Must be called only in certain cases
13038 (see the method implementation).
13039
13040 <result name="VBOX_E_INVALID_VM_STATE">
13041 Session state prevents operation.
13042 </result>
13043 <result name="VBOX_E_INVALID_OBJECT_STATE">
13044 Session type prevents operation.
13045 </result>
13046
13047 </desc>
13048 <param name="aMachineState" type="MachineState" dir="in"/>
13049 </method>
13050
13051 <method name="uninitialize">
13052 <desc>
13053 Uninitializes (closes) this session. Used by VirtualBox to close
13054 the corresponding remote session when the direct session dies
13055 or gets closed.
13056
13057 <result name="VBOX_E_INVALID_VM_STATE">
13058 Session state prevents operation.
13059 </result>
13060
13061 </desc>
13062 </method>
13063
13064 <method name="onNetworkAdapterChange">
13065 <desc>
13066 Triggered when settings of a network adapter of the
13067 associated virtual machine have changed.
13068
13069 <result name="VBOX_E_INVALID_VM_STATE">
13070 Session state prevents operation.
13071 </result>
13072 <result name="VBOX_E_INVALID_OBJECT_STATE">
13073 Session type prevents operation.
13074 </result>
13075
13076 </desc>
13077 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
13078 <param name="changeAdapter" type="boolean" dir="in"/>
13079 </method>
13080
13081 <method name="onSerialPortChange">
13082 <desc>
13083 Triggered when settings of a serial port of the
13084 associated virtual machine have changed.
13085
13086 <result name="VBOX_E_INVALID_VM_STATE">
13087 Session state prevents operation.
13088 </result>
13089 <result name="VBOX_E_INVALID_OBJECT_STATE">
13090 Session type prevents operation.
13091 </result>
13092
13093 </desc>
13094 <param name="serialPort" type="ISerialPort" dir="in"/>
13095 </method>
13096
13097 <method name="onParallelPortChange">
13098 <desc>
13099 Triggered when settings of a parallel port of the
13100 associated virtual machine have changed.
13101
13102 <result name="VBOX_E_INVALID_VM_STATE">
13103 Session state prevents operation.
13104 </result>
13105 <result name="VBOX_E_INVALID_OBJECT_STATE">
13106 Session type prevents operation.
13107 </result>
13108
13109 </desc>
13110 <param name="parallelPort" type="IParallelPort" dir="in"/>
13111 </method>
13112
13113 <method name="onStorageControllerChange">
13114 <desc>
13115 Triggered when settings of a storage controller of the
13116 associated virtual machine have changed.
13117
13118 <result name="VBOX_E_INVALID_VM_STATE">
13119 Session state prevents operation.
13120 </result>
13121 <result name="VBOX_E_INVALID_OBJECT_STATE">
13122 Session type prevents operation.
13123 </result>
13124
13125 </desc>
13126 </method>
13127
13128 <method name="onMediumChange">
13129 <desc>
13130 Triggered when attached media of the
13131 associated virtual machine have changed.
13132
13133 <result name="VBOX_E_INVALID_VM_STATE">
13134 Session state prevents operation.
13135 </result>
13136 <result name="VBOX_E_INVALID_OBJECT_STATE">
13137 Session type prevents operation.
13138 </result>
13139
13140 </desc>
13141
13142 <param name="mediumAttachment" type="IMediumAttachment" dir="in"/>
13143 <param name="force" type="boolean" dir="in"/>
13144 </method>
13145
13146 <method name="onCPUChange">
13147 <desc>
13148 Notification when a CPU changes.
13149 </desc>
13150 <param name="cpu" type="unsigned long" dir="in">
13151 <desc>The CPU which changed</desc>
13152 </param>
13153 <param name="add" type="boolean" dir="in">
13154 <desc>Flag whether the CPU was added or removed</desc>
13155 </param>
13156 </method>
13157
13158 <method name="onVRDPServerChange">
13159 <desc>
13160 Triggered when settings of the VRDP server object of the
13161 associated virtual machine have changed.
13162
13163 <result name="VBOX_E_INVALID_VM_STATE">
13164 Session state prevents operation.
13165 </result>
13166 <result name="VBOX_E_INVALID_OBJECT_STATE">
13167 Session type prevents operation.
13168 </result>
13169
13170 </desc>
13171 </method>
13172
13173 <method name="onUSBControllerChange">
13174 <desc>
13175 Triggered when settings of the USB controller object of the
13176 associated virtual machine have changed.
13177
13178 <result name="VBOX_E_INVALID_VM_STATE">
13179 Session state prevents operation.
13180 </result>
13181 <result name="VBOX_E_INVALID_OBJECT_STATE">
13182 Session type prevents operation.
13183 </result>
13184
13185 </desc>
13186 </method>
13187
13188 <method name="onSharedFolderChange">
13189 <desc>
13190 Triggered when a permanent (global or machine) shared folder has been
13191 created or removed.
13192 <note>
13193 We don't pass shared folder parameters in this notification because
13194 the order in which parallel notifications are delivered is not defined,
13195 therefore it could happen that these parameters were outdated by the
13196 time of processing this notification.
13197 </note>
13198
13199 <result name="VBOX_E_INVALID_VM_STATE">
13200 Session state prevents operation.
13201 </result>
13202 <result name="VBOX_E_INVALID_OBJECT_STATE">
13203 Session type prevents operation.
13204 </result>
13205
13206 </desc>
13207 <param name="global" type="boolean" dir="in"/>
13208 </method>
13209
13210 <method name="onUSBDeviceAttach">
13211 <desc>
13212 Triggered when a request to capture a USB device (as a result
13213 of matched USB filters or direct call to
13214 <link to="IConsole::attachUSBDevice"/>) has completed.
13215 A @c null @a error object means success, otherwise it
13216 describes a failure.
13217
13218 <result name="VBOX_E_INVALID_VM_STATE">
13219 Session state prevents operation.
13220 </result>
13221 <result name="VBOX_E_INVALID_OBJECT_STATE">
13222 Session type prevents operation.
13223 </result>
13224
13225 </desc>
13226 <param name="device" type="IUSBDevice" dir="in"/>
13227 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
13228 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
13229 </method>
13230
13231 <method name="onUSBDeviceDetach">
13232 <desc>
13233 Triggered when a request to release the USB device (as a result
13234 of machine termination or direct call to
13235 <link to="IConsole::detachUSBDevice"/>) has completed.
13236 A @c null @a error object means success, otherwise it
13237 describes a failure.
13238
13239 <result name="VBOX_E_INVALID_VM_STATE">
13240 Session state prevents operation.
13241 </result>
13242 <result name="VBOX_E_INVALID_OBJECT_STATE">
13243 Session type prevents operation.
13244 </result>
13245
13246 </desc>
13247 <param name="id" type="uuid" mod="string" dir="in"/>
13248 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
13249 </method>
13250
13251 <method name="onShowWindow">
13252 <desc>
13253 Called by <link to="IMachine::canShowConsoleWindow"/> and by
13254 <link to="IMachine::showConsoleWindow"/> in order to notify
13255 console callbacks
13256 <link to="IConsoleCallback::onCanShowWindow"/>
13257 and <link to="IConsoleCallback::onShowWindow"/>.
13258
13259 <result name="VBOX_E_INVALID_OBJECT_STATE">
13260 Session type prevents operation.
13261 </result>
13262
13263 </desc>
13264 <param name="check" type="boolean" dir="in"/>
13265 <param name="canShow" type="boolean" dir="out"/>
13266 <param name="winId" type="unsigned long long" dir="out"/>
13267 </method>
13268
13269 <method name="accessGuestProperty">
13270 <desc>
13271 Called by <link to="IMachine::getGuestProperty"/> and by
13272 <link to="IMachine::setGuestProperty"/> in order to read and
13273 modify guest properties.
13274
13275 <result name="VBOX_E_INVALID_VM_STATE">
13276 Machine session is not open.
13277 </result>
13278 <result name="VBOX_E_INVALID_OBJECT_STATE">
13279 Session type is not direct.
13280 </result>
13281
13282 </desc>
13283 <param name="name" type="wstring" dir="in"/>
13284 <param name="value" type="wstring" dir="in"/>
13285 <param name="flags" type="wstring" dir="in"/>
13286 <param name="isSetter" type="boolean" dir="in"/>
13287 <param name="retValue" type="wstring" dir="out"/>
13288 <param name="retTimestamp" type="unsigned long long" dir="out"/>
13289 <param name="retFlags" type="wstring" dir="out"/>
13290 </method>
13291
13292 <method name="enumerateGuestProperties">
13293 <desc>
13294 Return a list of the guest properties matching a set of patterns along
13295 with their values, time stamps and flags.
13296
13297 <result name="VBOX_E_INVALID_VM_STATE">
13298 Machine session is not open.
13299 </result>
13300 <result name="VBOX_E_INVALID_OBJECT_STATE">
13301 Session type is not direct.
13302 </result>
13303
13304 </desc>
13305 <param name="patterns" type="wstring" dir="in">
13306 <desc>
13307 The patterns to match the properties against as a comma-separated
13308 string. If this is empty, all properties currently set will be
13309 returned.
13310 </desc>
13311 </param>
13312 <param name="key" type="wstring" dir="out" safearray="yes">
13313 <desc>
13314 The key names of the properties returned.
13315 </desc>
13316 </param>
13317 <param name="value" type="wstring" dir="out" safearray="yes">
13318 <desc>
13319 The values of the properties returned. The array entries match the
13320 corresponding entries in the @a key array.
13321 </desc>
13322 </param>
13323 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
13324 <desc>
13325 The time stamps of the properties returned. The array entries match
13326 the corresponding entries in the @a key array.
13327 </desc>
13328 </param>
13329 <param name="flags" type="wstring" dir="out" safearray="yes">
13330 <desc>
13331 The flags of the properties returned. The array entries match the
13332 corresponding entries in the @a key array.
13333 </desc>
13334 </param>
13335 </method>
13336
13337 </interface>
13338
13339 <interface
13340 name="ISession" extends="$unknown"
13341 uuid="12F4DCDB-12B2-4EC1-B7CD-DDD9F6C5BF4D"
13342 wsmap="managed"
13343 >
13344 <desc>
13345 The ISession interface represents a serialization primitive for virtual
13346 machines.
13347
13348 With VirtualBox, every time one wishes to manipulate a virtual machine
13349 (e.g. change its settings or start execution), a session object is
13350 required. Such an object must be passed to one of the session methods
13351 that open the given session, which then initiates the machine manipulation.
13352
13353 A session serves several purposes: it identifies to the inter-process VirtualBox
13354 code which process is currently working with the virtual machine, and it ensures
13355 that there are no incompatible requests from several processes for the
13356 same virtual machine. Session objects can therefore be thought of as mutex
13357 semaphores that lock virtual machines to prevent conflicting accesses from
13358 several processes.
13359
13360 How sessions objects are used depends on whether you use the Main API
13361 via COM or via the webservice:
13362
13363 <ul>
13364 <li>When using the COM API directly, an object of the Session class from the
13365 VirtualBox type library needs to be created. In regular COM C++ client code,
13366 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
13367 This object will then act as a local session object in further calls to open
13368 a session.
13369 </li>
13370
13371 <li>In the webservice, the session manager (IWebsessionManager) instead creates
13372 one session object automatically when <link to="IWebsessionManager::logon" />
13373 is called. A managed object reference to that session object can be retrieved by
13374 calling <link to="IWebsessionManager::getSessionObject" />. This session object
13375 reference can then be used to open sessions.
13376 </li>
13377 </ul>
13378
13379 Sessions are mainly used in two variations:
13380
13381 <ul>
13382 <li>
13383 To start a virtual machine in a separate process, one would call
13384 <link to="IVirtualBox::openRemoteSession"/>, which requires a session
13385 object as its first parameter. This session then identifies the caller
13386 and lets him control the started machine (for example, pause machine
13387 execution or power it down) as well as be notified about machine
13388 execution state changes.
13389 </li>
13390
13391 <li>To alter machine settings, or to start machine execution within the
13392 current process, one needs to open a direct session for the machine first by
13393 calling <link to="IVirtualBox::openSession"/>. While a direct session
13394 is open within one process, no any other process may open another direct
13395 session for the same machine. This prevents the machine from being changed
13396 by other processes while it is running or while the machine is being configured.
13397 </li>
13398 </ul>
13399
13400 One also can attach to an existing direct session already opened by
13401 another process (for example, in order to send a control request to the
13402 virtual machine such as the pause or the reset request). This is done by
13403 calling <link to="IVirtualBox::openExistingSession"/>.
13404
13405 <note>
13406 Unless you are trying to write a new VirtualBox front-end that
13407 performs direct machine execution (like the VirtualBox or VBoxSDL
13408 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
13409 session opened by <link to="IVirtualBox::openSession"/> and use this
13410 session only to change virtual machine settings. If you simply want to
13411 start virtual machine execution using one of the existing front-ends
13412 (for example the VirtualBox GUI or headless server), simply use
13413 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
13414 will power up the machine automatically for you.
13415 </note>
13416 </desc>
13417
13418 <attribute name="state" type="SessionState" readonly="yes">
13419 <desc>Current state of this session.</desc>
13420 </attribute>
13421
13422 <attribute name="type" type="SessionType" readonly="yes">
13423 <desc>
13424 Type of this session. The value of this attribute is valid only
13425 if the session is currently open (i.e. its #state is
13426 SessionType_SessionOpen), otherwise an error will be returned.
13427 </desc>
13428 </attribute>
13429
13430 <attribute name="machine" type="IMachine" readonly="yes">
13431 <desc>Machine object associated with this session.</desc>
13432 </attribute>
13433
13434 <attribute name="console" type="IConsole" readonly="yes">
13435 <desc>Console object associated with this session.</desc>
13436 </attribute>
13437
13438 <method name="close">
13439 <desc>
13440 Closes a session that was previously opened.
13441
13442 It is recommended that every time an "open session" method (such as
13443 <link to="IVirtualBox::openRemoteSession" /> or
13444 <link to="IVirtualBox::openSession" />) has been called to
13445 manipulate a virtual machine, the caller invoke
13446 ISession::close() when it's done doing so. Since sessions are
13447 serialization primitives much like ordinary mutexes, they are
13448 best used the same way: for each "open" call, there should be
13449 a matching "close" call, even when errors occur.
13450
13451 Otherwise, if a direct session for a machine opened with
13452 <link to="IVirtualBox::openSession"/> is not explicitly closed
13453 when the application terminates, the state of the machine will
13454 be set to <link to="MachineState_Aborted" /> on the server.
13455
13456 Generally, it is recommended to close all open sessions explicitly
13457 before terminating the application (regardless of the reason for
13458 the termination).
13459
13460 <note>
13461 Do not expect the session state (<link to="ISession::state" />
13462 to return to "Closed" immediately after you invoke
13463 ISession::close(), particularly if you have started a remote
13464 session to execute the VM in a new process. The session state will
13465 automatically return to "Closed" once the VM is no longer executing,
13466 which can of course take a very long time.
13467 </note>
13468
13469 <result name="E_UNEXPECTED">
13470 Session is not open.
13471 </result>
13472
13473 </desc>
13474 </method>
13475
13476 </interface>
13477
13478 <!--
13479 // IStorageController
13480 /////////////////////////////////////////////////////////////////////////
13481 -->
13482
13483 <enum
13484 name="StorageBus"
13485 uuid="eee67ab3-668d-4ef5-91e0-7025fe4a0d7a"
13486 >
13487 <desc>
13488 The bus type of the storage controller (IDE, SATA, SCSI or Floppy);
13489 see <link to="IStorageController::bus" />.
13490 </desc>
13491 <const name="Null" value="0">
13492 <desc>@c null value. Never used by the API.</desc>
13493 </const>
13494 <const name="IDE" value="1"/>
13495 <const name="SATA" value="2"/>
13496 <const name="SCSI" value="3"/>
13497 <const name="Floppy" value="4"/>
13498 <const name="SAS" value="5"/>
13499 </enum>
13500
13501 <enum
13502 name="StorageControllerType"
13503 uuid="8a412b8a-f43e-4456-bd37-b474f0879a58"
13504 >
13505 <desc>
13506 The exact variant of storage controller hardware presented
13507 to the guest; see <link to="IStorageController::controllerType" />.
13508 </desc>
13509
13510 <const name="Null" value="0">
13511 <desc>@c null value. Never used by the API.</desc>
13512 </const>
13513 <const name="LsiLogic" value="1">
13514 <desc>A SCSI controller of the LsiLogic variant.</desc>
13515 </const>
13516 <const name="BusLogic" value="2">
13517 <desc>A SCSI controller of the BusLogic variant.</desc>
13518 </const>
13519 <const name="IntelAhci" value="3">
13520 <desc>An Intel AHCI SATA controller; this is the only variant for SATA.</desc>
13521 </const>
13522 <const name="PIIX3" value="4">
13523 <desc>An IDE controller of the PIIX3 variant.</desc>
13524 </const>
13525 <const name="PIIX4" value="5">
13526 <desc>An IDE controller of the PIIX4 variant.</desc>
13527 </const>
13528 <const name="ICH6" value="6">
13529 <desc>An IDE controller of the ICH6 variant.</desc>
13530 </const>
13531 <const name="I82078" value="7">
13532 <desc>A floppy disk controller; this is the only variant for floppy drives.</desc>
13533 </const>
13534 <const name="LsiLogicSas" value="8">
13535 <desc>A variant of the LsiLogic controller using SAS.</desc>
13536 </const>
13537 </enum>
13538
13539 <interface
13540 name="IStorageController" extends="$unknown"
13541 uuid="7635f4ec-8a28-44b5-9223-315a87b710fb"
13542 wsmap="managed"
13543 >
13544 <desc>
13545 Represents a storage controller that is attached to a virtual machine
13546 (<link to="IMachine" />). Just as drives (hard disks, DVDs, FDs) are
13547 attached to storage controllers in a real computer, virtual drives
13548 (represented by <link to="IMediumAttachment" />) are attached to virtual
13549 storage controllers, represented by this interface.
13550
13551 As opposed to physical hardware, VirtualBox has a very generic concept
13552 of a storage controller, and for purposes of the Main API, all virtual
13553 storage is attached to virtual machines via instances of this interface.
13554 There are four types of such virtual storage controllers: IDE, SCSI, SATA
13555 and Floppy (see <link to="#bus" />). Depending on which of these four is
13556 used, certain sub-types may be available and can be selected in
13557 <link to="#controllerType" />.
13558
13559 Depending on these settings, the guest operating system might see
13560 significantly different virtual hardware.
13561 </desc>
13562
13563 <attribute name="name" type="wstring" readonly="yes">
13564 <desc>
13565 Name of the storage controller, as originally specified with
13566 <link to="IMachine::addStorageController" />. This then uniquely
13567 identifies this controller with other method calls such as
13568 <link to="IMachine::attachDevice" /> and <link to="IMachine::mountMedium" />.
13569 </desc>
13570 </attribute>
13571
13572 <attribute name="maxDevicesPerPortCount" type="unsigned long" readonly="yes">
13573 <desc>
13574 Maximum number of devices which can be attached to one port.
13575 </desc>
13576 </attribute>
13577
13578 <attribute name="minPortCount" type="unsigned long" readonly="yes">
13579 <desc>
13580 Minimum number of ports that <link to="IStorageController::portCount"/> can be set to.
13581 </desc>
13582 </attribute>
13583
13584 <attribute name="maxPortCount" type="unsigned long" readonly="yes">
13585 <desc>
13586 Maximum number of ports that <link to="IStorageController::portCount"/> can be set to.
13587 </desc>
13588 </attribute>
13589
13590 <attribute name="instance" type="unsigned long">
13591 <desc>
13592 The instance number of the device in the running VM.
13593 </desc>
13594 </attribute>
13595
13596 <attribute name="portCount" type="unsigned long">
13597 <desc>
13598 The number of currently usable ports on the controller.
13599 The minimum and maximum number of ports for one controller are
13600 stored in <link to="IStorageController::minPortCount"/>
13601 and <link to="IStorageController::maxPortCount"/>.
13602 </desc>
13603 </attribute>
13604
13605 <attribute name="bus" type="StorageBus" readonly="yes">
13606 <desc>
13607 The bus type of the storage controller (IDE, SATA, SCSI or Floppy).
13608 </desc>
13609 </attribute>
13610
13611 <attribute name="controllerType" type="StorageControllerType">
13612 <desc>
13613 The exact variant of storage controller hardware presented
13614 to the guest.
13615 Depending on this value, VirtualBox will provide a different
13616 virtual storage controller hardware to the guest.
13617 For SATA and floppy controllers, only one variant is available,
13618 but for IDE and SCSI, there are several.
13619
13620 For SCSI controllers, the default type is LsiLogic.
13621 </desc>
13622 </attribute>
13623
13624 <attribute name="ioBackend" type="IoBackendType">
13625 <desc>
13626 The I/O backend to use for the given storage controller.
13627 </desc>
13628 </attribute>
13629
13630 <method name="getIDEEmulationPort">
13631 <desc>
13632 Gets the corresponding port number which is emulated as an IDE device.
13633 Works only with SATA controllers.
13634
13635 <result name="E_INVALIDARG">
13636 The @a devicePosition is not in the range 0 to 3.
13637 </result>
13638 <result name="E_NOTIMPL">
13639 The storage controller type is not SATAIntelAhci.
13640 </result>
13641
13642 </desc>
13643 <param name="devicePosition" type="long" dir="in"/>
13644 <param name="portNumber" type="long" dir="return"/>
13645 </method>
13646
13647 <method name="setIDEEmulationPort">
13648 <desc>
13649 Sets the port number which is emulated as an IDE device.
13650 Works only with SATA controllers.
13651
13652 <result name="E_INVALIDARG">
13653 The @a devicePosition is not in the range 0 to 3 or the
13654 @a portNumber is not in the range 0 to 29.
13655 </result>
13656 <result name="E_NOTIMPL">
13657 The storage controller type is not SATAIntelAhci.
13658 </result>
13659
13660 </desc>
13661 <param name="devicePosition" type="long" dir="in"/>
13662 <param name="portNumber" type="long" dir="in"/>
13663 </method>
13664
13665 </interface>
13666
13667<if target="wsdl">
13668
13669 <!--
13670 // IManagedObjectRef
13671 /////////////////////////////////////////////////////////////////////////
13672 -->
13673
13674 <interface
13675 name="IManagedObjectRef" extends="$unknown"
13676 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
13677 internal="yes"
13678 wsmap="managed"
13679 wscpp="hardcoded"
13680 >
13681 <desc>
13682 Managed object reference.
13683
13684 Only within the webservice, a managed object reference (which is really
13685 an opaque number) allows a webservice client to address an object
13686 that lives in the address space of the webservice server.
13687
13688 Behind each managed object reference, there is a COM object that lives
13689 in the webservice server's address space. The COM object is not freed
13690 until the managed object reference is released, either by an explicit
13691 call to <link to="IManagedObjectRef::release" /> or by logging off from
13692 the webservice (<link to="IWebsessionManager::logoff" />), which releases
13693 all objects created during the webservice session.
13694
13695 Whenever a method call of the VirtualBox API returns a COM object, the
13696 webservice representation of that method will instead return a
13697 managed object reference, which can then be used to invoke methods
13698 on that object.
13699 </desc>
13700
13701 <method name="getInterfaceName">
13702 <desc>
13703 Returns the name of the interface that this managed object represents,
13704 for example, "IMachine", as a string.
13705 </desc>
13706 <param name="return" type="wstring" dir="return"/>
13707 </method>
13708
13709 <method name="release">
13710 <desc>
13711 Releases this managed object reference and frees the resources that
13712 were allocated for it in the webservice server process. After calling
13713 this method, the identifier of the reference can no longer be used.
13714 </desc>
13715 </method>
13716
13717 </interface>
13718
13719 <!--
13720 // IWebsessionManager
13721 /////////////////////////////////////////////////////////////////////////
13722 -->
13723
13724 <interface
13725 name="IWebsessionManager" extends="$unknown"
13726 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
13727 internal="yes"
13728 wsmap="global"
13729 wscpp="hardcoded"
13730 >
13731 <desc>
13732 Websession manager. This provides essential services
13733 to webservice clients.
13734 </desc>
13735 <method name="logon">
13736 <desc>
13737 Logs a new client onto the webservice and returns a managed object reference to
13738 the IVirtualBox instance, which the client can then use as a basis to further
13739 queries, since all calls to the VirtualBox API are based on the IVirtualBox
13740 interface, in one way or the other.
13741 </desc>
13742 <param name="username" type="wstring" dir="in"/>
13743 <param name="password" type="wstring" dir="in"/>
13744 <param name="return" type="IVirtualBox" dir="return"/>
13745 </method>
13746
13747 <method name="getSessionObject">
13748 <desc>
13749 Returns a managed object reference to the internal ISession object that was created
13750 for this web service session when the client logged on.
13751
13752 <see>ISession</see>
13753 </desc>
13754 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13755 <param name="return" type="ISession" dir="return"/>
13756 </method>
13757
13758 <method name="logoff">
13759 <desc>
13760 Logs off the client who has previously logged on with <link to="IWebsessionManager::logoff" />
13761 and destroys all resources associated with the session (most importantly, all
13762 managed objects created in the server while the session was active).
13763 </desc>
13764 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13765 </method>
13766
13767 </interface>
13768
13769</if>
13770
13771 <!--
13772 // IPerformanceCollector & friends
13773 /////////////////////////////////////////////////////////////////////////
13774 -->
13775
13776 <interface
13777 name="IPerformanceMetric" extends="$unknown"
13778 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
13779 >
13780 <desc>
13781 The IPerformanceMetric interface represents parameters of the given
13782 performance metric.
13783 </desc>
13784
13785 <attribute name="metricName" type="wstring" readonly="yes">
13786 <desc>
13787 Name of the metric.
13788 </desc>
13789 </attribute>
13790
13791 <attribute name="object" type="$unknown" readonly="yes">
13792 <desc>
13793 Object this metric belongs to.
13794 </desc>
13795 </attribute>
13796
13797 <attribute name="description" type="wstring" readonly="yes">
13798 <desc>
13799 Textual description of the metric.
13800 </desc>
13801 </attribute>
13802
13803 <attribute name="period" type="unsigned long" readonly="yes">
13804 <desc>
13805 Time interval between samples, measured in seconds.
13806 </desc>
13807 </attribute>
13808
13809 <attribute name="count" type="unsigned long" readonly="yes">
13810 <desc>
13811 Number of recent samples retained by the performance collector for this
13812 metric.
13813
13814 When the collected sample count exceeds this number, older samples
13815 are discarded.
13816 </desc>
13817 </attribute>
13818
13819 <attribute name="unit" type="wstring" readonly="yes">
13820 <desc>
13821 Unit of measurement.
13822 </desc>
13823 </attribute>
13824
13825 <attribute name="minimumValue" type="long" readonly="yes">
13826 <desc>
13827 Minimum possible value of this metric.
13828 </desc>
13829 </attribute>
13830
13831 <attribute name="maximumValue" type="long" readonly="yes">
13832 <desc>
13833 Maximum possible value of this metric.
13834 </desc>
13835 </attribute>
13836 </interface>
13837
13838 <interface
13839 name="IPerformanceCollector" extends="$unknown"
13840 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
13841 wsmap="managed"
13842 >
13843 <desc>
13844 The IPerformanceCollector interface represents a service that collects
13845 and stores performance metrics data.
13846
13847 Performance metrics are associated with objects of interfaces like IHost
13848 and IMachine. Each object has a distinct set of performance metrics. The
13849 set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
13850
13851 Metric data is collected at the specified intervals and is retained
13852 internally. The interval and the number of retained samples can be set
13853 with <link to="IPerformanceCollector::setupMetrics" />. Both metric data
13854 and collection settings are not persistent, they are discarded as soon as
13855 VBoxSVC process terminates. Moreover, metric settings and data associated
13856 with a particular VM only exist while VM is running. They disappear as
13857 soon as VM shuts down. It is not possible to set up metrics for machines
13858 that are powered off. One needs to start VM first, then set up metric
13859 collection parameters.
13860
13861 Metrics are organized hierarchically, with each level separated by a
13862 slash (/) character. Generally, the scheme for metric names is like this:
13863
13864 <tt>Category/Metric[/SubMetric][:aggregation]</tt>
13865
13866 "Category/Metric" together form the base metric name. A base metric is
13867 the smallest unit for which a sampling interval and the number of
13868 retained samples can be set. Only base metrics can be enabled and
13869 disabled. All sub-metrics are collected when their base metric is
13870 collected. Collected values for any set of sub-metrics can be queried
13871 with <link to="IPerformanceCollector::queryMetricsData" />.
13872
13873 For example "CPU/Load/User:avg" metric name stands for the "CPU"
13874 category, "Load" metric, "User" submetric, "average" aggregate. An
13875 aggregate function is computed over all retained data. Valid aggregate
13876 functions are:
13877
13878 <ul>
13879 <li>avg -- average</li>
13880 <li>min -- minimum</li>
13881 <li>max -- maximum</li>
13882 </ul>
13883
13884 When setting up metric parameters, querying metric data, enabling or
13885 disabling metrics wildcards can be used in metric names to specify a
13886 subset of metrics. For example, to select all CPU-related metrics
13887 use <tt>CPU/*</tt>, all averages can be queried using <tt>*:avg</tt> and
13888 so on. To query metric values without aggregates <tt>*:</tt> can be used.
13889
13890 The valid names for base metrics are:
13891
13892 <ul>
13893 <li>CPU/Load</li>
13894 <li>CPU/MHz</li>
13895 <li>RAM/Usage</li>
13896 </ul>
13897
13898 The general sequence for collecting and retrieving the metrics is:
13899 <ul>
13900 <li>
13901 Obtain an instance of IPerformanceCollector with
13902 <link to="IVirtualBox::performanceCollector" />
13903 </li>
13904 <li>
13905 Allocate and populate an array with references to objects the metrics
13906 will be collected for. Use references to IHost and IMachine objects.
13907 </li>
13908 <li>
13909 Allocate and populate an array with base metric names the data will
13910 be collected for.
13911 </li>
13912 <li>
13913 Call <link to="IPerformanceCollector::setupMetrics" />. From now on
13914 the metric data will be collected and stored.
13915 </li>
13916 <li>
13917 Wait for the data to get collected.
13918 </li>
13919 <li>
13920 Allocate and populate an array with references to objects the metric
13921 values will be queried for. You can re-use the object array used for
13922 setting base metrics.
13923 </li>
13924 <li>
13925 Allocate and populate an array with metric names the data will be
13926 collected for. Note that metric names differ from base metric names.
13927 </li>
13928 <li>
13929 Call <link to="IPerformanceCollector::queryMetricsData" />. The data
13930 that have been collected so far are returned. Note that the values
13931 are still retained internally and data collection continues.
13932 </li>
13933 </ul>
13934
13935 For an example of usage refer to the following files in VirtualBox SDK:
13936 <ul>
13937 <li>
13938 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
13939 </li>
13940 <li>
13941 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
13942 </li>
13943 </ul>
13944 </desc>
13945
13946 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
13947 <desc>
13948 Array of unique names of metrics.
13949
13950 This array represents all metrics supported by the performance
13951 collector. Individual objects do not necessarily support all of them.
13952 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
13953 list of supported metrics for a particular object.
13954 </desc>
13955 </attribute>
13956
13957 <method name="getMetrics">
13958 <desc>
13959 Returns parameters of specified metrics for a set of objects.
13960 <note>
13961 @c Null metrics array means all metrics. @c Null object array means
13962 all existing objects.
13963 </note>
13964 </desc>
13965 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13966 <desc>
13967 Metric name filter. Currently, only a comma-separated list of metrics
13968 is supported.
13969 </desc>
13970 </param>
13971 <param name="objects" type="$unknown" dir="in" safearray="yes">
13972 <desc>
13973 Set of objects to return metric parameters for.
13974 </desc>
13975 </param>
13976 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
13977 <desc>
13978 Array of returned metric parameters.
13979 </desc>
13980 </param>
13981 </method>
13982
13983 <method name="setupMetrics">
13984 <desc>
13985 Sets parameters of specified base metrics for a set of objects. Returns
13986 an array of <link to="IPerformanceMetric" /> describing the metrics
13987 have been affected.
13988 <note>
13989 @c Null or empty metric name array means all metrics. @c Null or
13990 empty object array means all existing objects. If metric name array
13991 contains a single element and object array contains many, the single
13992 metric name array element is applied to each object array element to
13993 form metric/object pairs.
13994 </note>
13995 </desc>
13996 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13997 <desc>
13998 Metric name filter. Comma-separated list of metrics with wildcard
13999 support.
14000 </desc>
14001 </param>
14002 <param name="objects" type="$unknown" dir="in" safearray="yes">
14003 <desc>
14004 Set of objects to setup metric parameters for.
14005 </desc>
14006 </param>
14007 <param name="period" type="unsigned long" dir="in">
14008 <desc>
14009 Time interval in seconds between two consecutive samples of
14010 performance data.
14011 </desc>
14012 </param>
14013 <param name="count" type="unsigned long" dir="in">
14014 <desc>
14015 Number of samples to retain in performance data history. Older
14016 samples get discarded.
14017 </desc>
14018 </param>
14019 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
14020 <desc>
14021 Array of metrics that have been modified by the call to this method.
14022 </desc>
14023 </param>
14024 </method>
14025
14026 <method name="enableMetrics">
14027 <desc>
14028 Turns on collecting specified base metrics. Returns an array of
14029 <link to="IPerformanceMetric" /> describing the metrics have been
14030 affected.
14031 <note>
14032 @c Null or empty metric name array means all metrics. @c Null or
14033 empty object array means all existing objects. If metric name array
14034 contains a single element and object array contains many, the single
14035 metric name array element is applied to each object array element to
14036 form metric/object pairs.
14037 </note>
14038 </desc>
14039 <param name="metricNames" type="wstring" dir="in" safearray="yes">
14040 <desc>
14041 Metric name filter. Comma-separated list of metrics with wildcard
14042 support.
14043 </desc>
14044 </param>
14045 <param name="objects" type="$unknown" dir="in" safearray="yes">
14046 <desc>
14047 Set of objects to enable metrics for.
14048 </desc>
14049 </param>
14050 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
14051 <desc>
14052 Array of metrics that have been modified by the call to this method.
14053 </desc>
14054 </param>
14055 </method>
14056
14057 <method name="disableMetrics">
14058 <desc>
14059 Turns off collecting specified base metrics. Returns an array of
14060 <link to="IPerformanceMetric" /> describing the metrics have been
14061 affected.
14062 <note>
14063 @c Null or empty metric name array means all metrics. @c Null or
14064 empty object array means all existing objects. If metric name array
14065 contains a single element and object array contains many, the single
14066 metric name array element is applied to each object array element to
14067 form metric/object pairs.
14068 </note>
14069 </desc>
14070 <param name="metricNames" type="wstring" dir="in" safearray="yes">
14071 <desc>
14072 Metric name filter. Comma-separated list of metrics with wildcard
14073 support.
14074 </desc>
14075 </param>
14076 <param name="objects" type="$unknown" dir="in" safearray="yes">
14077 <desc>
14078 Set of objects to disable metrics for.
14079 </desc>
14080 </param>
14081 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
14082 <desc>
14083 Array of metrics that have been modified by the call to this method.
14084 </desc>
14085 </param>
14086 </method>
14087
14088 <method name="queryMetricsData">
14089 <desc>
14090 Queries collected metrics data for a set of objects.
14091
14092 The data itself and related metric information are returned in seven
14093 parallel and one flattened array of arrays. Elements of
14094 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
14095 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
14096 the same index describe one set of values corresponding to a single
14097 metric.
14098
14099 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
14100 start and length of a sub-array is indicated by
14101 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
14102 value for metric <tt>metricNames[i]</tt> is at
14103 <tt>returnData[returnIndices[i]]</tt>.
14104
14105 <note>
14106 @c Null or empty metric name array means all metrics. @c Null or
14107 empty object array means all existing objects. If metric name array
14108 contains a single element and object array contains many, the single
14109 metric name array element is applied to each object array element to
14110 form metric/object pairs.
14111 </note>
14112 <note>
14113 Data collection continues behind the scenes after call to @c
14114 queryMetricsData. The return data can be seen as the snapshot of the
14115 current state at the time of @c queryMetricsData call. The internally
14116 kept metric values are not cleared by the call. This makes possible
14117 querying different subsets of metrics or aggregates with subsequent
14118 calls. If periodic querying is needed it is highly suggested to query
14119 the values with @c interval*count period to avoid confusion. This way
14120 a completely new set of data values will be provided by each query.
14121 </note>
14122 </desc>
14123 <param name="metricNames" type="wstring" dir="in" safearray="yes">
14124 <desc>
14125 Metric name filter. Comma-separated list of metrics with wildcard
14126 support.
14127 </desc>
14128 </param>
14129 <param name="objects" type="$unknown" dir="in" safearray="yes">
14130 <desc>
14131 Set of objects to query metrics for.
14132 </desc>
14133 </param>
14134 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
14135 <desc>
14136 Names of metrics returned in @c returnData.
14137 </desc>
14138 </param>
14139 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
14140 <desc>
14141 Objects associated with metrics returned in @c returnData.
14142 </desc>
14143 </param>
14144 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
14145 <desc>
14146 Units of measurement for each returned metric.
14147 </desc>
14148 </param>
14149 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
14150 <desc>
14151 Divisor that should be applied to return values in order to get
14152 floating point values. For example:
14153 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
14154 will retrieve the floating point value of i-th sample of the first
14155 metric.
14156 </desc>
14157 </param>
14158 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
14159 <desc>
14160 Sequence numbers of the first elements of value sequences of
14161 particular metrics returned in @c returnData. For aggregate metrics
14162 it is the sequence number of the sample the aggregate started
14163 calculation from.
14164 </desc>
14165 </param>
14166 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
14167 <desc>
14168 Indices of the first elements of value sequences of particular
14169 metrics returned in @c returnData.
14170 </desc>
14171 </param>
14172 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
14173 <desc>
14174 Lengths of value sequences of particular metrics.
14175 </desc>
14176 </param>
14177 <param name="returnData" type="long" dir="return" safearray="yes">
14178 <desc>
14179 Flattened array of all metric data containing sequences of values for
14180 each metric.
14181 </desc>
14182 </param>
14183 </method>
14184
14185 </interface>
14186 <enum
14187 name="NATAliasMode"
14188 uuid="67772168-50d9-11df-9669-7fb714ee4fa1">
14189 <desc></desc>
14190 <const name="AliasLog" value="0x1">
14191 <desc></desc>
14192 </const>
14193 <const name="AliasProxyOnly" value="0x02">
14194 <desc></desc>
14195 </const>
14196 <const name="AliasUseSamePorts" value="0x04">
14197 <desc></desc>
14198 </const>
14199 </enum>
14200 <enum
14201 name="NATProtocol"
14202 uuid="e90164be-eb03-11de-94af-fff9b1c1b19f"
14203 >
14204 <desc>Protocol definitions used with NAT port-forwarding rules.</desc>
14205 <const name="UDP" value="0">
14206 <desc>Port-forwarding uses UDP protocol.</desc>
14207 </const>
14208 <const name="TCP" value="1">
14209 <desc>Port-forwarding uses TCP protocol.</desc>
14210 </const>
14211 </enum>
14212
14213 <interface
14214 name="INATEngine" extends="$unknown"
14215 uuid="4b286616-eb03-11de-b0fb-1701eca42246"
14216 wsmap="managed"
14217 >
14218 <desc>Interface for managing a NAT engine which is used with a virtual machine. This
14219 allows for changing NAT behavior such as port-forwarding rules. This interface is
14220 used in the <link to="INetworkAdapter::natDriver" /> attribute.</desc>
14221 <attribute name="network" type="wstring">
14222 <desc>The network attribute of the NAT engine (the same value is used with built-in
14223 DHCP server to fill corresponding fields of DHCP leases).</desc>
14224 </attribute>
14225 <attribute name="hostIP" type="wstring">
14226 <desc>IP of host interface to bind all opened sockets to.
14227 <note>Changing this does not change binding of port forwarding.</note>
14228 </desc>
14229 </attribute>
14230 <attribute name="tftpPrefix" type="wstring">
14231 <desc>TFTP prefix attribute which is used with the built-in DHCP server to fill
14232 the corresponding fields of DHCP leases.</desc>
14233 </attribute>
14234 <attribute name="tftpBootFile" type="wstring">
14235 <desc>TFTP boot file attribute which is used with the built-in DHCP server to fill
14236 the corresponding fields of DHCP leases.</desc>
14237 </attribute>
14238 <attribute name="tftpNextServer" type="wstring">
14239 <desc>TFTP server attribute which is used with the built-in DHCP server to fill
14240 the corresponding fields of DHCP leases.
14241 <note>The preferred form is IPv4 addresses.</note>
14242 </desc>
14243 </attribute>
14244 <attribute name="aliasMode" type="unsigned long">
14245 <desc></desc>
14246 </attribute>
14247 <attribute name="dnsPassDomain" type="boolean">
14248 <desc>Whether the DHCP server should pass the DNS domain used by the host.</desc>
14249 </attribute>
14250 <attribute name="dnsProxy" type="boolean">
14251 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
14252 of the DNS proxy and process traffic using DNS servers registered on the host.</desc>
14253 </attribute>
14254 <attribute name="dnsUseHostResolver" type="boolean">
14255 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
14256 of the DNS proxy and process traffic using the host resolver mechanism.</desc>
14257 </attribute>
14258 <attribute name="redirects" type="wstring" readonly="yes" safearray="yes">
14259 <desc>Array of NAT port-forwarding rules in string representation, in the following
14260 format: "name,protocol id,host ip,host port,guest ip,guest port".</desc>
14261 </attribute>
14262 <method name="setNetworkSettings">
14263 <desc>Sets network configuration of the NAT engine.</desc>
14264 <param name="mtu" type="unsigned long" dir="in">
14265 <desc>MTU (maximum transmission unit) of the NAT engine in bytes.</desc>
14266 </param>
14267 <param name="sockSnd" type="unsigned long" dir="in">
14268 <desc>Capacity of the socket send buffer in bytes when creating a new socket.</desc>
14269 </param>
14270 <param name="sockRcv" type="unsigned long" dir="in">
14271 <desc>Capacity of the socket receive buffer in bytes when creating a new socket.</desc>
14272 </param>
14273 <param name="TcpWndSnd" type="unsigned long" dir="in">
14274 <desc>Initial size of the NAT engine's sending TCP window in bytes when
14275 establishing a new TCP connection.</desc>
14276 </param>
14277 <param name="TcpWndRcv" type="unsigned long" dir="in">
14278 <desc>Initial size of the NAT engine's receiving TCP window in bytes when
14279 establishing a new TCP connection.</desc>
14280 </param>
14281 </method>
14282 <method name="getNetworkSettings">
14283 <desc>Returns network configuration of NAT engine. See <link to="#setNetworkSettings" />
14284 for parameter descriptions.</desc>
14285 <param name="mtu" type="unsigned long" dir="out" />
14286 <param name="sockSnd" type="unsigned long" dir="out" />
14287 <param name="sockRcv" type="unsigned long" dir="out" />
14288 <param name="TcpWndSnd" type="unsigned long" dir="out" />
14289 <param name="TcpWndRcv" type="unsigned long" dir="out" />
14290 </method>
14291 <method name="addRedirect">
14292 <desc>Adds a new NAT port-forwarding rule.</desc>
14293 <param name="name" type="wstring" dir="in">
14294 <desc>The name of the rule. An empty name is acceptable, in which case the NAT engine
14295 auto-generates one using the other parameters.</desc>
14296 </param>
14297 <param name="proto" type="NATProtocol" dir="in">
14298 <desc>Protocol handled with the rule.</desc>
14299 </param>
14300 <param name="hostIp" type="wstring" dir="in">
14301 <desc>IP of the host interface to which the rule should apply. An empty ip address is
14302 acceptable, in which case the NAT engine binds the handling socket to any interface.</desc>
14303 </param>
14304 <param name="hostPort" type="unsigned short" dir="in">
14305 <desc>The port number to listen on.</desc>
14306 </param>
14307 <param name="guestIp" type="wstring" dir="in">
14308 <desc>The IP address of the guest which the NAT engine will forward matching packets
14309 to. An empty IP address is acceptable, in which case the NAT engine will forward
14310 packets to the first DHCP lease (x.x.x.15).</desc>
14311 </param>
14312 <param name="guestPort" type="unsigned short" dir="in">
14313 <desc>The port number to forward.</desc>
14314 </param>
14315 </method>
14316 <method name="removeRedirect">
14317 <desc>Removes a port-forwarding rule that was previously registered.</desc>
14318 <param name="name" type="wstring" dir="in">
14319 <desc>The name of the rule to delete.</desc>
14320 </param>
14321 </method>
14322 </interface>
14323
14324 <module name="VBoxSVC" context="LocalServer">
14325 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
14326 namespace="virtualbox.org">
14327 <interface name="IVirtualBox" default="yes"/>
14328 </class>
14329 </module>
14330
14331 <module name="VBoxC" context="InprocServer" threadingModel="Free">
14332 <class name="Session" uuid="3C02F46D-C9D2-4F11-A384-53F0CF917214"
14333 namespace="virtualbox.org">
14334 <interface name="ISession" default="yes"/>
14335 </class>
14336 <class name="CallbackWrapper" uuid="49EE8561-5563-4715-B18C-A4B1A490DAFE"
14337 namespace="virtualbox.org">
14338 <interface name="ILocalOwner" default="yes"/>
14339 <interface name="IVirtualBoxCallback"/>
14340 <interface name="IConsoleCallback"/>
14341 </class>
14342 </module>
14343
14344</library>
14345
14346</idl>
14347
14348<!-- 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