VirtualBox

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

Last change on this file since 30935 was 30929, checked in by vboxsync, 14 years ago

Main: add option to UnregisterMachine() to automatically nuke all attached media

  • Property svn:eol-style set to native
File size: 548.0 KB
Line 
1<?xml version="1.0" ?>
2
3<!--
4
5 Copyright (C) 2006-2010 Oracle Corporation
6
7 This file is part of VirtualBox Open Source Edition (OSE), as
8 available from http://www.virtualbox.org. This file is free software;
9 you can redistribute it and/or modify it under the terms of the GNU
10 General Public License (GPL) as published by the Free Software
11 Foundation, in version 2 as it comes in the "COPYING" file of the
12 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
13 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
14-->
15
16<!--
17 This is the master declaration for VirtualBox's Main API,
18 represented by COM/XPCOM and web service interfaces.
19
20 From this document, the build system generates several files
21 via XSLT that are then used during the build process.
22
23 Below is the list of XSL templates that operate on this file and
24 output files they generate. These XSL templates must be updated
25 whenever the schema of this file changes:
26
27 1. src/VBox/Main/idl/midl.xsl =>
28 out/<platform>/bin/sdk/idl/VirtualBox.idl
29 (MS COM interface definition file for Main API)
30
31 2. src/VBox/Main/idl/xpidl.xsl =>
32 out/<platform>/bin/sdk/idl/VirtualBox_XPCOM.idl
33 (XPCOM interface definition file for Main API)
34
35 3. src/VBox/Main/idl/doxygen.xsl =>
36 out/<platform>/obj/src/VBox/Main/VirtualBox.idl
37 (pseudo-IDL for Doxygen to generate the official Main API
38 documentation)
39
40 4. src/VBox/Main/webservice/*.xsl =>
41 a bunch of WSDL and C++ files
42 (VirtualBox web service sources and SOAP mappers;
43 see src/VBox/Main/webservice/Makefile.kmk for details)
44
45 5. src/VBox/Frontends/VirtualBox/include/COMWrappers.xsl =>
46 out/<platform>/obj/src/VBox/Frontends/VirtualBox/VirtualBox/include/COMWrappers.h
47 (smart Qt-based C++ wrapper classes for COM interfaces
48 of the Main API)
49
50 6. src/VBox/Installer/win32/VirtualBox_TypeLib.xsl =>
51 out/<platform>/obj/src/VBox/Installer/win32/VirtualBox_TypeLib.wxi
52 (Main API TypeLib block for the WiX installer)
53
54 7. src/VBox/Runtime/common/err/errmsgvboxcom.xsl =>
55 out/<platform>/obj/Runtime/errmsgvboxcomdata.h
56 (<result> extraction for the %Rhrc format specifier)
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#define NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI NS_IMPL_QUERY_INTERFACE4_CI
127
128
129#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
130# define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
131 NS_IMPL_THREADSAFE_ADDREF(_class) \
132 NS_IMPL_THREADSAFE_RELEASE(_class) \
133 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI(_class, _interface) \
134 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
135#endif
136
137#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
138# define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
139 NS_IMPL_THREADSAFE_ADDREF(_class) \
140 NS_IMPL_THREADSAFE_RELEASE(_class) \
141 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
142 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
143#endif
144
145#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_CI
146# define NS_IMPL_THREADSAFE_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
147 NS_IMPL_THREADSAFE_ADDREF(_class) \
148 NS_IMPL_THREADSAFE_RELEASE(_class) \
149 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
150 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
151#endif
152
153#ifndef NS_IMPL_THREADSAFE_ISUPPORTS4_CI
154# define NS_IMPL_THREADSAFE_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4) \
155 NS_IMPL_THREADSAFE_ADDREF(_class) \
156 NS_IMPL_THREADSAFE_RELEASE(_class) \
157 NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
158 NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
159#endif
160
161#ifndef NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
162# define NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
163 NS_INTERFACE_MAP_BEGIN(_class) \
164 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
165 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
166 NS_IMPL_QUERY_CLASSINFO(_class) \
167 NS_INTERFACE_MAP_END
168#endif
169
170#ifndef NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
171# define NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
172 _i2, _ic2) \
173 NS_INTERFACE_MAP_BEGIN(_class) \
174 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
175 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
176 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
177 NS_IMPL_QUERY_CLASSINFO(_class) \
178 NS_INTERFACE_MAP_END
179#endif
180
181#ifndef NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
182# define NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
183 _i2, _ic2, _i3, _ic3) \
184 NS_INTERFACE_MAP_BEGIN(_class) \
185 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
186 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
187 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i3, _ic3) \
188 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
189 NS_IMPL_QUERY_CLASSINFO(_class) \
190 NS_INTERFACE_MAP_END
191#endif
192
193#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
194#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
195#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
196
197#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI
198# define NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI(_class, _i1, _ic1) \
199 NS_IMPL_THREADSAFE_ADDREF(_class) \
200 NS_IMPL_THREADSAFE_RELEASE(_class) \
201 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
202 NS_IMPL_CI_INTERFACE_GETTER1(_class, _i1)
203#endif
204
205#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI
206# define NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI(_class, _i1, _ic1, \
207 _i2, _ic2) \
208 NS_IMPL_THREADSAFE_ADDREF(_class) \
209 NS_IMPL_THREADSAFE_RELEASE(_class) \
210 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
211 _i2, _ic2) \
212 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
213#endif
214
215#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI
216# define NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI(_class, _i1, _ic1, \
217 _i2, _ic2, _i3, _ic3) \
218 NS_IMPL_THREADSAFE_ADDREF(_class) \
219 NS_IMPL_THREADSAFE_RELEASE(_class) \
220 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
221 _i2, _ic2, _i3, _ic3) \
222 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
223#endif
224
225 </cpp>
226</if>
227
228<library
229 name="VirtualBox"
230 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
231 version="1.3"
232 desc="VirtualBox Type Library"
233 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
234 supportsErrorInfo="yes"
235>
236
237
238 <!--
239 // COM result codes for VirtualBox
240 /////////////////////////////////////////////////////////////////////////
241 -->
242
243 <descGroup id="VirtualBox_COM_result_codes" title="VirtualBox COM result codes">
244 <desc>
245 This section describes all VirtualBox-specific COM result codes that may
246 be returned by methods of VirtualBox COM interfaces in addition to
247 standard COM result codes.
248
249 Note that along with the result code, every VirtualBox method returns
250 extended error information through the IVirtualBoxErrorInfo interface on
251 failure. This interface is a preferred way to present the error to the end
252 user because it contains a human readable description of the error. Raw
253 result codes, both standard and described in this section, are intended to
254 be used by programs to analyze the reason of a failure and select an
255 appropriate course of action without involving the end user (for example,
256 retry the operation later or make a different call).
257
258 The standard COM result codes that may originate from our methods include:
259
260 <table>
261 <tr><td>E_INVALIDARG</td>
262 <td>
263 Returned when the value of the method's argument is not within the range
264 of valid values. This should not be confused with situations when the
265 value is within the range but simply doesn't suit the current object
266 state and there is a possibility that it will be accepted later (in such
267 cases VirtualBox-specific codes are returned, for example,
268 <link to="VBOX_E_OBJECT_NOT_FOUND"/>).
269 </td>
270 </tr>
271 <tr><td>E_POINTER</td>
272 <td>
273 Returned if a memory pointer for the output argument is invalid (for
274 example, @c null). Note that when pointers representing input
275 arguments (such as strings) are invalid, E_INVALIDARG is returned.
276 </td>
277 </tr>
278 <tr><td>E_ACCESSDENIED</td>
279 <td>
280 Returned when the called object is not ready. Since the lifetime of a
281 public COM object cannot be fully controlled by the implementation,
282 VirtualBox maintains the readiness state for all objects it creates and
283 returns this code in response to any method call on the object that was
284 deactivated by VirtualBox and is not functioning any more.
285 </td>
286 </tr>
287 <tr><td>E_OUTOFMEMORY</td>
288 <td>
289 Returned when a memory allocation operation fails.
290 </td>
291 </tr>
292 </table>
293 </desc>
294 </descGroup>
295
296 <!--
297 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
298 everything in <result>/<desc> after (and including) the first dot, so express
299 the matter of the error code in the first sentence and keep it short.
300 -->
301
302 <result name="VBOX_E_OBJECT_NOT_FOUND" value="0x80BB0001">
303 <desc>
304 Object corresponding to the supplied arguments does not exist.
305 </desc>
306 </result>
307
308 <result name="VBOX_E_INVALID_VM_STATE" value="0x80BB0002">
309 <desc>
310 Current virtual machine state prevents the operation.
311 </desc>
312 </result>
313
314 <result name="VBOX_E_VM_ERROR" value="0x80BB0003">
315 <desc>
316 Virtual machine error occurred attempting the operation.
317 </desc>
318 </result>
319
320 <result name="VBOX_E_FILE_ERROR" value="0x80BB0004">
321 <desc>
322 File not accessible or erroneous file contents.
323 </desc>
324 </result>
325
326 <result name="VBOX_E_IPRT_ERROR" value="0x80BB0005">
327 <desc>
328 Runtime subsystem error.
329 </desc>
330 </result>
331
332 <result name="VBOX_E_PDM_ERROR" value="0x80BB0006">
333 <desc>
334 Pluggable Device Manager error.
335 </desc>
336 </result>
337
338 <result name="VBOX_E_INVALID_OBJECT_STATE" value="0x80BB0007">
339 <desc>
340 Current object state prohibits operation.
341 </desc>
342 </result>
343
344 <result name="VBOX_E_HOST_ERROR" value="0x80BB0008">
345 <desc>
346 Host operating system related error.
347 </desc>
348 </result>
349
350 <result name="VBOX_E_NOT_SUPPORTED" value="0x80BB0009">
351 <desc>
352 Requested operation is not supported.
353 </desc>
354 </result>
355
356 <result name="VBOX_E_XML_ERROR" value="0x80BB000A">
357 <desc>
358 Invalid XML found.
359 </desc>
360 </result>
361
362 <result name="VBOX_E_INVALID_SESSION_STATE" value="0x80BB000B">
363 <desc>
364 Current session state prohibits operation.
365 </desc>
366 </result>
367
368 <result name="VBOX_E_OBJECT_IN_USE" value="0x80BB000C">
369 <desc>
370 Object being in use prohibits operation.
371 </desc>
372 </result>
373
374 <!--
375 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
376 everything in <result>/<desc> after (and including) the first dot, so express
377 the matter of the error code in the first sentence and keep it short.
378 -->
379
380 <descGroup/>
381
382 <!--
383 // all common enums
384 /////////////////////////////////////////////////////////////////////////
385 -->
386
387 <enum name="SettingsVersion"
388 uuid="52bd6f5f-1adb-4493-975d-581a9c4b803f"
389 >
390 <desc>Settings version of VirtualBox settings files. This is written to
391 the "version" attribute of the root "VirtualBox" element in the settings
392 file XML and indicates which VirtualBox version wrote the file.
393 </desc>
394
395 <const name="Null" value="0">
396 <desc>Null value, indicates invalid version.</desc>
397 </const>
398 <const name="v1_0" value="1">
399 <desc>Legacy settings version, not currently supported.</desc>
400 </const>
401 <const name="v1_1" value="2">
402 <desc>Legacy settings version, not currently supported.</desc>
403 </const>
404 <const name="v1_2" value="3">
405 <desc>Legacy settings version, not currently supported.</desc>
406 </const>
407 <const name="v1_3pre" value="4">
408 <desc>Legacy settings version, not currently supported.</desc>
409 </const>
410 <const name="v1_3" value="5">
411 <desc>Settings version "1.3", written by VirtualBox 2.0.12.</desc>
412 <!--
413 Machine XML: Capitalization of Uart, Lpt elements and many attributes changed.
414 -->
415 </const>
416 <const name="v1_4" value="6">
417 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
418 <!--
419 VirtualBox.xml: big DiskRegistry -> MediaRegistry revamp, various HardDisk types merged
420 (was VirtualDiskImage, VMDKImage, VHDImage, ISCSIHardDisk, CustomHardDisk, DiffHardDisk)
421 -->
422 </const>
423 <const name="v1_5" value="7">
424 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
425 <!-- 2008-09-04: 2.0.0 released
426 2008-11-20: settings version 1.5 introduced
427 2008-12-17: 2.1.0 released
428 Machine changes:
429 guest OS identifiers changed;
430 Machine/Hardware/Display/MonitorCount renamed to monitorCount;
431 Machine/Hardware/Display/Accelerate3D renamed to accelerate3D;
432 Machine/Hardware/CPU/CPUCount/@count changed to CPU/@count
433 -->
434 </const>
435 <const name="v1_6" value="8">
436 <desc>Settings version "1.6", written by VirtualBox 2.1.4 (at least).</desc>
437 <!-- 2008-12-17: 2.1.0 released
438 2008-12-19: settings version 1.6 introduced (is in 2.1 branch)
439 2009-04-08: 2.2.0 released
440 Machine changes: remove all Machine/Hardware/Network/Adapter/HostInterface[@TAPSetup or @TAPTerminate]/ attributes (done)
441 -->
442 </const>
443 <const name="v1_7" value="9">
444 <desc>Settings version "1.7", written by VirtualBox 2.2.x and 3.0.x.</desc>
445 <!-- 2008-12-17: 2.1.0 released
446 2009-03-11: settings version 1.7 introduced (is in 2.2 branch)
447 2009-04-08: 2.2.0 released
448 VirtualBox.xml additions: NetserviceRegistry with DHCPServers (done)
449 Machine changes: HardDiskAttachments is now StorageControllers (done)
450 -->
451 </const>
452 <const name="v1_8" value="10">
453 <desc>Intermediate settings version "1.8", understood by VirtualBox 3.1.x.</desc>
454 <!-- Machine additions: Display/@accelerate2DVideo (done)
455 -->
456 </const>
457 <const name="v1_9" value="11">
458 <desc>Settings version "1.9", written by VirtualBox 3.1.x.</desc>
459 <!-- The big storage controller / DVD / Floppy rework (done)
460 -->
461 </const>
462 <const name="v1_10" value="12">
463 <desc>Settings version "1.10", written by VirtualBox 3.2.x.</desc>
464 <!-- Machine changes: RTC localOrUTC (done)
465 CPU hot-plug support
466 -->
467 </const>
468 <const name="Future" value="13">
469 <desc>Settings version greater than "1.10", written by a future VirtualBox version.</desc>
470 </const>
471 </enum>
472
473 <enum
474 name="AccessMode"
475 uuid="1da0007c-ddf7-4be8-bcac-d84a1558785f"
476 >
477 <desc>
478 Access mode for opening files.
479 </desc>
480
481 <const name="ReadOnly" value="1"/>
482 <const name="ReadWrite" value="2"/>
483 </enum>
484
485 <enum
486 name="MachineState"
487 uuid="e998d075-543a-41fc-8aa9-5ca3e92393fd"
488 >
489 <desc>
490 Virtual machine execution state.
491
492 This enumeration represents possible values of the <link
493 to="IMachine::state"/> attribute.
494
495 Below is the basic virtual machine state diagram. It shows how the state
496 changes during virtual machine execution. The text in square braces shows
497 a method of the IConsole interface that performs the given state
498 transition.
499
500 <pre>
501 +---------[powerDown()] &lt;- Stuck &lt;--[failure]-+
502 V |
503 +-&gt; PoweredOff --+--&gt;[powerUp()]--&gt; Starting --+ | +-----[resume()]-----+
504 | | | | V |
505 | Aborted -----+ +--&gt; Running --[pause()]--&gt; Paused
506 | | ^ | ^ |
507 | Saved -----------[powerUp()]--&gt; Restoring -+ | | | |
508 | ^ | | | |
509 | | +-----------------------------------------+-|-------------------+ +
510 | | | | |
511 | | +-- Saving &lt;--------[takeSnapshot()]&lt;-------+---------------------+
512 | | | |
513 | +-------- Saving &lt;--------[saveState()]&lt;----------+---------------------+
514 | | |
515 +-------------- Stopping -------[powerDown()]&lt;----------+---------------------+
516 </pre>
517
518 Note that states to the right from PoweredOff, Aborted and Saved in the
519 above diagram are called <i>online VM states</i>. These states
520 represent the virtual machine which is being executed in a dedicated
521 process (usually with a GUI window attached to it where you can see the
522 activity of the virtual machine and interact with it). There are two
523 special pseudo-states, FirstOnline and LastOnline, that can be used in
524 relational expressions to detect if the given machine state is online or
525 not:
526
527 <pre>
528 if (machine.GetState() &gt;= MachineState_FirstOnline &amp;&amp;
529 machine.GetState() &lt;= MachineState_LastOnline)
530 {
531 ...the machine is being executed...
532 }
533 </pre>
534
535 When the virtual machine is in one of the online VM states (that is, being
536 executed), only a few machine settings can be modified. Methods working
537 with such settings contain an explicit note about that. An attempt to
538 change any oter setting or perform a modifying operation during this time
539 will result in the <link to="VBOX_E_INVALID_VM_STATE"/> error.
540
541 All online states except Running, Paused and Stuck are transitional: they
542 represent temporary conditions of the virtual machine that will last as
543 long as the operation that initiated such a condition.
544
545 The Stuck state is a special case. It means that execution of the machine
546 has reached the "Guru Meditation" condition. This condition indicates an
547 internal VMM (virtual machine manager) failure which may happen as a
548 result of either an unhandled low-level virtual hardware exception or one
549 of the recompiler exceptions (such as the <i>too-many-traps</i>
550 condition).
551
552 Note also that any online VM state may transit to the Aborted state. This
553 happens if the process that is executing the virtual machine terminates
554 unexpectedly (for example, crashes). Other than that, the Aborted state is
555 equivalent to PoweredOff.
556
557 There are also a few additional state diagrams that do not deal with
558 virtual machine execution and therefore are shown separately. The states
559 shown on these diagrams are called <i>offline VM states</i> (this includes
560 PoweredOff, Aborted and Saved too).
561
562 The first diagram shows what happens when a lengthy setup operation is
563 being executed (such as <link to="IMachine::attachDevice"/>).
564
565 <pre>
566 +----------------------------------(same state as before the call)------+
567 | |
568 +-&gt; PoweredOff --+ |
569 | | |
570 |-&gt; Aborted -----+--&gt;[lengthy VM configuration call] --&gt; SettingUp -----+
571 | |
572 +-&gt; Saved -------+
573 </pre>
574
575 The next two diagrams demonstrate the process of taking a snapshot of a
576 powered off virtual machine, restoring the state to that as of a snapshot
577 or deleting a snapshot, respectively.
578
579 <pre>
580 +----------------------------------(same state as before the call)------+
581 | |
582 +-&gt; PoweredOff --+ |
583 | +--&gt;[takeSnapshot()] -------------------&gt; Saving ------+
584 +-&gt; Aborted -----+
585
586 +-&gt; PoweredOff --+
587 | |
588 | Aborted -----+--&gt;[restoreSnapshot() ]-------&gt; RestoringSnapshot -+
589 | | [deleteSnapshot() ]-------&gt; DeletingSnapshot --+
590 +-&gt; Saved -------+ |
591 | |
592 +---(Saved if restored from an online snapshot, PoweredOff otherwise)---+
593 </pre>
594
595 Note that the Saving state is present in both the offline state group and
596 online state group. Currently, the only way to determine what group is
597 assumed in a particular case is to remember the previous machine state: if
598 it was Running or Paused, then Saving is an online state, otherwise it is
599 an offline state. This inconsistency may be removed in one of the future
600 versions of VirtualBox by adding a new state.
601
602 <note internal="yes">
603 For whoever decides to touch this enum: In order to keep the
604 comparisons involving FirstOnline and LastOnline pseudo-states valid,
605 the numeric values of these states must be correspondingly updated if
606 needed: for any online VM state, the condition
607 <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
608 @c true. The same relates to transient states for which
609 the condition <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
610 @c true.
611 </note>
612 </desc>
613
614 <const name="Null" value="0">
615 <desc>Null value (never used by the API).</desc>
616 </const>
617 <const name="PoweredOff" value="1">
618 <desc>
619 The machine is not running and has no saved execution state; it has
620 either never been started or been shut down successfully.
621 </desc>
622 </const>
623 <const name="Saved" value="2">
624 <desc>
625 The machine is not currently running, but the execution state of the machine
626 has been saved to an external file when it was running, from where
627 it can be resumed.
628 </desc>
629 </const>
630 <const name="Teleported" value="3">
631 <desc>
632 The machine was teleported to a different host (or process) and then
633 powered off. Take care when powering it on again may corrupt resources
634 it shares with the teleportation target (e.g. disk and network).
635 </desc>
636 </const>
637 <const name="Aborted" value="4">
638 <desc>
639 The process running the machine has terminated abnormally. This may
640 indicate a crash of the VM process in host execution context, or
641 the VM process has been terminated externally.
642 </desc>
643 </const>
644 <const name="Running" value="5">
645 <desc>
646 The machine is currently being executed.
647 <note internal="yes">
648 For whoever decides to touch this enum: In order to keep the
649 comparisons in the old source code valid, this state must immediately
650 precede the Paused state.
651 TODO: Lift this spectacularly wonderful restriction.
652 </note>
653 </desc>
654 </const>
655 <const name="Paused" value="6">
656 <desc>
657 Execution of the machine has been paused.
658 <note internal="yes">
659 For whoever decides to touch this enum: In order to keep the
660 comparisons in the old source code valid, this state must immediately
661 follow the Running state.
662 TODO: Lift this spectacularly wonderful restriction.
663 </note>
664 </desc>
665 </const>
666 <const name="Stuck" value="7">
667 <desc>
668 Execution of the machine has reached the "Guru Meditation"
669 condition. This indicates a severe error in the hypervisor itself.
670 <note internal="yes">
671 bird: Why this uncool name? Could we rename it to "GuruMeditation" or
672 "Guru", perhaps? Or are there some other VMM states that are
673 intended to be lumped in here as well?
674 </note>
675 </desc>
676 </const>
677 <const name="Teleporting" value="8">
678 <desc>
679 The machine is about to be teleported to a different host or process.
680 It is possible to pause a machine in this state, but it will go to the
681 <link to="MachineState::PausedTeleporting"/> state and it will not be
682 possible to resume it again unless the teleportation fails.
683 </desc>
684 </const>
685 <const name="LiveSnapshotting" value="9">
686 <desc>
687 A live snapshot is being taken. The machine is running normally, but
688 some of the runtime configuration options are inaccessible. Also, if
689 paused while in this state it will transition to
690 <link to="MachineState::Saving"/> and it will not be resume the
691 execution until the snapshot operation has completed.
692 </desc>
693 </const>
694 <const name="Starting" value="10">
695 <desc>
696 Machine is being started after powering it on from a
697 zero execution state.
698 </desc>
699 </const>
700 <const name="Stopping" value="11">
701 <desc>
702 Machine is being normally stopped powering it off, or after the guest OS
703 has initiated a shutdown sequence.
704 </desc>
705 </const>
706 <const name="Saving" value="12">
707 <desc>
708 Machine is saving its execution state to a file, or an online
709 snapshot of the machine is being taken.
710 </desc>
711 </const>
712 <const name="Restoring" value="13">
713 <desc>
714 Execution state of the machine is being restored from a file
715 after powering it on from the saved execution state.
716 </desc>
717 </const>
718 <const name="TeleportingPausedVM" value="14">
719 <desc>
720 The machine is being teleported to another host or process, but it is
721 not running. This is the paused variant of the
722 <link to="MachineState::Teleporting"/> state.
723 </desc>
724 </const>
725 <const name="TeleportingIn" value="15">
726 <desc>
727 Teleporting the machine state in from another host or process.
728 </desc>
729 </const>
730 <const name="DeletingSnapshotOnline" value="16">
731 <desc>
732 Teleporting the machine state in from another host or process.
733 </desc>
734 </const>
735 <const name="DeletingSnapshotPaused" value="17">
736 <desc>
737 Teleporting the machine state in from another host or process.
738 </desc>
739 </const>
740 <const name="RestoringSnapshot" value="18">
741 <desc>
742 A machine snapshot is being restored; this typically does not take long.
743 </desc>
744 </const>
745 <const name="DeletingSnapshot" value="19">
746 <desc>
747 A machine snapshot is being deleted; this can take a long time since this
748 may require merging differencing media.
749 </desc>
750 </const>
751 <const name="SettingUp" value="20">
752 <desc>
753 Lengthy setup operation is in progress.
754 </desc>
755 </const>
756
757 <const name="FirstOnline" value="5" wsmap="suppress"> <!-- Running -->
758 <desc>
759 Pseudo-state: first online state (for use in relational expressions).
760 </desc>
761 </const>
762 <const name="LastOnline" value="17" wsmap="suppress"> <!-- DeletingSnapshotPaused -->
763 <desc>
764 Pseudo-state: last online state (for use in relational expressions).
765 </desc>
766 </const>
767
768 <const name="FirstTransient" value="8" wsmap="suppress"> <!-- Teleporting -->
769 <desc>
770 Pseudo-state: first transient state (for use in relational expressions).
771 </desc>
772 </const>
773 <const name="LastTransient" value="20" wsmap="suppress"> <!-- SettingUp -->
774 <desc>
775 Pseudo-state: last transient state (for use in relational expressions).
776 </desc>
777 </const>
778
779 </enum>
780
781 <enum
782 name="SessionState"
783 uuid="cf2700c0-ea4b-47ae-9725-7810114b94d8"
784 >
785 <desc>
786 Session state. This enumeration represents possible values of
787 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
788 attributes. See individual enumerator descriptions for the meaning for
789 every value.
790 </desc>
791
792 <const name="Null" value="0">
793 <desc>Null value (never used by the API).</desc>
794 </const>
795 <const name="Closed" value="1">
796 <desc>
797 The machine has no open sessions (<link to="IMachine::sessionState"/>);
798 the session is closed (<link to="ISession::state"/>)
799 </desc>
800 </const>
801 <const name="Open" value="2">
802 <desc>
803 The machine has an open direct session (<link to="IMachine::sessionState"/>);
804 the session is open (<link to="ISession::state"/>)
805 </desc>
806 </const>
807 <const name="Spawning" value="3">
808 <desc>
809 A new (direct) session is being opened for the machine as a result of
810 <link to="IVirtualBox::openRemoteSession"/> call
811 (<link to="IMachine::sessionState"/> or <link to="ISession::state"/>).
812 This state also occurs as a short transient state when a new direct
813 session is opened by calling <link to="IVirtualBox::openSession"/>.
814 </desc>
815 </const>
816 <const name="Closing" value="4">
817 <desc>
818 The direct session is being closed (<link to="IMachine::sessionState"/>);
819 the session is being closed (<link to="ISession::state"/>)
820 </desc>
821 </const>
822 </enum>
823
824 <enum
825 name="CPUPropertyType"
826 uuid="24d356a6-2f45-4abd-b977-1cbe9c4701f5"
827 >
828 <desc>
829 Virtual CPU property type. This enumeration represents possible values of the
830 IMachine get- and setCPUProperty methods.
831 </desc>
832 <const name="Null" value="0">
833 <desc>Null value (never used by the API).</desc>
834 </const>
835 <const name="PAE" value="1">
836 <desc>
837 This setting determines whether VirtualBox will expose the Physical Address
838 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
839 is not available, it will not be reported.
840 </desc>
841 </const>
842 <const name="Synthetic" value="2">
843 <desc>
844 This setting determines whether VirtualBox will expose a synthetic CPU to the guest to allow
845 teleporting between host systems that differ significantly.
846 </desc>
847 </const>
848 </enum>
849
850
851 <enum
852 name="HWVirtExPropertyType"
853 uuid="ce81dfdd-d2b8-4a90-bbea-40ee8b7ffcee"
854 >
855 <desc>
856 Hardware virtualization property type. This enumeration represents possible values
857 for the <link to="IMachine::getHWVirtExProperty"/> and
858 <link to="IMachine::setHWVirtExProperty"/> methods.
859 </desc>
860 <const name="Null" value="0">
861 <desc>Null value (never used by the API).</desc>
862 </const>
863 <const name="Enabled" value="1">
864 <desc>
865 Whether hardware virtualization (VT-x/AMD-V) is enabled at all. If
866 such extensions are not available, they will not be used.
867 </desc>
868 </const>
869 <const name="Exclusive" value="2">
870 <desc>
871 Whether hardware virtualization is used exclusively by VirtualBox. When enabled,
872 VirtualBox assumes it can acquire full and exclusive access to the VT-x or AMD-V
873 feature of the host. To share these with other hypervisors, you must disable this property.
874 </desc>
875 </const>
876 <const name="VPID" value="3">
877 <desc>
878 Whether VT-x VPID is enabled. If this extension is not available, it will not be used.
879 </desc>
880 </const>
881 <const name="NestedPaging" value="4">
882 <desc>
883 Whether Nested Paging is enabled. If this extension is not available, it will not be used.
884 </desc>
885 </const>
886 <const name="LargePages" value="5">
887 <desc>
888 Whether large page allocation is enabled; requires nested paging and a 64 bits host.
889 </desc>
890 </const>
891 </enum>
892
893 <enum
894 name="SessionType"
895 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
896 >
897 <desc>
898 Session type. This enumeration represents possible values of the
899 <link to="ISession::type"/> attribute.
900 </desc>
901
902 <const name="Null" value="0">
903 <desc>Null value (never used by the API).</desc>
904 </const>
905 <const name="Direct" value="1">
906 <desc>
907 Direct session
908 (opened by <link to="IVirtualBox::openSession"/>)
909 </desc>
910 </const>
911 <const name="Remote" value="2">
912 <desc>
913 Remote session
914 (opened by <link to="IVirtualBox::openRemoteSession"/>)
915 </desc>
916 </const>
917 <const name="Existing" value="3">
918 <desc>
919 Existing session
920 (opened by <link to="IVirtualBox::openExistingSession"/>)
921 </desc>
922 </const>
923 </enum>
924
925 <enum
926 name="DeviceType"
927 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
928 >
929 <desc>
930 Device type.
931 </desc>
932 <const name="Null" value="0">
933 <desc>
934 Null value, may also mean "no device" (not allowed for
935 <link to="IConsole::getDeviceActivity"/>).
936 </desc>
937 </const>
938 <const name="Floppy" value="1">
939 <desc>Floppy device.</desc>
940 </const>
941 <const name="DVD" value="2">
942 <desc>CD/DVD-ROM device.</desc>
943 </const>
944 <const name="HardDisk" value="3">
945 <desc>Hard disk device.</desc>
946 </const>
947 <const name="Network" value="4">
948 <desc>Network device.</desc>
949 </const>
950 <const name="USB" value="5">
951 <desc>USB device.</desc>
952 </const>
953 <const name="SharedFolder" value="6">
954 <desc>Shared folder device.</desc>
955 </const>
956 </enum>
957
958 <enum
959 name="DeviceActivity"
960 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
961 >
962 <desc>
963 Device activity for <link to="IConsole::getDeviceActivity"/>.
964 </desc>
965
966 <const name="Null" value="0"/>
967 <const name="Idle" value="1"/>
968 <const name="Reading" value="2"/>
969 <const name="Writing" value="3"/>
970 </enum>
971
972 <enum
973 name="ClipboardMode"
974 uuid="33364716-4008-4701-8f14-be0fa3d62950"
975 >
976 <desc>
977 Host-Guest clipboard interchange mode.
978 </desc>
979
980 <const name="Disabled" value="0"/>
981 <const name="HostToGuest" value="1"/>
982 <const name="GuestToHost" value="2"/>
983 <const name="Bidirectional" value="3"/>
984 </enum>
985
986 <enum
987 name="Scope"
988 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
989 >
990 <desc>
991 Scope of the operation.
992
993 A generic enumeration used in various methods to define the action or
994 argument scope.
995 </desc>
996
997 <const name="Global" value="0"/>
998 <const name="Machine" value="1"/>
999 <const name="Session" value="2"/>
1000 </enum>
1001
1002 <enum
1003 name="BIOSBootMenuMode"
1004 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
1005 >
1006 <desc>
1007 BIOS boot menu mode.
1008 </desc>
1009
1010 <const name="Disabled" value="0"/>
1011 <const name="MenuOnly" value="1"/>
1012 <const name="MessageAndMenu" value="2"/>
1013 </enum>
1014
1015 <enum
1016 name="ProcessorFeature"
1017 uuid="64c38e6b-8bcf-45ad-ac03-9b406287c5bf"
1018 >
1019 <desc>
1020 CPU features.
1021 </desc>
1022
1023 <const name="HWVirtEx" value="0"/>
1024 <const name="PAE" value="1"/>
1025 <const name="LongMode" value="2"/>
1026 <const name="NestedPaging" value="3"/>
1027 </enum>
1028
1029 <enum
1030 name="FirmwareType"
1031 uuid="b903f264-c230-483e-ac74-2b37ce60d371"
1032 >
1033 <desc>
1034 Firmware type.
1035 </desc>
1036 <const name="BIOS" value="1">
1037 <desc>BIOS Firmware.</desc>
1038 </const>
1039 <const name="EFI" value="2">
1040 <desc>EFI Firmware, bitness detetced basing on OS type.</desc>
1041 </const>
1042 <const name="EFI32" value="3">
1043 <desc>Efi firmware, 32-bit.</desc>
1044 </const>
1045 <const name="EFI64" value="4">
1046 <desc>Efi firmware, 64-bit.</desc>
1047 </const>
1048 <const name="EFIDUAL" value="5">
1049 <desc>Efi firmware, combined 32 and 64-bit.</desc>
1050 </const>
1051 </enum>
1052
1053 <enum
1054 name="PointingHidType"
1055 uuid="0d3c17a2-821a-4b2e-ae41-890c6c60aa97"
1056 >
1057 <desc>
1058 Type of pointing device used in a virtual machine.
1059 </desc>
1060 <const name="None" value="1">
1061 <desc>No mouse.</desc>
1062 </const>
1063 <const name="PS2Mouse" value="2">
1064 <desc>PS/2 auxillary device, a.k.a. mouse.</desc>
1065 </const>
1066 <const name="USBMouse" value="3">
1067 <desc>USB mouse (relative pointer).</desc>
1068 </const>
1069 <const name="USBTablet" value="4">
1070 <desc>USB tablet (absolute pointer).</desc>
1071 </const>
1072 <const name="ComboMouse" value="5">
1073 <desc>Combined device, working as PS/2 or USB mouse, depending on guest behavior.
1074 Using of such device can have negative performance implications. </desc>
1075 </const>
1076 </enum>
1077
1078 <enum
1079 name="KeyboardHidType"
1080 uuid="5a5b0996-3a3e-44bb-9019-56979812cbcc"
1081 >
1082 <desc>
1083 Type of keyboard device used in a virtual machine.
1084 </desc>
1085 <const name="None" value="1">
1086 <desc>No keyboard.</desc>
1087 </const>
1088 <const name="PS2Keyboard" value="2">
1089 <desc>PS/2 keyboard.</desc>
1090 </const>
1091 <const name="USBKeyboard" value="3">
1092 <desc>USB keyboard.</desc>
1093 </const>
1094 <const name="ComboKeyboard" value="4">
1095 <desc>Combined device, working as PS/2 or USB keyboard, depending on guest behavior.
1096 Using of such device can have negative performance implications. </desc>
1097 </const>
1098 </enum>
1099
1100 <!--
1101 // IVirtualBoxErrorInfo
1102 /////////////////////////////////////////////////////////////////////////
1103 -->
1104
1105 <interface
1106 name="IVirtualBoxErrorInfo" extends="$errorinfo"
1107 uuid="4b86d186-407e-4f9e-8be8-e50061be8725"
1108 supportsErrorInfo="no"
1109 wsmap="managed"
1110 >
1111 <desc>
1112 The IVirtualBoxErrorInfo interface represents extended error information.
1113
1114 Extended error information can be set by VirtualBox components after
1115 unsuccessful or partially successful method invocation. This information
1116 can be retrieved by the calling party as an IVirtualBoxErrorInfo object
1117 and then shown to the client in addition to the plain 32-bit result code.
1118
1119 In MS COM, this interface extends the IErrorInfo interface,
1120 in XPCOM, it extends the nsIException interface. In both cases,
1121 it provides a set of common attributes to retrieve error
1122 information.
1123
1124 Sometimes invocation of some component's method may involve methods of
1125 other components that may also fail (independently of this method's
1126 failure), or a series of non-fatal errors may precede a fatal error that
1127 causes method failure. In cases like that, it may be desirable to preserve
1128 information about all errors happened during method invocation and deliver
1129 it to the caller. The <link to="#next"/> attribute is intended
1130 specifically for this purpose and allows to represent a chain of errors
1131 through a single IVirtualBoxErrorInfo object set after method invocation.
1132
1133 Note that errors are stored to a chain in the reverse order, i.e. the
1134 initial error object you query right after method invocation is the last
1135 error set by the callee, the object it points to in the @a next attribute
1136 is the previous error and so on, up to the first error (which is the last
1137 in the chain).
1138 </desc>
1139
1140 <attribute name="resultCode" type="long" readonly="yes">
1141 <desc>
1142 Result code of the error.
1143 Usually, it will be the same as the result code returned
1144 by the method that provided this error information, but not
1145 always. For example, on Win32, CoCreateInstance() will most
1146 likely return E_NOINTERFACE upon unsuccessful component
1147 instantiation attempt, but not the value the component factory
1148 returned. Value is typed 'long', not 'result',
1149 to make interface usable from scripting languages.
1150 <note>
1151 In MS COM, there is no equivalent.
1152 In XPCOM, it is the same as nsIException::result.
1153 </note>
1154 </desc>
1155 </attribute>
1156
1157 <attribute name="interfaceID" type="uuid" mod="string" readonly="yes">
1158 <desc>
1159 UUID of the interface that defined the error.
1160 <note>
1161 In MS COM, it is the same as IErrorInfo::GetGUID, except for the
1162 data type.
1163 In XPCOM, there is no equivalent.
1164 </note>
1165 </desc>
1166 </attribute>
1167
1168 <attribute name="component" type="wstring" readonly="yes">
1169 <desc>
1170 Name of the component that generated the error.
1171 <note>
1172 In MS COM, it is the same as IErrorInfo::GetSource.
1173 In XPCOM, there is no equivalent.
1174 </note>
1175 </desc>
1176 </attribute>
1177
1178 <attribute name="text" type="wstring" readonly="yes">
1179 <desc>
1180 Text description of the error.
1181 <note>
1182 In MS COM, it is the same as IErrorInfo::GetDescription.
1183 In XPCOM, it is the same as nsIException::message.
1184 </note>
1185 </desc>
1186 </attribute>
1187
1188 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
1189 <desc>
1190 Next error object if there is any, or @c null otherwise.
1191 <note>
1192 In MS COM, there is no equivalent.
1193 In XPCOM, it is the same as nsIException::inner.
1194 </note>
1195 </desc>
1196 </attribute>
1197
1198 </interface>
1199
1200 <!--
1201 // IVirtualBox
1202 /////////////////////////////////////////////////////////////////////////
1203 -->
1204
1205 <interface
1206 name="IDHCPServer" extends="$unknown"
1207 uuid="6cfe387c-74fb-4ca7-bff6-973bec8af7a3"
1208 wsmap="managed"
1209 >
1210 <desc>
1211 The IDHCPServer interface represents the vbox dhcp server configuration.
1212
1213 To enumerate all the dhcp servers on the host, use the
1214 <link to="IVirtualBox::DHCPServers"/> attribute.
1215 </desc>
1216
1217 <attribute name="enabled" type="boolean">
1218 <desc>
1219 specifies if the dhcp server is enabled
1220 </desc>
1221 </attribute>
1222
1223 <attribute name="IPAddress" type="wstring" readonly="yes">
1224 <desc>
1225 specifies server IP
1226 </desc>
1227 </attribute>
1228
1229 <attribute name="networkMask" type="wstring" readonly="yes">
1230 <desc>
1231 specifies server network mask
1232 </desc>
1233 </attribute>
1234
1235 <attribute name="networkName" type="wstring" readonly="yes">
1236 <desc>
1237 specifies internal network name the server is used for
1238 </desc>
1239 </attribute>
1240
1241 <attribute name="lowerIP" type="wstring" readonly="yes">
1242 <desc>
1243 specifies from IP adrres in server address range
1244 </desc>
1245 </attribute>
1246
1247 <attribute name="upperIP" type="wstring" readonly="yes">
1248 <desc>
1249 specifies to IP adrres in server address range
1250 </desc>
1251 </attribute>
1252
1253 <method name="setConfiguration">
1254 <desc>
1255 configures the server
1256 <result name="E_INVALIDARG">
1257 invalid configuration supplied
1258 </result>
1259 </desc>
1260 <param name="IPAddress" type="wstring" dir="in">
1261 <desc>
1262 server IP address
1263 </desc>
1264 </param>
1265 <param name="networkMask" type="wstring" dir="in">
1266 <desc>
1267 server network mask
1268 </desc>
1269 </param>
1270 <param name="FromIPAddress" type="wstring" dir="in">
1271 <desc>
1272 server From IP address for address range
1273 </desc>
1274 </param>
1275 <param name="ToIPAddress" type="wstring" dir="in">
1276 <desc>
1277 server To IP address for address range
1278 </desc>
1279 </param>
1280 </method>
1281
1282 <method name="start">
1283 <desc>
1284 Starts DHCP server process.
1285 <result name="E_FAIL">
1286 Failed to start the process.
1287 </result>
1288 </desc>
1289 <param name="networkName" type="wstring" dir="in">
1290 <desc>
1291 Name of internal network DHCP server should attach to.
1292 </desc>
1293 </param>
1294 <param name="trunkName" type="wstring" dir="in">
1295 <desc>
1296 Name of internal network trunk.
1297 </desc>
1298 </param>
1299 <param name="trunkType" type="wstring" dir="in">
1300 <desc>
1301 Type of internal network trunk.
1302 </desc>
1303 </param>
1304 </method>
1305
1306 <method name="stop">
1307 <desc>
1308 Stops DHCP server process.
1309 <result name="E_FAIL">
1310 Failed to stop the process.
1311 </result>
1312 </desc>
1313 </method>
1314 </interface>
1315
1316 <interface
1317 name="IVirtualBox" extends="$unknown"
1318 uuid="2275c97d-31b0-41c7-a138-c77d3c28406e"
1319 wsmap="managed"
1320 >
1321 <desc>
1322 The IVirtualBox interface represents the main interface exposed by the
1323 product that provides virtual machine management.
1324
1325 An instance of IVirtualBox is required for the product to do anything
1326 useful. Even though the interface does not expose this, internally,
1327 IVirtualBox is implemented as a singleton and actually lives in the
1328 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
1329 IVirtualBox can track the state of all virtual machines on a particular
1330 host, regardless of which frontend started them.
1331
1332 To enumerate all the virtual machines on the host, use the
1333 <link to="IVirtualBox::machines"/> attribute.
1334 </desc>
1335
1336 <attribute name="version" type="wstring" readonly="yes">
1337 <desc>
1338 A string representing the version number of the product. The
1339 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
1340 last number represents the build number and will frequently change.
1341 </desc>
1342 </attribute>
1343
1344 <attribute name="revision" type="unsigned long" readonly="yes">
1345 <desc>
1346 The internal build revision number of the product.
1347 </desc>
1348 </attribute>
1349
1350 <attribute name="packageType" type="wstring" readonly="yes">
1351 <desc>
1352 A string representing the package type of this product. The
1353 format is OS_ARCH_DIST where OS is either WINDOWS, LINUX,
1354 SOLARIS, DARWIN. ARCH is either 32BITS or 64BITS. DIST
1355 is either GENERIC, UBUNTU_606, UBUNTU_710, or something like
1356 this.
1357 </desc>
1358 </attribute>
1359
1360 <attribute name="homeFolder" type="wstring" readonly="yes">
1361 <desc>
1362 Full path to the directory where the global settings file,
1363 <tt>VirtualBox.xml</tt>, is stored.
1364
1365 In this version of VirtualBox, the value of this property is
1366 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
1367 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
1368 as determined by the host OS), and cannot be changed.
1369
1370 This path is also used as the base to resolve relative paths in
1371 places where relative paths are allowed (unless otherwise
1372 expressly indicated).
1373 </desc>
1374 </attribute>
1375
1376 <attribute name="settingsFilePath" type="wstring" readonly="yes">
1377 <desc>
1378 Full name of the global settings file.
1379 The value of this property corresponds to the value of
1380 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
1381 </desc>
1382 </attribute>
1383
1384 <attribute name="host" type="IHost" readonly="yes">
1385 <desc>Associated host object.</desc>
1386 </attribute>
1387
1388 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
1389 <desc>Associated system information object.</desc>
1390 </attribute>
1391
1392 <attribute name="machines" type="IMachine" readonly="yes" safearray="yes">
1393 <desc>
1394 Array of machine objects registered within this VirtualBox instance.
1395 </desc>
1396 </attribute>
1397
1398 <attribute name="hardDisks" type="IMedium" readonly="yes" safearray="yes">
1399 <desc>
1400 Array of medium objects known to this VirtualBox installation.
1401
1402 This array contains only base media. All differencing
1403 media of the given base medium can be enumerated using
1404 <link to="IMedium::children"/>.
1405 </desc>
1406 </attribute>
1407
1408 <attribute name="DVDImages" type="IMedium" readonly="yes" safearray="yes">
1409 <desc>
1410 Array of CD/DVD image objects registered with this VirtualBox instance.
1411 </desc>
1412 </attribute>
1413
1414 <attribute name="floppyImages" type="IMedium" readonly="yes" safearray="yes">
1415 <desc>
1416 Array of floppy image objects registered with this VirtualBox instance.
1417 </desc>
1418 </attribute>
1419
1420 <attribute name="progressOperations" type="IProgress" readonly="yes" safearray="yes"/>
1421
1422 <attribute name="guestOSTypes" type="IGuestOSType" readonly="yes" safearray="yes"/>
1423
1424 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
1425 <desc>
1426 Collection of global shared folders. Global shared folders are
1427 available to all virtual machines.
1428
1429 New shared folders are added to the collection using
1430 <link to="#createSharedFolder"/>. Existing shared folders can be
1431 removed using <link to="#removeSharedFolder"/>.
1432
1433 <note>
1434 In the current version of the product, global shared folders are not
1435 implemented and therefore this collection is always empty.
1436 </note>
1437 </desc>
1438 </attribute>
1439
1440 <attribute name="performanceCollector" type="IPerformanceCollector" readonly="yes">
1441 <desc>
1442 Associated performance collector object.
1443 </desc>
1444 </attribute>
1445
1446 <attribute name="DHCPServers" type="IDHCPServer" safearray="yes" readonly="yes">
1447 <desc>
1448 dhcp server settings.
1449 </desc>
1450 </attribute>
1451
1452 <attribute name="eventSource" type="IEventSource" readonly="yes">
1453 <desc>
1454 Event source for VirtualBox events.
1455 </desc>
1456 </attribute>
1457
1458
1459 <method name="createMachine">
1460 <desc>
1461 Creates a new virtual machine.
1462
1463 The new machine is created unregistered, with the initial configuration
1464 set according to the specified guest OS type. A typical sequence of
1465 actions to create a new virtual machine is as follows:
1466
1467 <ol>
1468 <li>
1469 Call this method to have a new machine created. The returned machine
1470 object will be "mutable" allowing to change any machine property.
1471 </li>
1472
1473 <li>
1474 Configure the machine using the appropriate attributes and methods.
1475 </li>
1476
1477 <li>
1478 Call <link to="IMachine::saveSettings" /> to write the settings
1479 to the machine's XML settings file. The configuration of the newly
1480 created machine will not be saved to disk until this method is
1481 called.
1482 </li>
1483
1484 <li>
1485 Call <link to="#registerMachine" /> to add the machine to the list
1486 of machines known to VirtualBox.
1487 </li>
1488 </ol>
1489
1490 You should specify valid name for the newly created machine when calling
1491 this method. See the <link to="IMachine::name"/> attribute description
1492 for more details about the machine name.
1493
1494 The specified guest OS type identifier must match an ID of one of known
1495 guest OS types listed in the <link to="IVirtualBox::guestOSTypes"/>
1496 array.
1497
1498 Every machine has a <i>settings file</i> that is used to store
1499 the machine configuration. This file is stored in a directory called the
1500 <i>machine settings subfolder</i>. Both the settings subfolder and file
1501 will have a name that corresponds to the name of the virtual machine.
1502 You can specify where to create the machine setting subfolder using the
1503 @a baseFolder argument. The base folder can be absolute (full path) or
1504 relative to the <link to="IVirtualBox::homeFolder">VirtualBox home
1505 directory</link>.
1506
1507 If @a baseFolder is a @c null or empty string (which is recommended), the
1508 <link to="ISystemProperties::defaultMachineFolder">default machine
1509 settings folder</link> will be used as a base folder for the created
1510 machine. Otherwise the given base folder will be used. In either case,
1511 the full path to the resulting settings file has the following
1512 structure:
1513 <pre>
1514 &lt;base_folder&gt;/&lt;machine_name&gt;/&lt;machine_name&gt;.xml
1515 </pre>
1516
1517 Note that if the resulting settings file already exists, this method
1518 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1519
1520 Optionally, you may specify an UUID of to assign to the created machine.
1521 However, this is not recommended and you should normally pass an empty
1522 (@c null) UUID to this method so that a new UUID will be automatically
1523 generated for every created machine. You can use UUID
1524 00000000-0000-0000-0000-000000000000 as @c null value.
1525
1526 <note>
1527 There is no way to change the name of the settings file or
1528 subfolder of the created machine directly.
1529 </note>
1530
1531 <result name="VBOX_E_OBJECT_NOT_FOUND">
1532 @a osTypeId is invalid.
1533 </result>
1534 <result name="VBOX_E_FILE_ERROR">
1535 Resulting settings file name is invalid or the settings file already
1536 exists or could not be created due to an I/O error.
1537 </result>
1538 <result name="E_INVALIDARG">
1539 @a name is empty or @c null.
1540 </result>
1541 </desc>
1542
1543 <param name="name" type="wstring" dir="in">
1544 <desc>Machine name.</desc>
1545 </param>
1546 <param name="osTypeId" type="wstring" dir="in">
1547 <desc>Guest OS Type ID.</desc>
1548 </param>
1549 <param name="baseFolder" type="wstring" dir="in">
1550 <desc>Base machine folder (optional).</desc>
1551 </param>
1552 <param name="id" type="uuid" mod="string" dir="in">
1553 <desc>Machine UUID (optional).</desc>
1554 </param>
1555 <param name="override" type="boolean" dir="in">
1556 <desc>Create the VM even if there are conflicting files.</desc>
1557 </param>
1558 <param name="machine" type="IMachine" dir="return">
1559 <desc>Created machine object.</desc>
1560 </param>
1561 </method>
1562
1563 <method name="createLegacyMachine">
1564 <desc>
1565 Creates a new virtual machine in "legacy" mode, using the specified
1566 settings file to store machine settings.
1567
1568 As opposed to machines created by <link to="#createMachine"/>,
1569 the settings file of the machine created in "legacy" mode is not
1570 automatically renamed when the machine name is changed -- it will always
1571 remain the same as specified in this method call.
1572
1573 The specified settings file name can be absolute (full path) or relative
1574 to the <link to="IVirtualBox::homeFolder">VirtualBox home
1575 directory</link>. If the file name doesn't contain an extension, the
1576 default extension (.xml) will be appended.
1577
1578 Note that the configuration of the newly created machine is not
1579 saved to disk (and therefore no settings file is created)
1580 until <link to="IMachine::saveSettings"/> is called. If the
1581 specified settings file already exists, this method
1582 will fail with <link to="VBOX_E_FILE_ERROR"/>.
1583
1584 See <link to="#createMachine"/> for more information.
1585
1586 @deprecated This method may be removed later. Use <link
1587 to="IVirtualBox::createMachine"/> instead.
1588
1589 <note>
1590 There is no way to change the name of the settings file
1591 of the machine created in "legacy" mode.
1592 </note>
1593
1594 <result name="VBOX_E_OBJECT_NOT_FOUND">
1595 @a osTypeId is invalid.
1596 </result>
1597 <result name="VBOX_E_FILE_ERROR">
1598 @a settingsFile is invalid or the settings file already exists or
1599 could not be created due to an I/O error.
1600 </result>
1601 <result name="E_INVALIDARG">
1602 @a name or @a settingsFile is empty or @c null.
1603 </result>
1604 </desc>
1605
1606 <param name="name" type="wstring" dir="in">
1607 <desc>Machine name.</desc>
1608 </param>
1609 <param name="osTypeId" type="wstring" dir="in">
1610 <desc>Machine OS Type ID.</desc>
1611 </param>
1612 <param name="settingsFile" type="wstring" dir="in">
1613 <desc>Name of the machine settings file.</desc>
1614 </param>
1615 <param name="id" type="uuid" mod="string" dir="in">
1616 <desc>Machine UUID (optional).</desc>
1617 </param>
1618 <param name="machine" type="IMachine" dir="return">
1619 <desc>Created machine object.</desc>
1620 </param>
1621 </method>
1622
1623 <method name="openMachine">
1624 <desc>
1625 Opens a virtual machine from the existing settings file.
1626 The opened machine remains unregistered until you call
1627 <link to="#registerMachine"/>.
1628
1629 The specified settings file name can be absolute
1630 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1631 VirtualBox home directory</link>. This file must exist
1632 and must be a valid machine settings file whose contents
1633 will be used to construct the machine object.
1634
1635 @deprecated Will be removed soon.
1636 <result name="VBOX_E_FILE_ERROR">
1637 Settings file name invalid, not found or sharing violation.
1638 </result>
1639 </desc>
1640 <param name="settingsFile" type="wstring" dir="in">
1641 <desc>
1642 Name of the machine settings file.
1643 </desc>
1644 </param>
1645 <param name="machine" type="IMachine" dir="return">
1646 <desc>Opened machine object.</desc>
1647 </param>
1648 <note>
1649 <link to="IMachine::settingsModified"/> will return
1650 @c false for the created machine, until any of machine settings
1651 are changed.
1652 </note>
1653 </method>
1654
1655 <method name="registerMachine">
1656 <desc>
1657
1658 Registers the machine previously created using
1659 <link to="#createMachine"/> or opened using
1660 <link to="#openMachine"/> within this VirtualBox installation. After
1661 successful method invocation, the
1662 <link to="IMachineRegisteredEvent"/> event is fired.
1663
1664 <note>
1665 This method implicitly calls <link to="IMachine::saveSettings"/>
1666 to save all current machine settings before registering it.
1667 </note>
1668
1669 <result name="VBOX_E_OBJECT_NOT_FOUND">
1670 No matching virtual machine found.
1671 </result>
1672 <result name="VBOX_E_INVALID_OBJECT_STATE">
1673 Virtual machine was not created within this VirtualBox instance.
1674 </result>
1675
1676 </desc>
1677 <param name="machine" type="IMachine" dir="in"/>
1678 </method>
1679
1680 <method name="getMachine">
1681 <desc>
1682 Attempts to find a virtual machine given its UUID.
1683 To look up a machine by name, use <link to="IVirtualBox::findMachine" />
1684 instead.
1685
1686 <result name="VBOX_E_OBJECT_NOT_FOUND">
1687 Could not find registered machine matching @a id.
1688 </result>
1689
1690 </desc>
1691 <param name="id" type="uuid" mod="string" dir="in"/>
1692 <param name="machine" type="IMachine" dir="return"/>
1693 </method>
1694
1695 <method name="findMachine">
1696 <desc>
1697 Attempts to find a virtual machine given its name.
1698 To look up a machine by UUID, use <link to="IVirtualBox::getMachine" />
1699 instead.
1700
1701 <result name="VBOX_E_OBJECT_NOT_FOUND">
1702 Could not find registered machine matching @a name.
1703 </result>
1704
1705 </desc>
1706 <param name="name" type="wstring" dir="in"/>
1707 <param name="machine" type="IMachine" dir="return"/>
1708 </method>
1709
1710 <method name="unregisterMachine">
1711 <desc>
1712 Unregisters the machine previously registered using
1713 <link to="#registerMachine"/>. After successful method invocation, the
1714 <link to="IMachineRegisteredEvent"/> event is fired.
1715
1716 <note>
1717 The specified machine must not be in the Saved state, have an open
1718 (or a spawning) direct session associated with it, have snapshots or
1719 have any medium attached.
1720 </note>
1721
1722 <note>
1723 This method implicitly calls <link to="IMachine::saveSettings"/> to
1724 save all current machine settings before unregistering it.
1725 </note>
1726
1727 <note>
1728 If the given machine is inaccessible (see
1729 <link to="IMachine::accessible"/>), it will be unregistered and
1730 fully uninitialized right afterwards. As a result, the returned
1731 machine object will be unusable and an attempt to call
1732 <b>any</b> method will return the "Object not ready" error.
1733 </note>
1734
1735 <result name="VBOX_E_OBJECT_NOT_FOUND">
1736 Could not find registered machine matching @a id.
1737 </result>
1738 <result name="VBOX_E_INVALID_VM_STATE">
1739 Machine is in Saved state.
1740 </result>
1741 <result name="VBOX_E_INVALID_OBJECT_STATE">
1742 Machine has snapshot or open session or medium attached.
1743 </result>
1744 </desc>
1745
1746 <param name="id" type="uuid" mod="string" dir="in">
1747 <desc>UUID of the machine to unregister.</desc>
1748 </param>
1749 <param name="fCloseMedia" type="boolean" dir="in">
1750 <desc>If true, the method will automatically detach all media from the
1751 machine and its snapshots, call <link to="IMedium::close" /> on each
1752 medium, and the paths of all media files involved will be reported to
1753 the caller in the @a aFiles array so the caller can then delete the
1754 image files.
1755 If false, the method will fail if media attachments are present.</desc>
1756 </param>
1757 <param name="aFiles" type="wstring" safearray="yes" dir="out">
1758 <desc>
1759 List of all files detached from medium attachments of the machine, if
1760 @a fDetachMedia is true.
1761 </desc>
1762 </param>
1763 <param name="machine" type="IMachine" dir="out">
1764 <desc>Unregistered machine object.</desc>
1765 </param>
1766 </method>
1767
1768 <method name="createAppliance">
1769 <desc>
1770 Creates a new appliance object, which represents an appliance in the Open Virtual Machine
1771 Format (OVF). This can then be used to import an OVF appliance into VirtualBox or to export
1772 machines as an OVF appliance; see the documentation for <link to="IAppliance" /> for details.
1773 </desc>
1774 <param name="appliance" type="IAppliance" dir="return">
1775 <desc>New appliance.</desc>
1776 </param>
1777 </method>
1778
1779 <method name="createHardDisk">
1780 <desc>
1781 Creates a new base medium object that will use the given storage
1782 format and location for medium data.
1783
1784 Note that the actual storage unit is not created by this method. In
1785 order to do it, and before you are able to attach the created medium
1786 to virtual machines, you must call one of the following methods to
1787 allocate a format-specific storage unit at the specified location:
1788 <ul>
1789 <li><link to="IMedium::createBaseStorage"/></li>
1790 <li><link to="IMedium::createDiffStorage"/></li>
1791 </ul>
1792
1793 Some medium attributes, such as <link to="IMedium::id"/>, may
1794 remain uninitialized until the medium storage unit is successfully
1795 created by one of the above methods.
1796
1797 After the storage unit is successfully created, the medium gets
1798 remembered by this VirtualBox installation and will be accessible
1799 through <link to="#getHardDisk"/> and <link to="#findHardDisk"/>
1800 methods. Remembered base medium are also returned as part of
1801 the <link to="#hardDisks"/> array. See IMedium for more details.
1802
1803 The list of all storage formats supported by this VirtualBox
1804 installation can be obtained using
1805 <link to="ISystemProperties::mediumFormats"/>. If the @a format
1806 attribute is empty or @c null then the default storage format
1807 specified by <link to="ISystemProperties::defaultHardDiskFormat"/> will
1808 be used for creating a storage unit of the medium.
1809
1810 Note that the format of the location string is storage format specific.
1811 See <link to="IMedium::location"/>, IMedium and
1812 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
1813
1814 <result name="VBOX_E_OBJECT_NOT_FOUND">
1815 @a format identifier is invalid. See
1816 <link to="ISystemProperties::mediumFormats"/>.
1817 </result>
1818 <result name="VBOX_E_FILE_ERROR">
1819 @a location is a not valid file name (for file-based formats only).
1820 </result>
1821 </desc>
1822 <param name="format" type="wstring" dir="in">
1823 <desc>
1824 Identifier of the storage format to use for the new medium.
1825 </desc>
1826 </param>
1827 <param name="location" type="wstring" dir="in">
1828 <desc>
1829 Location of the storage unit for the new medium.
1830 </desc>
1831 </param>
1832 <param name="medium" type="IMedium" dir="return">
1833 <desc>Created medium object.</desc>
1834 </param>
1835 </method>
1836
1837 <method name="openHardDisk">
1838 <desc>
1839 Opens a medium from an existing location, optionally replacing
1840 the image UUID and/or parent UUID.
1841
1842 After the medium is successfully opened by this method, it gets
1843 remembered by (known to) this VirtualBox installation and will be
1844 accessible through <link to="#getHardDisk"/> and
1845 <link to="#findHardDisk"/> methods. Remembered base media
1846 are also returned as part of the <link to="#hardDisks"/> array and can
1847 be attached to virtual machines. See IMedium for more details.
1848
1849 If a differencing medium is to be opened by this method, the
1850 operation will succeed only if its parent medium and all ancestors,
1851 if any, are already known to this VirtualBox installation (for example,
1852 were opened by this method before).
1853
1854 This method tries to guess the storage format of the specified medium
1855 by reading medium data at the specified location.
1856
1857 If @a accessMode is ReadWrite (which it should be), the image is opened
1858 for read/write access and must have according permissions, as VirtualBox
1859 may actually write status information into the disk's metadata sections.
1860
1861 Note that write access is required for all typical image usage in VirtualBox,
1862 since VirtualBox may need to write metadata such as a UUID into the image.
1863 The only exception is opening a source image temporarily for copying and
1864 cloning when the image will quickly be closed again.
1865
1866 Note that the format of the location string is storage format specific.
1867 See <link to="IMedium::location"/>, IMedium and
1868 <link to="ISystemProperties::defaultHardDiskFolder"/> for more details.
1869
1870 <result name="VBOX_E_FILE_ERROR">
1871 Invalid medium storage file location or could not find the medium
1872 at the specified location.
1873 </result>
1874 <result name="VBOX_E_IPRT_ERROR">
1875 Could not get medium storage format.
1876 </result>
1877 <result name="E_INVALIDARG">
1878 Invalid medium storage format.
1879 </result>
1880
1881 </desc>
1882 <param name="location" type="wstring" dir="in">
1883 <desc>
1884 Location of the storage unit that contains medium data in one of
1885 the supported storage formats.
1886 </desc>
1887 </param>
1888 <param name="accessMode" type="AccessMode" dir="in">
1889 <desc>
1890 Determines whether to open the image in read/write or read-only mode.
1891 </desc>
1892 </param>
1893 <param name="setImageId" type="boolean" dir="in">
1894 <desc>
1895 Select whether a new image UUID is set or not.
1896 </desc>
1897 </param>
1898 <param name="imageId" type="uuid" mod="string" dir="in">
1899 <desc>
1900 New UUID for the image. If an empty string is passed, then a new
1901 UUID is automatically created. Specifying a zero UUIDs is not valid.
1902 </desc>
1903 </param>
1904 <param name="setParentId" type="boolean" dir="in">
1905 <desc>
1906 Select whether a new parent UUID is set or not.
1907 </desc>
1908 </param>
1909 <param name="parentId" type="uuid" mod="string" dir="in">
1910 <desc>
1911 New parent UUID for the image. If an empty string is passed, then a
1912 new UUID is automatically created, provided @a setParentId is
1913 @c true. A zero UUID is valid.
1914 </desc>
1915 </param>
1916 <param name="medium" type="IMedium" dir="return">
1917 <desc>Opened medium object.</desc>
1918 </param>
1919 </method>
1920
1921 <method name="getHardDisk" const="yes">
1922 <desc>
1923 Returns a medium with the given UUID.
1924
1925 The medium with the given UUID must be known to this VirtualBox
1926 installation, i.e. it must be previously created by
1927 <link to="#createHardDisk"/> or opened by <link
1928 to="#openHardDisk"/>, or attached to some known virtual machine.
1929
1930 <result name="VBOX_E_OBJECT_NOT_FOUND">
1931 No medium object matching @a id found.
1932 </result>
1933
1934 </desc>
1935 <param name="id" type="uuid" mod="string" dir="in">
1936 <desc>UUID of the medium to look for.</desc>
1937 </param>
1938 <param name="medium" type="IMedium" dir="return">
1939 <desc>Found medium object.</desc>
1940 </param>
1941 </method>
1942
1943 <method name="findHardDisk">
1944 <desc>
1945 Returns a medium that uses the given location to store medium data.
1946
1947 The given medium must be known to this VirtualBox installation, i.e.
1948 it must be previously created by
1949 <link to="#createHardDisk"/> or opened by <link
1950 to="#openHardDisk"/>, or attached to some known virtual machine.
1951
1952 The search is done by comparing the value of the @a location argument to
1953 the <link to="IMedium::location"/> attribute of each known medium.
1954
1955 For locations represented by file names in the host's file system, the
1956 requested location can be a path relative to the
1957 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
1958 only a file name without any path is given, the
1959 <link to="ISystemProperties::defaultHardDiskFolder"> default medium
1960 folder</link> will be prepended to the file name before searching. Note
1961 that on case sensitive file systems, a case sensitive comparison is
1962 performed, otherwise the case of symbols in the file path is ignored.
1963
1964 <result name="VBOX_E_OBJECT_NOT_FOUND">
1965 No medium object matching @a location found.
1966 </result>
1967
1968 </desc>
1969 <param name="location" type="wstring" dir="in">
1970 <desc>Location string to search for.</desc>
1971 </param>
1972 <param name="medium" type="IMedium" dir="return">
1973 <desc>Found medium object.</desc>
1974 </param>
1975 </method>
1976
1977 <method name="openDVDImage">
1978 <desc>
1979 Opens a CD/DVD image contained in the specified file of the supported
1980 format and assigns it the given UUID.
1981
1982 After the image is successfully opened by this method, it gets
1983 remembered by (known to) this VirtualBox installation and will be
1984 accessible through <link to="#getDVDImage"/> and
1985 <link to="#findDVDImage"/> methods. Remembered images are also
1986 returned as part of the <link to="#DVDImages"/> array and can be mounted
1987 to virtual machines. See IMedium for more details.
1988
1989 See <link to="IMedium::location"/> to get more details about the format
1990 of the location string.
1991
1992 <note>
1993 Currently only ISO 9960 CD/DVD images are supported by VirtualBox.
1994 </note>
1995
1996 <result name="VBOX_E_FILE_ERROR">
1997 Invalid CD/DVD image file location or could not find the CD/DVD
1998 image at the specified location.
1999 </result>
2000 <result name="VBOX_E_INVALID_OBJECT_STATE">
2001 CD/DVD image already exists in the media registry.
2002 </result>
2003
2004 </desc>
2005 <param name="location" type="wstring" dir="in">
2006 <desc>
2007 Full path to the file that contains a valid CD/DVD image.
2008 </desc>
2009 </param>
2010 <param name="id" type="uuid" mod="string" dir="in">
2011 <desc>
2012 UUID to assign to the given image within this VirtualBox installation.
2013 If an empty (@c null) UUID is specified, the system will randomly
2014 generate a new UUID.
2015 </desc>
2016 </param>
2017 <param name="image" type="IMedium" dir="return">
2018 <desc>Opened CD/DVD image object.</desc>
2019 </param>
2020 </method>
2021
2022 <method name="getDVDImage">
2023 <desc>
2024 Returns a CD/DVD image with the given UUID.
2025
2026 The image with the given UUID must be known to this VirtualBox
2027 installation, i.e. it must be previously opened by <link
2028 to="#openDVDImage"/>, or mounted to some known virtual machine.
2029
2030 <result name="VBOX_E_OBJECT_NOT_FOUND">
2031 No matching DVD image found in the media registry.
2032 </result>
2033
2034 </desc>
2035 <param name="id" type="uuid" mod="string" dir="in">
2036 <desc>UUID of the image to look for.</desc>
2037 </param>
2038 <param name="image" type="IMedium" dir="return">
2039 <desc>Found CD/DVD image object.</desc>
2040 </param>
2041 </method>
2042
2043 <method name="findDVDImage">
2044 <desc>
2045 Returns a CD/DVD image with the given image location.
2046
2047 The image with the given UUID must be known to this VirtualBox
2048 installation, i.e. it must be previously opened by <link
2049 to="#openDVDImage"/>, or mounted to some known virtual machine.
2050
2051 The search is done by comparing the value of the @a location argument to
2052 the <link to="IMedium::location"/> attribute of each known CD/DVD image.
2053
2054 The requested location can be a path relative to the
2055 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2056 only a file name without any path is given, the
2057 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2058 folder</link> will be prepended to the file name before searching. Note
2059 that on case sensitive file systems, a case sensitive comparison is
2060 performed, otherwise the case in the file path is ignored.
2061
2062 <result name="VBOX_E_FILE_ERROR">
2063 Invalid image file location.
2064 </result>
2065 <result name="VBOX_E_OBJECT_NOT_FOUND">
2066 No matching DVD image found in the media registry.
2067 </result>
2068
2069 </desc>
2070 <param name="location" type="wstring" dir="in">
2071 <desc>CD/DVD image file path to look for.</desc>
2072 </param>
2073 <param name="image" type="IMedium" dir="return">
2074 <desc>Found CD/DVD image object.</desc>
2075 </param>
2076 </method>
2077
2078 <method name="openFloppyImage">
2079 <desc>
2080 Opens a floppy image contained in the specified file of the supported
2081 format and assigns it the given UUID.
2082
2083 After the image is successfully opened by this method, it gets
2084 remembered by (known to) this VirtualBox installation and will be
2085 accessible through <link to="#getFloppyImage"/> and
2086 <link to="#findFloppyImage"/> methods. Remembered images are also
2087 returned as part of the <link to="#floppyImages"/> array and can be
2088 mounted to virtual machines. See IMedium for more details.
2089
2090 See <link to="IMedium::location"/> to get more details about the format
2091 of the location string.
2092
2093 <result name="VBOX_E_FILE_ERROR">
2094 Invalid floppy image file location or could not find the floppy
2095 image at the specified location.
2096 </result>
2097 <result name="VBOX_E_INVALID_OBJECT_STATE">
2098 Floppy image already exists in the media registry.
2099 </result>
2100
2101 <note>
2102 Currently, only raw floppy images are supported by VirtualBox.
2103 </note>
2104 </desc>
2105 <param name="location" type="wstring" dir="in">
2106 <desc>
2107 Full path to the file that contains a valid floppy image.
2108 </desc>
2109 </param>
2110 <param name="id" type="uuid" mod="string" dir="in">
2111 <desc>
2112 UUID to assign to the given image file within this VirtualBox
2113 installation. If an empty (@c null) UUID is specified, the system will
2114 randomly generate a new UUID.
2115 </desc>
2116 </param>
2117 <param name="image" type="IMedium" dir="return">
2118 <desc>Opened floppy image object.</desc>
2119 </param>
2120 </method>
2121
2122 <method name="getFloppyImage">
2123 <desc>
2124 Returns a floppy image with the given UUID.
2125
2126 The image with the given UUID must be known to this VirtualBox
2127 installation, i.e. it must be previously opened by <link
2128 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2129
2130 <result name="VBOX_E_OBJECT_NOT_FOUND">
2131 No matching floppy image found in the media registry.
2132 </result>
2133
2134 </desc>
2135 <param name="id" type="uuid" mod="string" dir="in">
2136 <desc>UUID of the image to look for.</desc>
2137 </param>
2138 <param name="image" type="IMedium" dir="return">
2139 <desc>Found floppy image object.</desc>
2140 </param>
2141 </method>
2142
2143 <method name="findFloppyImage">
2144 <desc>
2145 Returns a floppy image with the given image location.
2146
2147 The image with the given UUID must be known to this VirtualBox
2148 installation, i.e. it must be previously opened by <link
2149 to="#openFloppyImage"/>, or mounted to some known virtual machine.
2150
2151 The search is done by comparing the value of the @a location argument to
2152 the <link to="IMedium::location"/> attribute of each known floppy image.
2153
2154 The requested location can be a path relative to the
2155 <link to="IVirtualBox::homeFolder">VirtualBox home folder</link>. If
2156 only a file name without any path is given, the
2157 <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
2158 folder</link> will be prepended to the file name before searching. Note
2159 that on case sensitive file systems, a case sensitive comparison is
2160 performed, otherwise the case of symbols in the file path is ignored.
2161
2162 <result name="VBOX_E_FILE_ERROR">
2163 Invalid image file location.
2164 </result>
2165 <result name="VBOX_E_OBJECT_NOT_FOUND">
2166 No matching floppy image found in the media registry.
2167 </result>
2168
2169 </desc>
2170 <param name="location" type="wstring" dir="in">
2171 <desc>Floppy image file path to look for.</desc>
2172 </param>
2173 <param name="image" type="IMedium" dir="return">
2174 <desc>Found floppy image object.</desc>
2175 </param>
2176 </method>
2177
2178 <method name="getGuestOSType">
2179 <desc>
2180 Returns an object describing the specified guest OS type.
2181
2182 The requested guest OS type is specified using a string which is a
2183 mnemonic identifier of the guest operating system, such as
2184 <tt>"win31"</tt> or <tt>"ubuntu"</tt>. The guest OS type ID of a
2185 particular virtual machine can be read or set using the
2186 <link to="IMachine::OSTypeId"/> attribute.
2187
2188 The <link to="IVirtualBox::guestOSTypes"/> collection contains all
2189 available guest OS type objects. Each object has an
2190 <link to="IGuestOSType::id"/> attribute which contains an identifier of
2191 the guest OS this object describes.
2192
2193 <result name="E_INVALIDARG">
2194 @a id is not a valid Guest OS type.
2195 </result>
2196
2197 </desc>
2198 <param name="id" type="uuid" mod="string" dir="in">
2199 <desc>Guest OS type ID string.</desc>
2200 </param>
2201 <param name="type" type="IGuestOSType" dir="return">
2202 <desc>Guest OS type object.</desc>
2203 </param>
2204 </method>
2205
2206 <method name="createSharedFolder">
2207 <desc>
2208 Creates a new global shared folder by associating the given logical
2209 name with the given host path, adds it to the collection of shared
2210 folders and starts sharing it. Refer to the description of
2211 <link to="ISharedFolder"/> to read more about logical names.
2212 <note>
2213 In the current implementation, this operation is not
2214 implemented.
2215 </note>
2216 </desc>
2217 <param name="name" type="wstring" dir="in">
2218 <desc>Unique logical name of the shared folder.</desc>
2219 </param>
2220 <param name="hostPath" type="wstring" dir="in">
2221 <desc>Full path to the shared folder in the host file system.</desc>
2222 </param>
2223 <param name="writable" type="boolean" dir="in">
2224 <desc>Whether the share is writable or readonly</desc>
2225 </param>
2226 </method>
2227
2228 <method name="removeSharedFolder">
2229 <desc>
2230 Removes the global shared folder with the given name previously
2231 created by <link to="#createSharedFolder"/> from the collection of
2232 shared folders and stops sharing it.
2233 <note>
2234 In the current implementation, this operation is not
2235 implemented.
2236 </note>
2237 </desc>
2238 <param name="name" type="wstring" dir="in">
2239 <desc>Logical name of the shared folder to remove.</desc>
2240 </param>
2241 </method>
2242
2243 <method name="getExtraDataKeys">
2244 <desc>
2245 Returns an array representing the global extra data keys which currently
2246 have values defined.
2247 </desc>
2248 <param name="value" type="wstring" dir="return" safearray="yes">
2249 <desc>Array of extra data keys.</desc>
2250 </param>
2251 </method>
2252
2253 <method name="getExtraData">
2254 <desc>
2255 Returns associated global extra data.
2256
2257 If the requested data @a key does not exist, this function will
2258 succeed and return an empty string in the @a value argument.
2259
2260 <result name="VBOX_E_FILE_ERROR">
2261 Settings file not accessible.
2262 </result>
2263 <result name="VBOX_E_XML_ERROR">
2264 Could not parse the settings file.
2265 </result>
2266
2267 </desc>
2268 <param name="key" type="wstring" dir="in">
2269 <desc>Name of the data key to get.</desc>
2270 </param>
2271 <param name="value" type="wstring" dir="return">
2272 <desc>Value of the requested data key.</desc>
2273 </param>
2274 </method>
2275
2276 <method name="setExtraData">
2277 <desc>
2278 Sets associated global extra data.
2279
2280 If you pass @c null or empty string as a key @a value, the given @a key
2281 will be deleted.
2282
2283 <note>
2284 Before performing the actual data change, this method will ask all
2285 registered event listener using the
2286 <link to="IExtraDataCanChangeEvent"/>
2287 notification for a permission. If one of the listeners refuses the
2288 new value, the change will not be performed.
2289 </note>
2290 <note>
2291 On success, the
2292 <link to="IExtraDataChanged"/> notification
2293 is called to inform all registered listeners about a successful data
2294 change.
2295 </note>
2296
2297 <result name="VBOX_E_FILE_ERROR">
2298 Settings file not accessible.
2299 </result>
2300 <result name="VBOX_E_XML_ERROR">
2301 Could not parse the settings file.
2302 </result>
2303 <result name="E_ACCESSDENIED">
2304 Modification request refused.
2305 </result>
2306
2307 </desc>
2308 <param name="key" type="wstring" dir="in">
2309 <desc>Name of the data key to set.</desc>
2310 </param>
2311 <param name="value" type="wstring" dir="in">
2312 <desc>Value to assign to the key.</desc>
2313 </param>
2314 </method>
2315
2316 <method name="openSession">
2317 <desc>
2318 Opens a new direct session with the given virtual machine.
2319
2320 A direct session acts as a local lock on the given VM.
2321 There can be only one direct session open at a time for every
2322 virtual machine, protecting the VM from being manipulated by
2323 conflicting actions from different processes. Only after a
2324 direct session has been opened, one can change all VM settings
2325 and execute the VM in the process space of the session object.
2326
2327 Sessions therefore can be compared to mutex semaphores that
2328 lock a given VM for modification and execution.
2329 See <link to="ISession">ISession</link> for details.
2330
2331 <note>Unless you are writing a new VM frontend, you will not
2332 want to execute a VM in the current process. To spawn a new
2333 process that executes a VM, use
2334 <link to="IVirtualBox::openRemoteSession" />
2335 instead.</note>
2336
2337 Upon successful return, the session object can be used to
2338 get access to the machine and to the VM console.
2339
2340 In VirtualBox terminology, the machine becomes "mutable" after
2341 a session has been opened. Note that the "mutable" machine
2342 object, on which you may invoke IMachine methods to change its
2343 settings, will be a different object from the immutable IMachine
2344 objects returned by various IVirtualBox methods. To obtain a
2345 mutable IMachine object (upon which you can invoke settings methods),
2346 use the <link to="ISession::machine" /> attribute.
2347
2348 One must always call <link to="ISession::close" /> to release the
2349 lock on the machine, or the machine's state will eventually be
2350 set to "Aborted".
2351
2352 In other words, to change settings on a machine, the following
2353 sequence is typically performed:
2354
2355 <ol>
2356 <li>Call this method (openSession) to have a machine locked for
2357 the current session.</li>
2358
2359 <li>Obtain a mutable IMachine object from <link to="ISession::machine" />.</li>
2360
2361 <li>Change the settings of the machine.</li>
2362
2363 <li>Call <link to="IMachine::saveSettings" />.</li>
2364
2365 <li>Close the session by calling <link to="ISession::close"/>.</li>
2366 </ol>
2367
2368 <result name="E_UNEXPECTED">
2369 Virtual machine not registered.
2370 </result>
2371 <result name="E_ACCESSDENIED">
2372 Process not started by OpenRemoteSession.
2373 </result>
2374 <result name="VBOX_E_OBJECT_NOT_FOUND">
2375 No matching virtual machine found.
2376 </result>
2377 <result name="VBOX_E_INVALID_OBJECT_STATE">
2378 Session already open or being opened.
2379 </result>
2380 <result name="VBOX_E_VM_ERROR">
2381 Failed to assign machine to session.
2382 </result>
2383
2384 </desc>
2385 <param name="session" type="ISession" dir="in">
2386 <desc>
2387 Session object that will represent the opened session after
2388 successful method invocation. This object must not represent
2389 the already open session.
2390 <note>
2391 This session will be automatically closed if the
2392 VirtualBox server is terminated for some reason.
2393 </note>
2394 </desc>
2395 </param>
2396 <param name="machineId" type="uuid" mod="string" dir="in">
2397 <desc>ID of the virtual machine to open a session with.</desc>
2398 </param>
2399 </method>
2400
2401 <method name="openRemoteSession">
2402 <desc>
2403 Spawns a new process that executes a virtual machine (called a
2404 "remote session").
2405
2406 Opening a remote session causes the VirtualBox server to start a new
2407 process that opens a direct session with the given VM. As a result, the
2408 VM is locked by that direct session in the new process, preventing
2409 conflicting changes from other processes. Since sessions act as locks
2410 that prevent conflicting changes, one cannot open a remote session
2411 for a VM that already has another open session (direct or remote), or
2412 is currently in the process of opening one (see <link
2413 to="IMachine::sessionState"/>).
2414
2415 While the remote session still provides some level of control over the
2416 VM execution to the caller (using the <link to="IConsole" /> interface),
2417 not all VM settings are available for modification within the remote
2418 session context.
2419
2420 This operation can take some time (a new VM is started in a new process,
2421 for which memory and other resources need to be set up). Because of this,
2422 an <link to="IProgress" /> is returned to allow the caller to wait for this
2423 asynchronous operation to be completed. Until then, the remote session
2424 object remains in the closed state, and accessing the machine or its
2425 console through it is invalid. It is recommended to use
2426 <link to="IProgress::waitForCompletion" /> or similar calls to wait for
2427 completion. Completion is signalled when the VM is powered on. Error
2428 messages etc. can be queried via the progress object, if available.
2429
2430 As with all <link to="ISession" /> objects, it is recommended to call
2431 <link to="ISession::close" /> on the local session object once openRemoteSession()
2432 has been called. However, the session's state (see <link to="ISession::state" />)
2433 will not return to "Closed" until the remote session has also closed (i.e.
2434 until the VM is no longer running). In that case, however, the state of
2435 the session will automatically change back to "Closed".
2436
2437 Currently supported session types (values of the @a type
2438 argument) are:
2439 <ul>
2440 <li><tt>"gui"</tt>: VirtualBox Qt GUI session</li>
2441 <li><tt>"vrdp"</tt>: VirtualBox VRDP Server session</li>
2442 <li><tt>"sdl"</tt>: VirtualBox SDL GUI session</li>
2443 </ul>
2444
2445 The @a environment argument is a string containing definitions of
2446 environment variables in the following format:
2447 @code
2448 NAME[=VALUE]\n
2449 NAME[=VALUE]\n
2450 ...
2451 @endcode
2452 where <tt>\\n</tt> is the new line character. These environment
2453 variables will be appended to the environment of the VirtualBox server
2454 process. If an environment variable exists both in the server process
2455 and in this list, the value from this list takes precedence over the
2456 server's variable. If the value of the environment variable is
2457 omitted, this variable will be removed from the resulting environment.
2458 If the environment string is @c null or empty, the server environment
2459 is inherited by the started process as is.
2460
2461 The progress object will have at least 2 operation. The first operation
2462 covers the period up to the new VM process calls powerUp. The
2463 subsequent operations mirrors the <link to="IConsole::powerUp"/>
2464 progress object. Because <link to="IConsole::powerUp"/> may require
2465 some extra operation, the <link to="IProgress::operationCount"/> may
2466 change at the completion of operation1.
2467
2468 For details on the teleportation progress operation, see
2469 <link to="IConsole::powerUp"/>.
2470
2471 <see>openExistingSession</see>
2472
2473 <result name="E_UNEXPECTED">
2474 Virtual machine not registered.
2475 </result>
2476 <result name="E_INVALIDARG">
2477 Invalid session type @a type.
2478 </result>
2479 <result name="VBOX_E_OBJECT_NOT_FOUND">
2480 No machine matching @a machineId found.
2481 </result>
2482 <result name="VBOX_E_INVALID_OBJECT_STATE">
2483 Session already open or being opened.
2484 </result>
2485 <result name="VBOX_E_IPRT_ERROR">
2486 Launching process for machine failed.
2487 </result>
2488 <result name="VBOX_E_VM_ERROR">
2489 Failed to assign machine to session.
2490 </result>
2491
2492 </desc>
2493 <param name="session" type="ISession" dir="in">
2494 <desc>
2495 Session object that will represent the opened remote session
2496 after successful method invocation (this object must not
2497 represent an already open session).
2498 </desc>
2499 </param>
2500 <param name="machineId" type="uuid" mod="string" dir="in">
2501 <desc>ID of the virtual machine to open a session with.</desc>
2502 </param>
2503 <param name="type" type="wstring" dir="in">
2504 <desc>
2505 Type of the remote session (case sensitive).
2506 </desc>
2507 </param>
2508 <param name="environment" type="wstring" dir="in">
2509 <desc>
2510 Environment to pass to the opened session.
2511 </desc>
2512 </param>
2513 <param name="progress" type="IProgress" dir="return">
2514 <desc>Progress object to track the operation completion.</desc>
2515 </param>
2516 </method>
2517
2518 <method name="openExistingSession">
2519 <desc>
2520 Opens a new remote session with the virtual machine for
2521 which a direct session is already open.
2522
2523 The remote session provides some level of control over the VM
2524 execution (using the IConsole interface) to the caller; however,
2525 within the remote session context, not all VM settings are available
2526 for modification.
2527
2528 As opposed to <link to="#openRemoteSession"/>, the number of
2529 remote sessions opened this way is not limited by the API
2530
2531 <note>
2532 It is an error to open a remote session with the machine that
2533 doesn't have an open direct session.
2534 </note>
2535
2536 <result name="E_UNEXPECTED">
2537 Virtual machine not registered.
2538 </result>
2539 <result name="VBOX_E_OBJECT_NOT_FOUND">
2540 No machine matching @a machineId found.
2541 </result>
2542 <result name="VBOX_E_INVALID_OBJECT_STATE">
2543 Session already open or being opened.
2544 </result>
2545 <result name="VBOX_E_INVALID_SESSION_STATE">
2546 Direct session state not Open.
2547 </result>
2548 <result name="VBOX_E_VM_ERROR">
2549 Failed to get console object from direct session or assign
2550 machine to session.
2551 </result>
2552
2553 <see>openRemoteSession</see>
2554 </desc>
2555 <param name="session" type="ISession" dir="in">
2556 <desc>
2557 Session object that will represent the open remote session
2558 after successful method invocation. This object must not
2559 represent an already open session.
2560 <note>
2561 This session will be automatically closed when the peer
2562 (direct) session dies or gets closed.
2563 </note>
2564 </desc>
2565 </param>
2566 <param name="machineId" type="uuid" mod="string" dir="in">
2567 <desc>ID of the virtual machine to open a session with.</desc>
2568 </param>
2569 </method>
2570
2571 <method name="waitForPropertyChange">
2572 <desc>
2573 Blocks the caller until any of the properties represented by the
2574 @a what argument changes the value or until the given timeout interval
2575 expires.
2576
2577 The @a what argument is a comma separated list of property masks that
2578 describe properties the caller is interested in. The property mask is
2579 a string in the following format:
2580
2581 <pre>
2582 [[group.]subgroup.]name
2583 </pre>
2584
2585 where @c name is the property name and @c group, @c subgroup are zero
2586 or more property group specifiers. Each element (group or name) in
2587 the property mask may be either a Latin string or an asterisk symbol
2588 (@c "*") which is used to match any string for the given element. A
2589 property mask that doesn't contain asterisk symbols represents a
2590 single fully qualified property name.
2591
2592 Groups in the fully qualified property name go from more generic (the
2593 left-most part) to more specific (the right-most part). The first
2594 element is usually a name of the object the property belongs to. The
2595 second element may be either a property name, or a child object name,
2596 or an index if the preceding element names an object which is one of
2597 many objects of the same type. This way, property names form a
2598 hierarchy of properties. Here are some examples of property names:
2599
2600 <table>
2601 <tr>
2602 <td><tt>VirtualBox.version</tt></td>
2603 <td><link to="IVirtualBox::version"/> property</td>
2604 </tr>
2605 <tr>
2606 <td><tt>Machine.&lt;UUID&gt;.name</tt></td>
2607 <td><link to="IMachine::name"/> property of the machine with the
2608 given UUID</td>
2609 </tr>
2610 </table>
2611
2612 Most property names directly correspond to the properties of objects
2613 (components) provided by the VirtualBox library and may be used to
2614 track changes to these properties. However, there may be
2615 pseudo-property names that don't correspond to any existing object's
2616 property directly, as well as there may be object properties that
2617 don't have a corresponding property name that is understood by this
2618 method, and therefore changes to such properties cannot be
2619 tracked. See individual object's property descriptions to get a
2620 fully qualified property name that can be used with this method (if
2621 any).
2622
2623 There is a special property mask @c "*" (i.e. a string consisting of a
2624 single asterisk symbol) that can be used to match all properties.
2625 Below are more examples of property masks:
2626
2627 <table>
2628 <tr>
2629 <td><tt>VirtualBox.*</tt></td>
2630 <td>Track all properties of the VirtualBox object</td>
2631 </tr>
2632 <tr>
2633 <td><tt>Machine.*.name</tt></td>
2634 <td>Track changes to the <link to="IMachine::name"/> property of
2635 all registered virtual machines</td>
2636 </tr>
2637 </table>
2638
2639 <note>
2640 This function is not implemented in the current version of the
2641 product.
2642 </note>
2643 </desc>
2644 <param name="what" type="wstring" dir="in">
2645 <desc>Comma separated list of property masks.</desc>
2646 </param>
2647 <param name="timeout" type="unsigned long" dir="in">
2648 <desc>
2649 Wait timeout in milliseconds.
2650 Specify -1 for an indefinite wait.
2651 </desc>
2652 </param>
2653 <param name="changed" type="wstring" dir="out">
2654 <desc>
2655 Comma separated list of properties that have been changed and caused
2656 this method to return to the caller.
2657 </desc>
2658 </param>
2659 <param name="values" type="wstring" dir="out">
2660 <desc>Reserved, not currently used.</desc>
2661 </param>
2662 </method>
2663
2664 <!--method name="createDHCPServerForInterface">
2665 <desc>
2666 Creates a dhcp server settings to be used for the given interface
2667 <result name="E_INVALIDARG">
2668 Host network interface @a name already exists.
2669 </result>
2670 </desc>
2671 <param name="interface" type="IHostNetworkInterface" dir="in">
2672 <desc>Network Interface</desc>
2673 </param>
2674 <param name="server" type="IDHCPServer" dir="out">
2675 <desc>Dhcp server settings</desc>
2676 </param>
2677 </method-->
2678
2679 <method name="createDHCPServer">
2680 <desc>
2681 Creates a dhcp server settings to be used for the given internal network name
2682 <result name="E_INVALIDARG">
2683 Host network interface @a name already exists.
2684 </result>
2685 </desc>
2686 <param name="name" type="wstring" dir="in">
2687 <desc>server name</desc>
2688 </param>
2689 <param name="server" type="IDHCPServer" dir="return">
2690 <desc>Dhcp server settings</desc>
2691 </param>
2692 </method>
2693
2694 <method name="findDHCPServerByNetworkName">
2695 <desc>
2696 Searches a dhcp server settings to be used for the given internal network name
2697 <result name="E_INVALIDARG">
2698 Host network interface @a name already exists.
2699 </result>
2700
2701 </desc>
2702 <param name="name" type="wstring" dir="in">
2703 <desc>server name</desc>
2704 </param>
2705 <param name="server" type="IDHCPServer" dir="return">
2706 <desc>Dhcp server settings</desc>
2707 </param>
2708 </method>
2709
2710 <!--method name="findDHCPServerForInterface">
2711 <desc>
2712 Searches a dhcp server settings to be used for the given interface
2713 <result name="E_INVALIDARG">
2714 Host network interface @a name already exists.
2715 </result>
2716 </desc>
2717 <param name="interface" type="IHostNetworkInterface" dir="in">
2718 <desc>Network Interface</desc>
2719 </param>
2720 <param name="server" type="IDHCPServer" dir="out">
2721 <desc>Dhcp server settings</desc>
2722 </param>
2723 </method-->
2724
2725 <method name="removeDHCPServer">
2726 <desc>
2727 Removes the dhcp server settings
2728 <result name="E_INVALIDARG">
2729 Host network interface @a name already exists.
2730 </result>
2731 </desc>
2732 <param name="server" type="IDHCPServer" dir="in">
2733 <desc>Dhcp server settings to be removed</desc>
2734 </param>
2735 </method>
2736
2737
2738 <method name="checkFirmwarePresent">
2739 <desc>
2740 Check if this VirtualBox installation has a firmware
2741 of the given type available, either system-wide or per-user.
2742 Optionally, this may return a hint where this firmware can be
2743 downloaded from.
2744 </desc>
2745 <param name="firmwareType" type="FirmwareType" dir="in">
2746 <desc>
2747 Type of firmware to check.
2748 </desc>
2749 </param>
2750 <param name="version" type="wstring" dir="in">
2751 <desc>Expected version number, usually empty string (presently ignored).</desc>
2752 </param>
2753
2754 <param name="url" type="wstring" dir="out">
2755 <desc>
2756 Suggested URL to download this firmware from.
2757 </desc>
2758 </param>
2759
2760 <param name="file" type="wstring" dir="out">
2761 <desc>
2762 Filename of firmware, only valid if result == TRUE.
2763 </desc>
2764 </param>
2765
2766 <param name="result" type="boolean" dir="return">
2767 <desc>If firmware of this type and version is available.</desc>
2768 </param>
2769 </method>
2770
2771 </interface>
2772
2773 <!--
2774 // IVFSExplorer
2775 /////////////////////////////////////////////////////////////////////////
2776 -->
2777
2778 <enum
2779 name="VFSType"
2780 uuid="813999ba-b949-48a8-9230-aadc6285e2f2"
2781 >
2782 <desc>
2783 Virtual file systems supported by VFSExplorer.
2784 </desc>
2785
2786 <const name="File" value="1" />
2787 <const name="Cloud" value="2" />
2788 <const name="S3" value="3" />
2789 <const name="WebDav" value="4" />
2790 </enum>
2791
2792 <enum
2793 name="VFSFileType"
2794 uuid="714333cd-44e2-415f-a245-d378fa9b1242"
2795 >
2796 <desc>
2797 File types known by VFSExplorer.
2798 </desc>
2799
2800 <const name="Unknown" value="1" />
2801 <const name="Fifo" value="2" />
2802 <const name="DevChar" value="3" />
2803 <const name="Directory" value="4" />
2804 <const name="DevBlock" value="5" />
2805 <const name="File" value="6" />
2806 <const name="SymLink" value="7" />
2807 <const name="Socket" value="8" />
2808 <const name="WhiteOut" value="9" />
2809 </enum>
2810
2811 <interface
2812 name="IVFSExplorer" extends="$unknown"
2813 uuid="2bb864a1-02a3-4474-a1d4-fb5f23b742e1"
2814 wsmap="managed"
2815 >
2816 <desc>
2817 The VFSExplorer interface unifies access to different file system
2818 types. This includes local file systems as well remote file systems like
2819 S3. For a list of supported types see <link to="VFSType" />.
2820 An instance of this is returned by <link to="IAppliance::createVFSExplorer" />.
2821 </desc>
2822
2823 <attribute name="path" type="wstring" readonly="yes">
2824 <desc>Returns the current path in the virtual file system.</desc>
2825 </attribute>
2826
2827 <attribute name="type" type="VFSType" readonly="yes">
2828 <desc>Returns the file system type which is currently in use.</desc>
2829 </attribute>
2830
2831 <method name="update">
2832 <desc>Updates the internal list of files/directories from the
2833 current directory level. Use <link to="#entryList" /> to get the full list
2834 after a call to this method.</desc>
2835
2836 <param name="aProgress" type="IProgress" dir="return">
2837 <desc>Progress object to track the operation completion.</desc>
2838 </param>
2839 </method>
2840
2841 <method name="cd">
2842 <desc>Change the current directory level.</desc>
2843
2844 <param name="aDir" type="wstring" dir="in">
2845 <desc>The name of the directory to go in.</desc>
2846 </param>
2847
2848 <param name="aProgress" type="IProgress" dir="return">
2849 <desc>Progress object to track the operation completion.</desc>
2850 </param>
2851 </method>
2852
2853 <method name="cdUp">
2854 <desc>Go one directory upwards from the current directory level.</desc>
2855
2856 <param name="aProgress" type="IProgress" dir="return">
2857 <desc>Progress object to track the operation completion.</desc>
2858 </param>
2859 </method>
2860
2861 <method name="entryList">
2862 <desc>Returns a list of files/directories after a call to <link
2863 to="#update" />. The user is responsible for keeping this internal
2864 list up do date.</desc>
2865
2866 <param name="aNames" type="wstring" safearray="yes" dir="out">
2867 <desc>The list of names for the entries.</desc>
2868 </param>
2869
2870 <param name="aTypes" type="unsigned long" safearray="yes" dir="out">
2871 <desc>The list of types for the entries.</desc>
2872 </param>
2873 </method>
2874
2875 <method name="exists">
2876 <desc>Checks if the given file list exists in the current directory
2877 level.</desc>
2878
2879 <param name="aNames" type="wstring" safearray="yes" dir="in">
2880 <desc>The names to check.</desc>
2881 </param>
2882
2883 <param name="aExists" type="wstring" safearray="yes" dir="return">
2884 <desc>The names which exist.</desc>
2885 </param>
2886 </method>
2887
2888 <method name="remove">
2889 <desc>Deletes the given files in the current directory level.</desc>
2890
2891 <param name="aNames" type="wstring" safearray="yes" dir="in">
2892 <desc>The names to remove.</desc>
2893 </param>
2894
2895 <param name="aProgress" type="IProgress" dir="return">
2896 <desc>Progress object to track the operation completion.</desc>
2897 </param>
2898 </method>
2899
2900 </interface>
2901
2902 <!--
2903 // IAppliance
2904 /////////////////////////////////////////////////////////////////////////
2905 -->
2906
2907 <interface
2908 name="IAppliance" extends="$unknown"
2909 uuid="fb61a4fc-57e7-48d6-859b-71f37d484cf2"
2910 wsmap="managed"
2911 >
2912 <desc>
2913 Represents a platform-independent appliance in OVF format. An instance of this is returned
2914 by <link to="IVirtualBox::createAppliance" />, which can then be used to import and export
2915 virtual machines within an appliance with VirtualBox.
2916
2917 The OVF standard suggests two different physical file formats:
2918
2919 <ol>
2920 <li>If the appliance is distributed as a set of files, there must be at least one XML descriptor
2921 file that conforms to the OVF standard and carries an <tt>.ovf</tt> file extension. If
2922 this descriptor file references other files such as disk images, as OVF appliances typically
2923 do, those additional files must be in the same directory as the descriptor file.</li>
2924
2925 <li>If the appliance is distributed as a single file, it must be in TAR format and have the
2926 <tt>.ova</tt> file extension. This TAR file must then contain at least the OVF descriptor
2927 files and optionally other files.
2928
2929 At this time, VirtualBox does not not yet support the packed (TAR) variant; support will
2930 be added with a later version.</li>
2931 </ol>
2932
2933 <b>Importing</b> an OVF appliance into VirtualBox as instances of
2934 <link to="IMachine" /> involves the following sequence of API calls:
2935
2936 <ol>
2937 <li>Call <link to="IVirtualBox::createAppliance" />. This will create an empty IAppliance object.
2938 </li>
2939
2940 <li>On the new object, call <link to="#read" /> with the full path of the OVF file you
2941 would like to import. So long as this file is syntactically valid, this will succeed
2942 and fill the appliance object with the parsed data from the OVF file.
2943 </li>
2944
2945 <li>Next, call <link to="#interpret" />, which analyzes the OVF data and sets up the
2946 contents of the IAppliance attributes accordingly. These can be inspected by a
2947 VirtualBox front-end such as the GUI, and the suggestions can be displayed to the
2948 user. In particular, the <link to="#virtualSystemDescriptions" /> array contains
2949 instances of <link to="IVirtualSystemDescription" /> which represent the virtual
2950 systems (machines) in the OVF, which in turn describe the virtual hardware prescribed
2951 by the OVF (network and hardware adapters, virtual disk images, memory size and so on).
2952 The GUI can then give the user the option to confirm and/or change these suggestions.
2953 </li>
2954
2955 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
2956 virtual system (machine) to override the suggestions made by the interpret() routine.
2957 </li>
2958
2959 <li>Finally, call <link to="#importMachines" /> to create virtual machines in
2960 VirtualBox as instances of <link to="IMachine" /> that match the information in the
2961 virtual system descriptions. After this call suceeded, the UUIDs of the machines created
2962 can be found in the <link to="#machines" /> array attribute.
2963 </li>
2964 </ol>
2965
2966 <b>Exporting</b> VirtualBox machines into an OVF appliance involves the following steps:
2967
2968 <ol>
2969 <li>As with importing, first call <link to="IVirtualBox::createAppliance" /> to create
2970 an empty IAppliance object.
2971 </li>
2972
2973 <li>For each machine you would like to export, call <link to="IMachine::export" />
2974 with the IAppliance object you just created. Each such call creates one instance of
2975 <link to="IVirtualSystemDescription" /> inside the appliance.
2976 </li>
2977
2978 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
2979 virtual system (machine) to override the suggestions made by the export() routine.
2980 </li>
2981
2982 <li>Finally, call <link to="#write" /> with a path specification to have the OVF
2983 file written.</li>
2984 </ol>
2985
2986 </desc>
2987
2988 <attribute name="path" type="wstring" readonly="yes">
2989 <desc>Path to the main file of the OVF appliance, which is either the <tt>.ovf</tt> or
2990 the <tt>.ova</tt> file passed to <link to="#read" /> (for import) or
2991 <link to="#write" /> (for export).
2992 This attribute is empty until one of these methods has been called.
2993 </desc>
2994 </attribute>
2995
2996 <attribute name="disks" type="wstring" readonly="yes" safearray="yes">
2997 <desc>
2998 Array of virtual disk definitions. One such description exists for each
2999 disk definition in the OVF; each string array item represents one such piece of
3000 disk information, with the information fields separated by tab (\t) characters.
3001
3002 The caller should be prepared for additional fields being appended to
3003 this string in future versions of VirtualBox and therefore check for
3004 the number of tabs in the strings returned.
3005
3006 In the current version, the following eight fields are returned per string
3007 in the array:
3008
3009 <ol>
3010 <li>Disk ID (unique string identifier given to disk)</li>
3011
3012 <li>Capacity (unsigned integer indicating the maximum capacity of the disk)</li>
3013
3014 <li>Populated size (optional unsigned integer indicating the current size of the
3015 disk; can be approximate; -1 if unspecified)</li>
3016
3017 <li>Format (string identifying the disk format, typically
3018 "http://www.vmware.com/specifications/vmdk.html#sparse")</li>
3019
3020 <li>Reference (where to find the disk image, typically a file name; if empty,
3021 then the disk should be created on import)</li>
3022
3023 <li>Image size (optional unsigned integer indicating the size of the image,
3024 which need not necessarily be the same as the values specified above, since
3025 the image may be compressed or sparse; -1 if not specified)</li>
3026
3027 <li>Chunk size (optional unsigned integer if the image is split into chunks;
3028 presently unsupported and always -1)</li>
3029
3030 <li>Compression (optional string equalling "gzip" if the image is gzip-compressed)</li>
3031 </ol>
3032 </desc>
3033 </attribute>
3034
3035 <attribute name="virtualSystemDescriptions" type="IVirtualSystemDescription" readonly="yes" safearray="yes">
3036 <desc> Array of virtual system descriptions. One such description is created
3037 for each virtual system (machine) found in the OVF.
3038 This array is empty until either <link to="#interpret" /> (for import) or <link to="IMachine::export" />
3039 (for export) has been called.
3040 </desc>
3041 </attribute>
3042
3043 <attribute name="machines" type="wstring" readonly="yes" safearray="yes">
3044 <desc>
3045 Contains the UUIDs of the machines created from the information in this appliances. This is only
3046 relevant for the import case, and will only contain data after a call to <link to="#importMachines" />
3047 succeeded.
3048 </desc>
3049 </attribute>
3050
3051 <method name="read">
3052 <desc>
3053 Reads an OVF file into the appliance object.
3054
3055 This method succeeds if the OVF is syntactically valid and, by itself, without errors. The
3056 mere fact that this method returns successfully does not mean that VirtualBox supports all
3057 features requested by the appliance; this can only be examined after a call to <link to="#interpret" />.
3058 </desc>
3059 <param name="file" type="wstring" dir="in">
3060 <desc>
3061 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3062 on whether the appliance is distributed as a set of files or as a single file, respectively).
3063 </desc>
3064 </param>
3065 <param name="aProgress" type="IProgress" dir="return">
3066 <desc></desc>
3067 </param>
3068 </method>
3069
3070 <method name="interpret">
3071 <desc>
3072 Interprets the OVF data that was read when the appliance was constructed. After
3073 calling this method, one can inspect the
3074 <link to="#virtualSystemDescriptions" /> array attribute, which will then contain
3075 one <link to="IVirtualSystemDescription" /> for each virtual machine found in
3076 the appliance.
3077
3078 Calling this method is the second step of importing an appliance into VirtualBox;
3079 see <link to="IAppliance" /> for an overview.
3080
3081 After calling this method, one should call <link to="#getWarnings" /> to find out
3082 if problems were encountered during the processing which might later lead to
3083 errors.
3084 </desc>
3085 </method>
3086
3087 <method name="importMachines">
3088 <desc>
3089 Imports the appliance into VirtualBox by creating instances of <link to="IMachine" />
3090 and other interfaces that match the information contained in the appliance as
3091 closely as possible, as represented by the import instructions in the
3092 <link to="#virtualSystemDescriptions" /> array.
3093
3094 Calling this method is the final step of importing an appliance into VirtualBox;
3095 see <link to="IAppliance" /> for an overview.
3096
3097 Since importing the appliance will most probably involve copying and converting
3098 disk images, which can take a long time, this method operates asynchronously and
3099 returns an IProgress object to allow the caller to monitor the progress.
3100
3101 After the import succeeded, the UUIDs of the IMachine instances created can be
3102 retrieved from the <link to="#machines" /> array attribute.
3103 </desc>
3104
3105 <param name="aProgress" type="IProgress" dir="return">
3106 <desc></desc>
3107 </param>
3108 </method>
3109
3110 <method name="createVFSExplorer">
3111 <desc>Returns a <link to="IVFSExplorer" /> object for the given URI.</desc>
3112
3113 <param name="aUri" type="wstring" dir="in">
3114 <desc>The URI describing the file system to use.</desc>
3115 </param>
3116
3117 <param name="aExplorer" type="IVFSExplorer" dir="return">
3118 <desc></desc>
3119 </param>
3120 </method>
3121
3122 <method name="write">
3123 <desc>
3124 Writes the contents of the appliance exports into a new OVF file.
3125
3126 Calling this method is the final step of exporting an appliance from VirtualBox;
3127 see <link to="IAppliance" /> for an overview.
3128
3129 Since exporting the appliance will most probably involve copying and converting
3130 disk images, which can take a long time, this method operates asynchronously and
3131 returns an IProgress object to allow the caller to monitor the progress.
3132 </desc>
3133 <param name="format" type="wstring" dir="in">
3134 <desc>
3135 Output format, as a string. Currently supported formats are "ovf-0.9" and "ovf-1.0";
3136 future versions of VirtualBox may support additional formats.
3137 </desc>
3138 </param>
3139 <param name="path" type="wstring" dir="in">
3140 <desc>
3141 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
3142 on whether the appliance is distributed as a set of files or as a single file, respectively).
3143 </desc>
3144 </param>
3145 <param name="aProgress" type="IProgress" dir="return">
3146 <desc>Progress object to track the operation completion.</desc>
3147 </param>
3148 </method>
3149
3150 <method name="getWarnings">
3151 <desc>Returns textual warnings which occured during execution of <link to="#interpret" />.</desc>
3152
3153 <param name="aWarnings" type="wstring" dir="return" safearray="yes">
3154 <desc></desc>
3155 </param>
3156 </method>
3157
3158 </interface>
3159
3160 <enum
3161 name="VirtualSystemDescriptionType"
3162 uuid="c0f8f135-3a1d-417d-afa6-b38b95a91f90"
3163 >
3164 <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
3165 a configuration value.</desc>
3166
3167 <const name="Ignore" value="1" />
3168 <const name="OS" value="2" />
3169 <const name="Name" value="3" />
3170 <const name="Product" value="4" />
3171 <const name="Vendor" value="5" />
3172 <const name="Version" value="6" />
3173 <const name="ProductUrl" value="7" />
3174 <const name="VendorUrl" value="8" />
3175 <const name="Description" value="9" />
3176 <const name="License" value="10" />
3177 <const name="Miscellaneous" value="11" />
3178 <const name="CPU" value="12" />
3179 <const name="Memory" value="13" />
3180 <const name="HardDiskControllerIDE" value="14" />
3181 <const name="HardDiskControllerSATA" value="15" />
3182 <const name="HardDiskControllerSCSI" value="16" />
3183 <const name="HardDiskControllerSAS" value="17" />
3184 <const name="HardDiskImage" value="18" />
3185 <const name="Floppy" value="19" />
3186 <const name="CDROM" value="20" />
3187 <const name="NetworkAdapter" value="21" />
3188 <const name="USBController" value="22" />
3189 <const name="SoundCard" value="23" />
3190
3191 </enum>
3192
3193 <enum
3194 name="VirtualSystemDescriptionValueType"
3195 uuid="56d9403f-3425-4118-9919-36f2a9b8c77c"
3196 >
3197 <desc>Used with <link to="IVirtualSystemDescription::getValuesByType" /> to describe the value
3198 type to fetch.</desc>
3199
3200 <const name="Reference" value="1" />
3201 <const name="Original" value="2" />
3202 <const name="Auto" value="3" />
3203 <const name="ExtraConfig" value="4" />
3204
3205 </enum>
3206
3207 <interface
3208 name="IVirtualSystemDescription" extends="$unknown"
3209 uuid="d7525e6c-531a-4c51-8e04-41235083a3d8"
3210 wsmap="managed"
3211 >
3212
3213 <desc>Represents one virtual system (machine) in an appliance. This interface is used in
3214 the <link to="IAppliance::virtualSystemDescriptions" /> array. After
3215 <link to="IAppliance::interpret" /> has been called, that array contains information
3216 about how the virtual systems described in the OVF should best be imported into
3217 VirtualBox virtual machines. See <link to="IAppliance" /> for the steps required to
3218 import an OVF into VirtualBox.
3219 </desc>
3220
3221 <attribute name="count" type="unsigned long" readonly="yes">
3222 <desc>Return the number of virtual system description entries.</desc>
3223 </attribute>
3224
3225 <method name="getDescription">
3226 <desc>Returns information about the virtual system as arrays of instruction items. In each array, the
3227 items with the same indices correspond and jointly represent an import instruction for VirtualBox.
3228
3229 The list below identifies the value sets that are possible depending on the
3230 <link to="VirtualSystemDescriptionType" /> enum value in the array item in @a aTypes[]. In each case,
3231 the array item with the same index in @a aOvfValues[] will contain the original value as contained
3232 in the OVF file (just for informational purposes), and the corresponding item in @a aVBoxValues[]
3233 will contain a suggested value to be used for VirtualBox. Depending on the description type,
3234 the @a aExtraConfigValues[] array item may also be used.
3235
3236 <ul>
3237 <li>
3238 "OS": the guest operating system type. There must be exactly one such array item on import. The
3239 corresponding item in @a aVBoxValues[] contains the suggested guest operating system for VirtualBox.
3240 This will be one of the values listed in <link to="IVirtualBox::guestOSTypes" />. The corresponding
3241 item in @a aOvfValues[] will contain a numerical value that described the operating system in the OVF.
3242 </li>
3243 <li>
3244 "Name": the name to give to the new virtual machine. There can be at most one such array item;
3245 if none is present on import, then an automatic name will be created from the operating system
3246 type. The correponding item im @a aOvfValues[] will contain the suggested virtual machine name
3247 from the OVF file, and @a aVBoxValues[] will contain a suggestion for a unique VirtualBox
3248 <link to="IMachine" /> name that does not exist yet.
3249 </li>
3250 <li>
3251 "Description": an arbitrary description.
3252 </li>
3253 <li>
3254 "License": the EULA section from the OVF, if present. It is the responsibility of the calling
3255 code to display such a license for agreement; the Main API does not enforce any such policy.
3256 </li>
3257 <li>
3258 Miscellaneous: reserved for future use.
3259 </li>
3260 <li>
3261 "CPU": the number of CPUs. There can be at most one such item, which will presently be ignored.
3262 </li>
3263 <li>
3264 "Memory": the amount of guest RAM, in bytes. There can be at most one such array item; if none
3265 is present on import, then VirtualBox will set a meaningful default based on the operating system
3266 type.
3267 </li>
3268 <li>
3269 "HardDiskControllerIDE": an IDE hard disk controller. There can be at most two such items.
3270 An optional value in @a aOvfValues[] and @a aVBoxValues[] can be "PIIX3" or "PIIX4" to specify
3271 the type of IDE controller; this corresponds to the ResourceSubType element which VirtualBox
3272 writes into the OVF.
3273 The matching item in the @a aRefs[] array will contain an integer that items of the "Harddisk"
3274 type can use to specify which hard disk controller a virtual disk should be connected to.
3275 Note that in OVF, an IDE controller has two channels, corresponding to "master" and "slave"
3276 in traditional terminology, whereas the IDE storage controller that VirtualBox supports in
3277 its virtual machines supports four channels (primary master, primary slave, secondary master,
3278 secondary slave) and thus maps to two IDE controllers in the OVF sense.
3279 </li>
3280 <li>
3281 "HardDiskControllerSATA": an SATA hard disk controller. There can be at most one such item. This
3282 has no value in @a aOvfValues[] or @a aVBoxValues[].
3283 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
3284 </li>
3285 <li>
3286 "HardDiskControllerSCSI": a SCSI hard disk controller. There can be at most one such item.
3287 The items in @a aOvfValues[] and @a aVBoxValues[] will either be "LsiLogic", "BusLogic" or
3288 "LsiLogicSas". (Note that in OVF, the LsiLogicSas controller is treated as a SCSI controller
3289 whereas VirtualBox considers it a class of storage controllers of its own; see
3290 <link to="StorageControllerType" />).
3291 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
3292 </li>
3293 <li>
3294 "HardDiskImage": a virtual hard disk, most probably as a reference to an image file. There can be an
3295 arbitrary number of these items, one for each virtual disk image that accompanies the OVF.
3296
3297 The array item in @a aOvfValues[] will contain the file specification from the OVF file (without
3298 a path since the image file should be in the same location as the OVF file itself), whereas the
3299 item in @a aVBoxValues[] will contain a qualified path specification to where VirtualBox uses the
3300 hard disk image. This means that on import the image will be copied and converted from the
3301 "ovf" location to the "vbox" location; on export, this will be handled the other way round.
3302 On import, the target image will also be registered with VirtualBox.
3303
3304 The matching item in the @a aExtraConfigValues[] array must contain a string of the following
3305 format: "controller=&lt;index&gt;;channel=&lt;c&gt;"
3306 In this string, &lt;index&gt; must be an integer specifying the hard disk controller to connect
3307 the image to. That number must be the index of an array item with one of the hard disk controller
3308 types (HardDiskControllerSCSI, HardDiskControllerSATA, HardDiskControllerIDE).
3309 In addition, &lt;c&gt; must specify the channel to use on that controller. For IDE controllers,
3310 this can be 0 or 1 for master or slave, respectively. For compatibility with VirtualBox versions
3311 before 3.2, the values 2 and 3 (for secondary master and secondary slave) are also supported, but
3312 no longer exported. For SATA and SCSI controllers, the channel can range from 0-29.
3313 </li>
3314 <li>
3315 "CDROM": a virtual CD-ROM drive. The matching item in @a aExtraConfigValue[] contains the same
3316 attachment information as with "HardDiskImage" items.
3317 </li>
3318 <li>
3319 "CDROM": a virtual floppy drive. The matching item in @a aExtraConfigValue[] contains the same
3320 attachment information as with "HardDiskImage" items.
3321 </li>
3322 <li>
3323 "NetworkAdapter": a network adapter. The array item in @a aVBoxValues[] will specify the hardware
3324 for the network adapter, whereas the array item in @a aExtraConfigValues[] will have a string
3325 of the "type=&lt;X&gt;" format, where &lt;X&gt; must be either "NAT" or "Bridged".
3326 </li>
3327 <li>
3328 "USBController": a USB controller. There can be at most one such item. If and only if such an
3329 item ispresent, USB support will be enabled for the new virtual machine.
3330 </li>
3331 <li>
3332 "SoundCard": a sound card. There can be at most one such item. If and only if such an item is
3333 present, sound support will be enabled for the new virtual machine. Note that the virtual
3334 machine in VirtualBox will always be presented with the standard VirtualBox soundcard, which
3335 may be different from the virtual soundcard expected by the appliance.
3336 </li>
3337 </ul>
3338
3339 </desc>
3340
3341 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3342 <desc></desc>
3343 </param>
3344
3345 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3346 <desc></desc>
3347 </param>
3348
3349 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3350 <desc></desc>
3351 </param>
3352
3353 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3354 <desc></desc>
3355 </param>
3356
3357 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3358 <desc></desc>
3359 </param>
3360
3361 </method>
3362
3363 <method name="getDescriptionByType">
3364 <desc>This is the same as <link to="#getDescription" /> except that you can specify which types
3365 should be returned.</desc>
3366
3367 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3368 <desc></desc>
3369 </param>
3370
3371 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
3372 <desc></desc>
3373 </param>
3374
3375 <param name="aRefs" type="wstring" dir="out" safearray="yes">
3376 <desc></desc>
3377 </param>
3378
3379 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
3380 <desc></desc>
3381 </param>
3382
3383 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
3384 <desc></desc>
3385 </param>
3386
3387 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
3388 <desc></desc>
3389 </param>
3390
3391 </method>
3392
3393 <method name="getValuesByType">
3394 <desc>This is the same as <link to="#getDescriptionByType" /> except that you can specify which
3395 value types should be returned. See <link to="VirtualSystemDescriptionValueType" /> for possible
3396 values.</desc>
3397
3398 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3399 <desc></desc>
3400 </param>
3401
3402 <param name="aWhich" type="VirtualSystemDescriptionValueType" dir="in">
3403 <desc></desc>
3404 </param>
3405
3406 <param name="aValues" type="wstring" dir="return" safearray="yes">
3407 <desc></desc>
3408 </param>
3409
3410 </method>
3411
3412 <method name="setFinalValues">
3413 <desc>
3414 This method allows the appliance's user to change the configuration for the virtual
3415 system descriptions. For each array item returned from <link to="#getDescription" />,
3416 you must pass in one boolean value and one configuration value.
3417
3418 Each item in the boolean array determines whether the particular configuration item
3419 should be enabled.
3420 You can only disable items of the types HardDiskControllerIDE, HardDiskControllerSATA,
3421 HardDiskControllerSCSI, HardDiskImage, CDROM, Floppy, NetworkAdapter, USBController
3422 and SoundCard.
3423
3424 For the "vbox" and "extra configuration" values, if you pass in the same arrays
3425 as returned in the aVBoxValues and aExtraConfigValues arrays from getDescription(),
3426 the configuration remains unchanged. Please see the documentation for getDescription()
3427 for valid configuration values for the individual array item types. If the
3428 corresponding item in the aEnabled array is @c false, the configuration value is ignored.
3429 </desc>
3430
3431 <param name="aEnabled" type="boolean" dir="in" safearray="yes">
3432 <desc></desc>
3433 </param>
3434
3435 <param name="aVBoxValues" type="wstring" dir="in" safearray="yes">
3436 <desc></desc>
3437 </param>
3438
3439 <param name="aExtraConfigValues" type="wstring" dir="in" safearray="yes">
3440 <desc></desc>
3441 </param>
3442 </method>
3443
3444 <method name="addDescription">
3445 <desc>
3446 This method adds an additional description entry to the stack of already
3447 available descriptions for this virtual system. This is handy for writing
3448 values which aren't directly supported by VirtualBox. One example would
3449 be the License type of <link to="VirtualSystemDescriptionType" />.
3450 </desc>
3451
3452 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3453 <desc></desc>
3454 </param>
3455
3456 <param name="aVBoxValue" type="wstring" dir="in">
3457 <desc></desc>
3458 </param>
3459
3460 <param name="aExtraConfigValue" type="wstring" dir="in">
3461 <desc></desc>
3462 </param>
3463 </method>
3464 </interface>
3465
3466
3467 <!--
3468 // IMachine
3469 /////////////////////////////////////////////////////////////////////////
3470 -->
3471
3472 <interface
3473 name="IInternalMachineControl" extends="$unknown"
3474 uuid="26604a54-8628-491b-a0ea-e1392a16d13b"
3475 internal="yes"
3476 wsmap="suppress"
3477 >
3478 <method name="setRemoveSavedState">
3479 <desc>
3480 Updates the flag whether saved state is removed on a machine state
3481 change from Saved to PoweredOff.
3482 </desc>
3483 <param name="aRemove" type="boolean" dir="in"/>
3484 </method>
3485
3486 <method name="updateState">
3487 <desc>
3488 Updates the VM state.
3489 <note>
3490 This operation will also update the settings file with
3491 the correct information about the saved state file
3492 and delete this file from disk when appropriate.
3493 </note>
3494 </desc>
3495 <param name="state" type="MachineState" dir="in"/>
3496 </method>
3497
3498 <method name="getIPCId">
3499 <param name="id" type="wstring" dir="return"/>
3500 </method>
3501
3502 <method name="beginPowerUp">
3503 <desc>
3504 Tells VBoxSVC that <link to="IConsole::powerUp"/> is under ways and
3505 gives it the progress object that should be part of any pending
3506 <link to="IVirtualBox::openRemoteSession"/> operations. The progress
3507 object may be called back to reflect an early cancelation, so some care
3508 have to be taken with respect to any cancelation callbacks. The console
3509 object will call <link to="IInternalMachineControl::endPowerUp"/>
3510 to signal the completion of the progress object.
3511 </desc>
3512 <param name="progress" type="IProgress" dir="in"/>
3513 </method>
3514
3515 <method name="endPowerUp">
3516 <desc>
3517 Tells VBoxSVC that <link to="IConsole::powerUp"/> has completed.
3518 This method may query status information from the progress object it
3519 received in <link to="IInternalMachineControl::beginPowerUp"/> and copy
3520 it over to any in progress <link to="IVirtualBox::openRemoteSession"/>
3521 call in order to complete that progress object.
3522 </desc>
3523 <param name="result" type="long" dir="in"/>
3524 </method>
3525
3526 <method name="runUSBDeviceFilters">
3527 <desc>
3528 Asks the server to run USB devices filters of the associated
3529 machine against the given USB device and tell if there is
3530 a match.
3531 <note>
3532 Intended to be used only for remote USB devices. Local
3533 ones don't require to call this method (this is done
3534 implicitly by the Host and USBProxyService).
3535 </note>
3536 </desc>
3537 <param name="device" type="IUSBDevice" dir="in"/>
3538 <param name="matched" type="boolean" dir="out"/>
3539 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
3540 </method>
3541
3542 <method name="captureUSBDevice">
3543 <desc>
3544 Requests a capture of the given host USB device.
3545 When the request is completed, the VM process will
3546 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3547 notification.
3548 </desc>
3549 <param name="id" type="uuid" mod="string" dir="in"/>
3550 </method>
3551
3552 <method name="detachUSBDevice">
3553 <desc>
3554 Notification that a VM is going to detach (@a done = @c false) or has
3555 already detached (@a done = @c true) the given USB device.
3556 When the @a done = @c true request is completed, the VM process will
3557 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
3558 notification.
3559 <note>
3560 In the @a done = @c true case, the server must run its own filters
3561 and filters of all VMs but this one on the detached device
3562 as if it were just attached to the host computer.
3563 </note>
3564 </desc>
3565 <param name="id" type="uuid" mod="string" dir="in"/>
3566 <param name="done" type="boolean" dir="in"/>
3567 </method>
3568
3569 <method name="autoCaptureUSBDevices">
3570 <desc>
3571 Requests a capture all matching USB devices attached to the host.
3572 When the request is completed, the VM process will
3573 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3574 notification per every captured device.
3575 </desc>
3576 </method>
3577
3578 <method name="detachAllUSBDevices">
3579 <desc>
3580 Notification that a VM that is being powered down. The done
3581 parameter indicates whether which stage of the power down
3582 we're at. When @a done = @c false the VM is announcing its
3583 intentions, while when @a done = @c true the VM is reporting
3584 what it has done.
3585 <note>
3586 In the @a done = @c true case, the server must run its own filters
3587 and filters of all VMs but this one on all detach devices as
3588 if they were just attached to the host computer.
3589 </note>
3590 </desc>
3591 <param name="done" type="boolean" dir="in"/>
3592 </method>
3593
3594 <method name="onSessionEnd">
3595 <desc>
3596 Triggered by the given session object when the session is about
3597 to close normally.
3598 </desc>
3599 <param name="session" type="ISession" dir="in">
3600 <desc>Session that is being closed</desc>
3601 </param>
3602 <param name="progress" type="IProgress" dir="return">
3603 <desc>
3604 Used to wait until the corresponding machine is actually
3605 dissociated from the given session on the server.
3606 Returned only when this session is a direct one.
3607 </desc>
3608 </param>
3609 </method>
3610
3611 <method name="beginSavingState">
3612 <desc>
3613 Called by the VM process to inform the server it wants to
3614 save the current state and stop the VM execution.
3615 </desc>
3616 <param name="progress" type="IProgress" dir="in">
3617 <desc>
3618 Progress object created by the VM process to wait until
3619 the state is saved.
3620 </desc>
3621 </param>
3622 <param name="stateFilePath" type="wstring" dir="out">
3623 <desc>
3624 File path the VM process must save the execution state to.
3625 </desc>
3626 </param>
3627 </method>
3628
3629 <method name="endSavingState">
3630 <desc>
3631 Called by the VM process to inform the server that saving
3632 the state previously requested by #beginSavingState is either
3633 successfully finished or there was a failure.
3634
3635 <result name="VBOX_E_FILE_ERROR">
3636 Settings file not accessible.
3637 </result>
3638 <result name="VBOX_E_XML_ERROR">
3639 Could not parse the settings file.
3640 </result>
3641
3642 </desc>
3643
3644 <param name="success" type="boolean" dir="in">
3645 <desc>@c true to indicate success and @c false otherwise.
3646 </desc>
3647 </param>
3648 </method>
3649
3650 <method name="adoptSavedState">
3651 <desc>
3652 Gets called by IConsole::adoptSavedState.
3653 <result name="VBOX_E_FILE_ERROR">
3654 Invalid saved state file path.
3655 </result>
3656 </desc>
3657 <param name="savedStateFile" type="wstring" dir="in">
3658 <desc>Path to the saved state file to adopt.</desc>
3659 </param>
3660 </method>
3661
3662 <method name="beginTakingSnapshot">
3663 <desc>
3664 Called from the VM process to request from the server to perform the
3665 server-side actions of creating a snapshot (creating differencing images
3666 and the snapshot object).
3667
3668 <result name="VBOX_E_FILE_ERROR">
3669 Settings file not accessible.
3670 </result>
3671 <result name="VBOX_E_XML_ERROR">
3672 Could not parse the settings file.
3673 </result>
3674 </desc>
3675 <param name="initiator" type="IConsole" dir="in">
3676 <desc>The console object that initiated this call.</desc>
3677 </param>
3678 <param name="name" type="wstring" dir="in">
3679 <desc>Snapshot name.</desc>
3680 </param>
3681 <param name="description" type="wstring" dir="in">
3682 <desc>Snapshot description.</desc>
3683 </param>
3684 <param name="consoleProgress" type="IProgress" dir="in">
3685 <desc>
3686 Progress object created by the VM process tracking the
3687 snapshot's progress. This has the following sub-operations:
3688 <ul>
3689 <li>setting up (weight 1);</li>
3690 <li>one for each medium attachment that needs a differencing image (weight 1 each);</li>
3691 <li>another one to copy the VM state (if offline with saved state, weight is VM memory size in MB);</li>
3692 <li>another one to save the VM state (if online, weight is VM memory size in MB);</li>
3693 <li>finishing up (weight 1)</li>
3694 </ul>
3695 </desc>
3696 </param>
3697 <param name="fTakingSnapshotOnline" type="boolean" dir="in">
3698 <desc>
3699 Whether this is an online snapshot (i.e. the machine is running).
3700 </desc>
3701 </param>
3702 <param name="stateFilePath" type="wstring" dir="out">
3703 <desc>
3704 File path the VM process must save the execution state to.
3705 </desc>
3706 </param>
3707 </method>
3708
3709 <method name="endTakingSnapshot">
3710 <desc>
3711 Called by the VM process to inform the server that the snapshot
3712 previously requested by #beginTakingSnapshot is either
3713 successfully taken or there was a failure.
3714 </desc>
3715
3716 <param name="success" type="boolean" dir="in">
3717 <desc>@c true to indicate success and @c false otherwise</desc>
3718 </param>
3719 </method>
3720
3721 <method name="deleteSnapshot">
3722 <desc>
3723 Gets called by IConsole::deleteSnapshot.
3724 <result name="VBOX_E_INVALID_OBJECT_STATE">
3725 Snapshot has more than one child snapshot.
3726 </result>
3727 </desc>
3728 <param name="initiator" type="IConsole" dir="in">
3729 <desc>The console object that initiated this call.</desc>
3730 </param>
3731 <param name="id" type="uuid" mod="string" dir="in">
3732 <desc>UUID of the snapshot to delete.</desc>
3733 </param>
3734 <param name="machineState" type="MachineState" dir="out">
3735 <desc>New machine state after this operation is started.</desc>
3736 </param>
3737 <param name="progress" type="IProgress" dir="return">
3738 <desc>Progress object to track the operation completion.</desc>
3739 </param>
3740 </method>
3741
3742 <method name="finishOnlineMergeMedium">
3743 <desc>
3744 Gets called by IConsole::onlineMergeMedium.
3745 </desc>
3746 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
3747 <desc>The medium attachment which needs to be cleaned up.</desc>
3748 </param>
3749 <param name="source" type="IMedium" dir="in">
3750 <desc>Merge source medium.</desc>
3751 </param>
3752 <param name="target" type="IMedium" dir="in">
3753 <desc>Merge target medium.</desc>
3754 </param>
3755 <param name="mergeForward" type="boolean" dir="in">
3756 <desc>Merge direction.</desc>
3757 </param>
3758 <param name="parentForTarget" type="IMedium" dir="in">
3759 <desc>For forward merges: new parent for target medium.</desc>
3760 </param>
3761 <param name="childrenToReparent" type="IMedium" safearray="yes" dir="in">
3762 <desc>For backward merges: list of media which need their parent UUID
3763 updated.</desc>
3764 </param>
3765 </method>
3766
3767 <method name="restoreSnapshot">
3768 <desc>
3769 Gets called by IConsole::RestoreSnapshot.
3770 </desc>
3771 <param name="initiator" type="IConsole" dir="in">
3772 <desc>The console object that initiated this call.</desc>
3773 </param>
3774 <param name="snapshot" type="ISnapshot" dir="in">
3775 <desc>The snapshot to restore the VM state from.</desc>
3776 </param>
3777 <param name="machineState" type="MachineState" dir="out">
3778 <desc>New machine state after this operation is started.</desc>
3779 </param>
3780 <param name="progress" type="IProgress" dir="return">
3781 <desc>Progress object to track the operation completion.</desc>
3782 </param>
3783 </method>
3784
3785 <method name="pullGuestProperties">
3786 <desc>
3787 Get the list of the guest properties matching a set of patterns along
3788 with their values, time stamps and flags and give responsibility for
3789 managing properties to the console.
3790 </desc>
3791 <param name="name" type="wstring" dir="out" safearray="yes">
3792 <desc>
3793 The names of the properties returned.
3794 </desc>
3795 </param>
3796 <param name="value" type="wstring" dir="out" safearray="yes">
3797 <desc>
3798 The values of the properties returned. The array entries match the
3799 corresponding entries in the @a name array.
3800 </desc>
3801 </param>
3802 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
3803 <desc>
3804 The time stamps of the properties returned. The array entries match
3805 the corresponding entries in the @a name array.
3806 </desc>
3807 </param>
3808 <param name="flags" type="wstring" dir="out" safearray="yes">
3809 <desc>
3810 The flags of the properties returned. The array entries match the
3811 corresponding entries in the @a name array.
3812 </desc>
3813 </param>
3814 </method>
3815
3816 <method name="pushGuestProperty">
3817 <desc>
3818 Update a single guest property in IMachine.
3819 </desc>
3820 <param name="name" type="wstring" dir="in">
3821 <desc>
3822 The name of the property to be updated.
3823 </desc>
3824 </param>
3825 <param name="value" type="wstring" dir="in">
3826 <desc>
3827 The value of the property.
3828 </desc>
3829 </param>
3830 <param name="timestamp" type="unsigned long long" dir="in">
3831 <desc>
3832 The timestamp of the property.
3833 </desc>
3834 </param>
3835 <param name="flags" type="wstring" dir="in">
3836 <desc>
3837 The flags of the property.
3838 </desc>
3839 </param>
3840 </method>
3841
3842 <method name="lockMedia">
3843 <desc>
3844 Locks all media attached to the machine for writing and parents of
3845 attached differencing media (if any) for reading. This operation is
3846 atomic so that if it fails no media is actually locked.
3847
3848 This method is intended to be called when the machine is in Starting or
3849 Restoring state. The locked media will be automatically unlocked when
3850 the machine is powered off or crashed.
3851 </desc>
3852 </method>
3853 <method name="unlockMedia">
3854 <desc>
3855 Unlocks all media previously locked using
3856 <link to="IInternalMachineControl::lockMedia"/>.
3857
3858 This method is intended to be used with teleportation so that it is
3859 possible to teleport between processes on the same machine.
3860 </desc>
3861 </method>
3862 </interface>
3863
3864 <interface
3865 name="IBIOSSettings" extends="$unknown"
3866 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
3867 wsmap="managed"
3868 >
3869 <desc>
3870 The IBIOSSettings interface represents BIOS settings of the virtual
3871 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
3872 </desc>
3873 <attribute name="logoFadeIn" type="boolean">
3874 <desc>Fade in flag for BIOS logo animation.</desc>
3875 </attribute>
3876
3877 <attribute name="logoFadeOut" type="boolean">
3878 <desc>Fade out flag for BIOS logo animation.</desc>
3879 </attribute>
3880
3881 <attribute name="logoDisplayTime" type="unsigned long">
3882 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
3883 </attribute>
3884
3885 <attribute name="logoImagePath" type="wstring">
3886 <desc>
3887 Local file system path for external BIOS splash image. Empty string
3888 means the default image is shown on boot.
3889 </desc>
3890 </attribute>
3891
3892 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
3893 <desc>Mode of the BIOS boot device menu.</desc>
3894 </attribute>
3895
3896 <attribute name="ACPIEnabled" type="boolean">
3897 <desc>ACPI support flag.</desc>
3898 </attribute>
3899
3900 <attribute name="IOAPICEnabled" type="boolean">
3901 <desc>
3902 IO APIC support flag. If set, VirtualBox will provide an IO APIC
3903 and support IRQs above 15.
3904 </desc>
3905 </attribute>
3906
3907 <attribute name="timeOffset" type="long long">
3908 <desc>
3909 Offset in milliseconds from the host system time. This allows for
3910 guests running with a different system date/time than the host.
3911 It is equivalent to setting the system date/time in the BIOS except
3912 it is not an absolute value but a relative one. Guest Additions
3913 time synchronization honors this offset.
3914 </desc>
3915 </attribute>
3916
3917 <attribute name="PXEDebugEnabled" type="boolean">
3918 <desc>
3919 PXE debug logging flag. If set, VirtualBox will write extensive
3920 PXE trace information to the release log.
3921 </desc>
3922 </attribute>
3923
3924 </interface>
3925
3926 <interface
3927 name="IMachine" extends="$unknown"
3928 uuid="6d9212cb-a5c0-48b7-bbc1-3fa2ba2ee6d2"
3929 wsmap="managed"
3930 >
3931 <desc>
3932 The IMachine interface represents a virtual machine, or guest, created
3933 in VirtualBox.
3934
3935 This interface is used in two contexts. First of all, a collection of
3936 objects implementing this interface is stored in the
3937 <link to="IVirtualBox::machines"/> attribute which lists all the virtual
3938 machines that are currently registered with this VirtualBox
3939 installation. Also, once a session has been opened for the given virtual
3940 machine (e.g. the virtual machine is running), the machine object
3941 associated with the open session can be queried from the session object;
3942 see <link to="ISession"/> for details.
3943
3944 The main role of this interface is to expose the settings of the virtual
3945 machine and provide methods to change various aspects of the virtual
3946 machine's configuration. For machine objects stored in the
3947 <link to="IVirtualBox::machines"/> collection, all attributes are
3948 read-only unless explicitly stated otherwise in individual attribute
3949 and method descriptions. In order to change a machine setting, a session
3950 for this machine must be opened using one of
3951 <link to="IVirtualBox::openSession"/>,
3952 <link to="IVirtualBox::openRemoteSession"/> or
3953 <link to="IVirtualBox::openExistingSession"/> methods. After the
3954 session has been successfully opened, a mutable machine object needs to
3955 be queried from the session object and then the desired settings changes
3956 can be applied to the returned object using IMachine attributes and
3957 methods. See the <link to="ISession"/> interface description for more
3958 information about sessions.
3959
3960 Note that IMachine does not provide methods to control virtual machine
3961 execution (such as start the machine, or power it down) -- these methods
3962 are grouped in a separate interface called <link to="IConsole" />.
3963
3964 <see>ISession, IConsole</see>
3965 </desc>
3966
3967 <attribute name="parent" type="IVirtualBox" readonly="yes">
3968 <desc>Associated parent object.</desc>
3969 </attribute>
3970
3971 <attribute name="accessible" type="boolean" readonly="yes">
3972 <desc>
3973 Whether this virtual machine is currently accessible or not.
3974
3975 A machine is always deemed accessible unless it is registered <i>and</i>
3976 its settings file cannot be read or parsed (either because the file itself
3977 is unavailable or has invalid XML contents).
3978
3979 Every time this property is read, the accessibility state of
3980 this machine is re-evaluated. If the returned value is @c false,
3981 the <link to="#accessError"/> property may be used to get the
3982 detailed error information describing the reason of
3983 inaccessibility, including XML error messages.
3984
3985 When the machine is inaccessible, only the following properties
3986 can be used on it:
3987 <ul>
3988 <li><link to="#parent"/></li>
3989 <li><link to="#id"/></li>
3990 <li><link to="#settingsFilePath"/></li>
3991 <li><link to="#accessible"/></li>
3992 <li><link to="#accessError"/></li>
3993 </ul>
3994
3995 An attempt to access any other property or method will return
3996 an error.
3997
3998 The only possible action you can perform on an inaccessible
3999 machine is to unregister it using the
4000 <link to="IVirtualBox::unregisterMachine"/> call (or, to check
4001 for the accessibility state once more by querying this
4002 property).
4003
4004 <note>
4005 In the current implementation, once this property returns
4006 @c true, the machine will never become inaccessible
4007 later, even if its settings file cannot be successfully
4008 read/written any more (at least, until the VirtualBox
4009 server is restarted). This limitation may be removed in
4010 future releases.
4011 </note>
4012 </desc>
4013 </attribute>
4014
4015 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
4016 <desc>
4017 Error information describing the reason of machine
4018 inaccessibility.
4019
4020 Reading this property is only valid after the last call to
4021 <link to="#accessible"/> returned @c false (i.e. the
4022 machine is currently unaccessible). Otherwise, a @c null
4023 IVirtualBoxErrorInfo object will be returned.
4024 </desc>
4025 </attribute>
4026
4027 <attribute name="name" type="wstring">
4028 <desc>
4029 Name of the virtual machine.
4030
4031 Besides being used for human-readable identification purposes
4032 everywhere in VirtualBox, the virtual machine name is also used
4033 as a name of the machine's settings file and as a name of the
4034 subdirectory this settings file resides in. Thus, every time you
4035 change the value of this property, the settings file will be
4036 renamed once you call <link to="#saveSettings"/> to confirm the
4037 change. The containing subdirectory will be also renamed, but
4038 only if it has exactly the same name as the settings file
4039 itself prior to changing this property (for backward compatibility
4040 with previous API releases). The above implies the following
4041 limitations:
4042 <ul>
4043 <li>The machine name cannot be empty.</li>
4044 <li>The machine name can contain only characters that are valid
4045 file name characters according to the rules of the file
4046 system used to store VirtualBox configuration.</li>
4047 <li>You cannot have two or more machines with the same name
4048 if they use the same subdirectory for storing the machine
4049 settings files.</li>
4050 <li>You cannot change the name of the machine if it is running,
4051 or if any file in the directory containing the settings file
4052 is being used by another running machine or by any other
4053 process in the host operating system at a time when
4054 <link to="#saveSettings"/> is called.
4055 </li>
4056 </ul>
4057 If any of the above limitations are hit, <link to="#saveSettings"/>
4058 will return an appropriate error message explaining the exact
4059 reason and the changes you made to this machine will not be
4060 saved.
4061 <note>
4062 For "legacy" machines created using the
4063 <link to="IVirtualBox::createLegacyMachine"/> call,
4064 the above naming limitations do not apply because the
4065 machine name does not affect the settings file name.
4066 The settings file name remains the same as it was specified
4067 during machine creation and never changes.
4068 </note>
4069 </desc>
4070 </attribute>
4071
4072 <attribute name="description" type="wstring">
4073 <desc>
4074 Description of the virtual machine.
4075
4076 The description attribute can contain any text and is
4077 typically used to describe the hardware and software
4078 configuration of the virtual machine in detail (i.e. network
4079 settings, versions of the installed software and so on).
4080 </desc>
4081 </attribute>
4082
4083 <attribute name="id" type="uuid" mod="string" readonly="yes">
4084 <desc>UUID of the virtual machine.</desc>
4085 </attribute>
4086
4087 <attribute name="OSTypeId" type="wstring">
4088 <desc>
4089 User-defined identifier of the Guest OS type.
4090 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
4091 an IGuestOSType object representing details about the given
4092 Guest OS type.
4093 <note>
4094 This value may differ from the value returned by
4095 <link to="IGuest::OSTypeId"/> if Guest Additions are
4096 installed to the guest OS.
4097 </note>
4098 </desc>
4099 </attribute>
4100
4101 <attribute name="HardwareVersion" type="wstring">
4102 <desc>Hardware version identifier. Internal use only for now.</desc>
4103 </attribute>
4104
4105 <attribute name="hardwareUUID" type="uuid" mod="string">
4106 <desc>
4107 The UUID presented to the guest via memory tables, hardware and guest
4108 properties. For most VMs this is the same as the @a id, but for VMs
4109 which have been cloned or teleported it may be the same as the source
4110 VM. This latter is because the guest shouldn't notice that it was
4111 cloned or teleported.
4112 </desc>
4113 </attribute>
4114
4115 <attribute name="CPUCount" type="unsigned long">
4116 <desc>Number of virtual CPUs in the VM.</desc>
4117 </attribute>
4118
4119 <attribute name="CPUHotPlugEnabled" type="boolean">
4120 <desc>
4121 This setting determines whether VirtualBox allows CPU
4122 hotplugging for this machine.</desc>
4123 </attribute>
4124
4125 <attribute name="memorySize" type="unsigned long">
4126 <desc>System memory size in megabytes.</desc>
4127 </attribute>
4128
4129 <attribute name="memoryBalloonSize" type="unsigned long">
4130 <desc>Memory balloon size in megabytes.</desc>
4131 </attribute>
4132
4133 <attribute name="PageFusionEnabled" type="boolean">
4134 <desc>
4135 This setting determines whether VirtualBox allows page
4136 fusion for this machine (64 bits host only).
4137 </desc>
4138 </attribute>
4139
4140 <attribute name="VRAMSize" type="unsigned long">
4141 <desc>Video memory size in megabytes.</desc>
4142 </attribute>
4143
4144 <attribute name="accelerate3DEnabled" type="boolean" default="false">
4145 <desc>
4146 This setting determines whether VirtualBox allows this machine to make
4147 use of the 3D graphics support available on the host.</desc>
4148 </attribute>
4149
4150 <attribute name="accelerate2DVideoEnabled" type="boolean" default="false">
4151 <desc>
4152 This setting determines whether VirtualBox allows this machine to make
4153 use of the 2D video acceleration support available on the host.</desc>
4154 </attribute>
4155
4156 <attribute name="monitorCount" type="unsigned long">
4157 <desc>
4158 Number of virtual monitors.
4159 <note>
4160 Only effective on Windows XP and later guests with
4161 Guest Additions installed.
4162 </note>
4163 </desc>
4164 </attribute>
4165
4166 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
4167 <desc>Object containing all BIOS settings.</desc>
4168 </attribute>
4169
4170 <attribute name="firmwareType" type="FirmwareType">
4171 <desc>Type of firmware (such as legacy BIOS or EFI), used for initial
4172 bootstrap in this VM.</desc>
4173 </attribute>
4174
4175 <attribute name="pointingHidType" type="PointingHidType">
4176 <desc>Type of pointing HID (such as mouse or tablet) used in this VM.
4177 The default is typically "PS2Mouse" but can vary depending on the
4178 requirements of the guest operating system.</desc>
4179 </attribute>
4180
4181 <attribute name="keyboardHidType" type="KeyboardHidType">
4182 <desc>Type of keyboard HID used in this VM.
4183 The default is typically "PS2Keyboard" but can vary depending on the
4184 requirements of the guest operating system.</desc>
4185 </attribute>
4186
4187 <attribute name="hpetEnabled" type="boolean">
4188 <desc>This attribute controls if High Precision Event Timer (HPET) is
4189 enabled in this VM. Use this property if you want to provide guests
4190 with additional time source, or if guest requires HPET to function correctly.
4191 Default is false.</desc>
4192 </attribute>
4193
4194 <attribute name="snapshotFolder" type="wstring">
4195 <desc>
4196 Full path to the directory used to store snapshot data
4197 (differencing media and saved state files) of this machine.
4198
4199 The initial value of this property is
4200 <tt>&lt;</tt><link to="#settingsFilePath">
4201 path_to_settings_file</link><tt>&gt;/&lt;</tt>
4202 <link to="#id">machine_uuid</link>
4203 <tt>&gt;</tt>.
4204
4205 Currently, it is an error to try to change this property on
4206 a machine that has snapshots (because this would require to
4207 move possibly large files to a different location).
4208 A separate method will be available for this purpose later.
4209
4210 <note>
4211 Setting this property to @c null or to an empty string will restore
4212 the initial value.
4213 </note>
4214 <note>
4215 When setting this property, the specified path can be
4216 absolute (full path) or relative to the directory where the
4217 <link to="#settingsFilePath">machine settings file</link>
4218 is located. When reading this property, a full path is
4219 always returned.
4220 </note>
4221 <note>
4222 The specified path may not exist, it will be created
4223 when necessary.
4224 </note>
4225 </desc>
4226 </attribute>
4227
4228 <attribute name="VRDPServer" type="IVRDPServer" readonly="yes">
4229 <desc>VRDP server object.</desc>
4230 </attribute>
4231
4232 <attribute name="mediumAttachments" type="IMediumAttachment" readonly="yes" safearray="yes">
4233 <desc>Array of media attached to this machine.</desc>
4234 </attribute>
4235
4236 <attribute name="USBController" type="IUSBController" readonly="yes">
4237 <desc>
4238 Associated USB controller object.
4239
4240 <note>
4241 If USB functionality is not available in the given edition of
4242 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4243 </note>
4244 </desc>
4245 </attribute>
4246
4247 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
4248 <desc>Associated audio adapter, always present.</desc>
4249 </attribute>
4250
4251 <attribute name="storageControllers" type="IStorageController" readonly="yes" safearray="yes">
4252 <desc>Array of storage controllers attached to this machine.</desc>
4253 </attribute>
4254
4255 <attribute name="settingsFilePath" type="wstring" readonly="yes">
4256 <desc>
4257 Full name of the file containing machine settings data.
4258 </desc>
4259 </attribute>
4260
4261 <attribute name="settingsModified" type="boolean" readonly="yes">
4262 <desc>
4263 Whether the settings of this machine have been modified
4264 (but neither yet saved nor discarded).
4265 <note>
4266 Reading this property is only valid on instances returned
4267 by <link to="ISession::machine"/> and on new machines
4268 created by <link to="IVirtualBox::createMachine"/> or opened
4269 by <link to="IVirtualBox::openMachine"/> but not
4270 yet registered, or on unregistered machines after calling
4271 <link to="IVirtualBox::unregisterMachine"/>. For all other
4272 cases, the settings can never be modified.
4273 </note>
4274 <note>
4275 For newly created unregistered machines, the value of this
4276 property is always @c true until <link to="#saveSettings"/>
4277 is called (no matter if any machine settings have been
4278 changed after the creation or not). For opened machines
4279 the value is set to @c false (and then follows to normal rules).
4280 </note>
4281 </desc>
4282 </attribute>
4283
4284 <attribute name="sessionState" type="SessionState" readonly="yes">
4285 <desc>Current session state for this machine.</desc>
4286 </attribute>
4287
4288 <attribute name="sessionType" type="wstring" readonly="yes">
4289 <desc>
4290 Type of the session. If <link to="#sessionState"/> is
4291 SessionSpawning or SessionOpen, this attribute contains the
4292 same value as passed to the
4293 <link to="IVirtualBox::openRemoteSession"/> method in the
4294 @a type parameter. If the session was opened directly using
4295 <link to="IVirtualBox::openSession"/>, or if
4296 <link to="#sessionState"/> is SessionClosed, the value of this
4297 attribute is an empty string.
4298 </desc>
4299 </attribute>
4300
4301 <attribute name="sessionPid" type="unsigned long" readonly="yes">
4302 <desc>
4303 Identifier of the session process. This attribute contains the
4304 platform-dependent identifier of the process that has opened a
4305 direct session for this machine using the
4306 <link to="IVirtualBox::openSession"/> call. The returned value
4307 is only valid if <link to="#sessionState"/> is SessionOpen or
4308 SessionClosing (i.e. a session is currently open or being
4309 closed) by the time this property is read.
4310 </desc>
4311 </attribute>
4312
4313 <attribute name="state" type="MachineState" readonly="yes">
4314 <desc>Current execution state of this machine.</desc>
4315 </attribute>
4316
4317 <attribute name="lastStateChange" type="long long" readonly="yes">
4318 <desc>
4319 Time stamp of the last execution state change,
4320 in milliseconds since 1970-01-01 UTC.
4321 </desc>
4322 </attribute>
4323
4324 <attribute name="stateFilePath" type="wstring" readonly="yes">
4325 <desc>
4326 Full path to the file that stores the execution state of
4327 the machine when it is in the <link to="MachineState_Saved"/> state.
4328 <note>
4329 When the machine is not in the Saved state, this attribute is
4330 an empty string.
4331 </note>
4332 </desc>
4333 </attribute>
4334
4335 <attribute name="logFolder" type="wstring" readonly="yes">
4336 <desc>
4337 Full path to the folder that stores a set of rotated log files
4338 recorded during machine execution. The most recent log file is
4339 named <tt>VBox.log</tt>, the previous log file is
4340 named <tt>VBox.log.1</tt> and so on (up to <tt>VBox.log.3</tt>
4341 in the current version).
4342 </desc>
4343 </attribute>
4344
4345 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
4346 <desc>
4347 Current snapshot of this machine. This is @c null if the machine
4348 currently has no snapshots. If it is not @c null, then it was
4349 set by one of <link to="Console::takeSnapshot" />,
4350 <link to="Console::deleteSnapshot" />
4351 or <link to="Console::restoreSnapshot" />, depending on which
4352 was called last. See <link to="ISnapshot"/> for details.
4353 </desc>
4354 </attribute>
4355
4356 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
4357 <desc>
4358 Number of snapshots taken on this machine. Zero means the
4359 machine doesn't have any snapshots.
4360 </desc>
4361 </attribute>
4362
4363 <attribute name="currentStateModified" type="boolean" readonly="yes">
4364 <desc>
4365 Returns @c true if the current state of the machine is not
4366 identical to the state stored in the current snapshot.
4367
4368 The current state is identical to the current snapshot only
4369 directly after one of the following calls are made:
4370
4371 <ul>
4372 <li><link to="IConsole::restoreSnapshot"/>
4373 </li>
4374 <li><link to="IConsole::takeSnapshot"/> (issued on a
4375 "powered off" or "saved" machine, for which
4376 <link to="#settingsModified"/> returns @c false)
4377 </li>
4378 <li><link to="IMachine::setCurrentSnapshot"/>
4379 </li>
4380 </ul>
4381
4382 The current state remains identical until one of the following
4383 happens:
4384 <ul>
4385 <li>settings of the machine are changed</li>
4386 <li>the saved state is deleted</li>
4387 <li>the current snapshot is deleted</li>
4388 <li>an attempt to execute the machine is made</li>
4389 </ul>
4390
4391 <note>
4392 For machines that don't have snapshots, this property is
4393 always @c false.
4394 </note>
4395 </desc>
4396 </attribute>
4397
4398 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
4399 <desc>
4400 Collection of shared folders for this machine (permanent shared
4401 folders). These folders are shared automatically at machine startup
4402 and available only to the guest OS installed within this machine.
4403
4404 New shared folders are added to the collection using
4405 <link to="#createSharedFolder"/>. Existing shared folders can be
4406 removed using <link to="#removeSharedFolder"/>.
4407 </desc>
4408 </attribute>
4409
4410 <attribute name="clipboardMode" type="ClipboardMode">
4411 <desc>
4412 Synchronization mode between the host OS clipboard
4413 and the guest OS clipboard.
4414 </desc>
4415 </attribute>
4416
4417 <attribute name="guestPropertyNotificationPatterns" type="wstring">
4418 <desc>
4419 A comma-separated list of simple glob patterns. Changes to guest
4420 properties whose name matches one of the patterns will generate an
4421 <link to="IGuestPropertyChangedEvent"/> signal.
4422 </desc>
4423 </attribute>
4424
4425 <attribute name="teleporterEnabled" type="boolean">
4426 <desc>
4427 When set to @a true, the virtual machine becomes a target teleporter
4428 the next time it is powered on. This can only set to @a true when the
4429 VM is in the @a PoweredOff or @a Aborted state.
4430
4431 <!-- This property is automatically set to @a false when the VM is powered
4432 on. (bird: This doesn't work yet ) -->
4433 </desc>
4434 </attribute>
4435
4436 <attribute name="teleporterPort" type="unsigned long">
4437 <desc>
4438 The TCP port the target teleporter will listen for incoming
4439 teleportations on.
4440
4441 0 means the port is automatically selected upon power on. The actual
4442 value can be read from this property while the machine is waiting for
4443 incoming teleportations.
4444 </desc>
4445 </attribute>
4446
4447 <attribute name="teleporterAddress" type="wstring">
4448 <desc>
4449 The address the target teleporter will listen on. If set to an empty
4450 string, it will listen on all addresses.
4451 </desc>
4452 </attribute>
4453
4454 <attribute name="teleporterPassword" type="wstring">
4455 <desc>
4456 The password the to check for on the target teleporter. This is just a
4457 very basic measure to prevent simple hacks and operators accidentally
4458 beaming a virtual machine to the wrong place.
4459 </desc>
4460 </attribute>
4461
4462 <attribute name="RTCUseUTC" type="boolean">
4463 <desc>
4464 When set to @a true, the RTC device of the virtual machine will run
4465 in UTC time, otherwise in local time. Especially Unix guests prefer
4466 the time in UTC.
4467 </desc>
4468 </attribute>
4469
4470 <attribute name="ioCacheEnabled" type="boolean">
4471 <desc>
4472 When set to @a true, the builtin I/O cache of the virtual machine
4473 will be enabled.
4474 </desc>
4475 </attribute>
4476
4477 <attribute name="ioCacheSize" type="unsigned long">
4478 <desc>
4479 Maximum size of the I/O cache in MB.
4480 </desc>
4481 </attribute>
4482
4483 <attribute name="ioBandwidthMax" type="unsigned long">
4484 <desc>
4485 The maximum number of MB the VM is allowed to transfer per second.
4486 0 means unlimited bandwidth.
4487 </desc>
4488 </attribute>
4489
4490 <method name="setBootOrder">
4491 <desc>
4492 Puts the given device to the specified position in
4493 the boot order.
4494
4495 To indicate that no device is associated with the given position,
4496 <link to="DeviceType_Null"/> should be used.
4497
4498 @todo setHardDiskBootOrder(), setNetworkBootOrder()
4499
4500 <result name="E_INVALIDARG">
4501 Boot @a position out of range.
4502 </result>
4503 <result name="E_NOTIMPL">
4504 Booting from USB @a device currently not supported.
4505 </result>
4506
4507 </desc>
4508 <param name="position" type="unsigned long" dir="in">
4509 <desc>
4510 Position in the boot order (@c 1 to the total number of
4511 devices the machine can boot from, as returned by
4512 <link to="ISystemProperties::maxBootPosition"/>).
4513 </desc>
4514 </param>
4515 <param name="device" type="DeviceType" dir="in">
4516 <desc>
4517 The type of the device used to boot at the given position.
4518 </desc>
4519 </param>
4520 </method>
4521
4522 <method name="getBootOrder" const="yes">
4523 <desc>
4524 Returns the device type that occupies the specified
4525 position in the boot order.
4526
4527 @todo [remove?]
4528 If the machine can have more than one device of the returned type
4529 (such as hard disks), then a separate method should be used to
4530 retrieve the individual device that occupies the given position.
4531
4532 If here are no devices at the given position, then
4533 <link to="DeviceType_Null"/> is returned.
4534
4535 @todo getHardDiskBootOrder(), getNetworkBootOrder()
4536
4537 <result name="E_INVALIDARG">
4538 Boot @a position out of range.
4539 </result>
4540
4541 </desc>
4542 <param name="position" type="unsigned long" dir="in">
4543 <desc>
4544 Position in the boot order (@c 1 to the total number of
4545 devices the machine can boot from, as returned by
4546 <link to="ISystemProperties::maxBootPosition"/>).
4547 </desc>
4548 </param>
4549 <param name="device" type="DeviceType" dir="return">
4550 <desc>
4551 Device at the given position.
4552 </desc>
4553 </param>
4554 </method>
4555
4556 <method name="attachDevice">
4557 <desc>
4558 Attaches a device and optionally mounts a medium to the given storage
4559 controller (<link to="IStorageController" />, identified by @a name),
4560 at the indicated port and device.
4561
4562 This method is intended for managing storage devices in general (it works
4563 for both fixed and removable media). For storage devices supporting removable
4564 media (such as DVDs and floppies), you can also use <link to="IMedium::mountMedium"/>
4565 for changing the media while the machine is running.
4566
4567 In a VM's default configuration of virtual machines, the secondary
4568 master of the IDE controller is used for a CD/DVD drive.
4569
4570 For fixed media such as hard disks, the given medium identifier cannot
4571 be a zero UUID. It may be a zero UUID for removable media such as DVDs
4572 and floppies.
4573
4574 After calling this returns successfully, a new instance of
4575 <link to="IMediumAttachment"/> will appear in the machine's list of medium
4576 attachments (<link to="IMachine::mediumAttachments"/>).
4577
4578 The specified device slot must not have a device attached to it,
4579 or this method will fail.
4580
4581 See <link to="IMedium"/> and <link to="IMediumAttachment"/> for more
4582 information about attaching media.
4583
4584 <note>
4585 You cannot attach a device to a running machine. Also, you cannot
4586 attach a device to a newly created machine until this machine's
4587 settings are saved to disk using <link to="#saveSettings"/>.
4588 </note>
4589 <note>
4590 If the medium is being attached indirectly, a new differencing medium
4591 will implicitly be created for it and attached instead. If the
4592 changes made to the machine settings (including this indirect
4593 attachment) are later cancelled using <link to="#discardSettings"/>,
4594 this implicitly created differencing medium will implicitly
4595 be deleted.
4596 </note>
4597
4598 <result name="E_INVALIDARG">
4599 SATA device, SATA port, IDE port or IDE slot out of range.
4600 </result>
4601 <result name="VBOX_E_INVALID_OBJECT_STATE">
4602 Attempt to attach medium to an unregistered virtual machine.
4603 </result>
4604 <result name="VBOX_E_INVALID_VM_STATE">
4605 Invalid machine state.
4606 </result>
4607 <result name="VBOX_E_OBJECT_IN_USE">
4608 Hard disk already attached to this or another virtual machine.
4609 </result>
4610
4611 </desc>
4612 <param name="name" type="wstring" dir="in">
4613 <desc>Name of the storage controller to attach the device to.</desc>
4614 </param>
4615 <param name="controllerPort" type="long" dir="in">
4616 <desc>Port to attach the device to. For an IDE controller, 0 specifies
4617 the primary controller and 1 specifies the secondary controller.
4618 For a SCSI controller, this must range from 0 to 15; for a SATA controller,
4619 from 0 to 29; for an SAS controller, from 0 to 7.</desc>
4620 </param>
4621 <param name="device" type="long" dir="in">
4622 <desc>Device slot in the given port to attach the device to. This is only
4623 relevant for IDE controllers, for which 0 specifies the master device and
4624 1 specifies the slave device. For all other controller types, this must
4625 be 0.</desc>
4626 </param>
4627 <param name="type" type="DeviceType" dir="in">
4628 <desc>Device type of the attached device.</desc>
4629 </param>
4630 <param name="id" type="uuid" mod="string" dir="in">
4631 <desc>UUID of the medium to mount. Zero UUID means do not mount any
4632 medium.</desc>
4633 </param>
4634 </method>
4635
4636 <method name="detachDevice">
4637 <desc>
4638 Detaches the device attached to a device slot of the specified bus.
4639
4640 Detaching the device from the virtual machine is deferred. This means
4641 that the medium remains associated with the machine when this method
4642 returns and gets actually de-associated only after a successful
4643 <link to="#saveSettings"/> call. See <link to="IMedium"/>
4644 for more detailed information about attaching media.
4645
4646 <note>
4647 You cannot detach a device from a running machine.
4648 </note>
4649 <note>
4650 Detaching differencing media implicitly created by <link
4651 to="#attachDevice"/> for the indirect attachment using this
4652 method will <b>not</b> implicitly delete them. The
4653 <link to="IMedium::deleteStorage"/> operation should be
4654 explicitly performed by the caller after the medium is successfully
4655 detached and the settings are saved with
4656 <link to="#saveSettings"/>, if it is the desired action.
4657 </note>
4658
4659 <result name="VBOX_E_INVALID_VM_STATE">
4660 Attempt to detach medium from a running virtual machine.
4661 </result>
4662 <result name="VBOX_E_OBJECT_NOT_FOUND">
4663 No medium attached to given slot/bus.
4664 </result>
4665 <result name="VBOX_E_NOT_SUPPORTED">
4666 Medium format does not support storage deletion.
4667 </result>
4668
4669 </desc>
4670 <param name="name" type="wstring" dir="in">
4671 <desc>Name of the storage controller to detach the medium from.</desc>
4672 </param>
4673 <param name="controllerPort" type="long" dir="in">
4674 <desc>Port number to detach the medium from.</desc>
4675 </param>
4676 <param name="device" type="long" dir="in">
4677 <desc>Device slot number to detach the medium from.</desc>
4678 </param>
4679 </method>
4680
4681 <method name="passthroughDevice">
4682 <desc>
4683 Sets the passthrough mode of an existing DVD device. Changing the
4684 setting while the VM is running is forbidden. The setting is only used
4685 if at VM start the device is configured as a host DVD drive, in all
4686 other cases it is ignored. The device must already exist; see
4687 <link to="IMachine::attachDevice"/> for how to attach a new device.
4688
4689 The @a controllerPort and @a device parameters specify the device slot and
4690 have have the same meaning as with <link to="IMachine::attachDevice" />.
4691
4692 <result name="E_INVALIDARG">
4693 SATA device, SATA port, IDE port or IDE slot out of range.
4694 </result>
4695 <result name="VBOX_E_INVALID_OBJECT_STATE">
4696 Attempt to modify an unregistered virtual machine.
4697 </result>
4698 <result name="VBOX_E_INVALID_VM_STATE">
4699 Invalid machine state.
4700 </result>
4701
4702 </desc>
4703 <param name="name" type="wstring" dir="in">
4704 <desc>Name of the storage controller.</desc>
4705 </param>
4706 <param name="controllerPort" type="long" dir="in">
4707 <desc>Storage controller port.</desc>
4708 </param>
4709 <param name="device" type="long" dir="in">
4710 <desc>Device slot in the given port.</desc>
4711 </param>
4712 <param name="passthrough" type="boolean" dir="in">
4713 <desc>New value for the passthrough setting.</desc>
4714 </param>
4715 </method>
4716
4717 <method name="mountMedium">
4718 <desc>
4719 Mounts a medium (<link to="IMedium" />, identified
4720 by the given UUID @a id) to the given storage controller
4721 (<link to="IStorageController" />, identified by @a name),
4722 at the indicated port and device. The device must already exist;
4723 see <link to="IMachine::attachDevice"/> for how to attach a new device.
4724
4725 This method is intended only for managing removable media, where the
4726 device is fixed but media is changeable at runtime (such as DVDs
4727 and floppies). It cannot be used for fixed media such as hard disks.
4728
4729 The @a controllerPort and @a device parameters specify the device slot and
4730 have have the same meaning as with <link to="IMachine::attachDevice" />.
4731
4732 The specified device slot can have a medium mounted, which will be
4733 unmounted first. Specifying a zero UUID (or an empty string) for
4734 @a medium does just an unmount.
4735
4736 See <link to="IMedium"/> for more detailed information about
4737 attaching media.
4738
4739 <result name="E_INVALIDARG">
4740 SATA device, SATA port, IDE port or IDE slot out of range.
4741 </result>
4742 <result name="VBOX_E_INVALID_OBJECT_STATE">
4743 Attempt to attach medium to an unregistered virtual machine.
4744 </result>
4745 <result name="VBOX_E_INVALID_VM_STATE">
4746 Invalid machine state.
4747 </result>
4748 <result name="VBOX_E_OBJECT_IN_USE">
4749 Medium already attached to this or another virtual machine.
4750 </result>
4751
4752 </desc>
4753 <param name="name" type="wstring" dir="in">
4754 <desc>Name of the storage controller to attach the medium to.</desc>
4755 </param>
4756 <param name="controllerPort" type="long" dir="in">
4757 <desc>Port to attach the medium to.</desc>
4758 </param>
4759 <param name="device" type="long" dir="in">
4760 <desc>Device slot in the given port to attach the medium to.</desc>
4761 </param>
4762 <param name="medium" type="uuid" mod="string" dir="in">
4763 <desc>UUID of the medium to attach. A zero UUID means unmount the
4764 currently mounted medium.</desc>
4765 </param>
4766 <param name="force" type="boolean" dir="in">
4767 <desc>Allows to force unmount/mount of a medium which is locked by
4768 theDevice slot in the given port to attach the medium to.</desc>
4769 </param>
4770 </method>
4771
4772 <method name="getMedium" const="yes">
4773 <desc>
4774 Returns the virtual medium attached to a device slot of the specified
4775 bus.
4776
4777 Note that if the medium was indirectly attached by
4778 <link to="#mountMedium"/> to the given device slot then this
4779 method will return not the same object as passed to the
4780 <link to="#mountMedium"/> call. See <link to="IMedium"/> for
4781 more detailed information about mounting a medium.
4782
4783 <result name="VBOX_E_OBJECT_NOT_FOUND">
4784 No medium attached to given slot/bus.
4785 </result>
4786
4787 </desc>
4788 <param name="name" type="wstring" dir="in">
4789 <desc>Name of the storage controller the medium is attached to.</desc>
4790 </param>
4791 <param name="controllerPort" type="long" dir="in">
4792 <desc>Port to query.</desc>
4793 </param>
4794 <param name="device" type="long" dir="in">
4795 <desc>Device slot in the given port to query.</desc>
4796 </param>
4797 <param name="medium" type="IMedium" dir="return">
4798 <desc>Attached medium object.</desc>
4799 </param>
4800 </method>
4801
4802 <method name="getMediumAttachmentsOfController" const="yes">
4803 <desc>
4804 Returns an array of medium attachments which are attached to the
4805 the controller with the given name.
4806
4807 <result name="VBOX_E_OBJECT_NOT_FOUND">
4808 A storage controller with given name doesn't exist.
4809 </result>
4810 </desc>
4811 <param name="name" type="wstring" dir="in"/>
4812 <param name="mediumAttachments" type="IMediumAttachment" safearray="yes" dir="return"/>
4813 </method>
4814
4815 <method name="getMediumAttachment" const="yes">
4816 <desc>
4817 Returns a medium attachment which corresponds to the controller with
4818 the given name, on the given port and device slot.
4819
4820 <result name="VBOX_E_OBJECT_NOT_FOUND">
4821 No attachment exists for the given controller/port/device combination.
4822 </result>
4823 </desc>
4824 <param name="name" type="wstring" dir="in"/>
4825 <param name="controllerPort" type="long" dir="in"/>
4826 <param name="device" type="long" dir="in"/>
4827 <param name="attachment" type="IMediumAttachment" dir="return"/>
4828 </method>
4829
4830 <method name="getNetworkAdapter" const="yes">
4831 <desc>
4832 Returns the network adapter associated with the given slot.
4833 Slots are numbered sequentially, starting with zero. The total
4834 number of adapters per machine is defined by the
4835 <link to="ISystemProperties::networkAdapterCount"/> property,
4836 so the maximum slot number is one less than that property's value.
4837
4838 <result name="E_INVALIDARG">
4839 Invalid @a slot number.
4840 </result>
4841
4842 </desc>
4843 <param name="slot" type="unsigned long" dir="in"/>
4844 <param name="adapter" type="INetworkAdapter" dir="return"/>
4845 </method>
4846
4847 <method name="addStorageController">
4848 <desc>
4849 Adds a new storage controller (SCSI, SAS or SATA controller) to the
4850 machine and returns it as an instance of
4851 <link to="IStorageController" />.
4852
4853 @a name identifies the controller for subsequent calls such as
4854 <link to="#getStorageControllerByName" />,
4855 <link to="#getStorageControllerByInstance" />,
4856 <link to="#removeStorageController" />,
4857 <link to="#attachDevice" /> or <link to="#mountMedium" />.
4858
4859 After the controller has been added, you can set its exact
4860 type by setting the <link to="IStorageController::controllerType" />.
4861
4862 <result name="VBOX_E_OBJECT_IN_USE">
4863 A storage controller with given name exists already.
4864 </result>
4865 <result name="E_INVALIDARG">
4866 Invalid @a controllerType.
4867 </result>
4868 </desc>
4869 <param name="name" type="wstring" dir="in"/>
4870 <param name="connectionType" type="StorageBus" dir="in"/>
4871 <param name="controller" type="IStorageController" dir="return"/>
4872 </method>
4873
4874 <method name="getStorageControllerByName" const="yes">
4875 <desc>
4876 Returns a storage controller with the given name.
4877
4878 <result name="VBOX_E_OBJECT_NOT_FOUND">
4879 A storage controller with given name doesn't exist.
4880 </result>
4881 </desc>
4882 <param name="name" type="wstring" dir="in"/>
4883 <param name="storageController" type="IStorageController" dir="return"/>
4884 </method>
4885
4886 <method name="getStorageControllerByInstance" const="yes">
4887 <desc>
4888 Returns a storage controller with the given instance number.
4889
4890 <result name="VBOX_E_OBJECT_NOT_FOUND">
4891 A storage controller with given instance number doesn't exist.
4892 </result>
4893 </desc>
4894 <param name="instance" type="unsigned long" dir="in"/>
4895 <param name="storageController" type="IStorageController" dir="return"/>
4896 </method>
4897
4898 <method name="removeStorageController">
4899 <desc>
4900 Removes a storage controller from the machine.
4901
4902 <result name="VBOX_E_OBJECT_NOT_FOUND">
4903 A storage controller with given name doesn't exist.
4904 </result>
4905 </desc>
4906 <param name="name" type="wstring" dir="in"/>
4907 </method>
4908
4909 <method name="getSerialPort" const="yes">
4910 <desc>
4911 Returns the serial port associated with the given slot.
4912 Slots are numbered sequentially, starting with zero. The total
4913 number of serial ports per machine is defined by the
4914 <link to="ISystemProperties::serialPortCount"/> property,
4915 so the maximum slot number is one less than that property's value.
4916
4917 <result name="E_INVALIDARG">
4918 Invalid @a slot number.
4919 </result>
4920
4921 </desc>
4922 <param name="slot" type="unsigned long" dir="in"/>
4923 <param name="port" type="ISerialPort" dir="return"/>
4924 </method>
4925
4926 <method name="getParallelPort" const="yes">
4927 <desc>
4928 Returns the parallel port associated with the given slot.
4929 Slots are numbered sequentially, starting with zero. The total
4930 number of parallel ports per machine is defined by the
4931 <link to="ISystemProperties::parallelPortCount"/> property,
4932 so the maximum slot number is one less than that property's value.
4933
4934 <result name="E_INVALIDARG">
4935 Invalid @a slot number.
4936 </result>
4937
4938 </desc>
4939 <param name="slot" type="unsigned long" dir="in"/>
4940 <param name="port" type="IParallelPort" dir="return"/>
4941 </method>
4942
4943 <method name="getExtraDataKeys">
4944 <desc>
4945 Returns an array representing the machine-specific extra data keys
4946 which currently have values defined.
4947 </desc>
4948 <param name="value" type="wstring" dir="return" safearray="yes">
4949 <desc>Array of extra data keys.</desc>
4950 </param>
4951 </method>
4952
4953 <method name="getExtraData">
4954 <desc>
4955 Returns associated machine-specific extra data.
4956
4957 If the requested data @a key does not exist, this function will
4958 succeed and return an empty string in the @a value argument.
4959
4960 <result name="VBOX_E_FILE_ERROR">
4961 Settings file not accessible.
4962 </result>
4963 <result name="VBOX_E_XML_ERROR">
4964 Could not parse the settings file.
4965 </result>
4966
4967 </desc>
4968 <param name="key" type="wstring" dir="in">
4969 <desc>Name of the data key to get.</desc>
4970 </param>
4971 <param name="value" type="wstring" dir="return">
4972 <desc>Value of the requested data key.</desc>
4973 </param>
4974 </method>
4975
4976 <method name="setExtraData">
4977 <desc>
4978 Sets associated machine-specific extra data.
4979
4980 If you pass @c null or an empty string as a key @a value, the given
4981 @a key will be deleted.
4982
4983 <note>
4984 Before performing the actual data change, this method will ask all
4985 registered listeners using the
4986 <link to="IExtraDataCanChangeEvent"/>
4987 notification for a permission. If one of the listeners refuses the
4988 new value, the change will not be performed.
4989 </note>
4990 <note>
4991 On success, the
4992 <link to="IExtraDataChangedEvent"/> notification
4993 is called to inform all registered listeners about a successful data
4994 change.
4995 </note>
4996 <note>
4997 This method can be called outside the machine session and therefore
4998 it's a caller's responsibility to handle possible race conditions
4999 when several clients change the same key at the same time.
5000 </note>
5001
5002 <result name="VBOX_E_FILE_ERROR">
5003 Settings file not accessible.
5004 </result>
5005 <result name="VBOX_E_XML_ERROR">
5006 Could not parse the settings file.
5007 </result>
5008
5009 </desc>
5010 <param name="key" type="wstring" dir="in">
5011 <desc>Name of the data key to set.</desc>
5012 </param>
5013 <param name="value" type="wstring" dir="in">
5014 <desc>Value to assign to the key.</desc>
5015 </param>
5016 </method>
5017
5018 <method name="getCPUProperty" const="yes">
5019 <desc>
5020 Returns the virtual CPU boolean value of the specified property.
5021
5022 <result name="E_INVALIDARG">
5023 Invalid property.
5024 </result>
5025
5026 </desc>
5027 <param name="property" type="CPUPropertyType" dir="in">
5028 <desc>
5029 Property type to query.
5030 </desc>
5031 </param>
5032 <param name="value" type="boolean" dir="return">
5033 <desc>
5034 Property value.
5035 </desc>
5036 </param>
5037 </method>
5038
5039 <method name="setCPUProperty">
5040 <desc>
5041 Sets the virtual CPU boolean value of the specified property.
5042
5043 <result name="E_INVALIDARG">
5044 Invalid property.
5045 </result>
5046
5047 </desc>
5048 <param name="property" type="CPUPropertyType" dir="in">
5049 <desc>
5050 Property type to query.
5051 </desc>
5052 </param>
5053 <param name="value" type="boolean" dir="in">
5054 <desc>
5055 Property value.
5056 </desc>
5057 </param>
5058 </method>
5059
5060 <method name="getCPUIDLeaf" const="yes">
5061 <desc>
5062 Returns the virtual CPU cpuid information for the specified leaf.
5063
5064 Currently supported index values for cpuid:
5065 Standard CPUID leafs: 0 - 0xA
5066 Extended CPUID leafs: 0x80000000 - 0x8000000A
5067
5068 See the Intel and AMD programmer's manuals for detailed information
5069 about the cpuid instruction and its leafs.
5070 <result name="E_INVALIDARG">
5071 Invalid id.
5072 </result>
5073
5074 </desc>
5075 <param name="id" type="unsigned long" dir="in">
5076 <desc>
5077 CPUID leaf index.
5078 </desc>
5079 </param>
5080 <param name="valEax" type="unsigned long" dir="out">
5081 <desc>
5082 CPUID leaf value for register eax.
5083 </desc>
5084 </param>
5085 <param name="valEbx" type="unsigned long" dir="out">
5086 <desc>
5087 CPUID leaf value for register ebx.
5088 </desc>
5089 </param>
5090 <param name="valEcx" type="unsigned long" dir="out">
5091 <desc>
5092 CPUID leaf value for register ecx.
5093 </desc>
5094 </param>
5095 <param name="valEdx" type="unsigned long" dir="out">
5096 <desc>
5097 CPUID leaf value for register edx.
5098 </desc>
5099 </param>
5100 </method>
5101
5102 <method name="setCPUIDLeaf">
5103 <desc>
5104 Sets the virtual CPU cpuid information for the specified leaf. Note that these values
5105 are not passed unmodified. VirtualBox clears features that it doesn't support.
5106
5107 Currently supported index values for cpuid:
5108 Standard CPUID leafs: 0 - 0xA
5109 Extended CPUID leafs: 0x80000000 - 0x8000000A
5110
5111 See the Intel and AMD programmer's manuals for detailed information
5112 about the cpuid instruction and its leafs.
5113
5114 Do not use this method unless you know exactly what you're doing. Misuse can lead to
5115 random crashes inside VMs.
5116 <result name="E_INVALIDARG">
5117 Invalid id.
5118 </result>
5119
5120 </desc>
5121 <param name="id" type="unsigned long" dir="in">
5122 <desc>
5123 CPUID leaf index.
5124 </desc>
5125 </param>
5126 <param name="valEax" type="unsigned long" dir="in">
5127 <desc>
5128 CPUID leaf value for register eax.
5129 </desc>
5130 </param>
5131 <param name="valEbx" type="unsigned long" dir="in">
5132 <desc>
5133 CPUID leaf value for register ebx.
5134 </desc>
5135 </param>
5136 <param name="valEcx" type="unsigned long" dir="in">
5137 <desc>
5138 CPUID leaf value for register ecx.
5139 </desc>
5140 </param>
5141 <param name="valEdx" type="unsigned long" dir="in">
5142 <desc>
5143 CPUID leaf value for register edx.
5144 </desc>
5145 </param>
5146 </method>
5147
5148 <method name="removeCPUIDLeaf">
5149 <desc>
5150 Removes the virtual CPU cpuid leaf for the specified index
5151
5152 <result name="E_INVALIDARG">
5153 Invalid id.
5154 </result>
5155
5156 </desc>
5157 <param name="id" type="unsigned long" dir="in">
5158 <desc>
5159 CPUID leaf index.
5160 </desc>
5161 </param>
5162 </method>
5163
5164 <method name="removeAllCPUIDLeaves">
5165 <desc>
5166 Removes all the virtual CPU cpuid leaves
5167 </desc>
5168 </method>
5169
5170 <method name="getHWVirtExProperty" const="yes">
5171 <desc>
5172 Returns the value of the specified hardware virtualization boolean property.
5173
5174 <result name="E_INVALIDARG">
5175 Invalid property.
5176 </result>
5177
5178 </desc>
5179 <param name="property" type="HWVirtExPropertyType" dir="in">
5180 <desc>
5181 Property type to query.
5182 </desc>
5183 </param>
5184 <param name="value" type="boolean" dir="return">
5185 <desc>
5186 Property value.
5187 </desc>
5188 </param>
5189 </method>
5190
5191 <method name="setHWVirtExProperty">
5192 <desc>
5193 Sets a new value for the specified hardware virtualization boolean property.
5194
5195 <result name="E_INVALIDARG">
5196 Invalid property.
5197 </result>
5198
5199 </desc>
5200 <param name="property" type="HWVirtExPropertyType" dir="in">
5201 <desc>
5202 Property type to set.
5203 </desc>
5204 </param>
5205 <param name="value" type="boolean" dir="in">
5206 <desc>
5207 New property value.
5208 </desc>
5209 </param>
5210 </method>
5211
5212 <method name="saveSettings">
5213 <desc>
5214 Saves any changes to machine settings made since the session
5215 has been opened or a new machine has been created, or since the
5216 last call to <link to="#saveSettings"/> or <link to="#discardSettings"/>.
5217 For registered machines, new settings become visible to all
5218 other VirtualBox clients after successful invocation of this
5219 method.
5220 <note>
5221 The method sends <link to="IMachineDataChangedEvent"/>
5222 notification event after the configuration has been successfully
5223 saved (only for registered machines).
5224 </note>
5225 <note>
5226 Calling this method is only valid on instances returned
5227 by <link to="ISession::machine"/> and on new machines
5228 created by <link to="IVirtualBox::createMachine"/> but not
5229 yet registered, or on unregistered machines after calling
5230 <link to="IVirtualBox::unregisterMachine"/>.
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 <result name="E_ACCESSDENIED">
5240 Modification request refused.
5241 </result>
5242
5243 </desc>
5244 </method>
5245
5246 <method name="discardSettings">
5247 <desc>
5248 Discards any changes to the machine settings made since the session
5249 has been opened or since the last call to <link to="#saveSettings"/>
5250 or <link to="#discardSettings"/>.
5251 <note>
5252 Calling this method is only valid on instances returned
5253 by <link to="ISession::machine"/> and on new machines
5254 created by <link to="IVirtualBox::createMachine"/> or
5255 opened by <link to="IVirtualBox::openMachine"/> but not
5256 yet registered, or on unregistered machines after calling
5257 <link to="IVirtualBox::unregisterMachine"/>.
5258 </note>
5259
5260 <result name="VBOX_E_INVALID_VM_STATE">
5261 Virtual machine is not mutable.
5262 </result>
5263
5264 </desc>
5265 </method>
5266
5267 <method name="deleteSettings">
5268 <desc>
5269 Deletes the settings file of this machine from disk.
5270 The machine must not be registered in order for this operation
5271 to succeed.
5272 <note>
5273 <link to="#settingsModified"/> will return @c true after this
5274 method successfully returns.
5275 </note>
5276 <note>
5277 Calling this method is only valid on instances returned
5278 by <link to="ISession::machine"/> and on new machines
5279 created by <link to="IVirtualBox::createMachine"/> or
5280 opened by <link to="IVirtualBox::openMachine"/> but not
5281 yet registered, or on unregistered machines after calling
5282 <link to="IVirtualBox::unregisterMachine"/>.
5283 </note>
5284 <note>
5285 The deleted machine settings file can be restored (saved again)
5286 by calling <link to="#saveSettings"/>.
5287 </note>
5288
5289 <result name="VBOX_E_INVALID_VM_STATE">
5290 Cannot delete settings of a registered machine or
5291 machine not mutable.
5292 </result>
5293 <result name="VBOX_E_IPRT_ERROR">
5294 Could not delete the settings file.
5295 </result>
5296
5297 </desc>
5298 </method>
5299
5300 <method name="export">
5301 <desc>Exports the machine to an OVF appliance. See <link to="IAppliance" /> for the
5302 steps required to export VirtualBox machines to OVF.
5303 </desc>
5304
5305 <param name="aAppliance" type="IAppliance" dir="in">
5306 <desc>Appliance to export this machine to.</desc>
5307 </param>
5308 <param name="aDescription" type="IVirtualSystemDescription" dir="return">
5309 <desc>VirtualSystemDescription object which is created for this machine.</desc>
5310 </param>
5311 </method >
5312
5313 <method name="getSnapshot">
5314 <desc>
5315 Returns a snapshot of this machine with the given UUID.
5316 A @c null UUID can be used to obtain the first snapshot
5317 taken on this machine. This is useful if you want to traverse
5318 the whole tree of snapshots starting from the root.
5319
5320 <result name="VBOX_E_OBJECT_NOT_FOUND">
5321 Virtual machine has no snapshots or snapshot not found.
5322 </result>
5323
5324 </desc>
5325 <param name="id" type="uuid" mod="string" dir="in">
5326 <desc>UUID of the snapshot to get</desc>
5327 </param>
5328 <param name="snapshot" type="ISnapshot" dir="return">
5329 <desc>Snapshot object with the given UUID.</desc>
5330 </param>
5331 </method>
5332
5333 <method name="findSnapshot">
5334 <desc>
5335 Returns a snapshot of this machine with the given name.
5336
5337 <result name="VBOX_E_OBJECT_NOT_FOUND">
5338 Virtual machine has no snapshots or snapshot not found.
5339 </result>
5340
5341 </desc>
5342 <param name="name" type="wstring" dir="in">
5343 <desc>Name of the snapshot to find</desc>
5344 </param>
5345 <param name="snapshot" type="ISnapshot" dir="return">
5346 <desc>Snapshot object with the given name.</desc>
5347 </param>
5348 </method>
5349
5350 <method name="setCurrentSnapshot">
5351 <desc>
5352 Sets the current snapshot of this machine.
5353 <note>
5354 In the current implementation, this operation is not
5355 implemented.
5356 </note>
5357 </desc>
5358 <param name="id" type="uuid" mod="string" dir="in">
5359 <desc>UUID of the snapshot to set as the current snapshot.</desc>
5360 </param>
5361 </method>
5362
5363 <method name="createSharedFolder">
5364 <desc>
5365 Creates a new permanent shared folder by associating the given logical
5366 name with the given host path, adds it to the collection of shared
5367 folders and starts sharing it. Refer to the description of
5368 <link to="ISharedFolder"/> to read more about logical names.
5369
5370 <result name="VBOX_E_OBJECT_IN_USE">
5371 Shared folder already exists.
5372 </result>
5373 <result name="VBOX_E_FILE_ERROR">
5374 Shared folder @a hostPath not accessible.
5375 </result>
5376
5377 </desc>
5378 <param name="name" type="wstring" dir="in">
5379 <desc>Unique logical name of the shared folder.</desc>
5380 </param>
5381 <param name="hostPath" type="wstring" dir="in">
5382 <desc>Full path to the shared folder in the host file system.</desc>
5383 </param>
5384 <param name="writable" type="boolean" dir="in">
5385 <desc>Whether the share is writable or readonly</desc>
5386 </param>
5387 </method>
5388
5389 <method name="removeSharedFolder">
5390 <desc>
5391 Removes the permanent shared folder with the given name previously
5392 created by <link to="#createSharedFolder"/> from the collection of
5393 shared folders and stops sharing it.
5394
5395 <result name="VBOX_E_INVALID_VM_STATE">
5396 Virtual machine is not mutable.
5397 </result>
5398 <result name="VBOX_E_OBJECT_NOT_FOUND">
5399 Shared folder @a name does not exist.
5400 </result>
5401
5402 </desc>
5403 <param name="name" type="wstring" dir="in">
5404 <desc>Logical name of the shared folder to remove.</desc>
5405 </param>
5406 </method>
5407
5408 <method name="canShowConsoleWindow">
5409 <desc>
5410 Returns @c true if the VM console process can activate the
5411 console window and bring it to foreground on the desktop of
5412 the host PC.
5413 <note>
5414 This method will fail if a session for this machine is not
5415 currently open.
5416 </note>
5417
5418 <result name="VBOX_E_INVALID_VM_STATE">
5419 Machine session is not open.
5420 </result>
5421
5422 </desc>
5423 <param name="canShow" type="boolean" dir="return">
5424 <desc>
5425 @c true if the console window can be shown and @c false otherwise.
5426 </desc>
5427 </param>
5428 </method>
5429
5430 <method name="showConsoleWindow">
5431 <desc>
5432 Activates the console window and brings it to foreground on
5433 the desktop of the host PC. Many modern window managers on
5434 many platforms implement some sort of focus stealing
5435 prevention logic, so that it may be impossible to activate
5436 a window without the help of the currently active
5437 application. In this case, this method will return a non-zero
5438 identifier that represents the top-level window of the VM
5439 console process. The caller, if it represents a currently
5440 active process, is responsible to use this identifier (in a
5441 platform-dependent manner) to perform actual window
5442 activation.
5443 <note>
5444 This method will fail if a session for this machine is not
5445 currently open.
5446 </note>
5447
5448 <result name="VBOX_E_INVALID_VM_STATE">
5449 Machine session is not open.
5450 </result>
5451
5452 </desc>
5453 <param name="winId" type="unsigned long long" dir="return">
5454 <desc>
5455 Platform-dependent identifier of the top-level VM console
5456 window, or zero if this method has performed all actions
5457 necessary to implement the <i>show window</i> semantics for
5458 the given platform and/or VirtualBox front-end.
5459 </desc>
5460 </param>
5461 </method>
5462
5463 <method name="getGuestProperty" const="yes">
5464 <desc>
5465 Reads an entry from the machine's guest property store.
5466
5467 <result name="VBOX_E_INVALID_VM_STATE">
5468 Machine session is not open.
5469 </result>
5470
5471 </desc>
5472 <param name="name" type="wstring" dir="in">
5473 <desc>
5474 The name of the property to read.
5475 </desc>
5476 </param>
5477 <param name="value" type="wstring" dir="out">
5478 <desc>
5479 The value of the property. If the property does not exist then this
5480 will be empty.
5481 </desc>
5482 </param>
5483 <param name="timestamp" type="unsigned long long" dir="out">
5484 <desc>
5485 The time at which the property was last modified, as seen by the
5486 server process.
5487 </desc>
5488 </param>
5489 <param name="flags" type="wstring" dir="out">
5490 <desc>
5491 Additional property parameters, passed as a comma-separated list of
5492 "name=value" type entries.
5493 </desc>
5494 </param>
5495 </method>
5496
5497 <method name="getGuestPropertyValue" const="yes">
5498 <desc>
5499 Reads a value from the machine's guest property store.
5500
5501 <result name="VBOX_E_INVALID_VM_STATE">
5502 Machine session is not open.
5503 </result>
5504
5505 </desc>
5506 <param name="property" type="wstring" dir="in">
5507 <desc>
5508 The name of the property to read.
5509 </desc>
5510 </param>
5511 <param name="value" type="wstring" dir="return">
5512 <desc>
5513 The value of the property. If the property does not exist then this
5514 will be empty.
5515 </desc>
5516 </param>
5517 </method>
5518
5519 <method name="getGuestPropertyTimestamp" const="yes">
5520 <desc>
5521 Reads a property timestamp from the machine's guest property store.
5522
5523 <result name="VBOX_E_INVALID_VM_STATE">
5524 Machine session is not open.
5525 </result>
5526
5527 </desc>
5528 <param name="property" type="wstring" dir="in">
5529 <desc>
5530 The name of the property to read.
5531 </desc>
5532 </param>
5533 <param name="value" type="unsigned long long" dir="return">
5534 <desc>
5535 The timestamp. If the property does not exist then this will be
5536 empty.
5537 </desc>
5538 </param>
5539 </method>
5540
5541 <method name="setGuestProperty">
5542 <desc>
5543 Sets, changes or deletes an entry in the machine's guest property
5544 store.
5545
5546 <result name="E_ACCESSDENIED">
5547 Property cannot be changed.
5548 </result>
5549 <result name="E_INVALIDARG">
5550 Invalid @a flags.
5551 </result>
5552 <result name="VBOX_E_INVALID_VM_STATE">
5553 Virtual machine is not mutable or session not open.
5554 </result>
5555 <result name="VBOX_E_INVALID_OBJECT_STATE">
5556 Cannot set transient property when machine not running.
5557 </result>
5558
5559 </desc>
5560 <param name="property" type="wstring" dir="in">
5561 <desc>
5562 The name of the property to set, change or delete.
5563 </desc>
5564 </param>
5565 <param name="value" type="wstring" dir="in">
5566 <desc>
5567 The new value of the property to set, change or delete. If the
5568 property does not yet exist and value is non-empty, it will be
5569 created. If the value is @c null or empty, the property will be
5570 deleted if it exists.
5571 </desc>
5572 </param>
5573 <param name="flags" type="wstring" dir="in">
5574 <desc>
5575 Additional property parameters, passed as a comma-separated list of
5576 "name=value" type entries.
5577 </desc>
5578 </param>
5579 </method>
5580
5581 <method name="setGuestPropertyValue">
5582 <desc>
5583 Sets, changes or deletes a value in the machine's guest property
5584 store. The flags field will be left unchanged or created empty for a
5585 new property.
5586
5587 <result name="E_ACCESSDENIED">
5588 Property cannot be changed.
5589 </result>
5590 <result name="VBOX_E_INVALID_VM_STATE">
5591 Virtual machine is not mutable or session not open.
5592 </result>
5593 <result name="VBOX_E_INVALID_OBJECT_STATE">
5594 Cannot set transient property when machine not running.
5595 </result>
5596 </desc>
5597
5598 <param name="property" type="wstring" dir="in">
5599 <desc>
5600 The name of the property to set, change or delete.
5601 </desc>
5602 </param>
5603 <param name="value" type="wstring" dir="in">
5604 <desc>
5605 The new value of the property to set, change or delete. If the
5606 property does not yet exist and value is non-empty, it will be
5607 created. If the value is @c null or empty, the property will be
5608 deleted if it exists.
5609 </desc>
5610 </param>
5611 </method>
5612
5613 <method name="enumerateGuestProperties">
5614 <desc>
5615 Return a list of the guest properties matching a set of patterns along
5616 with their values, time stamps and flags.
5617 </desc>
5618 <param name="patterns" type="wstring" dir="in">
5619 <desc>
5620 The patterns to match the properties against, separated by '|'
5621 characters. If this is empty or @c null, all properties will match.
5622 </desc>
5623 </param>
5624 <param name="name" type="wstring" dir="out" safearray="yes">
5625 <desc>
5626 The names of the properties returned.
5627 </desc>
5628 </param>
5629 <param name="value" type="wstring" dir="out" safearray="yes">
5630 <desc>
5631 The values of the properties returned. The array entries match the
5632 corresponding entries in the @a name array.
5633 </desc>
5634 </param>
5635 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
5636 <desc>
5637 The time stamps of the properties returned. The array entries match
5638 the corresponding entries in the @a name array.
5639 </desc>
5640 </param>
5641 <param name="flags" type="wstring" dir="out" safearray="yes">
5642 <desc>
5643 The flags of the properties returned. The array entries match the
5644 corresponding entries in the @a name array.
5645 </desc>
5646 </param>
5647 </method>
5648
5649 <method name="querySavedThumbnailSize">
5650 <desc>
5651 Returns size in bytes and dimensions in pixels of a saved thumbnail bitmap from saved state.
5652 </desc>
5653 <param name="screenId" type="unsigned long" dir="in">
5654 <desc>
5655 Saved guest screen to query info from.
5656 </desc>
5657 </param>
5658 <param name="size" type="unsigned long" dir="out">
5659 <desc>
5660 Size of buffer required to store the bitmap.
5661 </desc>
5662 </param>
5663 <param name="width" type="unsigned long" dir="out">
5664 <desc>
5665 Bitmap width.
5666 </desc>
5667 </param>
5668 <param name="height" type="unsigned long" dir="out">
5669 <desc>
5670 Bitmap height.
5671 </desc>
5672 </param>
5673 </method>
5674
5675 <method name="readSavedThumbnailToArray">
5676 <desc>
5677 Thumbnail is retrieved to an array of bytes in uncompressed 32-bit BGRA or RGBA format.
5678 </desc>
5679 <param name="screenId" type="unsigned long" dir="in">
5680 <desc>
5681 Saved guest screen to read from.
5682 </desc>
5683 </param>
5684 <param name="BGR" type="boolean" dir="in">
5685 <desc>
5686 How to order bytes in the pixel. A pixel consists of 4 bytes. If this parameter is true, then
5687 bytes order is: B, G, R, 0xFF. If this parameter is false, then bytes order is: R, G, B, 0xFF.
5688 </desc>
5689 </param>
5690 <param name="width" type="unsigned long" dir="out">
5691 <desc>
5692 Bitmap width.
5693 </desc>
5694 </param>
5695 <param name="height" type="unsigned long" dir="out">
5696 <desc>
5697 Bitmap height.
5698 </desc>
5699 </param>
5700 <param name="data" type="octet" dir="return" safearray="yes">
5701 <desc>
5702 Array with resulting bitmap data.
5703 </desc>
5704 </param>
5705 </method>
5706
5707 <method name="querySavedScreenshotPNGSize">
5708 <desc>
5709 Returns size in bytes and dimensions of a saved PNG image of screenshot from saved state.
5710 </desc>
5711 <param name="screenId" type="unsigned long" dir="in">
5712 <desc>
5713 Saved guest screen to query info from.
5714 </desc>
5715 </param>
5716 <param name="size" type="unsigned long" dir="out">
5717 <desc>
5718 Size of buffer required to store the PNG binary data.
5719 </desc>
5720 </param>
5721 <param name="width" type="unsigned long" dir="out">
5722 <desc>
5723 Image width.
5724 </desc>
5725 </param>
5726 <param name="height" type="unsigned long" dir="out">
5727 <desc>
5728 Image height.
5729 </desc>
5730 </param>
5731 </method>
5732
5733 <method name="readSavedScreenshotPNGToArray">
5734 <desc>
5735 Screenshot in PNG format is retrieved to an array of bytes.
5736 </desc>
5737 <param name="screenId" type="unsigned long" dir="in">
5738 <desc>
5739 Saved guest screen to read from.
5740 </desc>
5741 </param>
5742 <param name="width" type="unsigned long" dir="out">
5743 <desc>
5744 Image width.
5745 </desc>
5746 </param>
5747 <param name="height" type="unsigned long" dir="out">
5748 <desc>
5749 Image height.
5750 </desc>
5751 </param>
5752 <param name="data" type="octet" dir="return" safearray="yes">
5753 <desc>
5754 Array with resulting PNG data.
5755 </desc>
5756 </param>
5757 </method>
5758
5759 <method name="hotPlugCPU">
5760 <desc>
5761 Plugs a CPU into the machine.
5762 </desc>
5763 <param name="cpu" type="unsigned long" dir="in">
5764 <desc>
5765 The CPU id to insert.
5766 </desc>
5767 </param>
5768 </method>
5769
5770 <method name="hotUnplugCPU">
5771 <desc>
5772 Removes a CPU from the machine.
5773 </desc>
5774 <param name="cpu" type="unsigned long" dir="in">
5775 <desc>
5776 The CPU id to remove.
5777 </desc>
5778 </param>
5779 </method>
5780
5781 <method name="getCPUStatus">
5782 <desc>
5783 Returns the current status of the given CPU.
5784 </desc>
5785 <param name="cpu" type="unsigned long" dir="in">
5786 <desc>
5787 The CPU id to check for.
5788 </desc>
5789 </param>
5790 <param name="attached" type="boolean" dir="return">
5791 <desc>
5792 Status of the CPU.
5793 </desc>
5794 </param>
5795 </method>
5796
5797 <method name="queryLogFilename">
5798 <desc>
5799 Queries for the VM log file name of an given index. Returns an empty
5800 string if a log file with that index doesn't exists.
5801 </desc>
5802 <param name="idx" type="unsigned long" dir="in">
5803 <desc>
5804 Which log file name to query. 0=current log file.
5805 </desc>
5806 </param>
5807 <param name="filename" type="wstring" dir="return">
5808 <desc>
5809 On return the full path to the log file or an empty string on error.
5810 </desc>
5811 </param>
5812 </method>
5813
5814 <method name="readLog">
5815 <desc>
5816 Reads the VM log file. The chunk size is limited, so even if you
5817 ask for a big piece there might be less data returned.
5818 </desc>
5819 <param name="idx" type="unsigned long" dir="in">
5820 <desc>
5821 Which log file to read. 0=current log file.
5822 </desc>
5823 </param>
5824 <param name="offset" type="unsigned long long" dir="in">
5825 <desc>
5826 Offset in the log file.
5827 </desc>
5828 </param>
5829 <param name="size" type="unsigned long long" dir="in">
5830 <desc>
5831 Chunk size to read in the log file.
5832 </desc>
5833 </param>
5834 <param name="data" type="octet" dir="return" safearray="yes">
5835 <desc>
5836 Data read from the log file. A data size of 0 means end of file
5837 if the requested chunk size was not 0. This is the unprocessed
5838 file data, i.e. the line ending style depends on the platform of
5839 the system the server is running on.
5840 </desc>
5841 </param>
5842 </method>
5843 </interface>
5844
5845 <!--
5846 // IConsole
5847 /////////////////////////////////////////////////////////////////////////
5848 -->
5849
5850 <interface
5851 name="IRemoteDisplayInfo" extends="$unknown"
5852 uuid="b3741084-806f-4c3b-8c42-ebad1a81e45a"
5853 wsmap="struct"
5854 >
5855 <desc>
5856 Contains information about the remote display (VRDP) capabilities and status.
5857 This is used in the <link to="IConsole::remoteDisplayInfo" /> attribute.
5858 </desc>
5859
5860 <attribute name="active" type="boolean" readonly="yes">
5861 <desc>
5862 Whether the remote display connection is active.
5863 </desc>
5864 </attribute>
5865
5866 <attribute name="port" type="long" readonly="yes">
5867 <desc>
5868 VRDP server port number. If this property is equal to <tt>0</tt>, then
5869 the VRDP server failed to start, usually because there are no free TCP
5870 ports to bind to. If this property is equal to <tt>-1</tt>, then the VRDP
5871 server has not yet been started.
5872 </desc>
5873 </attribute>
5874
5875 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
5876 <desc>
5877 How many times a client connected.
5878 </desc>
5879 </attribute>
5880
5881 <attribute name="beginTime" type="long long" readonly="yes">
5882 <desc>
5883 When the last connection was established, in milliseconds since 1970-01-01 UTC.
5884 </desc>
5885 </attribute>
5886
5887 <attribute name="endTime" type="long long" readonly="yes">
5888 <desc>
5889 When the last connection was terminated or the current time, if
5890 connection is still active, in milliseconds since 1970-01-01 UTC.
5891 </desc>
5892 </attribute>
5893
5894 <attribute name="bytesSent" type="unsigned long long" readonly="yes">
5895 <desc>
5896 How many bytes were sent in last or current, if still active, connection.
5897 </desc>
5898 </attribute>
5899
5900 <attribute name="bytesSentTotal" type="unsigned long long" readonly="yes">
5901 <desc>
5902 How many bytes were sent in all connections.
5903 </desc>
5904 </attribute>
5905
5906 <attribute name="bytesReceived" type="unsigned long long" readonly="yes">
5907 <desc>
5908 How many bytes were received in last or current, if still active, connection.
5909 </desc>
5910 </attribute>
5911
5912 <attribute name="bytesReceivedTotal" type="unsigned long long" readonly="yes">
5913 <desc>
5914 How many bytes were received in all connections.
5915 </desc>
5916 </attribute>
5917
5918 <attribute name="user" type="wstring" readonly="yes">
5919 <desc>
5920 Login user name supplied by the client.
5921 </desc>
5922 </attribute>
5923
5924 <attribute name="domain" type="wstring" readonly="yes">
5925 <desc>
5926 Login domain name supplied by the client.
5927 </desc>
5928 </attribute>
5929
5930 <attribute name="clientName" type="wstring" readonly="yes">
5931 <desc>
5932 The client name supplied by the client.
5933 </desc>
5934 </attribute>
5935
5936 <attribute name="clientIP" type="wstring" readonly="yes">
5937 <desc>
5938 The IP address of the client.
5939 </desc>
5940 </attribute>
5941
5942 <attribute name="clientVersion" type="unsigned long" readonly="yes">
5943 <desc>
5944 The client software version number.
5945 </desc>
5946 </attribute>
5947
5948 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
5949 <desc>
5950 Public key exchange method used when connection was established.
5951 Values: 0 - RDP4 public key exchange scheme.
5952 1 - X509 certificates were sent to client.
5953 </desc>
5954 </attribute>
5955
5956 </interface>
5957
5958 <interface
5959 name="IConsole" extends="$unknown"
5960 uuid="6375231a-c17c-464b-92cb-ae9e128d71c3"
5961 wsmap="managed"
5962 >
5963 <desc>
5964 The IConsole interface represents an interface to control virtual
5965 machine execution.
5966
5967 The console object that implements the IConsole interface is obtained
5968 from a session object after the session for the given machine has been
5969 opened using one of <link to="IVirtualBox::openSession"/>,
5970 <link to="IVirtualBox::openRemoteSession"/> or
5971 <link to="IVirtualBox::openExistingSession"/> methods.
5972
5973 Methods of the IConsole interface allow the caller to query the current
5974 virtual machine execution state, pause the machine or power it down, save
5975 the machine state or take a snapshot, attach and detach removable media
5976 and so on.
5977
5978 <see>ISession</see>
5979 </desc>
5980
5981 <attribute name="machine" type="IMachine" readonly="yes">
5982 <desc>
5983 Machine object this console is sessioned with.
5984 <note>
5985 This is a convenience property, it has the same value as
5986 <link to="ISession::machine"/> of the corresponding session
5987 object.
5988 </note>
5989 </desc>
5990 </attribute>
5991
5992 <attribute name="state" type="MachineState" readonly="yes">
5993 <desc>
5994 Current execution state of the machine.
5995 <note>
5996 This property always returns the same value as the corresponding
5997 property of the IMachine object this console is sessioned with.
5998 For the process that owns (executes) the VM, this is the
5999 preferable way of querying the VM state, because no IPC
6000 calls are made.
6001 </note>
6002 </desc>
6003 </attribute>
6004
6005 <attribute name="guest" type="IGuest" readonly="yes">
6006 <desc>Guest object.</desc>
6007 </attribute>
6008
6009 <attribute name="keyboard" type="IKeyboard" readonly="yes">
6010 <desc>
6011 Virtual keyboard object.
6012 <note>
6013 If the machine is not running, any attempt to use
6014 the returned object will result in an error.
6015 </note>
6016 </desc>
6017 </attribute>
6018
6019 <attribute name="mouse" type="IMouse" readonly="yes">
6020 <desc>
6021 Virtual mouse object.
6022 <note>
6023 If the machine is not running, any attempt to use
6024 the returned object will result in an error.
6025 </note>
6026 </desc>
6027 </attribute>
6028
6029 <attribute name="display" type="IDisplay" readonly="yes">
6030 <desc>Virtual display object.
6031 <note>
6032 If the machine is not running, any attempt to use
6033 the returned object will result in an error.
6034 </note>
6035 </desc>
6036 </attribute>
6037
6038 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
6039 <desc>Debugging interface.</desc>
6040 </attribute>
6041
6042 <attribute name="USBDevices" type="IUSBDevice" readonly="yes" safearray="yes">
6043 <desc>
6044 Collection of USB devices currently attached to the virtual
6045 USB controller.
6046 <note>
6047 The collection is empty if the machine is not running.
6048 </note>
6049 </desc>
6050 </attribute>
6051
6052 <attribute name="remoteUSBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
6053 <desc>
6054 List of USB devices currently attached to the remote VRDP client.
6055 Once a new device is physically attached to the remote host computer,
6056 it appears in this list and remains there until detached.
6057 </desc>
6058 </attribute>
6059
6060 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
6061 <desc>
6062 Collection of shared folders for the current session. These folders
6063 are called transient shared folders because they are available to the
6064 guest OS running inside the associated virtual machine only for the
6065 duration of the session (as opposed to
6066 <link to="IMachine::sharedFolders"/> which represent permanent shared
6067 folders). When the session is closed (e.g. the machine is powered down),
6068 these folders are automatically discarded.
6069
6070 New shared folders are added to the collection using
6071 <link to="#createSharedFolder"/>. Existing shared folders can be
6072 removed using <link to="#removeSharedFolder"/>.
6073 </desc>
6074 </attribute>
6075
6076 <attribute name="remoteDisplayInfo" type="IRemoteDisplayInfo" readonly="yes">
6077 <desc>
6078 Interface that provides information on Remote Display (VRDP) connection.
6079 </desc>
6080 </attribute>
6081
6082 <attribute name="eventSource" type="IEventSource" readonly="yes">
6083 <desc>
6084 Event source for console events.
6085 </desc>
6086 </attribute>
6087
6088 <method name="powerUp">
6089 <desc>
6090 Starts the virtual machine execution using the current machine
6091 state (that is, its current execution state, current settings and
6092 current storage devices).
6093
6094 If the machine is powered off or aborted, the execution will
6095 start from the beginning (as if the real hardware were just
6096 powered on).
6097
6098 If the machine is in the <link to="MachineState_Saved"/> state,
6099 it will continue its execution the point where the state has
6100 been saved.
6101
6102 If the machine <link to="IMachine::teleporterEnabled"/> property is
6103 enabled on the machine being powered up, the machine will wait for an
6104 incoming teleportation in the <link to="MachineState_TeleportingIn"/>
6105 state. The returned progress object will have at least three
6106 operations where the last three are defined as: (1) powering up and
6107 starting TCP server, (2) waiting for incoming teleportations, and
6108 (3) perform teleportation. These operations will be reflected as the
6109 last three operations of the progress objected returned by
6110 <link to="IVirtualBox::openRemoteSession"/> as well.
6111
6112 <note>
6113 Unless you are trying to write a new VirtualBox front-end that
6114 performs direct machine execution (like the VirtualBox or VBoxSDL
6115 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
6116 session opened by <link to="IVirtualBox::openSession"/> and use this
6117 session only to change virtual machine settings. If you simply want to
6118 start virtual machine execution using one of the existing front-ends
6119 (for example the VirtualBox GUI or headless server), simply use
6120 <link to="IVirtualBox::openRemoteSession"/>; these front-ends will
6121 power up the machine automatically for you.
6122 </note>
6123
6124 <see>#saveState</see>
6125 <result name="VBOX_E_INVALID_VM_STATE">
6126 Virtual machine already running.
6127 </result>
6128 <result name="VBOX_E_HOST_ERROR">
6129 Host interface does not exist or name not set.
6130 </result>
6131 <result name="VBOX_E_FILE_ERROR">
6132 Invalid saved state file.
6133 </result>
6134 </desc>
6135 <param name="progress" type="IProgress" dir="return">
6136 <desc>Progress object to track the operation completion.</desc>
6137 </param>
6138 </method>
6139
6140 <method name="powerUpPaused">
6141 <desc>
6142 Identical to powerUp except that the VM will enter the
6143 <link to="MachineState_Paused"/> state, instead of
6144 <link to="MachineState_Running"/>.
6145
6146 <see>#powerUp</see>
6147 <result name="VBOX_E_INVALID_VM_STATE">
6148 Virtual machine already running.
6149 </result>
6150 <result name="VBOX_E_HOST_ERROR">
6151 Host interface does not exist or name not set.
6152 </result>
6153 <result name="VBOX_E_FILE_ERROR">
6154 Invalid saved state file.
6155 </result>
6156 </desc>
6157 <param name="progress" type="IProgress" dir="return">
6158 <desc>Progress object to track the operation completion.</desc>
6159 </param>
6160 </method>
6161
6162 <method name="powerDown">
6163 <desc>
6164 Initiates the power down procedure to stop the virtual machine
6165 execution.
6166
6167 The completion of the power down procedure is tracked using the returned
6168 IProgress object. After the operation is complete, the machine will go
6169 to the PoweredOff state.
6170 <result name="VBOX_E_INVALID_VM_STATE">
6171 Virtual machine must be Running, Paused or Stuck to be powered down.
6172 </result>
6173 </desc>
6174 <param name="progress" type="IProgress" dir="return">
6175 <desc>Progress object to track the operation completion.</desc>
6176 </param>
6177 </method>
6178
6179 <method name="reset">
6180 <desc>Resets the virtual machine.
6181 <result name="VBOX_E_INVALID_VM_STATE">
6182 Virtual machine not in Running state.
6183 </result>
6184 <result name="VBOX_E_VM_ERROR">
6185 Virtual machine error in reset operation.
6186 </result>
6187 </desc>
6188 </method>
6189
6190 <method name="pause">
6191 <desc>Pauses the virtual machine execution.
6192 <result name="VBOX_E_INVALID_VM_STATE">
6193 Virtual machine not in Running state.
6194 </result>
6195 <result name="VBOX_E_VM_ERROR">
6196 Virtual machine error in suspend operation.
6197 </result>
6198 </desc>
6199 </method>
6200
6201 <method name="resume">
6202 <desc>Resumes the virtual machine execution.
6203 <result name="VBOX_E_INVALID_VM_STATE">
6204 Virtual machine not in Paused state.
6205 </result>
6206 <result name="VBOX_E_VM_ERROR">
6207 Virtual machine error in resume operation.
6208 </result>
6209 </desc>
6210 </method>
6211
6212 <method name="powerButton">
6213 <desc>Sends the ACPI power button event to the guest.
6214 <result name="VBOX_E_INVALID_VM_STATE">
6215 Virtual machine not in Running state.
6216 </result>
6217 <result name="VBOX_E_PDM_ERROR">
6218 Controlled power off failed.
6219 </result>
6220 </desc>
6221 </method>
6222
6223 <method name="sleepButton">
6224 <desc>Sends the ACPI sleep button event to the guest.
6225 <result name="VBOX_E_INVALID_VM_STATE">
6226 Virtual machine not in Running state.
6227 </result>
6228 <result name="VBOX_E_PDM_ERROR">
6229 Sending sleep button event failed.
6230 </result>
6231 </desc>
6232 </method>
6233
6234 <method name="getPowerButtonHandled">
6235 <desc>Checks if the last power button event was handled by guest.
6236 <result name="VBOX_E_PDM_ERROR">
6237 Checking if the event was handled by the guest OS failed.
6238 </result>
6239 </desc>
6240 <param name="handled" type="boolean" dir="return"/>
6241 </method>
6242
6243 <method name="getGuestEnteredACPIMode">
6244 <desc>Checks if the guest entered the ACPI mode G0 (working) or
6245 G1 (sleeping). If this method returns @c false, the guest will
6246 most likely not respond to external ACPI events.
6247 <result name="VBOX_E_INVALID_VM_STATE">
6248 Virtual machine not in Running state.
6249 </result>
6250 </desc>
6251 <param name="entered" type="boolean" dir="return"/>
6252 </method>
6253
6254 <method name="saveState">
6255 <desc>
6256 Saves the current execution state of a running virtual machine
6257 and stops its execution.
6258
6259 After this operation completes, the machine will go to the
6260 Saved state. Next time it is powered up, this state will
6261 be restored and the machine will continue its execution from
6262 the place where it was saved.
6263
6264 This operation differs from taking a snapshot to the effect
6265 that it doesn't create new differencing media. Also, once
6266 the machine is powered up from the state saved using this method,
6267 the saved state is deleted, so it will be impossible to return
6268 to this state later.
6269
6270 <note>
6271 On success, this method implicitly calls
6272 <link to="IMachine::saveSettings"/> to save all current machine
6273 settings (including runtime changes to the DVD medium, etc.).
6274 Together with the impossibility to change any VM settings when it is
6275 in the Saved state, this guarantees adequate hardware
6276 configuration of the machine when it is restored from the saved
6277 state file.
6278 </note>
6279
6280 <note>
6281 The machine must be in the Running or Paused state, otherwise
6282 the operation will fail.
6283 </note>
6284 <result name="VBOX_E_INVALID_VM_STATE">
6285 Virtual machine state neither Running nor Paused.
6286 </result>
6287 <result name="VBOX_E_FILE_ERROR">
6288 Failed to create directory for saved state file.
6289 </result>
6290
6291 <see><link to="#takeSnapshot"/></see>
6292 </desc>
6293 <param name="progress" type="IProgress" dir="return">
6294 <desc>Progress object to track the operation completion.</desc>
6295 </param>
6296 </method>
6297
6298 <method name="adoptSavedState">
6299 <desc>
6300 Associates the given saved state file to the virtual machine.
6301
6302 On success, the machine will go to the Saved state. Next time it is
6303 powered up, it will be restored from the adopted saved state and
6304 continue execution from the place where the saved state file was
6305 created.
6306
6307 The specified saved state file path may be absolute or relative to the
6308 folder the VM normally saves the state to (usually,
6309 <link to="IMachine::snapshotFolder"/>).
6310
6311 <note>
6312 It's a caller's responsibility to make sure the given saved state
6313 file is compatible with the settings of this virtual machine that
6314 represent its virtual hardware (memory size, storage disk configuration
6315 etc.). If there is a mismatch, the behavior of the virtual machine
6316 is undefined.
6317 </note>
6318 <result name="VBOX_E_INVALID_VM_STATE">
6319 Virtual machine state neither PoweredOff nor Aborted.
6320 </result>
6321 </desc>
6322 <param name="savedStateFile" type="wstring" dir="in">
6323 <desc>Path to the saved state file to adopt.</desc>
6324 </param>
6325 </method>
6326
6327 <method name="forgetSavedState">
6328 <desc>
6329 Forgets the saved state of the virtual machine previously created
6330 by <link to="#saveState"/>. Next time the machine is powered up, a
6331 clean boot will occur. If @a remove is @c true the saved state file
6332 is deleted.
6333 <note>
6334 This operation is equivalent to resetting or powering off
6335 the machine without doing a proper shutdown in the guest OS.
6336 </note>
6337 <result name="VBOX_E_INVALID_VM_STATE">
6338 Virtual machine not in state Saved.
6339 </result>
6340 </desc>
6341 <param name="removeFile" type="boolean" dir="in">
6342 <desc>If @c true remove the saved state file.</desc>
6343 </param>
6344 </method>
6345
6346 <method name="getDeviceActivity">
6347 <desc>
6348 Gets the current activity type of a given device or device group.
6349 <result name="E_INVALIDARG">
6350 Invalid device type.
6351 </result>
6352 </desc>
6353 <param name="type" type="DeviceType" dir="in"/>
6354 <param name="activity" type="DeviceActivity" dir="return"/>
6355 </method>
6356
6357 <method name="attachUSBDevice">
6358 <desc>
6359 Attaches a host USB device with the given UUID to the
6360 USB controller of the virtual machine.
6361
6362 The device needs to be in one of the following states:
6363 <link to="USBDeviceState_Busy"/>,
6364 <link to="USBDeviceState_Available"/> or
6365 <link to="USBDeviceState_Held"/>,
6366 otherwise an error is immediately returned.
6367
6368 When the device state is
6369 <link to="USBDeviceState_Busy">Busy</link>, an error may also
6370 be returned if the host computer refuses to release it for some reason.
6371
6372 <see>IUSBController::deviceFilters, USBDeviceState</see>
6373 <result name="VBOX_E_INVALID_VM_STATE">
6374 Virtual machine state neither Running nor Paused.
6375 </result>
6376 <result name="VBOX_E_PDM_ERROR">
6377 Virtual machine does not have a USB controller.
6378 </result>
6379 </desc>
6380 <param name="id" type="uuid" mod="string" dir="in">
6381 <desc>UUID of the host USB device to attach.</desc>
6382 </param>
6383 </method>
6384
6385 <method name="detachUSBDevice">
6386 <desc>
6387 Detaches an USB device with the given UUID from the USB controller
6388 of the virtual machine.
6389
6390 After this method succeeds, the VirtualBox server re-initiates
6391 all USB filters as if the device were just physically attached
6392 to the host, but filters of this machine are ignored to avoid
6393 a possible automatic re-attachment.
6394
6395 <see>IUSBController::deviceFilters, USBDeviceState</see>
6396
6397 <result name="VBOX_E_PDM_ERROR">
6398 Virtual machine does not have a USB controller.
6399 </result>
6400 <result name="E_INVALIDARG">
6401 USB device not attached to this virtual machine.
6402 </result>
6403 </desc>
6404 <param name="id" type="uuid" mod="string" dir="in">
6405 <desc>UUID of the USB device to detach.</desc>
6406 </param>
6407 <param name="device" type="IUSBDevice" dir="return">
6408 <desc>Detached USB device.</desc>
6409 </param>
6410 </method>
6411
6412 <method name="findUSBDeviceByAddress">
6413 <desc>
6414 Searches for a USB device with the given host address.
6415
6416 <result name="VBOX_E_OBJECT_NOT_FOUND">
6417 Given @c name does not correspond to any USB device.
6418 </result>
6419
6420 <see>IUSBDevice::address</see>
6421 </desc>
6422 <param name="name" type="wstring" dir="in">
6423 <desc>
6424 Address of the USB device (as assigned by the host) to
6425 search for.
6426 </desc>
6427 </param>
6428 <param name="device" type="IUSBDevice" dir="return">
6429 <desc>Found USB device object.</desc>
6430 </param>
6431 </method>
6432
6433 <method name="findUSBDeviceById">
6434 <desc>
6435 Searches for a USB device with the given UUID.
6436
6437 <result name="VBOX_E_OBJECT_NOT_FOUND">
6438 Given @c id does not correspond to any USB device.
6439 </result>
6440
6441 <see>IUSBDevice::id</see>
6442 </desc>
6443 <param name="id" type="uuid" mod="string" dir="in">
6444 <desc>UUID of the USB device to search for.</desc>
6445 </param>
6446 <param name="device" type="IUSBDevice" dir="return">
6447 <desc>Found USB device object.</desc>
6448 </param>
6449 </method>
6450
6451 <method name="createSharedFolder">
6452 <desc>
6453 Creates a transient new shared folder by associating the given logical
6454 name with the given host path, adds it to the collection of shared
6455 folders and starts sharing it. Refer to the description of
6456 <link to="ISharedFolder"/> to read more about logical names.
6457
6458 <result name="VBOX_E_INVALID_VM_STATE">
6459 Virtual machine in Saved state or currently changing state.
6460 </result>
6461 <result name="VBOX_E_FILE_ERROR">
6462 Shared folder already exists or not accessible.
6463 </result>
6464 </desc>
6465 <param name="name" type="wstring" dir="in">
6466 <desc>Unique logical name of the shared folder.</desc>
6467 </param>
6468 <param name="hostPath" type="wstring" dir="in">
6469 <desc>Full path to the shared folder in the host file system.</desc>
6470 </param>
6471 <param name="writable" type="boolean" dir="in">
6472 <desc>Whether the share is writable or readonly</desc>
6473 </param>
6474 </method>
6475
6476 <method name="removeSharedFolder">
6477 <desc>
6478 Removes a transient shared folder with the given name previously
6479 created by <link to="#createSharedFolder"/> from the collection of
6480 shared folders and stops sharing it.
6481 <result name="VBOX_E_INVALID_VM_STATE">
6482 Virtual machine in Saved state or currently changing state.
6483 </result>
6484 <result name="VBOX_E_FILE_ERROR">
6485 Shared folder does not exists.
6486 </result>
6487 </desc>
6488 <param name="name" type="wstring" dir="in">
6489 <desc>Logical name of the shared folder to remove.</desc>
6490 </param>
6491 </method>
6492
6493 <method name="takeSnapshot">
6494 <desc>
6495 Saves the current execution state
6496 and all settings of the machine and creates differencing images
6497 for all normal (non-independent) media.
6498 See <link to="ISnapshot" /> for an introduction to snapshots.
6499
6500 This method can be called for a PoweredOff, Saved (see
6501 <link to="#saveState"/>), Running or
6502 Paused virtual machine. When the machine is PoweredOff, an
6503 offline snapshot is created. When the machine is Running a live
6504 snapshot is created, and an online snapshot is is created when Paused.
6505
6506 The taken snapshot is always based on the
6507 <link to="IMachine::currentSnapshot">current snapshot</link>
6508 of the associated virtual machine and becomes a new current snapshot.
6509
6510 <note>
6511 This method implicitly calls <link to="IMachine::saveSettings"/> to
6512 save all current machine settings before taking an offline snapshot.
6513 </note>
6514
6515 <result name="VBOX_E_INVALID_VM_STATE">
6516 Virtual machine currently changing state.
6517 </result>
6518 </desc>
6519 <param name="name" type="wstring" dir="in">
6520 <desc>Short name for the snapshot.</desc>
6521 </param>
6522 <param name="description" type="wstring" dir="in">
6523 <desc>Optional description of the snapshot.</desc>
6524 </param>
6525 <param name="progress" type="IProgress" dir="return">
6526 <desc>Progress object to track the operation completion.</desc>
6527 </param>
6528 </method>
6529
6530 <method name="deleteSnapshot">
6531 <desc>
6532 Starts deleting the specified snapshot asynchronously.
6533 See <link to="ISnapshot" /> for an introduction to snapshots.
6534
6535 The execution state and settings of the associated machine stored in
6536 the snapshot will be deleted. The contents of all differencing media of
6537 this snapshot will be merged with the contents of their dependent child
6538 media to keep the medium chain valid (in other words, all changes
6539 represented by media being deleted will be propagated to their child
6540 medium). After that, this snapshot's differencing medium will be
6541 deleted. The parent of this snapshot will become a new parent for all
6542 its child snapshots.
6543
6544 If the deleted snapshot is the current one, its parent snapshot will
6545 become a new current snapshot. The current machine state is not directly
6546 affected in this case, except that currently attached differencing
6547 media based on media of the deleted snapshot will be also merged as
6548 described above.
6549
6550 If the deleted snapshot is the first or current snapshot, then the
6551 respective IMachine attributes will be adjusted. Deleting the current
6552 snapshot will also implicitly call <link to="IMachine::saveSettings"/>
6553 to make all current machine settings permanent.
6554
6555 Deleting a snapshot has the following preconditions:
6556
6557 <ul>
6558 <li>Child media of all normal media of the deleted snapshot
6559 must be accessible (see <link to="IMedium::state"/>) for this
6560 operation to succeed. In particular, this means that all virtual
6561 machines, whose media are directly or indirectly based on the
6562 media of deleted snapshot, must be powered off.</li>
6563
6564 <li>You cannot delete the snapshot if a medium attached to it has
6565 more than once child medium (differencing images) because otherwise
6566 merging would be impossible. This might be the case if there is
6567 more than one child snapshot or differencing images were created
6568 for other reason (e.g. implicitly because of multiple machine
6569 attachments).</li>
6570 </ul>
6571
6572
6573 The virtual machine's <link to="IMachine::state">state</link> is changed to "DeletingSnapshot"
6574 while this operation is in progress.
6575
6576 <note>
6577 Merging medium contents can be very time and disk space
6578 consuming, if these media are big in size and have many
6579 children. However, if the snapshot being deleted is the last
6580 (head) snapshot on the branch, the operation will be rather
6581 quick.
6582 </note>
6583 <result name="VBOX_E_INVALID_VM_STATE">
6584 Virtual machine is running.
6585 </result>
6586 </desc>
6587 <param name="id" type="uuid" mod="string" dir="in">
6588 <desc>UUID of the snapshot to delete.</desc>
6589 </param>
6590 <param name="progress" type="IProgress" dir="return">
6591 <desc>Progress object to track the operation completion.</desc>
6592 </param>
6593 </method>
6594
6595 <method name="restoreSnapshot">
6596 <desc>
6597 Starts resetting the machine's current state to the state contained
6598 in the given snapshot, asynchronously. All current settings of the
6599 machine will be reset and changes stored in differencing media
6600 will be lost.
6601 See <link to="ISnapshot" /> for an introduction to snapshots.
6602
6603 After this operation is successfully completed, new empty differencing
6604 media are created for all normal media of the machine.
6605
6606 If the given snapshot is an online snapshot, the machine will go to
6607 the <link to="MachineState_Saved"> saved state</link>, so that the
6608 next time it is powered on, the execution state will be restored
6609 from the state of the snapshot.
6610
6611 <note>
6612 The machine must not be running, otherwise the operation will fail.
6613 </note>
6614
6615 <note>
6616 If the machine state is <link to="MachineState_Saved">Saved</link>
6617 prior to this operation, the saved state file will be implicitly
6618 deleted (as if <link to="IConsole::forgetSavedState"/> were
6619 called).
6620 </note>
6621
6622 <result name="VBOX_E_INVALID_VM_STATE">
6623 Virtual machine is running.
6624 </result>
6625 </desc>
6626 <param name="snapshot" type="ISnapshot" dir="in">
6627 <desc>The snapshot to restore the VM state from.</desc>
6628 </param>
6629 <param name="progress" type="IProgress" dir="return">
6630 <desc>Progress object to track the operation completion.</desc>
6631 </param>
6632 </method>
6633
6634 <method name="teleport">
6635 <desc>
6636 Teleport the VM to a different host machine or process.
6637
6638 TODO explain the details.
6639
6640 <result name="VBOX_E_INVALID_VM_STATE">
6641 Virtual machine not running or paused.
6642 </result>
6643 </desc>
6644 <param name="hostname" type="wstring" dir="in">
6645 <desc>The name or IP of the host to teleport to.</desc>
6646 </param>
6647 <param name="tcpport" type="unsigned long" dir="in">
6648 <desc>The TCP port to connect to (1..65535).</desc>
6649 </param>
6650 <param name="password" type="wstring" dir="in">
6651 <desc>The password.</desc>
6652 </param>
6653 <param name="maxDowntime" type="unsigned long" dir="in">
6654 <desc>
6655 The maximum allowed downtime given as milliseconds. 0 is not a valid
6656 value. Recommended value: 250 ms.
6657
6658 The higher the value is, the greater the chance for a successful
6659 teleportation. A small value may easily result in the teleportation
6660 process taking hours and eventually fail.
6661
6662 <note>
6663 The current implementation treats this a guideline, not as an
6664 absolute rule.
6665 </note>
6666 </desc>
6667 </param>
6668 <param name="progress" type="IProgress" dir="return">
6669 <desc>Progress object to track the operation completion.</desc>
6670 </param>
6671 </method>
6672
6673 </interface>
6674
6675 <!--
6676 // IHost
6677 /////////////////////////////////////////////////////////////////////////
6678 -->
6679
6680 <enum
6681 name="HostNetworkInterfaceMediumType"
6682 uuid="1aa54aaf-2497-45a2-bfb1-8eb225e93d5b"
6683 >
6684 <desc>
6685 Type of encapsulation. Ethernet encapsulation includes both wired and
6686 wireless Ethernet connections.
6687 <see>IHostNetworkInterface</see>
6688 </desc>
6689
6690 <const name="Unknown" value="0">
6691 <desc>
6692 The type of interface cannot be determined.
6693 </desc>
6694 </const>
6695 <const name="Ethernet" value="1">
6696 <desc>
6697 Ethernet frame encapsulation.
6698 </desc>
6699 </const>
6700 <const name="PPP" value="2">
6701 <desc>
6702 Point-to-point protocol encapsulation.
6703 </desc>
6704 </const>
6705 <const name="SLIP" value="3">
6706 <desc>
6707 Serial line IP encapsulation.
6708 </desc>
6709 </const>
6710 </enum>
6711
6712 <enum
6713 name="HostNetworkInterfaceStatus"
6714 uuid="CC474A69-2710-434B-8D99-C38E5D5A6F41"
6715 >
6716 <desc>
6717 Current status of the interface.
6718 <see>IHostNetworkInterface</see>
6719 </desc>
6720
6721 <const name="Unknown" value="0">
6722 <desc>
6723 The state of interface cannot be determined.
6724 </desc>
6725 </const>
6726 <const name="Up" value="1">
6727 <desc>
6728 The interface is fully operational.
6729 </desc>
6730 </const>
6731 <const name="Down" value="2">
6732 <desc>
6733 The interface is not functioning.
6734 </desc>
6735 </const>
6736 </enum>
6737
6738 <enum
6739 name="HostNetworkInterfaceType"
6740 uuid="67431b00-9946-48a2-bc02-b25c5919f4f3"
6741 >
6742 <desc>
6743 Network interface type.
6744 </desc>
6745 <const name="Bridged" value="1"/>
6746 <const name="HostOnly" value="2"/>
6747 </enum>
6748
6749 <interface
6750 name="IHostNetworkInterface" extends="$unknown"
6751 uuid="ce6fae58-7642-4102-b5db-c9005c2320a8"
6752 wsmap="managed"
6753 >
6754 <desc>
6755 Represents one of host's network interfaces. IP V6 address and network
6756 mask are strings of 32 hexdecimal digits grouped by four. Groups are
6757 separated by colons.
6758 For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
6759 </desc>
6760 <attribute name="name" type="wstring" readonly="yes">
6761 <desc>Returns the host network interface name.</desc>
6762 </attribute>
6763
6764 <attribute name="id" type="uuid" mod="string" readonly="yes">
6765 <desc>Returns the interface UUID.</desc>
6766 </attribute>
6767
6768 <attribute name="networkName" type="wstring" readonly="yes">
6769 <desc>Returns the name of a virtual network the interface gets attached to.</desc>
6770 </attribute>
6771
6772 <attribute name="dhcpEnabled" type="boolean" readonly="yes">
6773 <desc>Specifies whether the DHCP is enabled for the interface.</desc>
6774 </attribute>
6775
6776 <attribute name="IPAddress" type="wstring" readonly="yes">
6777 <desc>Returns the IP V4 address of the interface.</desc>
6778 </attribute>
6779
6780 <attribute name="networkMask" type="wstring" readonly="yes">
6781 <desc>Returns the network mask of the interface.</desc>
6782 </attribute>
6783
6784 <attribute name="IPV6Supported" type="boolean" readonly="yes">
6785 <desc>Specifies whether the IP V6 is supported/enabled for the interface.</desc>
6786 </attribute>
6787
6788 <attribute name="IPV6Address" type="wstring" readonly="yes">
6789 <desc>Returns the IP V6 address of the interface.</desc>
6790 </attribute>
6791
6792 <attribute name="IPV6NetworkMaskPrefixLength" type="unsigned long" readonly="yes">
6793 <desc>Returns the length IP V6 network mask prefix of the interface.</desc>
6794 </attribute>
6795
6796 <attribute name="hardwareAddress" type="wstring" readonly="yes">
6797 <desc>Returns the hardware address. For Ethernet it is MAC address.</desc>
6798 </attribute>
6799
6800 <attribute name="mediumType" type="HostNetworkInterfaceMediumType" readonly="yes">
6801 <desc>Type of protocol encapsulation used.</desc>
6802 </attribute>
6803
6804 <attribute name="status" type="HostNetworkInterfaceStatus" readonly="yes">
6805 <desc>Status of the interface.</desc>
6806 </attribute>
6807
6808 <attribute name="interfaceType" type="HostNetworkInterfaceType" readonly="yes">
6809 <desc>specifies the host interface type.</desc>
6810 </attribute>
6811
6812 <method name="enableStaticIpConfig">
6813 <desc>sets and enables the static IP V4 configuration for the given interface.</desc>
6814 <param name="IPAddress" type="wstring" dir="in">
6815 <desc>
6816 IP address.
6817 </desc>
6818 </param>
6819 <param name="networkMask" type="wstring" dir="in">
6820 <desc>
6821 network mask.
6822 </desc>
6823 </param>
6824 </method>
6825
6826 <method name="enableStaticIpConfigV6">
6827 <desc>sets and enables the static IP V6 configuration for the given interface.</desc>
6828 <param name="IPV6Address" type="wstring" dir="in">
6829 <desc>
6830 IP address.
6831 </desc>
6832 </param>
6833 <param name="IPV6NetworkMaskPrefixLength" type="unsigned long" dir="in">
6834 <desc>
6835 network mask.
6836 </desc>
6837 </param>
6838 </method>
6839
6840 <method name="enableDynamicIpConfig">
6841 <desc>enables the dynamic IP configuration.</desc>
6842 </method>
6843
6844 <method name="dhcpRediscover">
6845 <desc>refreshes the IP configuration for dhcp-enabled interface.</desc>
6846 </method>
6847
6848 </interface>
6849
6850 <interface
6851 name="IHost" extends="$unknown"
6852 uuid="35b004f4-7806-4009-bfa8-d1308adba7e5"
6853 wsmap="managed"
6854 >
6855 <desc>
6856 The IHost interface represents the physical machine that this VirtualBox
6857 installation runs on.
6858
6859 An object implementing this interface is returned by the
6860 <link to="IVirtualBox::host" /> attribute. This interface contains
6861 read-only information about the host's physical hardware (such as what
6862 processors and disks are available, what the host operating system is,
6863 and so on) and also allows for manipulating some of the host's hardware,
6864 such as global USB device filters and host interface networking.
6865
6866 </desc>
6867 <attribute name="DVDDrives" type="IMedium" readonly="yes" safearray="yes">
6868 <desc>List of DVD drives available on the host.</desc>
6869 </attribute>
6870
6871 <attribute name="floppyDrives" type="IMedium" readonly="yes" safearray="yes">
6872 <desc>List of floppy drives available on the host.</desc>
6873 </attribute>
6874
6875 <attribute name="USBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
6876 <desc>
6877 List of USB devices currently attached to the host.
6878 Once a new device is physically attached to the host computer,
6879 it appears in this list and remains there until detached.
6880
6881 <note>
6882 If USB functionality is not available in the given edition of
6883 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6884 </note>
6885 </desc>
6886 </attribute>
6887
6888 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilter" readonly="yes" safearray="yes">
6889 <desc>
6890 List of USB device filters in action.
6891 When a new device is physically attached to the host computer,
6892 filters from this list are applied to it (in order they are stored
6893 in the list). The first matched filter will determine the
6894 <link to="IHostUSBDeviceFilter::action">action</link>
6895 performed on the device.
6896
6897 Unless the device is ignored by these filters, filters of all
6898 currently running virtual machines
6899 (<link to="IUSBController::deviceFilters"/>) are applied to it.
6900
6901 <note>
6902 If USB functionality is not available in the given edition of
6903 VirtualBox, this method will set the result code to @c E_NOTIMPL.
6904 </note>
6905
6906 <see>IHostUSBDeviceFilter, USBDeviceState</see>
6907 </desc>
6908 </attribute>
6909
6910 <attribute name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" readonly="yes">
6911 <desc>List of host network interfaces currently defined on the host.</desc>
6912 </attribute>
6913
6914 <attribute name="processorCount" type="unsigned long" readonly="yes">
6915 <desc>Number of (logical) CPUs installed in the host system.</desc>
6916 </attribute>
6917
6918 <attribute name="processorOnlineCount" type="unsigned long" readonly="yes">
6919 <desc>Number of (logical) CPUs online in the host system.</desc>
6920 </attribute>
6921
6922 <attribute name="processorCoreCount" type="unsigned long" readonly="yes">
6923 <desc>Number of physical processor cores installed in the host system.</desc>
6924 </attribute>
6925
6926 <method name="getProcessorSpeed">
6927 <desc>Query the (approximate) maximum speed of a specified host CPU in
6928 Megahertz.
6929 </desc>
6930 <param name="cpuId" type="unsigned long" dir="in">
6931 <desc>
6932 Identifier of the CPU.
6933 </desc>
6934 </param>
6935 <param name="speed" type="unsigned long" dir="return">
6936 <desc>
6937 Speed value. 0 is returned if value is not known or @a cpuId is
6938 invalid.
6939 </desc>
6940 </param>
6941 </method>
6942
6943 <method name="getProcessorFeature">
6944 <desc>Query whether a CPU feature is supported or not.</desc>
6945 <param name="feature" type="ProcessorFeature" dir="in">
6946 <desc>
6947 CPU Feature identifier.
6948 </desc>
6949 </param>
6950 <param name="supported" type="boolean" dir="return">
6951 <desc>
6952 Feature is supported or not.
6953 </desc>
6954 </param>
6955 </method>
6956
6957 <method name="getProcessorDescription">
6958 <desc>Query the model string of a specified host CPU.
6959 </desc>
6960 <param name="cpuId" type="unsigned long" dir="in">
6961 <desc>
6962 Identifier of the CPU.
6963 <note>
6964 The current implementation might not necessarily return the
6965 description for this exact CPU.
6966 </note>
6967 </desc>
6968 </param>
6969 <param name="description" type="wstring" dir="return">
6970 <desc>
6971 Model string. An empty string is returned if value is not known or
6972 @a cpuId is invalid.
6973 </desc>
6974 </param>
6975 </method>
6976
6977 <method name="getProcessorCPUIDLeaf">
6978 <desc>
6979 Returns the CPU cpuid information for the specified leaf.
6980 </desc>
6981 <param name="cpuId" type="unsigned long" dir="in">
6982 <desc>
6983 Identifier of the CPU. The CPU most be online.
6984 <note>
6985 The current implementation might not necessarily return the
6986 description for this exact CPU.
6987 </note>
6988 </desc>
6989 </param>
6990 <param name="leaf" type="unsigned long" dir="in">
6991 <desc>
6992 CPUID leaf index (eax).
6993 </desc>
6994 </param>
6995 <param name="subLeaf" type="unsigned long" dir="in">
6996 <desc>
6997 CPUID leaf sub index (ecx). This currently only applies to cache
6998 information on Intel CPUs. Use 0 if retriving values for
6999 <link to="IMachine::setCPUIDLeaf"/>.
7000 </desc>
7001 </param>
7002 <param name="valEax" type="unsigned long" dir="out">
7003 <desc>
7004 CPUID leaf value for register eax.
7005 </desc>
7006 </param>
7007 <param name="valEbx" type="unsigned long" dir="out">
7008 <desc>
7009 CPUID leaf value for register ebx.
7010 </desc>
7011 </param>
7012 <param name="valEcx" type="unsigned long" dir="out">
7013 <desc>
7014 CPUID leaf value for register ecx.
7015 </desc>
7016 </param>
7017 <param name="valEdx" type="unsigned long" dir="out">
7018 <desc>
7019 CPUID leaf value for register edx.
7020 </desc>
7021 </param>
7022 </method>
7023
7024 <attribute name="memorySize" type="unsigned long" readonly="yes">
7025 <desc>Amount of system memory in megabytes installed in the host system.</desc>
7026 </attribute>
7027
7028 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
7029 <desc>Available system memory in the host system.</desc>
7030 </attribute>
7031
7032 <attribute name="operatingSystem" type="wstring" readonly="yes">
7033 <desc>Name of the host system's operating system.</desc>
7034 </attribute>
7035
7036 <attribute name="OSVersion" type="wstring" readonly="yes">
7037 <desc>Host operating system's version string.</desc>
7038 </attribute>
7039
7040 <attribute name="UTCTime" type="long long" readonly="yes">
7041 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
7042 </attribute>
7043
7044 <attribute name="Acceleration3DAvailable" type="boolean" readonly="yes">
7045 <desc>Returns @c true when the host supports 3D hardware acceleration.</desc>
7046 </attribute>
7047
7048 <method name="createHostOnlyNetworkInterface">
7049 <desc>
7050 Creates a new adapter for Host Only Networking.
7051 <result name="E_INVALIDARG">
7052 Host network interface @a name already exists.
7053 </result>
7054 </desc>
7055 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
7056 <desc>
7057 Created host interface object.
7058 </desc>
7059 </param>
7060 <param name="progress" type="IProgress" dir="return">
7061 <desc>
7062 Progress object to track the operation completion.
7063 </desc>
7064 </param>
7065 </method>
7066
7067 <method name="removeHostOnlyNetworkInterface">
7068 <desc>
7069 Removes the given Host Only Networking interface.
7070 <result name="VBOX_E_OBJECT_NOT_FOUND">
7071 No host network interface matching @a id found.
7072 </result>
7073 </desc>
7074 <param name="id" type="uuid" mod="string" dir="in">
7075 <desc>
7076 Adapter GUID.
7077 </desc>
7078 </param>
7079 <param name="progress" type="IProgress" dir="return">
7080 <desc>
7081 Progress object to track the operation completion.
7082 </desc>
7083 </param>
7084 </method>
7085
7086 <method name="createUSBDeviceFilter">
7087 <desc>
7088 Creates a new USB device filter. All attributes except
7089 the filter name are set to empty (any match),
7090 <i>active</i> is @c false (the filter is not active).
7091
7092 The created filter can be added to the list of filters using
7093 <link to="#insertUSBDeviceFilter"/>.
7094
7095 <see>#USBDeviceFilters</see>
7096 </desc>
7097 <param name="name" type="wstring" dir="in">
7098 <desc>
7099 Filter name. See <link to="IHostUSBDeviceFilter::name"/>
7100 for more info.
7101 </desc>
7102 </param>
7103 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
7104 <desc>Created filter object.</desc>
7105 </param>
7106 </method>
7107
7108 <method name="insertUSBDeviceFilter">
7109 <desc>
7110 Inserts the given USB device to the specified position
7111 in the list of filters.
7112
7113 Positions are numbered starting from @c 0. If the specified
7114 position is equal to or greater than the number of elements in
7115 the list, the filter is added at the end of the collection.
7116
7117 <note>
7118 Duplicates are not allowed, so an attempt to insert a
7119 filter already in the list is an error.
7120 </note>
7121 <note>
7122 If USB functionality is not available in the given edition of
7123 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7124 </note>
7125
7126 <see>#USBDeviceFilters</see>
7127
7128 <result name="VBOX_E_INVALID_OBJECT_STATE">
7129 USB device filter is not created within this VirtualBox instance.
7130 </result>
7131 <result name="E_INVALIDARG">
7132 USB device filter already in list.
7133 </result>
7134
7135 </desc>
7136 <param name="position" type="unsigned long" dir="in">
7137 <desc>Position to insert the filter to.</desc>
7138 </param>
7139 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
7140 <desc>USB device filter to insert.</desc>
7141 </param>
7142 </method>
7143
7144 <method name="removeUSBDeviceFilter">
7145 <desc>
7146 Removes a USB device filter from the specified position in the
7147 list of filters.
7148
7149 Positions are numbered starting from @c 0. Specifying a
7150 position equal to or greater than the number of elements in
7151 the list will produce an error.
7152
7153 <note>
7154 If USB functionality is not available in the given edition of
7155 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7156 </note>
7157
7158 <see>#USBDeviceFilters</see>
7159
7160 <result name="E_INVALIDARG">
7161 USB device filter list empty or invalid @a position.
7162 </result>
7163
7164 </desc>
7165 <param name="position" type="unsigned long" dir="in">
7166 <desc>Position to remove the filter from.</desc>
7167 </param>
7168 </method>
7169
7170 <method name="findHostDVDDrive">
7171 <desc>
7172 Searches for a host DVD drive with the given @c name.
7173
7174 <result name="VBOX_E_OBJECT_NOT_FOUND">
7175 Given @c name does not correspond to any host drive.
7176 </result>
7177
7178 </desc>
7179 <param name="name" type="wstring" dir="in">
7180 <desc>Name of the host drive to search for</desc>
7181 </param>
7182 <param name="drive" type="IMedium" dir="return">
7183 <desc>Found host drive object</desc>
7184 </param>
7185 </method>
7186
7187 <method name="findHostFloppyDrive">
7188 <desc>
7189 Searches for a host floppy drive with the given @c name.
7190
7191 <result name="VBOX_E_OBJECT_NOT_FOUND">
7192 Given @c name does not correspond to any host floppy drive.
7193 </result>
7194
7195 </desc>
7196 <param name="name" type="wstring" dir="in">
7197 <desc>Name of the host floppy drive to search for</desc>
7198 </param>
7199 <param name="drive" type="IMedium" dir="return">
7200 <desc>Found host floppy drive object</desc>
7201 </param>
7202 </method>
7203
7204 <method name="findHostNetworkInterfaceByName">
7205 <desc>
7206 Searches through all host network interfaces for an interface with
7207 the given @c name.
7208 <note>
7209 The method returns an error if the given @c name does not
7210 correspond to any host network interface.
7211 </note>
7212 </desc>
7213 <param name="name" type="wstring" dir="in">
7214 <desc>Name of the host network interface to search for.</desc>
7215 </param>
7216 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7217 <desc>Found host network interface object.</desc>
7218 </param>
7219 </method>
7220 <method name="findHostNetworkInterfaceById">
7221 <desc>
7222 Searches through all host network interfaces for an interface with
7223 the given GUID.
7224 <note>
7225 The method returns an error if the given GUID does not
7226 correspond to any host network interface.
7227 </note>
7228 </desc>
7229 <param name="id" type="uuid" mod="string" dir="in">
7230 <desc>GUID of the host network interface to search for.</desc>
7231 </param>
7232 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
7233 <desc>Found host network interface object.</desc>
7234 </param>
7235 </method>
7236 <method name="findHostNetworkInterfacesOfType">
7237 <desc>
7238 Searches through all host network interfaces and returns a list of interfaces of the specified type
7239 </desc>
7240 <param name="type" type="HostNetworkInterfaceType" dir="in">
7241 <desc>type of the host network interfaces to search for.</desc>
7242 </param>
7243 <param name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" dir="return">
7244 <desc>Found host network interface objects.</desc>
7245 </param>
7246 </method>
7247
7248 <method name="findUSBDeviceById">
7249 <desc>
7250 Searches for a USB device with the given UUID.
7251
7252 <result name="VBOX_E_OBJECT_NOT_FOUND">
7253 Given @c id does not correspond to any USB device.
7254 </result>
7255
7256 <see>IHostUSBDevice::id</see>
7257 </desc>
7258 <param name="id" type="uuid" mod="string" dir="in">
7259 <desc>UUID of the USB device to search for.</desc>
7260 </param>
7261 <param name="device" type="IHostUSBDevice" dir="return">
7262 <desc>Found USB device object.</desc>
7263 </param>
7264 </method>
7265
7266 <method name="findUSBDeviceByAddress">
7267 <desc>
7268 Searches for a USB device with the given host address.
7269
7270 <result name="VBOX_E_OBJECT_NOT_FOUND">
7271 Given @c name does not correspond to any USB device.
7272 </result>
7273
7274 <see>IHostUSBDevice::address</see>
7275 </desc>
7276 <param name="name" type="wstring" dir="in">
7277 <desc>
7278 Address of the USB device (as assigned by the host) to
7279 search for.
7280 </desc>
7281 </param>
7282 <param name="device" type="IHostUSBDevice" dir="return">
7283 <desc>Found USB device object.</desc>
7284 </param>
7285 </method>
7286
7287 </interface>
7288
7289 <!--
7290 // ISystemProperties
7291 /////////////////////////////////////////////////////////////////////////
7292 -->
7293
7294 <interface
7295 name="ISystemProperties"
7296 extends="$unknown"
7297 uuid="07c3ffd8-8f59-49cc-b608-53a332e85cc3"
7298 wsmap="managed"
7299 >
7300 <desc>
7301 The ISystemProperties interface represents global properties of the given
7302 VirtualBox installation.
7303
7304 These properties define limits and default values for various attributes
7305 and parameters. Most of the properties are read-only, but some can be
7306 changed by a user.
7307 </desc>
7308
7309 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
7310 <desc>Minimum guest system memory in Megabytes.</desc>
7311 </attribute>
7312
7313 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
7314 <desc>Maximum guest system memory in Megabytes.</desc>
7315 </attribute>
7316
7317 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
7318 <desc>Minimum guest video memory in Megabytes.</desc>
7319 </attribute>
7320
7321 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
7322 <desc>Maximum guest video memory in Megabytes.</desc>
7323 </attribute>
7324
7325 <attribute name="minGuestCPUCount" type="unsigned long" readonly="yes">
7326 <desc>Minimum CPU count.</desc>
7327 </attribute>
7328
7329 <attribute name="maxGuestCPUCount" type="unsigned long" readonly="yes">
7330 <desc>Maximum CPU count.</desc>
7331 </attribute>
7332
7333 <attribute name="maxGuestMonitors" type="unsigned long" readonly="yes">
7334 <desc>Maximum of monitors which could be connected.</desc>
7335 </attribute>
7336
7337 <attribute name="maxVDISize" type="unsigned long long" readonly="yes">
7338 <desc>Maximum size of a virtual disk image in Megabytes.</desc>
7339 </attribute>
7340
7341 <attribute name="networkAdapterCount" type="unsigned long" readonly="yes">
7342 <desc>
7343 Number of network adapters associated with every
7344 <link to="IMachine"/> instance.
7345 </desc>
7346 </attribute>
7347
7348 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
7349 <desc>
7350 Number of serial ports associated with every
7351 <link to="IMachine"/> instance.
7352 </desc>
7353 </attribute>
7354
7355 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
7356 <desc>
7357 Number of parallel ports associated with every
7358 <link to="IMachine"/> instance.
7359 </desc>
7360 </attribute>
7361
7362 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
7363 <desc>
7364 Maximum device position in the boot order. This value corresponds
7365 to the total number of devices a machine can boot from, to make it
7366 possible to include all possible devices to the boot list.
7367 <see><link to="IMachine::setBootOrder"/></see>
7368 </desc>
7369 </attribute>
7370
7371 <attribute name="defaultMachineFolder" type="wstring">
7372 <desc>
7373 Full path to the default directory used to create new or open
7374 existing machines when a settings file name contains no
7375 path.
7376
7377 The initial value of this property is
7378 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
7379 VirtualBox_home</link><tt>&gt;/Machines</tt>.
7380
7381 <note>
7382 Setting this property to @c null or an empty string will restore the
7383 initial value.
7384 </note>
7385 <note>
7386 When settings this property, the specified path can be
7387 absolute (full path) or relative
7388 to the <link to="IVirtualBox::homeFolder">
7389 VirtualBox home directory</link>.
7390 When reading this property, a full path is
7391 always returned.
7392 </note>
7393 <note>
7394 The specified path may not exist, it will be created
7395 when necessary.
7396 </note>
7397
7398 <see>
7399 <link to="IVirtualBox::createMachine"/>,
7400 <link to="IVirtualBox::openMachine"/>
7401 </see>
7402 </desc>
7403 </attribute>
7404
7405 <attribute name="defaultHardDiskFolder" type="wstring">
7406 <desc>
7407 Full path to the default directory used to create new or open existing
7408 virtual disks.
7409
7410 This path is used when the storage unit of a hard disk is a regular file
7411 in the host's file system and only a file name that contains no path is
7412 given.
7413
7414 The initial value of this property is
7415 <tt>&lt;</tt>
7416 <link to="IVirtualBox::homeFolder">VirtualBox_home</link>
7417 <tt>&gt;/HardDisks</tt>.
7418
7419 <note>
7420 Setting this property to @c null or empty string will restore the
7421 initial value.
7422 </note>
7423 <note>
7424 When settings this property, the specified path can be relative
7425 to the
7426 <link to="IVirtualBox::homeFolder">VirtualBox home directory</link> or
7427 absolute. When reading this property, a full path is
7428 always returned.
7429 </note>
7430 <note>
7431 The specified path may not exist, it will be created
7432 when necessary.
7433 </note>
7434
7435 <see>
7436 IMedium,
7437 <link to="IVirtualBox::createHardDisk"/>,
7438 <link to="IVirtualBox::openHardDisk"/>,
7439 <link to="IMedium::location"/>
7440 </see>
7441 </desc>
7442 </attribute>
7443
7444 <attribute name="mediumFormats" type="IMediumFormat" safearray="yes" readonly="yes">
7445 <desc>
7446 List of all medium storage formats supported by this VirtualBox
7447 installation.
7448
7449 Keep in mind that the medium format identifier
7450 (<link to="IMediumFormat::id"/>) used in other API calls like
7451 <link to="IVirtualBox::createHardDisk"/> to refer to a particular
7452 medium format is a case-insensitive string. This means that, for
7453 example, all of the following strings:
7454 <pre>
7455 "VDI"
7456 "vdi"
7457 "VdI"</pre>
7458 refer to the same medium format.
7459
7460 Note that the virtual medium framework is backend-based, therefore
7461 the list of supported formats depends on what backends are currently
7462 installed.
7463
7464 <see>
7465 <link to="IMediumFormat"/>,
7466 </see>
7467 </desc>
7468 </attribute>
7469
7470 <attribute name="defaultHardDiskFormat" type="wstring">
7471 <desc>
7472 Identifier of the default medium format used by VirtualBox.
7473
7474 The medium format set by this attribute is used by VirtualBox
7475 when the medium format was not specified explicitly. One example is
7476 <link to="IVirtualBox::createHardDisk"/> with the empty
7477 format argument. A more complex example is implicit creation of
7478 differencing media when taking a snapshot of a virtual machine:
7479 this operation will try to use a format of the parent medium first
7480 and if this format does not support differencing media the default
7481 format specified by this argument will be used.
7482
7483 The list of supported medium formats may be obtained by the
7484 <link to="#mediaFormats"/> call. Note that the default medium
7485 format must have a capability to create differencing media;
7486 otherwise operations that create media implicitly may fail
7487 unexpectedly.
7488
7489 The initial value of this property is <tt>"VDI"</tt> in the current
7490 version of the VirtualBox product, but may change in the future.
7491
7492 <note>
7493 Setting this property to @c null or empty string will restore the
7494 initial value.
7495 </note>
7496
7497 <see>
7498 <link to="#mediaFormats"/>,
7499 <link to="IMediumFormat::id"/>,
7500 <link to="IVirtualBox::createHardDisk"/>
7501 </see>
7502 </desc>
7503 </attribute>
7504
7505 <attribute name="freeDiskSpaceWarning" type="unsigned long long">
7506 <desc>Issue a warning if the free disk space is below (or in some disk
7507 intensive operation is expected to go below) the given size in
7508 Megabytes.</desc>
7509 </attribute>
7510
7511 <attribute name="freeDiskSpacePercentWarning" type="unsigned long">
7512 <desc>Issue a warning if the free disk space is below (or in some disk
7513 intensive operation is expected to go below) the given percentage.</desc>
7514 </attribute>
7515
7516 <attribute name="freeDiskSpaceError" type="unsigned long long">
7517 <desc>Issue an error if the free disk space is below (or in some disk
7518 intensive operation is expected to go below) the given size in
7519 Megabytes.</desc>
7520 </attribute>
7521
7522 <attribute name="freeDiskSpacePercentError" type="unsigned long">
7523 <desc>Issue an error if the free disk space is below (or in some disk
7524 intensive operation is expected to go below) the given percentage.</desc>
7525 </attribute>
7526
7527 <attribute name="remoteDisplayAuthLibrary" type="wstring">
7528 <desc>
7529 Library that provides authentication for VRDP clients. The library
7530 is used if a virtual machine's authentication type is set to "external"
7531 in the VM RemoteDisplay configuration.
7532
7533 The system library extension (".DLL" or ".so") must be omitted.
7534 A full path can be specified; if not, then the library must reside on the
7535 system's default library path.
7536
7537 The default value of this property is <tt>"VRDPAuth"</tt>. There is a library
7538 of that name in one of the default VirtualBox library directories.
7539
7540 For details about VirtualBox authentication libraries and how to implement
7541 them, please refer to the VirtualBox manual.
7542
7543 <note>
7544 Setting this property to @c null or empty string will restore the
7545 initial value.
7546 </note>
7547 </desc>
7548 </attribute>
7549
7550 <attribute name="webServiceAuthLibrary" type="wstring">
7551 <desc>
7552 Library that provides authentication for webservice clients. The library
7553 is used if a virtual machine's authentication type is set to "external"
7554 in the VM RemoteDisplay configuration and will be called from
7555 within the <link to="IWebsessionManager::logon" /> implementation.
7556
7557 As opposed to <link to="ISystemProperties::remoteDisplayAuthLibrary" />,
7558 there is no per-VM setting for this, as the webservice is a global
7559 resource (if it is running). Only for this setting (for the webservice),
7560 setting this value to a literal <tt>"null"</tt> string disables authentication,
7561 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
7562 no matter what user name and password are supplied.
7563
7564 The initial value of this property is <tt>"VRDPAuth"</tt>,
7565 meaning that the webservice will use the same authentication
7566 library that is used by default for VBoxVRDP (again, see
7567 <link to="ISystemProperties::remoteDisplayAuthLibrary" />).
7568 The format and calling convention of authentication libraries
7569 is the same for the webservice as it is for VBoxVRDP.
7570
7571 <note>
7572 Setting this property to @c null or empty string will restore the
7573 initial value.
7574 </note>
7575 </desc>
7576 </attribute>
7577
7578 <attribute name="LogHistoryCount" type="unsigned long">
7579 <desc>
7580 This value specifies how many old release log files are kept.
7581 </desc>
7582 </attribute>
7583
7584 <attribute name="defaultAudioDriver" type="AudioDriverType" readonly="yes">
7585 <desc>This value hold the default audio driver for the current
7586 system.</desc>
7587 </attribute>
7588
7589 <method name="getMaxDevicesPerPortForStorageBus">
7590 <desc>Returns the maximum number of devices which can be attached to a port
7591 for the given storage bus.</desc>
7592
7593 <param name="bus" type="StorageBus" dir="in">
7594 <desc>The storage bus type to get the value for.</desc>
7595 </param>
7596
7597 <param name="maxDevicesPerPort" type="unsigned long" dir="return">
7598 <desc>The maximum number of devices which can eb attached to the port for the given
7599 storage bus.</desc>
7600 </param>
7601 </method>
7602
7603 <method name="getMinPortCountForStorageBus">
7604 <desc>Returns the minimum number of ports the given storage bus supports.</desc>
7605
7606 <param name="bus" type="StorageBus" dir="in">
7607 <desc>The storage bus type to get the value for.</desc>
7608 </param>
7609
7610 <param name="minPortCount" type="unsigned long" dir="return">
7611 <desc>The minimum number of ports for the given storage bus.</desc>
7612 </param>
7613 </method>
7614
7615 <method name="getMaxPortCountForStorageBus">
7616 <desc>Returns the maximum number of ports the given storage bus supports.</desc>
7617
7618 <param name="bus" type="StorageBus" dir="in">
7619 <desc>The storage bus type to get the value for.</desc>
7620 </param>
7621
7622 <param name="maxPortCount" type="unsigned long" dir="return">
7623 <desc>The maximum number of ports for the given storage bus.</desc>
7624 </param>
7625 </method>
7626
7627 <method name="getMaxInstancesOfStorageBus">
7628 <desc>Returns the maximum number of storage bus instances which
7629 can be configured for each VM. This corresponds to the number of
7630 storage controllers one can have.</desc>
7631
7632 <param name="bus" type="StorageBus" dir="in">
7633 <desc>The storage bus type to get the value for.</desc>
7634 </param>
7635
7636 <param name="maxInstances" type="unsigned long" dir="return">
7637 <desc>The maximum number of instances for the given storage bus.</desc>
7638 </param>
7639 </method>
7640
7641 <method name="getDeviceTypesForStorageBus">
7642 <desc>Returns list of all the supported device types
7643 (<link to="DeviceType"/>) for the given type of storage
7644 bus.</desc>
7645
7646 <param name="bus" type="StorageBus" dir="in">
7647 <desc>The storage bus type to get the value for.</desc>
7648 </param>
7649
7650 <param name="deviceTypes" type="DeviceType" safearray="yes" dir="return">
7651 <desc>The list of all supported device types for the given storage bus.</desc>
7652 </param>
7653 </method>
7654 </interface>
7655
7656 <!--
7657 // IGuest
7658 /////////////////////////////////////////////////////////////////////////
7659 -->
7660
7661 <interface
7662 name="IGuestOSType" extends="$unknown"
7663 uuid="e3f6727e-a09b-41ea-a824-864a176472f3"
7664 wsmap="struct"
7665 >
7666 <desc>
7667 </desc>
7668
7669 <attribute name="familyId" type="wstring" readonly="yes">
7670 <desc>Guest OS family identifier string.</desc>
7671 </attribute>
7672
7673 <attribute name="familyDescription" type="wstring" readonly="yes">
7674 <desc>Human readable description of the guest OS family.</desc>
7675 </attribute>
7676
7677 <attribute name="id" type="wstring" readonly="yes">
7678 <desc>Guest OS identifier string.</desc>
7679 </attribute>
7680
7681 <attribute name="description" type="wstring" readonly="yes">
7682 <desc>Human readable description of the guest OS.</desc>
7683 </attribute>
7684
7685 <attribute name="is64Bit" type="boolean" readonly="yes">
7686 <desc>Returns @c true if the given OS is 64-bit</desc>
7687 </attribute>
7688
7689 <attribute name="recommendedIOAPIC" type="boolean" readonly="yes">
7690 <desc>Returns @c true if IO APIC recommended for this OS type.</desc>
7691 </attribute>
7692
7693 <attribute name="recommendedVirtEx" type="boolean" readonly="yes">
7694 <desc>Returns @c true if VT-x or AMD-V recommended for this OS type.</desc>
7695 </attribute>
7696
7697 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
7698 <desc>Recommended RAM size in Megabytes.</desc>
7699 </attribute>
7700
7701 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
7702 <desc>Recommended video RAM size in Megabytes.</desc>
7703 </attribute>
7704
7705 <attribute name="recommendedHDD" type="unsigned long" readonly="yes">
7706 <desc>Recommended hard disk size in Megabytes.</desc>
7707 </attribute>
7708
7709 <attribute name="adapterType" type="NetworkAdapterType" readonly="yes">
7710 <desc>Returns recommended network adapter for this OS type.</desc>
7711 </attribute>
7712
7713 <attribute name="recommendedPae" type="boolean" readonly="yes">
7714 <desc>Returns @c true if using PAE is recommended for this OS type.</desc>
7715 </attribute>
7716
7717 <attribute name="recommendedDvdStorageController" type="StorageControllerType" readonly="yes">
7718 <desc>Recommended storage controller type for DVD/CD drives.</desc>
7719 </attribute>
7720
7721 <attribute name="recommendedDvdStorageBus" type="StorageBus" readonly="yes">
7722 <desc>Recommended storage bus type for DVD/CD drives.</desc>
7723 </attribute>
7724
7725 <attribute name="recommendedHdStorageController" type="StorageControllerType" readonly="yes">
7726 <desc>Recommended storage controller type for HD drives.</desc>
7727 </attribute>
7728
7729 <attribute name="recommendedHdStorageBus" type="StorageBus" readonly="yes">
7730 <desc>Recommended storage bus type for HD drives.</desc>
7731 </attribute>
7732
7733 <attribute name="recommendedFirmware" type="FirmwareType" readonly="yes">
7734 <desc>Recommended firmware type.</desc>
7735 </attribute>
7736
7737 <attribute name="recommendedUsbHid" type="boolean" readonly="yes">
7738 <desc>Returns @c true if using USB Human Interface Devices, such as keyboard and mouse recommended.</desc>
7739 </attribute>
7740
7741 <attribute name="recommendedHpet" type="boolean" readonly="yes">
7742 <desc>Returns @c true if using HPET is recommended for this OS type.</desc>
7743 </attribute>
7744
7745 <attribute name="recommendedUsbTablet" type="boolean" readonly="yes">
7746 <desc>Returns @c true if using a USB Tablet is recommended.</desc>
7747 </attribute>
7748
7749 <attribute name="recommendedRtcUseUtc" type="boolean" readonly="yes">
7750 <desc>Returns @c true if the RTC of this VM should be set to UTC</desc>
7751 </attribute>
7752
7753 </interface>
7754
7755 <interface
7756 name="IGuest" extends="$unknown"
7757 uuid="d915dff1-ed38-495a-91f1-ab6c53932468"
7758 wsmap="managed"
7759 >
7760 <desc>
7761 The IGuest interface represents information about the operating system
7762 running inside the virtual machine. Used in
7763 <link to="IConsole::guest"/>.
7764
7765 IGuest provides information about the guest operating system, whether
7766 Guest Additions are installed and other OS-specific virtual machine
7767 properties.
7768 </desc>
7769
7770 <attribute name="OSTypeId" type="wstring" readonly="yes">
7771 <desc>
7772 Identifier of the Guest OS type as reported by the Guest
7773 Additions.
7774 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
7775 an IGuestOSType object representing details about the given
7776 Guest OS type.
7777 <note>
7778 If Guest Additions are not installed, this value will be
7779 the same as <link to="IMachine::OSTypeId"/>.
7780 </note>
7781 </desc>
7782 </attribute>
7783
7784 <attribute name="additionsActive" type="boolean" readonly="yes">
7785 <desc>
7786 Flag whether the Guest Additions are installed and active
7787 in which case their version will be returned by the
7788 <link to="#additionsVersion"/> property.
7789 </desc>
7790 </attribute>
7791
7792 <attribute name="additionsVersion" type="wstring" readonly="yes">
7793 <desc>
7794 Version of the Guest Additions (3 decimal numbers separated
7795 by dots) or empty when the Additions are not installed. The
7796 Additions may also report a version but yet not be active as
7797 the version might be refused by VirtualBox (incompatible) or
7798 other failures occurred.
7799 </desc>
7800 </attribute>
7801
7802 <attribute name="supportsSeamless" type="boolean" readonly="yes">
7803 <desc>
7804 Flag whether seamless guest display rendering (seamless desktop
7805 integration) is supported.
7806 </desc>
7807 </attribute>
7808
7809 <attribute name="supportsGraphics" type="boolean" readonly="yes">
7810 <desc>
7811 Flag whether the guest is in graphics mode. If it is not, then
7812 seamless rendering will not work, resize hints are not immediately
7813 acted on and guest display resizes are probably not initiated by
7814 the guest additions.
7815 </desc>
7816 </attribute>
7817
7818 <attribute name="memoryBalloonSize" type="unsigned long">
7819 <desc>Guest system memory balloon size in megabytes (transient property).</desc>
7820 </attribute>
7821
7822 <attribute name="pageFusionEnabled" type="boolean">
7823 <desc>Flag whether page fusion is enabled or not.</desc>
7824 </attribute>
7825
7826 <attribute name="statisticsUpdateInterval" type="unsigned long">
7827 <desc>Interval to update guest statistics in seconds.</desc>
7828 </attribute>
7829
7830 <method name="internalGetStatistics">
7831 <desc>
7832 Internal method; do not use as it might change at any time
7833 </desc>
7834 <param name="cpuUser" type="unsigned long" dir="out">
7835 <desc>Percentage of processor time spent in user mode as seen by the guest</desc>
7836 </param>
7837 <param name="cpuKernel" type="unsigned long" dir="out">
7838 <desc>Percentage of processor time spent in kernel mode as seen by the guest</desc>
7839 </param>
7840 <param name="cpuIdle" type="unsigned long" dir="out">
7841 <desc>Percentage of processor time spent idling as seen by the guest</desc>
7842 </param>
7843 <param name="memTotal" type="unsigned long" dir="out">
7844 <desc>Total amount of physical guest RAM</desc>
7845 </param>
7846 <param name="memFree" type="unsigned long" dir="out">
7847 <desc>Free amount of physical guest RAM</desc>
7848 </param>
7849 <param name="memBalloon" type="unsigned long" dir="out">
7850 <desc>Amount of ballooned physical guest RAM</desc>
7851 </param>
7852 <param name="memShared" type="unsigned long" dir="out">
7853 <desc>Amount of shared physical guest RAM</desc>
7854 </param>
7855 <param name="memCache" type="unsigned long" dir="out">
7856 <desc>Total amount of guest (disk) cache memory</desc>
7857 </param>
7858 <param name="pagedTotal" type="unsigned long" dir="out">
7859 <desc>Total amount of space in the page file</desc>
7860 </param>
7861 <param name="memAllocTotal" type="unsigned long" dir="out">
7862 <desc>Total amount of memory allocated by the hypervisor</desc>
7863 </param>
7864 <param name="memFreeTotal" type="unsigned long" dir="out">
7865 <desc>Total amount of free memory available in the hypervisor</desc>
7866 </param>
7867 <param name="memBalloonTotal" type="unsigned long" dir="out">
7868 <desc>Total amount of memory ballooned by the hypervisor</desc>
7869 </param>
7870 <param name="memSharedTotal" type="unsigned long" dir="out">
7871 <desc>Total amount of shared memory in the hypervisor</desc>
7872 </param>
7873 </method>
7874
7875 <method name="setCredentials">
7876 <desc>
7877 Store login credentials that can be queried by guest operating
7878 systems with Additions installed. The credentials are transient
7879 to the session and the guest may also choose to erase them. Note
7880 that the caller cannot determine whether the guest operating system
7881 has queried or made use of the credentials.
7882
7883 <result name="VBOX_E_VM_ERROR">
7884 VMM device is not available.
7885 </result>
7886
7887 </desc>
7888 <param name="userName" type="wstring" dir="in">
7889 <desc>User name string, can be empty</desc>
7890 </param>
7891 <param name="password" type="wstring" dir="in">
7892 <desc>Password string, can be empty</desc>
7893 </param>
7894 <param name="domain" type="wstring" dir="in">
7895 <desc>Domain name (guest logon scheme specific), can be empty</desc>
7896 </param>
7897 <param name="allowInteractiveLogon" type="boolean" dir="in">
7898 <desc>
7899 Flag whether the guest should alternatively allow the user to
7900 interactively specify different credentials. This flag might
7901 not be supported by all versions of the Additions.
7902 </desc>
7903 </param>
7904 </method>
7905
7906 <method name="executeProcess">
7907 <desc>
7908 Executes an existing program inside the guest VM.
7909
7910 <result name="VBOX_E_IPRT_ERROR">
7911 Could not execute process.
7912 </result>
7913
7914 </desc>
7915 <param name="execName" type="wstring" dir="in">
7916 <desc>
7917 Full path name of the command to execute on the guest; the
7918 commands has to exists in the guest VM in order to be executed.
7919 </desc>
7920 </param>
7921 <param name="flags" type="unsigned long" dir="in">
7922 <desc>
7923 Execution flags - currently not supported and therefore
7924 has to be set to 0.
7925 </desc>
7926 </param>
7927 <param name="arguments" type="wstring" safearray="yes" dir="in">
7928 <desc>
7929 Array of arguments passed to the execution command.
7930 </desc>
7931 </param>
7932 <param name="environment" type="wstring" safearray="yes" dir="in">
7933 <desc>
7934 Environment variables that can be set while the command is being
7935 executed, in form of "NAME=VALUE"; one pair per entry. To unset a
7936 variable just set its name ("NAME") without a value.
7937 </desc>
7938 </param>
7939 <param name="userName" type="wstring" dir="in">
7940 <desc>
7941 User name under which the command will be executed; has to exist
7942 and have the appropriate rights to execute programs in the VM.
7943 </desc>
7944 </param>
7945 <param name="password" type="wstring" dir="in">
7946 <desc>
7947 Password of the user account specified.
7948 </desc>
7949 </param>
7950 <param name="timeoutMS" type="unsigned long" dir="in">
7951 <desc>
7952 The maximum timeout value (in msec) to wait for finished program
7953 execution. Pass 0 for an infinite timeout.
7954 </desc>
7955 </param>
7956 <param name="pid" type="unsigned long" dir="out">
7957 <desc>
7958 The PID (process ID) of the started command for later reference.
7959 </desc>
7960 </param>
7961 <param name="progress" type="IProgress" dir="return">
7962 <desc>Progress object to track the operation completion.</desc>
7963 </param>
7964 </method>
7965
7966 <method name="getProcessOutput">
7967 <desc>
7968 Retrieves output of a formerly started process.
7969
7970 <result name="VBOX_E_IPRT_ERROR">
7971 Could not retrieve output.
7972 </result>
7973
7974 </desc>
7975 <param name="pid" type="unsigned long" dir="in">
7976 <desc>
7977 Process id returned by earlier executeProcess() call.
7978 </desc>
7979 </param>
7980 <param name="flags" type="unsigned long" dir="in">
7981 <desc>
7982 Flags describing which output to retrieve.
7983 </desc>
7984 </param>
7985 <param name="timeoutMS" type="unsigned long" dir="in">
7986 <desc>
7987 The maximum timeout value (in msec) to wait for output
7988 data. Pass 0 for an infinite timeout.
7989 </desc>
7990 </param>
7991 <param name="size" type="unsigned long long" dir="in">
7992 <desc>
7993 Size in bytes to read in the buffer.
7994 </desc>
7995 </param>
7996 <param name="data" type="octet" dir="return" safearray="yes">
7997 <desc>
7998 Buffer for retrieving the actual output. A data size of 0 means end of file
7999 if the requested size was not 0. This is the unprocessed
8000 output data, i.e. the line ending style depends on the platform of
8001 the system the server is running on.
8002 </desc>
8003 </param>
8004 </method>
8005
8006 <method name="getProcessStatus">
8007 <desc>
8008 Retrieves status, exit code and the exit reason of a formerly started process.
8009
8010 <result name="VBOX_E_IPRT_ERROR">
8011 Process with specified PID was not found.
8012 </result>
8013
8014 </desc>
8015 <param name="pid" type="unsigned long" dir="in">
8016 <desc>
8017 Process id returned by earlier executeProcess() call.
8018 </desc>
8019 </param>
8020 <param name="exitcode" type="unsigned long" dir="out">
8021 <desc>
8022 The exit code (if available).
8023 </desc>
8024 </param>
8025 <param name="flags" type="unsigned long" dir="out">
8026 <desc>
8027 Additional flags of process status (not used at the moment).
8028 </desc>
8029 </param>
8030 <param name="reason" type="unsigned long" dir="return">
8031 <desc>
8032 The current process status.
8033 </desc>
8034 </param>
8035 </method>
8036
8037 </interface>
8038
8039
8040 <!--
8041 // IProgress
8042 /////////////////////////////////////////////////////////////////////////
8043 -->
8044
8045 <interface
8046 name="IProgress" extends="$unknown"
8047 uuid="856aa038-853f-42e2-acf7-6e7b02dbe294"
8048 wsmap="managed"
8049 >
8050 <desc>
8051 The IProgress interface is used to track and control
8052 asynchronous tasks within VirtualBox.
8053
8054 An instance of this is returned every time VirtualBox starts
8055 an asynchronous task (in other words, a separate thread) which
8056 continues to run after a method call returns. For example,
8057 <link to="IConsole::saveState" />, which saves the state of
8058 a running virtual machine, can take a long time to complete.
8059 To be able to display a progress bar, a user interface such as
8060 the VirtualBox graphical user interface can use the IProgress
8061 object returned by that method.
8062
8063 Note that IProgress is a "read-only" interface in the sense
8064 that only the VirtualBox internals behind the Main API can
8065 create and manipulate progress objects, whereas client code
8066 can only use the IProgress object to monitor a task's
8067 progress and, if <link to="#cancelable" /> is @c true,
8068 cancel the task by calling <link to="#cancel" />.
8069
8070 A task represented by IProgress consists of either one or
8071 several sub-operations that run sequentially, one by one (see
8072 <link to="#operation" /> and <link to="#operationCount" />).
8073 Every operation is identified by a number (starting from 0)
8074 and has a separate description.
8075
8076 You can find the individual percentage of completion of the current
8077 operation in <link to="#operationPercent" /> and the
8078 percentage of completion of the task as a whole
8079 in <link to="#percent" />.
8080
8081 Similarly, you can wait for the completion of a particular
8082 operation via <link to="#waitForOperationCompletion" /> or
8083 for the completion of the whole task via
8084 <link to="#waitForCompletion" />.
8085 </desc>
8086
8087 <attribute name="id" type="uuid" mod="string" readonly="yes">
8088 <desc>ID of the task.</desc>
8089 </attribute>
8090
8091 <attribute name="description" type="wstring" readonly="yes">
8092 <desc>Description of the task.</desc>
8093 </attribute>
8094
8095 <attribute name="initiator" type="$unknown" readonly="yes">
8096 <desc>Initiator of the task.</desc>
8097 </attribute>
8098
8099 <attribute name="cancelable" type="boolean" readonly="yes">
8100 <desc>Whether the task can be interrupted.</desc>
8101 </attribute>
8102
8103 <attribute name="percent" type="unsigned long" readonly="yes">
8104 <desc>
8105 Current progress value of the task as a whole, in percent.
8106 This value depends on how many operations are already complete.
8107 Returns 100 if <link to="#completed" /> is @c true.
8108 </desc>
8109 </attribute>
8110
8111 <attribute name="timeRemaining" type="long" readonly="yes">
8112 <desc>
8113 Estimated remaining time until the task completes, in
8114 seconds. Returns 0 once the task has completed; returns -1
8115 if the remaining time cannot be computed, in particular if
8116 the current progress is 0.
8117
8118 Even if a value is returned, the estimate will be unreliable
8119 for low progress values. It will become more reliable as the
8120 task progresses; it is not recommended to display an ETA
8121 before at least 20% of a task have completed.
8122 </desc>
8123 </attribute>
8124
8125 <attribute name="completed" type="boolean" readonly="yes">
8126 <desc>Whether the task has been completed.</desc>
8127 </attribute>
8128
8129 <attribute name="canceled" type="boolean" readonly="yes">
8130 <desc>Whether the task has been canceled.</desc>
8131 </attribute>
8132
8133 <attribute name="resultCode" type="long" readonly="yes">
8134 <desc>
8135 Result code of the progress task.
8136 Valid only if <link to="#completed"/> is @c true.
8137 </desc>
8138 </attribute>
8139
8140 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
8141 <desc>
8142 Extended information about the unsuccessful result of the
8143 progress operation. May be @c null if no extended information
8144 is available.
8145 Valid only if <link to="#completed"/> is @c true and
8146 <link to="#resultCode"/> indicates a failure.
8147 </desc>
8148 </attribute>
8149
8150 <attribute name="operationCount" type="unsigned long" readonly="yes">
8151 <desc>
8152 Number of sub-operations this task is divided into.
8153 Every task consists of at least one suboperation.
8154 </desc>
8155 </attribute>
8156
8157 <attribute name="operation" type="unsigned long" readonly="yes">
8158 <desc>Number of the sub-operation being currently executed.</desc>
8159 </attribute>
8160
8161 <attribute name="operationDescription" type="wstring" readonly="yes">
8162 <desc>
8163 Description of the sub-operation being currently executed.
8164 </desc>
8165 </attribute>
8166
8167 <attribute name="operationPercent" type="unsigned long" readonly="yes">
8168 <desc>Progress value of the current sub-operation only, in percent.</desc>
8169 </attribute>
8170
8171 <attribute name="timeout" type="unsigned long">
8172 <desc>
8173 When non-zero, this specifies the number of milliseconds after which
8174 the operation will automatically be canceled. This can only be set on
8175 cancelable objects.
8176 </desc>
8177 </attribute>
8178
8179 <method name="setCurrentOperationProgress">
8180 <desc>Internal method, not to be called externally.</desc>
8181 <param name="percent" type="unsigned long" dir="in" />
8182 </method>
8183 <method name="setNextOperation">
8184 <desc>Internal method, not to be called externally.</desc>
8185 <param name="nextOperationDescription" type="wstring" dir="in" />
8186 <param name="nextOperationsWeight" type="unsigned long" dir="in" />
8187 </method>
8188
8189 <method name="waitForCompletion">
8190 <desc>
8191 Waits until the task is done (including all sub-operations)
8192 with a given timeout in milliseconds; specify -1 for an indefinite wait.
8193
8194 <result name="VBOX_E_IPRT_ERROR">
8195 Failed to wait for task completion.
8196 </result>
8197 </desc>
8198
8199 <param name="timeout" type="long" dir="in">
8200 <desc>
8201 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8202 </desc>
8203 </param>
8204 </method>
8205
8206 <method name="waitForOperationCompletion">
8207 <desc>
8208 Waits until the given operation is done with a given timeout in
8209 milliseconds; specify -1 for an indefinite wait.
8210
8211 <result name="VBOX_E_IPRT_ERROR">
8212 Failed to wait for operation completion.
8213 </result>
8214
8215 </desc>
8216 <param name="operation" type="unsigned long" dir="in">
8217 <desc>
8218 Number of the operation to wait for.
8219 Must be less than <link to="#operationCount"/>.
8220 </desc>
8221 </param>
8222 <param name="timeout" type="long" dir="in">
8223 <desc>
8224 Maximum time in milliseconds to wait or -1 to wait indefinitely.
8225 </desc>
8226 </param>
8227 </method>
8228
8229 <method name="cancel">
8230 <desc>
8231 Cancels the task.
8232 <note>
8233 If <link to="#cancelable"/> is @c false, then this method will fail.
8234 </note>
8235
8236 <result name="VBOX_E_INVALID_OBJECT_STATE">
8237 Operation cannot be canceled.
8238 </result>
8239
8240 </desc>
8241 </method>
8242
8243 </interface>
8244
8245 <!--
8246 // ISnapshot
8247 /////////////////////////////////////////////////////////////////////////
8248 -->
8249
8250 <interface
8251 name="ISnapshot" extends="$unknown"
8252 uuid="1a2d0551-58a4-4107-857e-ef414fc42ffc"
8253 wsmap="managed"
8254 >
8255 <desc>
8256 The ISnapshot interface represents a snapshot of the virtual
8257 machine.
8258
8259 Together with the differencing media that are created
8260 when a snapshot is taken, a machine can be brought back to
8261 the exact state it was in when the snapshot was taken.
8262
8263 The ISnapshot interface has no methods, only attributes; snapshots
8264 are controlled through methods of the <link to="IConsole" /> interface
8265 which also manage the media associated with the snapshot.
8266 The following operations exist:
8267
8268 <ul>
8269 <li><link to="IConsole::takeSnapshot"/>: creates a new snapshot
8270 by creating new, empty differencing images for the machine's
8271 media and saving the VM settings and (if the VM is running)
8272 the current VM state in the snapshot.
8273
8274 The differencing images will then receive all data written to
8275 the machine's media, while their parent (base) images
8276 remain unmodified after the snapshot has been taken (see
8277 <link to="IMedium" /> for details about differencing images).
8278 This simplifies restoring a machine to the state of a snapshot:
8279 only the differencing images need to be deleted.
8280
8281 The current machine state is not changed by taking a snapshot.
8282 If the machine is running, it will resume execution after the
8283 snapshot has been taken.
8284 </li>
8285
8286 <li><link to="IConsole::restoreSnapshot"/>: this goes back to
8287 a previous snapshot. This resets the machine's state to that of
8288 the previous snapshot by deleting the differencing image of each
8289 of the machine's media and setting the machine's settings
8290 and state to the state that was saved in the snapshot (if any).
8291
8292 This destroys the machine's current state.
8293 </li>
8294
8295 <li><link to="IConsole::deleteSnapshot"/>: deletes a snapshot
8296 without affecting the current machine state.
8297
8298 This does not change the machine, but instead frees the resources
8299 allocated when the snapshot was taken: the settings and machine state
8300 is deleted (if any), and the snapshot's differencing image for each
8301 of the machine's media gets merged with its parent image.
8302
8303 Neither the current machine state nor other snapshots are affected
8304 by this operation, except that parent media will be modified
8305 to contain the disk data associated with the snapshot being deleted.
8306 </li>
8307 </ul>
8308
8309 Each snapshot contains the settings of the virtual machine (hardware
8310 configuration etc.). In addition, if the machine was running when the
8311 snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>),
8312 the current VM state is saved in the snapshot (similarly to what happens
8313 when a VM's state is saved). The snapshot is then said to
8314 be <i>online</i> because when restoring it, the VM will be running.
8315
8316 If the machine is saved (<link to="MachineState_Saved"/>), the snapshot
8317 receives a copy of the execution state file (<link to="IMachine::stateFilePath"/>).
8318
8319 Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/>
8320 or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>;
8321 it then contains a so-called "zero execution state", representing a
8322 machine that is powered off.
8323
8324 <h3>Snapshot branches and the "current" snapshot</h3>
8325
8326 Snapshots can be chained, whereby every next snapshot is based on the
8327 previous one. This chaining is related to medium branching
8328 (see the <link to="IMedium"/> description) in that every time
8329 a new snapshot is created, a new differencing medium is implicitly
8330 created for all normal media attached to the machine.
8331
8332 Each virtual machine has a "current snapshot", identified by
8333 <link to="IMachine::currentSnapshot"/>. Presently, this is always set
8334 to the last snapshot in the chain. In a future version of VirtualBox,
8335 it will be possible to reset a machine's current state to that of an
8336 earlier snapshot without deleting the current state so that it will be
8337 possible to create alternative snapshot paths in a snapshot tree.
8338
8339 In the current implementation, multiple snapshot branches within one
8340 virtual machine are not allowed. Every machine has a single branch,
8341 and <link to="IConsole::takeSnapshot"/> operation adds a new
8342 snapshot to the top of that branch.
8343 </desc>
8344
8345 <attribute name="id" type="uuid" mod="string" readonly="yes">
8346 <desc>UUID of the snapshot.</desc>
8347 </attribute>
8348
8349 <attribute name="name" type="wstring">
8350 <desc>Short name of the snapshot.</desc>
8351 </attribute>
8352
8353 <attribute name="description" type="wstring">
8354 <desc>Optional description of the snapshot.</desc>
8355 </attribute>
8356
8357 <attribute name="timeStamp" type="long long" readonly="yes">
8358 <desc>
8359 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
8360 </desc>
8361 </attribute>
8362
8363 <attribute name="online" type="boolean" readonly="yes">
8364 <desc>
8365 @c true if this snapshot is an online snapshot and @c false otherwise.
8366
8367 When this attribute is @c true, the
8368 <link to="IMachine::stateFilePath"/> attribute of the
8369 <link to="#machine"/> object associated with this snapshot
8370 will point to the saved state file. Otherwise, it will be
8371 an empty string.
8372 </desc>
8373 </attribute>
8374
8375 <attribute name="machine" type="IMachine" readonly="yes">
8376 <desc>
8377 Virtual machine this snapshot is taken on. This object
8378 stores all settings the machine had when taking this snapshot.
8379 <note>
8380 The returned machine object is immutable, i.e. no
8381 any settings can be changed.
8382 </note>
8383 </desc>
8384 </attribute>
8385
8386 <attribute name="parent" type="ISnapshot" readonly="yes">
8387 <desc>
8388 Parent snapshot (a snapshot this one is based on), or
8389 @c null if the snapshot has no parent (i.e. is the first snapshot).
8390 </desc>
8391 </attribute>
8392
8393 <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes">
8394 <desc>
8395 Child snapshots (all snapshots having this one as a parent).
8396 </desc>
8397 </attribute>
8398
8399 </interface>
8400
8401
8402 <!--
8403 // IMedium
8404 /////////////////////////////////////////////////////////////////////////
8405 -->
8406
8407 <enum
8408 name="MediumState"
8409 uuid="ef41e980-e012-43cd-9dea-479d4ef14d13"
8410 >
8411 <desc>
8412 Virtual medium state.
8413 <see>IMedium</see>
8414 </desc>
8415
8416 <const name="NotCreated" value="0">
8417 <desc>
8418 Associated medium storage does not exist (either was not created yet or
8419 was deleted).
8420 </desc>
8421 </const>
8422 <const name="Created" value="1">
8423 <desc>
8424 Associated storage exists and accessible; this gets set if the
8425 accessibility check performed by <link to="IMedium::refreshState" />
8426 was successful.
8427 </desc>
8428 </const>
8429 <const name="LockedRead" value="2">
8430 <desc>
8431 Medium is locked for reading (see <link to="IMedium::lockRead"/>),
8432 no data modification is possible.
8433 </desc>
8434 </const>
8435 <const name="LockedWrite" value="3">
8436 <desc>
8437 Medium is locked for writing (see <link to="IMedium::lockWrite"/>),
8438 no concurrent data reading or modification is possible.
8439 </desc>
8440 </const>
8441 <const name="Inaccessible" value="4">
8442 <desc>
8443 Medium accessiblity check (see <link to="IMedium::refreshState" />) has
8444 not yet been performed, or else, associated medium storage is not
8445 accessible. In the first case, <link to="IMedium::lastAccessError"/>
8446 is empty, in the second case, it describes the error that occured.
8447 </desc>
8448 </const>
8449 <const name="Creating" value="5">
8450 <desc>
8451 Associated medium storage is being created.
8452 </desc>
8453 </const>
8454 <const name="Deleting" value="6">
8455 <desc>
8456 Associated medium storage is being deleted.
8457 </desc>
8458 </const>
8459 </enum>
8460
8461 <enum
8462 name="MediumType"
8463 uuid="46bf1fd4-ad86-4ded-8c49-28bd2d148e5a"
8464 >
8465 <desc>
8466 Virtual medium type.
8467 <see>IMedium</see>
8468 </desc>
8469
8470 <const name="Normal" value="0">
8471 <desc>
8472 Normal medium (attached directly or indirectly, preserved
8473 when taking snapshots).
8474 </desc>
8475 </const>
8476 <const name="Immutable" value="1">
8477 <desc>
8478 Immutable medium (attached indirectly, changes are wiped out
8479 the next time the virtual machine is started).
8480 </desc>
8481 </const>
8482 <const name="Writethrough" value="2">
8483 <desc>
8484 Write through medium (attached directly, ignored when
8485 taking snapshots).
8486 </desc>
8487 </const>
8488 <const name="Shareable" value="3">
8489 <desc>
8490 Allow using this medium concurrently by several machines.
8491 <note>This is a stub value. Not usable until this note is removed.</note>
8492 </desc>
8493 </const>
8494 </enum>
8495
8496 <enum
8497 name="MediumVariant"
8498 uuid="584ea502-143b-4ab0-ad14-d1028fdf0316"
8499 >
8500 <desc>
8501 Virtual medium image variant. More than one flag may be set.
8502 <see>IMedium</see>
8503 </desc>
8504
8505 <const name="Standard" value="0">
8506 <desc>
8507 No particular variant requested, results in using the backend default.
8508 </desc>
8509 </const>
8510 <const name="VmdkSplit2G" value="0x01">
8511 <desc>
8512 VMDK image split in chunks of less than 2GByte.
8513 </desc>
8514 </const>
8515 <const name="VmdkStreamOptimized" value="0x04">
8516 <desc>
8517 VMDK streamOptimized image. Special import/export format which is
8518 read-only/append-only.
8519 </desc>
8520 </const>
8521 <const name="VmdkESX" value="0x08">
8522 <desc>
8523 VMDK format variant used on ESX products.
8524 </desc>
8525 </const>
8526 <const name="Fixed" value="0x10000">
8527 <desc>
8528 Fixed image. Only allowed for base images.
8529 </desc>
8530 </const>
8531 <const name="Diff" value="0x20000">
8532 <desc>
8533 Fixed image. Only allowed for base images.
8534 </desc>
8535 </const>
8536 </enum>
8537
8538 <interface
8539 name="IMediumAttachment" extends="$unknown"
8540 uuid="e58eb3eb-8627-428b-bdf8-34487c848de5"
8541 wsmap="struct"
8542 >
8543 <desc>
8544 The IMediumAttachment interface represents the attachment
8545 of a storage medium to a virtual machine. Each machine contains
8546 an array of its medium attachments in <link to="IMachine::mediumAttachments"/>.
8547
8548 Each medium attachment specifies a storage controller as well as a port
8549 and device number. Fixed media (hard disks) will always also specify
8550 an instance of IMedium in <link to="#medium" />, referring to the hard disk
8551 medium. For removeable media, the IMedia instance is optional; it can be
8552 @c null if no media is mounted (see <link to="IMachine::mountMedium" />).
8553 </desc>
8554
8555 <attribute name="medium" type="IMedium" readonly="yes">
8556 <desc>Medium object associated with this attachment; it
8557 can be @c null for removable devices.</desc>
8558 </attribute>
8559
8560 <attribute name="controller" type="wstring" readonly="yes">
8561 <desc>Name of the storage controller of this attachment; this
8562 refers to one of the controllers in <link to="IMachine::storageControllers" />
8563 by name.</desc>
8564 </attribute>
8565
8566 <attribute name="port" type="long" readonly="yes">
8567 <desc>Port number of this attachment.
8568 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
8569 </desc>
8570 </attribute>
8571
8572 <attribute name="device" type="long" readonly="yes">
8573 <desc>Device slot number of this attachment.
8574 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
8575 </desc>
8576 </attribute>
8577
8578 <attribute name="type" type="DeviceType" readonly="yes">
8579 <desc>Device type of this attachment.</desc>
8580 </attribute>
8581
8582 <attribute name="passthrough" type="boolean" readonly="yes">
8583 <desc>Pass I/O requests through to a device on the host.</desc>
8584 </attribute>
8585
8586 </interface>
8587
8588 <interface
8589 name="IMedium" extends="$unknown"
8590 uuid="1d578f43-5ef1-4415-b556-7592d3ccdc8f"
8591 wsmap="managed"
8592 >
8593 <desc>
8594 The IMedium interface represents virtual storage for a machine's
8595 hard disks, CD/DVD or floppy drives. It will typically represent
8596 a disk image on the host, for example a VDI or VMDK file representing
8597 a virtual hard disk, or an ISO or RAW file representing virtual
8598 removable media, but can also point to a network location (e.g.
8599 for iSCSI targets).
8600
8601 Instances of IMedium are connected to virtual machines by way of
8602 medium attachments (see <link to="IMediumAttachment" />), which link
8603 the storage medium to a particular device slot of a storage controller
8604 of the virtual machine.
8605 In the VirtualBox API, virtual storage is therefore always represented
8606 by the following chain of object links:
8607
8608 <ul>
8609 <li><link to="IMachine::storageControllers"/> contains an array of
8610 storage controllers (IDE, SATA, SCSI, SAS or a floppy controller;
8611 these are instances of <link to="IStorageController"/>).</li>
8612 <li><link to="IMachine::mediumAttachments"/> contains an array of
8613 medium attachments (instances of <link to="IMediumAttachment"/>),
8614 each containing a storage controller from the above array, a
8615 port/device specification, and an instance of IMedium representing
8616 the medium storage (image file).
8617
8618 For removable media, the storage medium is optional; a medium
8619 attachment with no medium represents a CD/DVD or floppy drive
8620 with no medium inserted. By contrast, hard disk attachments
8621 will always have an IMedium object attached.</li>
8622 <li>Each IMedium in turn points to a storage unit (such as a file
8623 on the host computer or a network resource) that holds actual
8624 data. This location is represented by the <link to="#location"/>
8625 attribute.</li>
8626 </ul>
8627
8628 Existing media are opened using the following methods, depending on the
8629 media type:
8630 <ul>
8631 <li><link to="IVirtualBox::openHardDisk"/></li>
8632 <li><link to="IVirtualBox::openDVDImage"/></li>
8633 <li><link to="IVirtualBox::openFloppyImage"/></li>
8634 </ul>
8635
8636 New hard disk media can be created with the VirtualBox API using the
8637 <link to="IVirtualBox::createHardDisk"/> method.
8638
8639 CD/DVD and floppy images (ISO and RAW files) are usually created outside
8640 VirtualBox, e.g. by storing a copy of the real medium of the corresponding
8641 type in a regular file.
8642
8643 Only for CD/DVDs and floppies, an IMedium instance can also represent a host
8644 drive; in that case the <link to="#id" /> attribute contains the UUID of
8645 one of the drives in <link to="IHost::DVDDrives" /> or <link to="IHost::floppyDrives" />.
8646
8647 <h3>Known media</h3>
8648
8649 When an existing medium is opened for the first time, it is automatically
8650 remembered by the given VirtualBox installation or, in other words, becomes
8651 a <i>known medium</i>. Known media are stored in the media
8652 registry transparently maintained by VirtualBox and stored in settings
8653 files so that this registry is preserved when VirtualBox is not running.
8654
8655 Newly created virtual media are remembered only when the associated
8656 storage unit is actually created.
8657
8658 All known media can be enumerated using
8659 <link to="IVirtualBox::hardDisks"/>,
8660 <link to="IVirtualBox::DVDImages"/> and
8661 <link to="IVirtualBox::floppyImages"/> attributes. Individual media can be
8662 quickly found by UUID using <link to="IVirtualBox::getHardDisk"/>
8663 and similar methods or by location using
8664 <link to="IVirtualBox::findHardDisk"/> and similar methods.
8665
8666 Only known media can be attached to virtual machines.
8667
8668 Removing known media from the media registry is performed when the given
8669 medium is closed using the <link to="#close"/> method or when its
8670 associated storage unit is deleted.
8671
8672 <h3>Accessibility checks</h3>
8673
8674 VirtualBox defers media accessibility checks until the <link to="#refreshState" />
8675 method is called explicitly on a medium. This is done to make the VirtualBox object
8676 ready for serving requests as fast as possible and let the end-user
8677 application decide if it needs to check media accessibility right away or not.
8678
8679 As a result, when VirtualBox starts up (e.g. the VirtualBox
8680 object gets created for the first time), all known media are in the
8681 "Inaccessible" state, but the value of the <link to="#lastAccessError"/>
8682 attribute is an empty string because no actual accessibility check has
8683 been made yet.
8684
8685 After calling <link to="#refreshState" />, a medium is considered
8686 <i>accessible</i> if its storage unit can be read. In that case, the
8687 <link to="#state"/> attribute has a value of "Created". If the storage
8688 unit cannot be read (for example, because it is located on a disconnected
8689 network resource, or was accidentally deleted outside VirtualBox),
8690 the medium is considered <i>inaccessible</i>, which is indicated by the
8691 "Inaccessible" state. The exact reason why the medium is inaccessible can be
8692 obtained by reading the <link to="#lastAccessError"/> attribute.
8693
8694 <h3>Medium types</h3>
8695
8696 There are three types of medium behavior (see <link to="MediumType" />):
8697 "normal", "immutable" and "writethrough", represented by the
8698 <link to="#type"/> attribute. The type of the medium defines how the
8699 medium is attached to a virtual machine and what happens when a
8700 <link to="ISnapshot">snapshot</link> of the virtual machine with the
8701 attached medium is taken. At the moment DVD and floppy media are always
8702 of type "writethrough".
8703
8704 All media can be also divided in two groups: <i>base</i> media and
8705 <i>differencing</i> media. A base medium contains all sectors of the
8706 medium data in its own storage and therefore can be used independently.
8707 In contrast, a differencing mediun is a "delta" to some other medium and
8708 contains only those sectors which differ from that other medium, which is
8709 then called a <i>parent</i>. The differencing medium is said to be
8710 <i>linked to</i> that parent. The parent may be itself a differencing
8711 medium, thus forming a chain of linked media. The last element in that
8712 chain must always be a base medium. Note that several differencing
8713 media may be linked to the same parent medium.
8714
8715 Differencing media can be distinguished from base media by querying the
8716 <link to="#parent"/> attribute: base media do not have parents they would
8717 depend on, so the value of this attribute is always @c null for them.
8718 Using this attribute, it is possible to walk up the medium tree (from the
8719 child medium to its parent). It is also possible to walk down the tree
8720 using the <link to="#children"/> attribute.
8721
8722 Note that the type of all differencing media is "Normal"; all other
8723 values are meaningless for them. Base media may be of any type.
8724
8725 <h3>Creating hard disks</h3>
8726
8727 New base hard disks are created using
8728 <link to="IVirtualBox::createHardDisk"/>. Existing hard disks are
8729 opened using <link to="IVirtualBox::openHardDisk"/>. Differencing hard
8730 disks are usually implicitly created by VirtualBox when needed but may
8731 also be created explicitly using <link to="#createDiffStorage"/>.
8732
8733 After the hard disk is successfully created (including the storage unit)
8734 or opened, it becomes a known hard disk (remembered in the internal media
8735 registry). Known hard disks can be attached to a virtual machine, accessed
8736 through <link to="IVirtualBox::getHardDisk"/> and
8737 <link to="IVirtualBox::findHardDisk"/> methods or enumerated using the
8738 <link to="IVirtualBox::hardDisks"/> array (only for base hard disks).
8739
8740 The following methods, besides <link to="IMedium::close"/>,
8741 automatically remove the hard disk from the media registry:
8742 <ul>
8743 <li><link to="#deleteStorage"/></li>
8744 <li><link to="#mergeTo"/></li>
8745 </ul>
8746
8747 If the storage unit of the hard disk is a regular file in the host's
8748 file system then the rules stated in the description of the
8749 <link to="IMedium::location"/> attribute apply when setting its value. In
8750 addition, a plain file name without any path may be given, in which case
8751 the <link to="ISystemProperties::defaultHardDiskFolder"> default hard disk
8752 folder</link> will be prepended to it.
8753
8754 <h4>Automatic composition of the file name part</h4>
8755
8756 Another extension to the <link to="IMedium::location"/> attribute is that
8757 there is a possibility to cause VirtualBox to compose a unique value for
8758 the file name part of the location using the UUID of the hard disk. This
8759 applies only to hard disks in <link to="MediumState_NotCreated"/> state,
8760 e.g. before the storage unit is created, and works as follows. You set the
8761 value of the <link to="IMedium::location"/> attribute to a location
8762 specification which only contains the path specification but not the file
8763 name part and ends with either a forward slash or a backslash character.
8764 In response, VirtualBox will generate a new UUID for the hard disk and
8765 compose the file name using the following pattern:
8766 <pre>
8767 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
8768 </pre>
8769 where <tt>&lt;path&gt;</tt> is the supplied path specification,
8770 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
8771 is the default extension for the storage format of this hard disk. After
8772 that, you may call any of the methods that create a new hard disk storage
8773 unit and they will use the generated UUID and file name.
8774
8775 <h3>Attaching Hard Disks</h3>
8776
8777 Hard disks are attached to virtual machines using the
8778 <link to="IMachine::attachDevice"/> method and detached using the
8779 <link to="IMachine::detachDevice"/> method. Depending on their
8780 <link to="#type"/>, hard disks are attached either
8781 <i>directly</i> or <i>indirectly</i>.
8782
8783 When a hard disk is being attached directly, it is associated with the
8784 virtual machine and used for hard disk operations when the machine is
8785 running. When a hard disk is being attached indirectly, a new differencing
8786 hard disk linked to it is implicitly created and this differencing hard
8787 disk is associated with the machine and used for hard disk operations.
8788 This also means that if <link to="IMachine::attachDevice"/> performs
8789 a direct attachment then the same hard disk will be returned in response
8790 to the subsequent <link to="IMachine::getMedium"/> call; however if
8791 an indirect attachment is performed then
8792 <link to="IMachine::getMedium"/> will return the implicitly created
8793 differencing hard disk, not the original one passed to <link
8794 to="IMachine::attachDevice"/>. In detail:
8795
8796 <ul>
8797 <li><b>Normal base</b> hard disks that do not have children (i.e.
8798 differencing hard disks linked to them) and that are not already
8799 attached to virtual machines in snapshots are attached <b>directly</b>.
8800 Otherwise, they are attached <b>indirectly</b> because having
8801 dependent children or being part of the snapshot makes it impossible
8802 to modify hard disk contents without breaking the integrity of the
8803 dependent party. The <link to="#readOnly"/> attribute allows to
8804 quickly determine the kind of the attachment for the given hard
8805 disk. Note that if a normal base hard disk is to be indirectly
8806 attached to a virtual machine with snapshots then a special
8807 procedure called <i>smart attachment</i> is performed (see below).</li>
8808 <li><b>Normal differencing</b> hard disks are like normal base hard disks:
8809 they are attached <b>directly</b> if they do not have children and are
8810 not attached to virtual machines in snapshots, and <b>indirectly</b>
8811 otherwise. Note that the smart attachment procedure is never performed
8812 for differencing hard disks.</li>
8813 <li><b>Immutable</b> hard disks are always attached <b>indirectly</b> because
8814 they are designed to be non-writable. If an immutable hard disk is
8815 attached to a virtual machine with snapshots then a special
8816 procedure called smart attachment is performed (see below).</li>
8817 <li><b>Writethrough</b> hard disks are always attached <b>directly</b>,
8818 also as designed. This also means that writethrough hard disks cannot
8819 have other hard disks linked to them at all.</li>
8820 </ul>
8821
8822 Note that the same hard disk, regardless of its type, may be attached to
8823 more than one virtual machine at a time. In this case, the machine that is
8824 started first gains exclusive access to the hard disk and attempts to
8825 start other machines having this hard disk attached will fail until the
8826 first machine is powered down.
8827
8828 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
8829 that the given hard disk remains associated with the given machine after a
8830 successful <link to="IMachine::detachDevice"/> call until
8831 <link to="IMachine::saveSettings"/> is called to save all changes to
8832 machine settings to disk. This deferring is necessary to guarantee that
8833 the hard disk configuration may be restored at any time by a call to
8834 <link to="IMachine::discardSettings"/> before the settings
8835 are saved (committed).
8836
8837 Note that if <link to="IMachine::discardSettings"/> is called after
8838 indirectly attaching some hard disks to the machine but before a call to
8839 <link to="IMachine::saveSettings"/> is made, it will implicitly delete
8840 all differencing hard disks implicitly created by
8841 <link to="IMachine::attachDevice"/> for these indirect attachments.
8842 Such implicitly created hard disks will also be immediately deleted when
8843 detached explicitly using the <link to="IMachine::detachDevice"/>
8844 call if it is made before <link to="IMachine::saveSettings"/>. This
8845 implicit deletion is safe because newly created differencing hard
8846 disks do not contain any user data.
8847
8848 However, keep in mind that detaching differencing hard disks that were
8849 implicitly created by <link to="IMachine::attachDevice"/>
8850 before the last <link to="IMachine::saveSettings"/> call will
8851 <b>not</b> implicitly delete them as they may already contain some data
8852 (for example, as a result of virtual machine execution). If these hard
8853 disks are no more necessary, the caller can always delete them explicitly
8854 using <link to="#deleteStorage"/> after they are actually de-associated
8855 from this machine by the <link to="IMachine::saveSettings"/> call.
8856
8857 <h3>Smart Attachment</h3>
8858
8859 When normal base or immutable hard disks are indirectly attached to a
8860 virtual machine then some additional steps are performed to make sure the
8861 virtual machine will have the most recent "view" of the hard disk being
8862 attached. These steps include walking through the machine's snapshots
8863 starting from the current one and going through ancestors up to the first
8864 snapshot. Hard disks attached to the virtual machine in all
8865 of the encountered snapshots are checked whether they are descendants of
8866 the given normal base or immutable hard disk. The first found child (which
8867 is the differencing hard disk) will be used instead of the normal base or
8868 immutable hard disk as a parent for creating a new differencing hard disk
8869 that will be actually attached to the machine. And only if no descendants
8870 are found or if the virtual machine does not have any snapshots then the
8871 normal base or immutable hard disk will be used itself as a parent for
8872 this differencing hard disk.
8873
8874 It is easier to explain what smart attachment does using the
8875 following example:
8876 <pre>
8877BEFORE attaching B.vdi: AFTER attaching B.vdi:
8878
8879Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
8880 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
8881 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
8882 Snapshot 4 (none) Snapshot 4 (none)
8883 CurState (none) CurState (D3->D2.vdi)
8884
8885 NOT
8886 ...
8887 CurState (D3->B.vdi)
8888 </pre>
8889 The first column is the virtual machine configuration before the base hard
8890 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
8891 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
8892 mean that the hard disk that is actually attached to the machine is a
8893 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
8894 another hard disk, <tt>B.vdi</tt>.
8895
8896 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
8897 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
8898 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
8899 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
8900 it cannot be attached directly and needs an indirect attachment (i.e.
8901 implicit creation of a new differencing hard disk). Due to the smart
8902 attachment procedure, the new differencing hard disk
8903 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
8904 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
8905 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
8906 machine.
8907
8908 Note that if there is more than one descendant hard disk of the given base
8909 hard disk found in a snapshot, and there is an exact device, channel and
8910 bus match, then this exact match will be used. Otherwise, the youngest
8911 descendant will be picked up.
8912
8913 There is one more important aspect of the smart attachment procedure which
8914 is not related to snapshots at all. Before walking through the snapshots
8915 as described above, the backup copy of the current list of hard disk
8916 attachment is searched for descendants. This backup copy is created when
8917 the hard disk configuration is changed for the first time after the last
8918 <link to="IMachine::saveSettings"/> call and used by
8919 <link to="IMachine::discardSettings"/> to undo the recent hard disk
8920 changes. When such a descendant is found in this backup copy, it will be
8921 simply re-attached back, without creating a new differencing hard disk for
8922 it. This optimization is necessary to make it possible to re-attach the
8923 base or immutable hard disk to a different bus, channel or device slot
8924 without losing the contents of the differencing hard disk actually
8925 attached to the machine in place of it.
8926 </desc>
8927
8928 <attribute name="id" type="uuid" mod="string" readonly="yes">
8929 <desc>
8930 UUID of the medium. For a newly created medium, this value is a randomly
8931 generated UUID.
8932
8933 <note>
8934 For media in one of MediumState_NotCreated, MediumState_Creating or
8935 MediumState_Deleting states, the value of this property is undefined
8936 and will most likely be an empty UUID.
8937 </note>
8938 </desc>
8939 </attribute>
8940
8941 <attribute name="description" type="wstring">
8942 <desc>
8943 Optional description of the medium. For a newly created medium the value
8944 of this attribute is an empty string.
8945
8946 Medium types that don't support this attribute will return E_NOTIMPL in
8947 attempt to get or set this attribute's value.
8948
8949 <note>
8950 For some storage types, reading this attribute may return an outdated
8951 (last known) value when <link to="#state"/> is <link
8952 to="MediumState_Inaccessible"/> or <link
8953 to="MediumState_LockedWrite"/> because the value of this attribute is
8954 stored within the storage unit itself. Also note that changing the
8955 attribute value is not possible in such case, as well as when the
8956 medium is the <link to="MediumState_LockedRead"/> state.
8957 </note>
8958 </desc>
8959 </attribute>
8960
8961 <attribute name="state" type="MediumState" readonly="yes">
8962 <desc>
8963 Returns the current medium state, which is the last state set by
8964 the accessibility check performed by <link to="#refreshState"/>.
8965 If that method has not yet been called on the medium, the state
8966 is "Inaccessible"; as opposed to truly inaccessible media, the
8967 value of <link to="#lastAccessError"/> will be an empty string in
8968 that case.
8969
8970 <note>As of version 3.1, this no longer performs an accessibility check
8971 automatically; call <link to="#refreshState"/> for that.
8972 </note>
8973 </desc>
8974 </attribute>
8975
8976 <attribute name="location" type="wstring">
8977 <desc>
8978 Location of the storage unit holding medium data.
8979
8980 The format of the location string is medium type specific. For medium
8981 types using regular files in a host's file system, the location
8982 string is the full file name.
8983
8984 Some medium types may support changing the storage unit location by
8985 simply changing the value of this property. If this operation is not
8986 supported, the implementation will return E_NOTIMPL in attempt to set
8987 this attribute's value.
8988
8989 When setting a value of the location attribute which is a regular file
8990 in the host's file system, the given file name may be either relative to
8991 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
8992 absolute. Note that if the given location specification does not contain
8993 the file extension part then a proper default extension will be
8994 automatically appended by the implementation depending on the medium type.
8995 </desc>
8996 </attribute>
8997
8998 <attribute name="name" type="wstring" readonly="yes">
8999 <desc>
9000 Name of the storage unit holding medium data.
9001
9002 The returned string is a short version of the <link to="#location"/>
9003 attribute that is suitable for representing the medium in situations
9004 where the full location specification is too long (such as lists
9005 and comboboxes in GUI frontends). This string is also used by frontends
9006 to sort the media list alphabetically when needed.
9007
9008 For example, for locations that are regular files in the host's file
9009 system, the value of this attribute is just the file name (+ extension),
9010 without the path specification.
9011
9012 Note that as opposed to the <link to="#location"/> attribute, the name
9013 attribute will not necessary be unique for a list of media of the
9014 given type and format.
9015 </desc>
9016 </attribute>
9017
9018 <attribute name="deviceType" type="DeviceType" readonly="yes">
9019 <desc>Kind of device (DVD/Floppy/HardDisk) which is applicable to this
9020 medium.</desc>
9021 </attribute>
9022
9023 <attribute name="hostDrive" type="boolean" readonly="yes">
9024 <desc>True if this corresponds to a drive on the host.</desc>
9025 </attribute>
9026
9027 <attribute name="size" type="unsigned long long" readonly="yes">
9028 <desc>
9029 Physical size of the storage unit used to hold medium data (in bytes).
9030
9031 <note>
9032 For media whose <link to="#state"/> is <link
9033 to="MediumState_Inaccessible"/>, the value of this property is the
9034 last known size. For <link to="MediumState_NotCreated"/> media,
9035 the returned value is zero.
9036 </note>
9037 </desc>
9038 </attribute>
9039
9040 <attribute name="format" type="wstring" readonly="yes">
9041 <desc>
9042 Storage format of this medium.
9043
9044 The value of this attribute is a string that specifies a backend used
9045 to store medium data. The storage format is defined when you create a
9046 new medium or automatically detected when you open an existing medium,
9047 and cannot be changed later.
9048
9049 The list of all storage formats supported by this VirtualBox
9050 installation can be obtained using
9051 <link to="ISystemProperties::mediumFormats"/>.
9052 </desc>
9053 </attribute>
9054
9055 <attribute name="mediumFormat" type="IMediumFormat" readonly="yes">
9056 <desc>
9057 Storage medium format object corresponding to this medium.
9058
9059 The value of this attribute is a reference to the medium format object
9060 that specifies the backend properties used to store medium data. The
9061 storage format is defined when you create a new medium or automatically
9062 detected when you open an existing medium, and cannot be changed later.
9063
9064 <note>@c null is returned if there is no associated medium format
9065 object. This can e.g. happen for medium objects representing host
9066 drives and other special medium objects.</note>
9067 </desc>
9068 </attribute>
9069
9070 <attribute name="type" type="MediumType">
9071 <desc>
9072 Type (role) of this medium.
9073
9074 The following constraints apply when changing the value of this
9075 attribute:
9076 <ul>
9077 <li>If a medium is attached to a virtual machine (either in the
9078 current state or in one of the snapshots), its type cannot be
9079 changed.
9080 </li>
9081 <li>As long as the medium has children, its type cannot be set
9082 to <link to="MediumType_Writethrough"/>.
9083 </li>
9084 <li>The type of all differencing media is
9085 <link to="MediumType_Normal"/> and cannot be changed.
9086 </li>
9087 </ul>
9088
9089 The type of a newly created or opened medium is set to
9090 <link to="MediumType_Normal"/>, except for DVD and floppy media,
9091 which have a type of <link to="MediumType_Writethrough"/>.
9092 </desc>
9093 </attribute>
9094
9095 <attribute name="parent" type="IMedium" readonly="yes">
9096 <desc>
9097 Parent of this medium (the medium this medium is directly based
9098 on).
9099
9100 Only differencing media have parents. For base (non-differencing)
9101 media, @c null is returned.
9102 </desc>
9103 </attribute>
9104
9105 <attribute name="children" type="IMedium" safearray="yes" readonly="yes">
9106 <desc>
9107 Children of this medium (all differencing media directly based
9108 on this medium). A @c null array is returned if this medium
9109 does not have any children.
9110 </desc>
9111 </attribute>
9112
9113 <attribute name="base" type="IMedium" readonly="yes">
9114 <desc>
9115 Base medium of this medium.
9116
9117 If this is a differencing medium, its base medium is the medium
9118 the given medium branch starts from. For all other types of media, this
9119 property returns the medium object itself (i.e. the same object this
9120 property is read on).
9121 </desc>
9122 </attribute>
9123
9124 <attribute name="readOnly" type="boolean" readonly="yes">
9125 <desc>
9126 Returns @c true if this medium is read-only and @c false otherwise.
9127
9128 A medium is considered to be read-only when its contents cannot be
9129 modified without breaking the integrity of other parties that depend on
9130 this medium such as its child media or snapshots of virtual machines
9131 where this medium is attached to these machines. If there are no
9132 children and no such snapshots then there is no dependency and the
9133 medium is not read-only.
9134
9135 The value of this attribute can be used to determine the kind of the
9136 attachment that will take place when attaching this medium to a
9137 virtual machine. If the value is @c false then the medium will
9138 be attached directly. If the value is @c true then the medium
9139 will be attached indirectly by creating a new differencing child
9140 medium for that. See the interface description for more information.
9141
9142 Note that all <link to="MediumType_Immutable">Immutable</link> media
9143 are always read-only while all
9144 <link to="MediumType_Writethrough">Writethrough</link> media are
9145 always not.
9146
9147 <note>
9148 The read-only condition represented by this attribute is related to
9149 the medium type and usage, not to the current
9150 <link to="IMedium::state">medium state</link> and not to the read-only
9151 state of the storage unit.
9152 </note>
9153 </desc>
9154 </attribute>
9155
9156 <attribute name="logicalSize" type="unsigned long long" readonly="yes">
9157 <desc>
9158 Logical size of this medium (in megabytes), as reported to the
9159 guest OS running inside the virtual machine this medium is
9160 attached to. The logical size is defined when the medium is created
9161 and cannot be changed later.
9162
9163 <note>
9164 Reading this property on a differencing medium will return the size
9165 of its <link to="#base"/> medium.
9166 </note>
9167 <note>
9168 For media whose state is <link to="#state"/> is <link
9169 to="MediumState_Inaccessible"/>, the value of this property is the
9170 last known logical size. For <link to="MediumaState_NotCreated"/>
9171 media, the returned value is zero.
9172 </note>
9173 </desc>
9174 </attribute>
9175
9176 <attribute name="autoReset" type="boolean">
9177 <desc>
9178 Whether this differencing medium will be automatically reset each
9179 time a virtual machine it is attached to is powered up. This
9180 attribute is automatically set to @c true for the last
9181 differencing image of an "immutable" medium (see
9182 <link to="MediumType" />).
9183
9184 See <link to="#reset"/> for more information about resetting
9185 differencing media.
9186
9187 <note>
9188 Reading this property on a base (non-differencing) medium will
9189 always @c false. Changing the value of this property in this
9190 case is not supported.
9191 </note>
9192
9193 <result name="VBOX_E_NOT_SUPPORTED">
9194 This is not a differencing medium (when changing the attribute
9195 value).
9196 </result>
9197 </desc>
9198 </attribute>
9199
9200 <attribute name="lastAccessError" type="wstring" readonly="yes">
9201 <desc>
9202 Text message that represents the result of the last accessibility
9203 check performed by <link to="#refreshState"/>.
9204
9205 An empty string is returned if the last accessibility check
9206 was successful or has not yet been called. As a result, if
9207 <link to="#state" /> is "Inaccessible" and this attribute is empty,
9208 then <link to="#refreshState"/> has yet to be called; this is the
9209 default value of media after VirtualBox initialization.
9210 A non-empty string indicates a failure and should normally describe
9211 a reason of the failure (for example, a file read error).
9212 </desc>
9213 </attribute>
9214
9215 <attribute name="machineIds" type="uuid" mod="string" safearray="yes" readonly="yes">
9216 <desc>
9217 Array of UUIDs of all machines this medium is attached to.
9218
9219 A @c null array is returned if this medium is not attached to any
9220 machine or to any machine's snapshot.
9221
9222 <note>
9223 The returned array will include a machine even if this medium is not
9224 attached to that machine in the current state but attached to it in
9225 one of the machine's snapshots. See <link to="#getSnapshotIds"/> for
9226 details.
9227 </note>
9228 </desc>
9229 </attribute>
9230
9231 <method name="refreshState">
9232 <desc>
9233 If the current medium state (see <link to="MediumState"/>) is one of
9234 "Created", "Inaccessible" or "LockedRead", then this performs an
9235 accessibility check on the medium and sets the value of the <link to="#state"/>
9236 attribute accordingly; that value is also returned for convenience.
9237
9238 For all other state values, this does not perform a refresh but returns
9239 the state only.
9240
9241 The refresh, if performed, may take a long time (several seconds or even
9242 minutes, depending on the storage unit location and format) because it performs an
9243 accessibility check of the storage unit. This check may cause a significant
9244 delay if the storage unit of the given medium is, for example, a file located
9245 on a network share which is not currently accessible due to connectivity
9246 problems. In that case, the call will not return until a timeout
9247 interval defined by the host OS for this operation expires. For this reason,
9248 it is recommended to never read this attribute on the main UI thread to avoid
9249 making the UI unresponsive.
9250
9251 If the last known state of the medium is "Created" and the accessibility
9252 check fails, then the state would be set to "Inaccessible", and
9253 <link to="#lastAccessError"/> may be used to get more details about the
9254 failure. If the state of the medium is "LockedRead", then it remains the
9255 same, and a non-empty value of <link to="#lastAccessError"/> will
9256 indicate a failed accessibility check in this case.
9257
9258 Note that not all medium states are applicable to all medium types.
9259 </desc>
9260 <param name="state" type="MediumState" dir="return">
9261 <desc>
9262 New medium state.
9263 </desc>
9264 </param>
9265 </method>
9266
9267 <method name="getSnapshotIds">
9268 <desc>
9269 Returns an array of UUIDs of all snapshots of the given machine where
9270 this medium is attached to.
9271
9272 If the medium is attached to the machine in the current state, then the
9273 first element in the array will always be the ID of the queried machine
9274 (i.e. the value equal to the @c machineId argument), followed by
9275 snapshot IDs (if any).
9276
9277 If the medium is not attached to the machine in the current state, then
9278 the array will contain only snapshot IDs.
9279
9280 The returned array may be @c null if this medium is not attached
9281 to the given machine at all, neither in the current state nor in one of
9282 the snapshots.
9283 </desc>
9284 <param name="machineId" type="uuid" mod="string" dir="in">
9285 <desc>
9286 UUID of the machine to query.
9287 </desc>
9288 </param>
9289 <param name="snapshotIds" type="uuid" mod="string" safearray="yes" dir="return">
9290 <desc>
9291 Array of snapshot UUIDs of the given machine using this medium.
9292 </desc>
9293 </param>
9294 </method>
9295
9296 <method name="lockRead">
9297 <desc>
9298 Locks this medium for reading.
9299
9300 A read lock is shared: many clients can simultaneously lock the
9301 same medium for reading unless it is already locked for writing (see
9302 <link to="#lockWrite"/>) in which case an error is returned.
9303
9304 When the medium is locked for reading, it cannot be modified
9305 from within VirtualBox. This means that any method that changes
9306 the properties of this medium or contents of the storage unit
9307 will return an error (unless explicitly stated otherwise). That
9308 includes an attempt to start a virtual machine that wants to
9309 write to the the medium.
9310
9311 When the virtual machine is started up, it locks for reading all
9312 media it uses in read-only mode. If some medium cannot be locked
9313 for reading, the startup procedure will fail.
9314 A medium is typically locked for reading while it is used by a running
9315 virtual machine but has a depending differencing image that receives
9316 the actual write operations. This way one base medium can have
9317 multiple child differencing images which can be written to
9318 simultaneously. Read-only media such as DVD and floppy images are
9319 also locked for reading only (so they can be in use by multiple
9320 machines simultaneously).
9321
9322 A medium is also locked for reading when it is the source of a
9323 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
9324
9325 The medium locked for reading must be unlocked using the <link
9326 to="#unlockRead"/> method. Calls to <link to="#lockRead"/>
9327 can be nested and must be followed by the same number of paired
9328 <link to="#unlockRead"/> calls.
9329
9330 This method sets the medium state (see <link to="#state"/>) to
9331 "LockedRead" on success. The medium's previous state must be
9332 one of "Created", "Inaccessible" or "LockedRead".
9333
9334 Locking an inaccessible medium is not an error; this method performs
9335 a logical lock that prevents modifications of this medium through
9336 the VirtualBox API, not a physical file-system lock of the underlying
9337 storage unit.
9338
9339 This method returns the current state of the medium
9340 <i>before</i> the operation.
9341
9342 <result name="VBOX_E_INVALID_OBJECT_STATE">
9343 Invalid medium state (e.g. not created, locked, inaccessible,
9344 creating, deleting).
9345 </result>
9346
9347 </desc>
9348 <param name="state" type="MediumState" dir="return">
9349 <desc>
9350 State of the medium after the operation.
9351 </desc>
9352 </param>
9353 </method>
9354
9355 <method name="unlockRead">
9356 <desc>
9357 Cancels the read lock previously set by <link to="#lockRead"/>.
9358
9359 For both success and failure, this method returns the current state
9360 of the medium <i>after</i> the operation.
9361
9362 See <link to="#lockRead"/> for more details.
9363
9364 <result name="VBOX_E_INVALID_OBJECT_STATE">
9365 Medium not locked for reading.
9366 </result>
9367
9368 </desc>
9369 <param name="state" type="MediumState" dir="return">
9370 <desc>
9371 State of the medium after the operation.
9372 </desc>
9373 </param>
9374 </method>
9375
9376 <method name="lockWrite">
9377 <desc>
9378 Locks this medium for writing.
9379
9380 A write lock, as opposed to <link to="#lockRead"/>, is
9381 exclusive: there may be only one client holding a write lock,
9382 and there may be no read locks while the write lock is held.
9383 As a result, read-locking fails if a write lock is held, and
9384 write-locking fails if either a read or another write lock is held.
9385
9386 When a medium is locked for writing, it cannot be modified
9387 from within VirtualBox, and it is not guaranteed that the values
9388 of its properties are up-to-date. Any method that changes the
9389 properties of this medium or contents of the storage unit will
9390 return an error (unless explicitly stated otherwise).
9391
9392 When a virtual machine is started up, it locks for writing all
9393 media it uses to write data to. If any medium could not be locked
9394 for writing, the startup procedure will fail. If a medium has
9395 differencing images, then while the machine is running, only
9396 the last ("leaf") differencing image is locked for writing,
9397 whereas its parents are locked for reading only.
9398
9399 A medium is also locked for writing when it is the target of a
9400 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
9401
9402 The medium locked for writing must be unlocked using the <link
9403 to="#unlockWrite"/> method. Write locks <i>cannot</i> be nested.
9404
9405 This method sets the medium state (see <link to="#state"/>) to
9406 "LockedWrite" on success. The medium's previous state must be
9407 either "Created" or "Inaccessible".
9408
9409 Locking an inaccessible medium is not an error; this method performs
9410 a logical lock that prevents modifications of this medium through
9411 the VirtualBox API, not a physical file-system lock of the underlying
9412 storage unit.
9413
9414 For both, success and failure, this method returns the current
9415 state of the medium <i>before</i> the operation.
9416
9417 <result name="VBOX_E_INVALID_OBJECT_STATE">
9418 Invalid medium state (e.g. not created, locked, inaccessible,
9419 creating, deleting).
9420 </result>
9421
9422 </desc>
9423 <param name="state" type="MediumState" dir="return">
9424 <desc>
9425 State of the medium after the operation.
9426 </desc>
9427 </param>
9428 </method>
9429
9430 <method name="unlockWrite">
9431 <desc>
9432 Cancels the write lock previously set by <link to="#lockWrite"/>.
9433
9434 For both success and failure, this method returns the current
9435 state of the medium <i>after</i> the operation.
9436
9437 See <link to="#lockWrite"/> for more details.
9438
9439 <result name="VBOX_E_INVALID_OBJECT_STATE">
9440 Medium not locked for writing.
9441 </result>
9442
9443 </desc>
9444 <param name="state" type="MediumState" dir="return">
9445 <desc>
9446 State of the medium after the operation.
9447 </desc>
9448 </param>
9449 </method>
9450
9451 <method name="close">
9452 <desc>
9453 Closes this medium.
9454
9455 The medium must not be attached to any known virtual machine
9456 and must not have any known child media, otherwise the
9457 operation will fail.
9458
9459 When the medium is successfully closed, it gets removed from
9460 the list of remembered media, but its storage unit is not
9461 deleted. In particular, this means that this medium can be
9462 later opened again using the <link
9463 to="IVirtualBox::openHardDisk"/> call.
9464
9465 Note that after this method successfully returns, the given medium
9466 object becomes uninitialized. This means that any attempt
9467 to call any of its methods or attributes will fail with the
9468 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
9469
9470 <result name="VBOX_E_INVALID_OBJECT_STATE">
9471 Invalid medium state (other than not created, created or
9472 inaccessible).
9473 </result>
9474 <result name="VBOX_E_OBJECT_IN_USE">
9475 Medium attached to virtual machine.
9476 </result>
9477 <result name="VBOX_E_FILE_ERROR">
9478 Settings file not accessible.
9479 </result>
9480 <result name="VBOX_E_XML_ERROR">
9481 Could not parse the settings file.
9482 </result>
9483
9484 </desc>
9485 </method>
9486
9487 <!-- storage methods -->
9488
9489 <method name="getProperty">
9490 <desc>
9491 Returns the value of the custom medium property with the given name.
9492
9493 The list of all properties supported by the given medium format can
9494 be obtained with <link to="IMediumFormat::describeProperties"/>.
9495
9496 Note that if this method returns an empty string in @a value, the
9497 requested property is supported but currently not assigned any value.
9498
9499 <result name="VBOX_E_OBJECT_NOT_FOUND">
9500 Requested property does not exist (not supported by the format).
9501 </result>
9502 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
9503 </desc>
9504 <param name="name" type="wstring" dir="in">
9505 <desc>Name of the property to get.</desc>
9506 </param>
9507 <param name="value" type="wstring" dir="return">
9508 <desc>Current property value.</desc>
9509 </param>
9510 </method>
9511
9512 <method name="setProperty">
9513 <desc>
9514 Sets the value of the custom medium property with the given name.
9515
9516 The list of all properties supported by the given medium format can
9517 be obtained with <link to="IMediumFormat::describeProperties"/>.
9518
9519 Note that setting the property value to @c null or an empty string is
9520 equivalent to deleting the existing value. A default value (if it is
9521 defined for this property) will be used by the format backend in this
9522 case.
9523
9524 <result name="VBOX_E_OBJECT_NOT_FOUND">
9525 Requested property does not exist (not supported by the format).
9526 </result>
9527 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
9528 </desc>
9529 <param name="name" type="wstring" dir="in">
9530 <desc>Name of the property to set.</desc>
9531 </param>
9532 <param name="value" type="wstring" dir="in">
9533 <desc>Property value to set.</desc>
9534 </param>
9535 </method>
9536
9537 <method name="getProperties">
9538 <desc>
9539 Returns values for a group of properties in one call.
9540
9541 The names of the properties to get are specified using the @a names
9542 argument which is a list of comma-separated property names or
9543 an empty string if all properties are to be returned. Note that currently
9544 the value of this argument is ignored and the method always returns all
9545 existing properties.
9546
9547 The list of all properties supported by the given medium format can
9548 be obtained with <link to="IMediumFormat::describeProperties"/>.
9549
9550 The method returns two arrays, the array of property names corresponding
9551 to the @a names argument and the current values of these properties.
9552 Both arrays have the same number of elements with each elemend at the
9553 given index in the first array corresponds to an element at the same
9554 index in the second array.
9555
9556 Note that for properties that do not have assigned values,
9557 an empty string is returned at the appropriate index in the
9558 @a returnValues array.
9559
9560 </desc>
9561 <param name="names" type="wstring" dir="in">
9562 <desc>
9563 Names of properties to get.
9564 </desc>
9565 </param>
9566 <param name="returnNames" type="wstring" safearray="yes" dir="out">
9567 <desc>Names of returned properties.</desc>
9568 </param>
9569 <param name="returnValues" type="wstring" safearray="yes" dir="return">
9570 <desc>Values of returned properties.</desc>
9571 </param>
9572 </method>
9573
9574 <method name="setProperties">
9575 <desc>
9576 Sets values for a group of properties in one call.
9577
9578 The names of the properties to set are passed in the @a names
9579 array along with the new values for them in the @a values array. Both
9580 arrays have the same number of elements with each elemend at the given
9581 index in the first array corresponding to an element at the same index
9582 in the second array.
9583
9584 If there is at least one property name in @a names that is not valid,
9585 the method will fail before changing the values of any other properties
9586 from the @a names array.
9587
9588 Using this method over <link to="#setProperty"/> is preferred if you
9589 need to set several properties at once since it will result into less
9590 IPC calls.
9591
9592 The list of all properties supported by the given medium format can
9593 be obtained with <link to="IMediumFormat::describeProperties"/>.
9594
9595 Note that setting the property value to @c null or an empty string is
9596 equivalent to deleting the existing value. A default value (if it is
9597 defined for this property) will be used by the format backend in this
9598 case.
9599 </desc>
9600 <param name="names" type="wstring" safearray="yes" dir="in">
9601 <desc>Names of properties to set.</desc>
9602 </param>
9603 <param name="values" type="wstring" safearray="yes" dir="in">
9604 <desc>Values of properties to set.</desc>
9605 </param>
9606 </method>
9607
9608 <!-- storage methods -->
9609
9610 <method name="createBaseStorage">
9611 <desc>
9612 Starts creating a hard disk storage unit (fixed/dynamic, according
9613 to the variant flags) in in the background. The previous storage unit
9614 created for this object, if any, must first be deleted using
9615 <link to="#deleteStorage"/>, otherwise the operation will fail.
9616
9617 Before the operation starts, the medium is placed in
9618 <link to="MediumState_Creating"/> state. If the create operation
9619 fails, the medium will be placed back in <link to="MediumState_NotCreated"/>
9620 state.
9621
9622 After the returned progress object reports that the operation has
9623 successfully completed, the medium state will be set to <link
9624 to="MediumState_Created"/>, the medium will be remembered by this
9625 VirtualBox installation and may be attached to virtual machines.
9626
9627 <result name="VBOX_E_NOT_SUPPORTED">
9628 The variant of storage creation operation is not supported. See <link
9629 to="IMediumFormat::capabilities"/>.
9630 </result>
9631 </desc>
9632 <param name="logicalSize" type="unsigned long long" dir="in">
9633 <desc>Maximum logical size of the medium in megabytes.</desc>
9634 </param>
9635 <param name="variant" type="MediumVariant" dir="in">
9636 <desc>Exact image variant which should be created.</desc>
9637 </param>
9638 <param name="progress" type="IProgress" dir="return">
9639 <desc>Progress object to track the operation completion.</desc>
9640 </param>
9641 </method>
9642
9643 <method name="deleteStorage">
9644 <desc>
9645 Starts deleting the storage unit of this medium.
9646
9647 The medium must not be attached to any known virtual machine and must
9648 not have any known child media, otherwise the operation will fail.
9649 It will also fail if there is no storage unit to delete or if deletion
9650 is already in progress, or if the medium is being in use (locked for
9651 read or for write) or inaccessible. Therefore, the only valid state for
9652 this operation to succeed is <link to="MediumState_Created"/>.
9653
9654 Before the operation starts, the medium is placed in
9655 <link to="MediumState_Deleting"/> state and gets removed from the list
9656 of remembered hard disks (media registry). If the delete operation
9657 fails, the medium will be remembered again and placed back to
9658 <link to="MediumState_Created"/> state.
9659
9660 After the returned progress object reports that the operation is
9661 complete, the medium state will be set to
9662 <link to="MediumState_NotCreated"/> and you will be able to use one of
9663 the storage creation methods to create it again.
9664
9665 <see>#close()</see>
9666
9667 <result name="VBOX_E_OBJECT_IN_USE">
9668 Medium is attached to a virtual machine.
9669 </result>
9670 <result name="VBOX_E_NOT_SUPPORTED">
9671 Storage deletion is not allowed because neither of storage creation
9672 operations are supported. See
9673 <link to="IMediumFormat::capabilities"/>.
9674 </result>
9675
9676 <note>
9677 If the deletion operation fails, it is not guaranteed that the storage
9678 unit still exists. You may check the <link to="IMedium::state"/> value
9679 to answer this question.
9680 </note>
9681 </desc>
9682 <param name="progress" type="IProgress" dir="return">
9683 <desc>Progress object to track the operation completion.</desc>
9684 </param>
9685 </method>
9686
9687 <!-- diff methods -->
9688
9689 <method name="createDiffStorage">
9690 <desc>
9691 Starts creating an empty differencing storage unit based on this
9692 medium in the format and at the location defined by the @a target
9693 argument.
9694
9695 The target medium must be in <link to="MediumState_NotCreated"/>
9696 state (i.e. must not have an existing storage unit). Upon successful
9697 completion, this operation will set the type of the target medium to
9698 <link to="MediumType_Normal"/> and create a storage unit necessary to
9699 represent the differencing medium data in the given format (according
9700 to the storage format of the target object).
9701
9702 After the returned progress object reports that the operation is
9703 successfully complete, the target medium gets remembered by this
9704 VirtualBox installation and may be attached to virtual machines.
9705
9706 <note>
9707 The medium will be set to <link to="MediumState_LockedRead"/>
9708 state for the duration of this operation.
9709 </note>
9710 <result name="VBOX_E_OBJECT_IN_USE">
9711 Medium not in @c NotCreated state.
9712 </result>
9713 </desc>
9714 <param name="target" type="IMedium" dir="in">
9715 <desc>Target medium.</desc>
9716 </param>
9717 <param name="variant" type="MediumVariant" dir="in">
9718 <desc>Exact image variant which should be created.</desc>
9719 </param>
9720 <param name="progress" type="IProgress" dir="return">
9721 <desc>Progress object to track the operation completion.</desc>
9722 </param>
9723 </method>
9724
9725 <method name="mergeTo">
9726 <desc>
9727 Starts merging the contents of this medium and all intermediate
9728 differencing media in the chain to the given target medium.
9729
9730 The target medium must be either a descendant of this medium or
9731 its ancestor (otherwise this method will immediately return a failure).
9732 It follows that there are two logical directions of the merge operation:
9733 from ancestor to descendant (<i>forward merge</i>) and from descendant to
9734 ancestor (<i>backward merge</i>). Let us consider the following medium
9735 chain:
9736
9737 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
9738
9739 Here, calling this method on the <tt>Base</tt> medium object with
9740 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
9741 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
9742 merge. Note that in both cases the contents of the resulting medium
9743 will be the same, the only difference is the medium object that takes
9744 the result of the merge operation. In case of the forward merge in the
9745 above example, the result will be written to <tt>Diff_2</tt>; in case of
9746 the backward merge, the result will be written to <tt>Base</tt>. In
9747 other words, the result of the operation is always stored in the target
9748 medium.
9749
9750 Upon successful operation completion, the storage units of all media in
9751 the chain between this (source) medium and the target medium, including
9752 the source medium itself, will be automatically deleted and the
9753 relevant medium objects (including this medium) will become
9754 uninitialized. This means that any attempt to call any of
9755 their methods or attributes will fail with the
9756 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
9757 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
9758 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> media.
9759 Note that <tt>Diff_2</tt> in this case will become a base medium
9760 itself since it will no longer be based on any other medium.
9761
9762 Considering the above, all of the following conditions must be met in
9763 order for the merge operation to succeed:
9764 <ul>
9765 <li>
9766 Neither this (source) medium nor any intermediate
9767 differencing medium in the chain between it and the target
9768 medium is attached to any virtual machine.
9769 </li>
9770 <li>
9771 Neither the source medium nor the target medium is an
9772 <link to="MediumType_Immutable"/> medium.
9773 </li>
9774 <li>
9775 The part of the medium tree from the source medium to the
9776 target medium is a linear chain, i.e. all medium in this
9777 chain have exactly one child which is the next medium in this
9778 chain. The only exception from this rule is the target medium in
9779 the forward merge operation; it is allowed to have any number of
9780 child media because the merge operation will not change its
9781 logical contents (as it is seen by the guest OS or by children).
9782 </li>
9783 <li>
9784 None of the involved media are in
9785 <link to="MediumState_LockedRead"/> or
9786 <link to="MediumState_LockedWrite"/> state.
9787 </li>
9788 </ul>
9789
9790 <note>
9791 This (source) medium and all intermediates will be placed to <link
9792 to="MediumState_Deleting"/> state and the target medium will be
9793 placed to <link to="MediumState_LockedWrite"/> state and for the
9794 duration of this operation.
9795 </note>
9796 </desc>
9797 <param name="target" type="IMedium" dir="in">
9798 <desc>Target medium.</desc>
9799 </param>
9800 <param name="progress" type="IProgress" dir="return">
9801 <desc>Progress object to track the operation completion.</desc>
9802 </param>
9803 </method>
9804
9805 <!-- clone method -->
9806
9807 <method name="cloneTo">
9808 <desc>
9809 Starts creating a clone of this medium in the format and at the
9810 location defined by the @a target argument.
9811
9812 The target medium must be either in <link to="MediumState_NotCreated"/>
9813 state (i.e. must not have an existing storage unit) or in
9814 <link to="MediumState_Created"/> state (i.e. created and not locked, and
9815 big enough to hold the data or else the copy will be partial). Upon
9816 successful completion, the cloned medium will contain exactly the
9817 same sector data as the medium being cloned, except that in the
9818 first case a new UUID for the clone will be randomly generated, and in
9819 the second case the UUID will remain unchanged.
9820
9821 The @a parent argument defines which medium will be the parent
9822 of the clone. Passing a @c null reference indicates that the clone will
9823 be a base image, i.e. completely independent. It is possible to specify
9824 an arbitrary medium for this parameter, including the parent of the
9825 medium which is being cloned. Even cloning to a child of the source
9826 medium is possible. Note that when cloning to an existing image, the
9827 @a parent irgument is ignored.
9828
9829 After the returned progress object reports that the operation is
9830 successfully complete, the target medium gets remembered by this
9831 VirtualBox installation and may be attached to virtual machines.
9832
9833 <note>
9834 This medium will be placed to <link to="MediumState_LockedRead"/>
9835 state for the duration of this operation.
9836 </note>
9837 <result name="E_NOTIMPL">
9838 The specified cloning variant is not supported at the moment.
9839 </result>
9840 </desc>
9841 <param name="target" type="IMedium" dir="in">
9842 <desc>Target medium.</desc>
9843 </param>
9844 <param name="variant" type="MediumVariant" dir="in">
9845 <desc>Exact image variant which should be created.</desc>
9846 </param>
9847 <param name="parent" type="IMedium" dir="in">
9848 <desc>Parent of the cloned medium.</desc>
9849 </param>
9850 <param name="progress" type="IProgress" dir="return">
9851 <desc>Progress object to track the operation completion.</desc>
9852 </param>
9853 </method>
9854
9855 <!-- other methods -->
9856
9857 <method name="compact">
9858 <desc>
9859 Starts compacting of this medium. This means that the medium is
9860 transformed into a possibly more compact storage representation.
9861 This potentially creates temporary images, which can require a
9862 substantial amount of additional disk space.
9863
9864 This medium will be placed to <link to="MediumState_LockedWrite"/>
9865 state and all its parent media (if any) will be placed to
9866 <link to="MediumState_LockedRead"/> state for the duration of this
9867 operation.
9868
9869 Please note that the results can be either returned straight away,
9870 or later as the result of the background operation via the object
9871 returned via the @a progress parameter.
9872
9873 <result name="VBOX_E_NOT_SUPPORTED">
9874 Medium format does not support compacting (but potentially
9875 needs it).
9876 </result>
9877 </desc>
9878 <param name="progress" type="IProgress" dir="return">
9879 <desc>Progress object to track the operation completion.</desc>
9880 </param>
9881 </method>
9882
9883 <method name="resize">
9884 <desc>
9885 Starts resizing this medium. This means that the nominal size of the
9886 medium is set to the new value. Both increasing and decreasing the
9887 size is possible, and there are no safety checks, since VirtualBox
9888 does not make any assumptions about the medium contents.
9889
9890 Resizing usually needs additional disk space, and possibly also
9891 some temporary disk space. Note that resize does not create a full
9892 temporary copy of the medium, so the additional disk space requirement
9893 is usually much lower than using the clone operation.
9894
9895 This medium will be placed to <link to="MediumState_LockedWrite"/>
9896 state for the duration of this operation.
9897
9898 Please note that the results can be either returned straight away,
9899 or later as the result of the background operation via the object
9900 returned via the @a progress parameter.
9901
9902 <result name="VBOX_E_NOT_SUPPORTED">
9903 Medium format does not support resizing.
9904 </result>
9905 </desc>
9906 <param name="logicalSize" type="unsigned long long" dir="in">
9907 <desc>New nominal capacity of the medium in megabytes.</desc>
9908 </param>
9909 <param name="progress" type="IProgress" dir="return">
9910 <desc>Progress object to track the operation completion.</desc>
9911 </param>
9912 </method>
9913
9914 <method name="reset">
9915 <desc>
9916 Starts erasing the contents of this differencing medium.
9917
9918 This operation will reset the differencing medium to its initial
9919 state when it does not contain any sector data and any read operation is
9920 redirected to its parent medium. This automatically gets called
9921 during VM power-up for every medium whose <link to="#autoReset" />
9922 attribute is @c true.
9923
9924 The medium will be write-locked for the duration of this operation (see
9925 <link to="#lockWrite" />).
9926
9927 <result name="VBOX_E_NOT_SUPPORTED">
9928 This is not a differencing medium.
9929 </result>
9930 <result name="VBOX_E_INVALID_OBJECT_STATE">
9931 Medium is not in <link to="MediumState_Created"/> or
9932 <link to="MediumState_Inaccessible"/> state.
9933 </result>
9934 </desc>
9935 <param name="progress" type="IProgress" dir="return">
9936 <desc>Progress object to track the operation completion.</desc>
9937 </param>
9938 </method>
9939
9940 </interface>
9941
9942
9943 <!--
9944 // IMediumFormat
9945 /////////////////////////////////////////////////////////////////////////
9946 -->
9947
9948 <enum
9949 name="DataType"
9950 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
9951 >
9952 <const name="Int32" value="0"/>
9953 <const name="Int8" value="1"/>
9954 <const name="String" value="2"/>
9955 </enum>
9956
9957 <enum
9958 name="DataFlags"
9959 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
9960 >
9961 <const name="None" value="0x00"/>
9962 <const name="Mandatory" value="0x01"/>
9963 <const name="Expert" value="0x02"/>
9964 <const name="Array" value="0x04"/>
9965 <const name="FlagMask" value="0x07"/>
9966 </enum>
9967
9968 <enum
9969 name="MediumFormatCapabilities"
9970 uuid="70fcf810-99e8-4edc-aee4-7f51d489e657"
9971 >
9972 <desc>
9973 Medium format capability flags.
9974 </desc>
9975
9976 <const name="Uuid" value="0x01">
9977 <desc>
9978 Supports UUIDs as expected by VirtualBox code.
9979 </desc>
9980 </const>
9981
9982 <const name="CreateFixed" value="0x02">
9983 <desc>
9984 Supports creating fixed size images, allocating all space instantly.
9985 </desc>
9986 </const>
9987
9988 <const name="CreateDynamic" value="0x04">
9989 <desc>
9990 Supports creating dynamically growing images, allocating space on
9991 demand.
9992 </desc>
9993 </const>
9994
9995 <const name="CreateSplit2G" value="0x08">
9996 <desc>
9997 Supports creating images split in chunks of a bit less than 2 GBytes.
9998 </desc>
9999 </const>
10000
10001 <const name="Differencing" value="0x10">
10002 <desc>
10003 Supports being used as a format for differencing media (see <link
10004 to="IMedium::createDiffStorage"/>).
10005 </desc>
10006 </const>
10007
10008 <const name="Asynchronous" value="0x20">
10009 <desc>
10010 Supports asynchronous I/O operations for at least some configurations.
10011 </desc>
10012 </const>
10013
10014 <const name="File" value="0x40">
10015 <desc>
10016 The format backend operates on files (the <link to="IMedium::location"/>
10017 attribute of the medium specifies a file used to store medium
10018 data; for a list of supported file extensions see
10019 <link to="IMediumFormat::fileExtensions"/>).
10020 </desc>
10021 </const>
10022
10023 <const name="Properties" value="0x80">
10024 <desc>
10025 The format backend uses the property interface to configure the storage
10026 location and properties (the <link to="IMediumFormat::describeProperties"/>
10027 method is used to get access to properties supported by the given medium format).
10028 </desc>
10029 </const>
10030
10031 <const name="CapabilityMask" value="0xFF"/>
10032 </enum>
10033
10034 <interface
10035 name="IMediumFormat" extends="$unknown"
10036 uuid="89f52554-d469-4799-9fad-1705e86a08b1"
10037 wsmap="managed"
10038 >
10039 <desc>
10040 The IMediumFormat interface represents a medium format.
10041
10042 Each medium format has an associated backend which is used to handle
10043 media stored in this format. This interface provides information
10044 about the properties of the associated backend.
10045
10046 Each medium format is identified by a string represented by the
10047 <link to="#id"/> attribute. This string is used in calls like
10048 <link to="IVirtualBox::createHardDisk"/> to specify the desired
10049 format.
10050
10051 The list of all supported medium formats can be obtained using
10052 <link to="ISystemProperties::mediaFormats"/>.
10053
10054 <see>IMedium</see>
10055 </desc>
10056
10057 <attribute name="id" type="wstring" readonly="yes">
10058 <desc>
10059 Identifier of this format.
10060
10061 The format identifier is a non-@c null non-empty ASCII string. Note that
10062 this string is case-insensitive. This means that, for example, all of
10063 the following strings:
10064 <pre>
10065 "VDI"
10066 "vdi"
10067 "VdI"</pre>
10068 refer to the same medium format.
10069
10070 This string is used in methods of other interfaces where it is necessary
10071 to specify a medium format, such as
10072 <link to="IVirtualBox::createHardDisk"/>.
10073 </desc>
10074 </attribute>
10075
10076 <attribute name="name" type="wstring" readonly="yes">
10077 <desc>
10078 Human readable description of this format.
10079
10080 Mainly for use in file open dialogs.
10081 </desc>
10082 </attribute>
10083
10084 <attribute name="fileExtensions" type="wstring" safearray="yes" readonly="yes">
10085 <desc>
10086 Array of strings containing the supported file extensions.
10087
10088 The first extension in the array is the extension preferred by the
10089 backend. It is recommended to use this extension when specifying a
10090 location of the storage unit for a new medium.
10091
10092 Note that some backends do not work on files, so this array may be
10093 empty.
10094
10095 <see>IMediumFormat::capabilities</see>
10096 </desc>
10097 </attribute>
10098
10099 <attribute name="capabilities" type="unsigned long" readonly="yes">
10100 <desc>
10101 Capabilities of the format as a set of bit flags.
10102
10103 For the meaning of individual capability flags see
10104 <link to="MediumFormatCapabilities"/>.
10105 </desc>
10106 </attribute>
10107
10108 <method name="describeProperties">
10109 <desc>
10110 Returns several arrays describing the properties supported by this
10111 format.
10112
10113 An element with the given index in each array describes one
10114 property. Thus, the number of elements in each returned array is the
10115 same and corresponds to the number of supported properties.
10116
10117 The returned arrays are filled in only if the
10118 <link to="MediumFormatCapabilities_Properties"/> flag is set.
10119 All arguments must be non-@c null.
10120
10121 <see>DataType</see>
10122 <see>DataFlags</see>
10123 </desc>
10124
10125 <param name="names" type="wstring" safearray="yes" dir="out">
10126 <desc>Array of property names.</desc>
10127 </param>
10128 <param name="description" type="wstring" safearray="yes" dir="out">
10129 <desc>Array of property descriptions.</desc>
10130 </param>
10131 <param name="types" type="DataType" safearray="yes" dir="out">
10132 <desc>Array of property types.</desc>
10133 </param>
10134 <param name="flags" type="unsigned long" safearray="yes" dir="out">
10135 <desc>Array of property flags.</desc>
10136 </param>
10137 <param name="defaults" type="wstring" safearray="yes" dir="out">
10138 <desc>Array of default property values.</desc>
10139 </param>
10140 </method>
10141
10142 </interface>
10143
10144
10145 <!--
10146 // IKeyboard
10147 /////////////////////////////////////////////////////////////////////////
10148 -->
10149
10150 <interface
10151 name="IKeyboard" extends="$unknown"
10152 uuid="2d1a531b-4c6e-49cc-8af6-5c857b78b5d7"
10153 wsmap="managed"
10154 >
10155 <desc>
10156 The IKeyboard interface represents the virtual machine's keyboard. Used
10157 in <link to="IConsole::keyboard"/>.
10158
10159 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
10160 to the virtual machine.
10161
10162 </desc>
10163 <method name="putScancode">
10164 <desc>Sends a scancode to the keyboard.
10165
10166 <result name="VBOX_E_IPRT_ERROR">
10167 Could not send scan code to virtual keyboard.
10168 </result>
10169
10170 </desc>
10171 <param name="scancode" type="long" dir="in"/>
10172 </method>
10173
10174 <method name="putScancodes">
10175 <desc>Sends an array of scancodes to the keyboard.
10176
10177 <result name="VBOX_E_IPRT_ERROR">
10178 Could not send all scan codes to virtual keyboard.
10179 </result>
10180
10181 </desc>
10182 <param name="scancodes" type="long" dir="in" safearray="yes"/>
10183 <param name="codesStored" type="unsigned long" dir="return"/>
10184 </method>
10185
10186 <method name="putCAD">
10187 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
10188 function is nothing special, it is just a convenience function
10189 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
10190
10191 <result name="VBOX_E_IPRT_ERROR">
10192 Could not send all scan codes to virtual keyboard.
10193 </result>
10194
10195 </desc>
10196 </method>
10197
10198 </interface>
10199
10200
10201 <!--
10202 // IMouse
10203 /////////////////////////////////////////////////////////////////////////
10204 -->
10205
10206 <enum
10207 name="MouseButtonState"
10208 uuid="9ee094b8-b28a-4d56-a166-973cb588d7f8"
10209 >
10210 <desc>
10211 Mouse button state.
10212 </desc>
10213
10214 <const name="LeftButton" value="0x01"/>
10215 <const name="RightButton" value="0x02"/>
10216 <const name="MiddleButton" value="0x04"/>
10217 <const name="WheelUp" value="0x08"/>
10218 <const name="WheelDown" value="0x10"/>
10219 <const name="XButton1" value="0x20"/>
10220 <const name="XButton2" value="0x40"/>
10221 <const name="MouseStateMask" value="0x7F"/>
10222 </enum>
10223
10224 <interface
10225 name="IMouse" extends="$unknown"
10226 uuid="7c0f2eae-f92d-498c-b802-e1a3763774dc"
10227 wsmap="managed"
10228 >
10229 <desc>
10230 The IMouse interface represents the virtual machine's mouse. Used in
10231 <link to="IConsole::mouse"/>.
10232
10233 Through this interface, the virtual machine's virtual mouse can be
10234 controlled.
10235 </desc>
10236
10237 <attribute name="absoluteSupported" type="boolean" readonly="yes">
10238 <desc>
10239 Whether the guest OS supports absolute mouse pointer positioning
10240 or not.
10241 <note>
10242 You can use the <link to="IMouseCapabilityChangedEvent"/>
10243 event to be instantly informed about changes of this attribute
10244 during virtual machine execution.
10245 </note>
10246 <see><link to="#putMouseEventAbsolute"/></see>
10247 </desc>
10248 </attribute>
10249
10250 <attribute name="relativeSupported" type="boolean" readonly="yes">
10251 <desc>
10252 Whether the guest OS supports relative mouse pointer positioning
10253 or not.
10254 <note>
10255 You can use the <link to="IMouseCapabilityChangedEvent"/>
10256 event to be instantly informed about changes of this attribute
10257 during virtual machine execution.
10258 </note>
10259 <see><link to="#putMouseEvent"/></see>
10260 </desc>
10261 </attribute>
10262
10263 <attribute name="needsHostCursor" type="boolean" readonly="yes">
10264 <desc>
10265 Whether the guest OS can currently switch to drawing it's own mouse
10266 cursor on demand.
10267 <note>
10268 You can use the <link to="IMouseCapabilityChangedEvent"/>
10269 event to be instantly informed about changes of this attribute
10270 during virtual machine execution.
10271 </note>
10272 <see><link to="#putMouseEvent"/></see>
10273 </desc>
10274 </attribute>
10275
10276 <method name="putMouseEvent">
10277 <desc>
10278 Initiates a mouse event using relative pointer movements
10279 along x and y axis.
10280
10281 <result name="E_ACCESSDENIED">
10282 Console not powered up.
10283 </result>
10284 <result name="VBOX_E_IPRT_ERROR">
10285 Could not send mouse event to virtual mouse.
10286 </result>
10287
10288 </desc>
10289
10290 <param name="dx" type="long" dir="in">
10291 <desc>
10292 Amount of pixels the mouse should move to the right.
10293 Negative values move the mouse to the left.
10294 </desc>
10295 </param>
10296 <param name="dy" type="long" dir="in">
10297 <desc>
10298 Amount of pixels the mouse should move downwards.
10299 Negative values move the mouse upwards.
10300 </desc>
10301 </param>
10302 <param name="dz" type="long" dir="in">
10303 <desc>
10304 Amount of mouse wheel moves.
10305 Positive values describe clockwise wheel rotations,
10306 negative values describe counterclockwise rotations.
10307 </desc>
10308 </param>
10309 <param name="dw" type="long" dir="in">
10310 <desc>
10311 Amount of horizontal mouse wheel moves.
10312 Positive values describe a movement to the left,
10313 negative values describe a movement to the right.
10314 </desc>
10315 </param>
10316 <param name="buttonState" type="long" dir="in">
10317 <desc>
10318 The current state of mouse buttons. Every bit represents
10319 a mouse button as follows:
10320 <table>
10321 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10322 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
10323 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
10324 </table>
10325 A value of <tt>1</tt> means the corresponding button is pressed.
10326 otherwise it is released.
10327 </desc>
10328 </param>
10329 </method>
10330
10331 <method name="putMouseEventAbsolute">
10332 <desc>
10333 Positions the mouse pointer using absolute x and y coordinates.
10334 These coordinates are expressed in pixels and
10335 start from <tt>[1,1]</tt> which corresponds to the top left
10336 corner of the virtual display.
10337
10338 <result name="E_ACCESSDENIED">
10339 Console not powered up.
10340 </result>
10341 <result name="VBOX_E_IPRT_ERROR">
10342 Could not send mouse event to virtual mouse.
10343 </result>
10344
10345 <note>
10346 This method will have effect only if absolute mouse
10347 positioning is supported by the guest OS.
10348 </note>
10349
10350 <see><link to="#absoluteSupported"/></see>
10351 </desc>
10352
10353 <param name="x" type="long" dir="in">
10354 <desc>
10355 X coordinate of the pointer in pixels, starting from @c 1.
10356 </desc>
10357 </param>
10358 <param name="y" type="long" dir="in">
10359 <desc>
10360 Y coordinate of the pointer in pixels, starting from @c 1.
10361 </desc>
10362 </param>
10363 <param name="dz" type="long" dir="in">
10364 <desc>
10365 Amount of mouse wheel moves.
10366 Positive values describe clockwise wheel rotations,
10367 negative values describe counterclockwise rotations.
10368 </desc>
10369 </param>
10370 <param name="dw" type="long" dir="in">
10371 <desc>
10372 Amount of horizontal mouse wheel moves.
10373 Positive values describe a movement to the left,
10374 negative values describe a movement to the right.
10375 </desc>
10376 </param>
10377 <param name="buttonState" type="long" dir="in">
10378 <desc>
10379 The current state of mouse buttons. Every bit represents
10380 a mouse button as follows:
10381 <table>
10382 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
10383 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
10384 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
10385 </table>
10386 A value of @c 1 means the corresponding button is pressed.
10387 otherwise it is released.
10388 </desc>
10389 </param>
10390 </method>
10391
10392 </interface>
10393
10394 <!--
10395 // IDisplay
10396 /////////////////////////////////////////////////////////////////////////
10397 -->
10398
10399 <enum
10400 name="FramebufferPixelFormat"
10401 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
10402 >
10403 <desc>
10404 Format of the video memory buffer. Constants represented by this enum can
10405 be used to test for particular values of <link
10406 to="IFramebuffer::pixelFormat"/>. See also <link
10407 to="IFramebuffer::requestResize"/>.
10408
10409 See also www.fourcc.org for more information about FOURCC pixel formats.
10410 </desc>
10411
10412 <const name="Opaque" value="0">
10413 <desc>
10414 Unknown buffer format (the user may not assume any particular format of
10415 the buffer).
10416 </desc>
10417 </const>
10418 <const name="FOURCC_RGB" value="0x32424752">
10419 <desc>
10420 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
10421 bit layout).
10422 </desc>
10423 </const>
10424 </enum>
10425
10426 <interface
10427 name="IFramebuffer" extends="$unknown"
10428 uuid="b7ed347a-5765-40a0-ae1c-f543eb4ddeaf"
10429 wsmap="suppress"
10430 >
10431 <attribute name="address" type="octet" mod="ptr" readonly="yes">
10432 <desc>Address of the start byte of the frame buffer.</desc>
10433 </attribute>
10434
10435 <attribute name="width" type="unsigned long" readonly="yes">
10436 <desc>Frame buffer width, in pixels.</desc>
10437 </attribute>
10438
10439 <attribute name="height" type="unsigned long" readonly="yes">
10440 <desc>Frame buffer height, in pixels.</desc>
10441 </attribute>
10442
10443 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
10444 <desc>
10445 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
10446 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
10447 are: 8, 15, 16, 24 and 32.
10448 </desc>
10449 </attribute>
10450
10451 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
10452 <desc>
10453 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
10454 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
10455 size of the scan line must be aligned to 32 bits.
10456 </desc>
10457 </attribute>
10458
10459 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
10460 <desc>
10461 Frame buffer pixel format. It's either one of the values defined by <link
10462 to="FramebufferPixelFormat"/> or a raw FOURCC code.
10463 <note>
10464 This attribute must never return <link
10465 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
10466 <link to="#address"/> points to must be always known.
10467 </note>
10468 </desc>
10469 </attribute>
10470
10471 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
10472 <desc>
10473 Defines whether this frame buffer uses the virtual video card's memory
10474 buffer (guest VRAM) directly or not. See <link
10475 to="IFramebuffer::requestResize"/> for more information.
10476 </desc>
10477 </attribute>
10478
10479 <attribute name="heightReduction" type="unsigned long" readonly="yes">
10480 <desc>
10481 Hint from the frame buffer about how much of the standard
10482 screen height it wants to use for itself. This information is
10483 exposed to the guest through the VESA BIOS and VMMDev interface
10484 so that it can use it for determining its video mode table. It
10485 is not guaranteed that the guest respects the value.
10486 </desc>
10487 </attribute>
10488
10489 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
10490 <desc>
10491 An alpha-blended overlay which is superposed over the frame buffer.
10492 The initial purpose is to allow the display of icons providing
10493 information about the VM state, including disk activity, in front
10494 ends which do not have other means of doing that. The overlay is
10495 designed to controlled exclusively by IDisplay. It has no locking
10496 of its own, and any changes made to it are not guaranteed to be
10497 visible until the affected portion of IFramebuffer is updated. The
10498 overlay can be created lazily the first time it is requested. This
10499 attribute can also return @c null to signal that the overlay is not
10500 implemented.
10501 </desc>
10502 </attribute>
10503
10504 <attribute name="winId" type="unsigned long long" readonly="yes">
10505 <desc>
10506 Platform-dependent identifier of the window where context of this
10507 frame buffer is drawn, or zero if there's no such window.
10508 </desc>
10509 </attribute>
10510
10511 <method name="lock">
10512 <desc>
10513 Locks the frame buffer.
10514 Gets called by the IDisplay object where this frame buffer is
10515 bound to.
10516 </desc>
10517 </method>
10518
10519 <method name="unlock">
10520 <desc>
10521 Unlocks the frame buffer.
10522 Gets called by the IDisplay object where this frame buffer is
10523 bound to.
10524 </desc>
10525 </method>
10526
10527 <method name="notifyUpdate">
10528 <desc>
10529 Informs about an update.
10530 Gets called by the display object where this buffer is
10531 registered.
10532 </desc>
10533 <param name="x" type="unsigned long" dir="in"/>
10534 <param name="y" type="unsigned long" dir="in"/>
10535 <param name="width" type="unsigned long" dir="in"/>
10536 <param name="height" type="unsigned long" dir="in"/>
10537 </method>
10538
10539 <method name="requestResize">
10540 <desc>
10541 Requests a size and pixel format change.
10542
10543 There are two modes of working with the video buffer of the virtual
10544 machine. The <i>indirect</i> mode implies that the IFramebuffer
10545 implementation allocates a memory buffer for the requested display mode
10546 and provides it to the virtual machine. In <i>direct</i> mode, the
10547 IFramebuffer implementation uses the memory buffer allocated and owned
10548 by the virtual machine. This buffer represents the video memory of the
10549 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
10550 usually faster because the implementation gets a raw pointer to the
10551 guest VRAM buffer which it can directly use for visualizing the contents
10552 of the virtual display, as opposed to the indirect mode where the
10553 contents of guest VRAM are copied to the memory buffer provided by
10554 the implementation every time a display update occurs.
10555
10556 It is important to note that the direct mode is really fast only when
10557 the implementation uses the given guest VRAM buffer directly, for
10558 example, by blitting it to the window representing the virtual machine's
10559 display, which saves at least one copy operation comparing to the
10560 indirect mode. However, using the guest VRAM buffer directly is not
10561 always possible: the format and the color depth of this buffer may be
10562 not supported by the target window, or it may be unknown (opaque) as in
10563 case of text or non-linear multi-plane VGA video modes. In this case,
10564 the indirect mode (that is always available) should be used as a
10565 fallback: when the guest VRAM contents are copied to the
10566 implementation-provided memory buffer, color and format conversion is
10567 done automatically by the underlying code.
10568
10569 The @a pixelFormat parameter defines whether the direct mode is
10570 available or not. If @a pixelFormat is <link
10571 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
10572 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and
10573 @a bytesPerLine parameters must be ignored and the implementation must use
10574 the indirect mode (where it provides its own buffer in one of the
10575 supported formats). In all other cases, @a pixelFormat together with
10576 @a bitsPerPixel and @a bytesPerLine define the format of the video memory
10577 buffer pointed to by the @a VRAM parameter and the implementation is
10578 free to choose which mode to use. To indicate that this frame buffer uses
10579 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
10580 attribute must return @c true and <link to="#address"/> must
10581 return exactly the same address that is passed in the @a VRAM parameter
10582 of this method; otherwise it is assumed that the indirect strategy is
10583 chosen.
10584
10585 The @a width and @a height parameters represent the size of the
10586 requested display mode in both modes. In case of indirect mode, the
10587 provided memory buffer should be big enough to store data of the given
10588 display mode. In case of direct mode, it is guaranteed that the given
10589 @a VRAM buffer contains enough space to represent the display mode of the
10590 given size. Note that this frame buffer's <link to="#width"/> and <link
10591 to="#height"/> attributes must return exactly the same values as
10592 passed to this method after the resize is completed (see below).
10593
10594 The @a finished output parameter determines if the implementation has
10595 finished resizing the frame buffer or not. If, for some reason, the
10596 resize cannot be finished immediately during this call, @a finished
10597 must be set to @c false, and the implementation must call
10598 <link to="IDisplay::resizeCompleted"/> after it has returned from
10599 this method as soon as possible. If @a finished is @c false, the
10600 machine will not call any frame buffer methods until
10601 <link to="IDisplay::resizeCompleted"/> is called.
10602
10603 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
10604 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
10605 this frame buffer must return exactly the same values as specified in the
10606 parameters of this method, after the resize is completed. If the
10607 indirect mode is chosen, these attributes must return values describing
10608 the format of the implementation's own memory buffer <link
10609 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
10610 value must always correlate with <link to="#pixelFormat"/>. Note that
10611 the <link to="#pixelFormat"/> attribute must never return <link
10612 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
10613
10614 <note>
10615 This method is called by the IDisplay object under the
10616 <link to="#lock"/> provided by this IFramebuffer
10617 implementation. If this method returns @c false in @a finished, then
10618 this lock is not released until
10619 <link to="IDisplay::resizeCompleted"/> is called.
10620 </note>
10621 </desc>
10622 <param name="screenId" type="unsigned long" dir="in">
10623 <desc>
10624 Logical screen number. Must be used in the corresponding call to
10625 <link to="IDisplay::resizeCompleted"/> if this call is made.
10626 </desc>
10627 </param>
10628 <param name="pixelFormat" type="unsigned long" dir="in">
10629 <desc>
10630 Pixel format of the memory buffer pointed to by @a VRAM.
10631 See also <link to="FramebufferPixelFormat"/>.
10632 </desc>
10633 </param>
10634 <param name="VRAM" type="octet" mod="ptr" dir="in">
10635 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
10636 </param>
10637 <param name="bitsPerPixel" type="unsigned long" dir="in">
10638 <desc>Color depth, bits per pixel.</desc>
10639 </param>
10640 <param name="bytesPerLine" type="unsigned long" dir="in">
10641 <desc>Size of one scan line, in bytes.</desc>
10642 </param>
10643 <param name="width" type="unsigned long" dir="in">
10644 <desc>Width of the guest display, in pixels.</desc>
10645 </param>
10646 <param name="height" type="unsigned long" dir="in">
10647 <desc>Height of the guest display, in pixels.</desc>
10648 </param>
10649 <param name="finished" type="boolean" dir="return">
10650 <desc>
10651 Can the VM start using the new frame buffer immediately
10652 after this method returns or it should wait for
10653 <link to="IDisplay::resizeCompleted"/>.
10654 </desc>
10655 </param>
10656 </method>
10657
10658 <method name="videoModeSupported">
10659 <desc>
10660 Returns whether the frame buffer implementation is willing to
10661 support a given video mode. In case it is not able to render
10662 the video mode (or for some reason not willing), it should
10663 return @c false. Usually this method is called when the guest
10664 asks the VMM device whether a given video mode is supported
10665 so the information returned is directly exposed to the guest.
10666 It is important that this method returns very quickly.
10667 </desc>
10668 <param name="width" type="unsigned long" dir="in"/>
10669 <param name="height" type="unsigned long" dir="in"/>
10670 <param name="bpp" type="unsigned long" dir="in"/>
10671 <param name="supported" type="boolean" dir="return"/>
10672 </method>
10673
10674 <method name="getVisibleRegion">
10675 <desc>
10676 Returns the visible region of this frame buffer.
10677
10678 If the @a rectangles parameter is @c null then the value of the
10679 @a count parameter is ignored and the number of elements necessary to
10680 describe the current visible region is returned in @a countCopied.
10681
10682 If @a rectangles is not @c null but @a count is less
10683 than the required number of elements to store region data, the method
10684 will report a failure. If @a count is equal or greater than the
10685 required number of elements, then the actual number of elements copied
10686 to the provided array will be returned in @a countCopied.
10687
10688 <note>
10689 The address of the provided array must be in the process space of
10690 this IFramebuffer object.
10691 </note>
10692 <note>
10693 Method not yet implemented.
10694 </note>
10695 </desc>
10696 <param name="rectangles" type="octet" mod="ptr" dir="in">
10697 <desc>Pointer to the @c RTRECT array to receive region data.</desc>
10698 </param>
10699 <param name="count" type="unsigned long" dir="in">
10700 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
10701 </param>
10702 <param name="countCopied" type="unsigned long" dir="return">
10703 <desc>Number of elements copied to the @a rectangles array.</desc>
10704 </param>
10705 </method>
10706
10707 <method name="setVisibleRegion">
10708 <desc>
10709 Suggests a new visible region to this frame buffer. This region
10710 represents the area of the VM display which is a union of regions of
10711 all top-level windows of the guest operating system running inside the
10712 VM (if the Guest Additions for this system support this
10713 functionality). This information may be used by the frontends to
10714 implement the seamless desktop integration feature.
10715
10716 <note>
10717 The address of the provided array must be in the process space of
10718 this IFramebuffer object.
10719 </note>
10720 <note>
10721 The IFramebuffer implementation must make a copy of the provided
10722 array of rectangles.
10723 </note>
10724 <note>
10725 Method not yet implemented.
10726 </note>
10727 </desc>
10728 <param name="rectangles" type="octet" mod="ptr" dir="in">
10729 <desc>Pointer to the @c RTRECT array.</desc>
10730 </param>
10731 <param name="count" type="unsigned long" dir="in">
10732 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
10733 </param>
10734 </method>
10735
10736 <method name="processVHWACommand">
10737 <desc>
10738 Posts a Video HW Acceleration Command to the frame buffer for processing.
10739 The commands used for 2D video acceleration (DDraw surface creation/destroying, blitting, scaling, color covnersion, overlaying, etc.)
10740 are posted from quest to the host to be processed by the host hardware.
10741
10742 <note>
10743 The address of the provided command must be in the process space of
10744 this IFramebuffer object.
10745 </note>
10746 </desc>
10747
10748 <param name="command" type="octet" mod="ptr" dir="in">
10749 <desc>Pointer to VBOXVHWACMD containing the command to execute.</desc>
10750 </param>
10751 </method>
10752
10753 </interface>
10754
10755 <interface
10756 name="IFramebufferOverlay" extends="IFramebuffer"
10757 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
10758 wsmap="suppress"
10759 >
10760 <desc>
10761 The IFramebufferOverlay interface represents an alpha blended overlay
10762 for displaying status icons above an IFramebuffer. It is always created
10763 not visible, so that it must be explicitly shown. It only covers a
10764 portion of the IFramebuffer, determined by its width, height and
10765 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
10766 that order) format, and may be written to directly. Do re-read the
10767 width though, after setting it, as it may be adjusted (increased) to
10768 make it more suitable for the front end.
10769 </desc>
10770 <attribute name="x" type="unsigned long" readonly="yes">
10771 <desc>X position of the overlay, relative to the frame buffer.</desc>
10772 </attribute>
10773
10774 <attribute name="y" type="unsigned long" readonly="yes">
10775 <desc>Y position of the overlay, relative to the frame buffer.</desc>
10776 </attribute>
10777
10778 <attribute name="visible" type="boolean" readonly="no">
10779 <desc>
10780 Whether the overlay is currently visible.
10781 </desc>
10782 </attribute>
10783
10784 <attribute name="alpha" type="unsigned long" readonly="no">
10785 <desc>
10786 The global alpha value for the overlay. This may or may not be
10787 supported by a given front end.
10788 </desc>
10789 </attribute>
10790
10791 <method name="move">
10792 <desc>
10793 Changes the overlay's position relative to the IFramebuffer.
10794 </desc>
10795 <param name="x" type="unsigned long" dir="in"/>
10796 <param name="y" type="unsigned long" dir="in"/>
10797 </method>
10798
10799 </interface>
10800
10801 <interface
10802 name="IDisplay" extends="$unknown"
10803 uuid="1fa79e39-0cc9-4ab3-9df3-ed3e96b42496"
10804 wsmap="managed"
10805 >
10806 <desc>
10807 The IDisplay interface represents the virtual machine's display.
10808
10809 The object implementing this interface is contained in each
10810 <link to="IConsole::display"/> attribute and represents the visual
10811 output of the virtual machine.
10812
10813 The virtual display supports pluggable output targets represented by the
10814 IFramebuffer interface. Examples of the output target are a window on
10815 the host computer or an RDP session's display on a remote computer.
10816 </desc>
10817 <method name="getScreenResolution">
10818 <desc>Queries display width, height and color depth for given screen.</desc>
10819 <param name="screenId" type="unsigned long" dir="in"/>
10820 <param name="width" type="unsigned long" dir="out"/>
10821 <param name="height" type="unsigned long" dir="out"/>
10822 <param name="bitsPerPixel" type="unsigned long" dir="out"/>
10823 </method>
10824
10825 <method name="setFramebuffer">
10826 <desc>
10827 Sets the framebuffer for given screen.
10828 </desc>
10829 <param name="screenId" type="unsigned long" dir="in"/>
10830 <param name="framebuffer" type="IFramebuffer" dir="in"/>
10831 </method>
10832
10833 <method name="getFramebuffer">
10834 <desc>
10835 Queries the framebuffer for given screen.
10836 </desc>
10837 <param name="screenId" type="unsigned long" dir="in"/>
10838 <param name="framebuffer" type="IFramebuffer" dir="out"/>
10839 <param name="xOrigin" type="long" dir="out"/>
10840 <param name="yOrigin" type="long" dir="out"/>
10841 </method>
10842
10843 <method name="setVideoModeHint">
10844 <desc>
10845 Asks VirtualBox to request the given video mode from
10846 the guest. This is just a hint and it cannot be guaranteed
10847 that the requested resolution will be used. Guest Additions
10848 are required for the request to be seen by guests. The caller
10849 should issue the request and wait for a resolution change and
10850 after a timeout retry.
10851
10852 Specifying @c 0 for either @a width, @a height or @a bitsPerPixel
10853 parameters means that the corresponding values should be taken from the
10854 current video mode (i.e. left unchanged).
10855
10856 If the guest OS supports multi-monitor configuration then the @a display
10857 parameter specifies the number of the guest display to send the hint to:
10858 @c 0 is the primary display, @c 1 is the first secondary and
10859 so on. If the multi-monitor configuration is not supported, @a display
10860 must be @c 0.
10861
10862 <result name="E_INVALIDARG">
10863 The @a display is not associated with any monitor.
10864 </result>
10865
10866 </desc>
10867 <param name="width" type="unsigned long" dir="in"/>
10868 <param name="height" type="unsigned long" dir="in"/>
10869 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
10870 <param name="display" type="unsigned long" dir="in"/>
10871 </method>
10872
10873 <method name="setSeamlessMode">
10874 <desc>
10875 Enables or disables seamless guest display rendering (seamless desktop
10876 integration) mode.
10877 <note>
10878 Calling this method has no effect if <link
10879 to="IGuest::supportsSeamless"/> returns @c false.
10880 </note>
10881 </desc>
10882 <param name="enabled" type="boolean" dir="in"/>
10883 </method>
10884
10885 <method name="takeScreenShot">
10886 <desc>
10887 Takes a screen shot of the requested size and copies it to the
10888 32-bpp buffer allocated by the caller and pointed to by @a address.
10889 A pixel consists of 4 bytes in order: B, G, R, 0.
10890
10891 <note>This API can be used only by the COM/XPCOM C++ API as it
10892 requires pointer support. Use <link to="#takeScreenShotToArray" />
10893 with other language bindings.
10894 </note>
10895
10896 <result name="E_NOTIMPL">
10897 Feature not implemented.
10898 </result>
10899 <result name="VBOX_E_IPRT_ERROR">
10900 Could not take a screenshot.
10901 </result>
10902
10903 </desc>
10904 <param name="screenId" type="unsigned long" dir="in"/>
10905 <param name="address" type="octet" mod="ptr" dir="in"/>
10906 <param name="width" type="unsigned long" dir="in"/>
10907 <param name="height" type="unsigned long" dir="in"/>
10908 </method>
10909
10910 <method name="takeScreenShotToArray">
10911 <desc>
10912 Takes a guest screen shot of the requested size and returns it as
10913 an array of bytes in uncompressed 32-bit RGBA format.
10914 A pixel consists of 4 bytes in order: R, G, B, 0xFF.
10915
10916 This API is slow, but could be the only option to get guest screenshot
10917 for scriptable languages not allowed to manipulate with addresses
10918 directly.
10919
10920 <result name="E_NOTIMPL">
10921 Feature not implemented.
10922 </result>
10923 <result name="VBOX_E_IPRT_ERROR">
10924 Could not take a screenshot.
10925 </result>
10926 </desc>
10927 <param name="screenId" type="unsigned long" dir="in">
10928 <desc>
10929 Monitor to take screenshot from.
10930 </desc>
10931 </param>
10932 <param name="width" type="unsigned long" dir="in">
10933 <desc>
10934 Desired image width.
10935 </desc>
10936 </param>
10937 <param name="height" type="unsigned long" dir="in">
10938 <desc>
10939 Desired image height.
10940 </desc>
10941 </param>
10942 <param name="screenData" type="octet" dir="return" safearray="yes">
10943 <desc>
10944 Array with resulting screen data.
10945 </desc>
10946 </param>
10947 </method>
10948
10949 <method name="drawToScreen">
10950 <desc>
10951 Draws a 32-bpp image of the specified size from the given buffer
10952 to the given point on the VM display.
10953
10954 <result name="E_NOTIMPL">
10955 Feature not implemented.
10956 </result>
10957 <result name="VBOX_E_IPRT_ERROR">
10958 Could not draw to screen.
10959 </result>
10960
10961 </desc>
10962 <param name="screenId" type="unsigned long" dir="in"/>
10963 <param name="address" type="octet" mod="ptr" dir="in"/>
10964 <param name="x" type="unsigned long" dir="in">
10965 <desc>Relative to the screen top left corner.</desc>
10966 </param>
10967 <param name="y" type="unsigned long" dir="in">
10968 <desc>Relative to the screen top left corner.</desc>
10969 </param>
10970 <param name="width" type="unsigned long" dir="in"/>
10971 <param name="height" type="unsigned long" dir="in"/>
10972 </method>
10973
10974 <method name="invalidateAndUpdate">
10975 <desc>
10976 Does a full invalidation of the VM display and instructs the VM
10977 to update it.
10978
10979 <result name="VBOX_E_IPRT_ERROR">
10980 Could not invalidate and update screen.
10981 </result>
10982
10983 </desc>
10984 </method>
10985
10986 <method name="resizeCompleted">
10987 <desc>
10988 Signals that a framebuffer has completed the resize operation.
10989
10990 <result name="VBOX_E_NOT_SUPPORTED">
10991 Operation only valid for external frame buffers.
10992 </result>
10993
10994 </desc>
10995 <param name="screenId" type="unsigned long" dir="in"/>
10996 </method>
10997
10998 <method name="completeVHWACommand">
10999 <desc>
11000 Signals that the Video HW Acceleration command has completed.
11001 </desc>
11002
11003 <param name="command" type="octet" mod="ptr" dir="in">
11004 <desc>Pointer to VBOXVHWACMD containing the completed command.</desc>
11005 </param>
11006 </method>
11007
11008 </interface>
11009
11010 <!--
11011 // INetworkAdapter
11012 /////////////////////////////////////////////////////////////////////////
11013 -->
11014
11015 <enum
11016 name="NetworkAttachmentType"
11017 uuid="44bce1ee-99f7-4e8e-89fc-80597fd9eeaf"
11018 >
11019 <desc>
11020 Network attachment type.
11021 </desc>
11022
11023 <const name="Null" value="0">
11024 <desc>Null value, also means "not attached".</desc>
11025 </const>
11026 <const name="NAT" value="1"/>
11027 <const name="Bridged" value="2"/>
11028 <const name="Internal" value="3"/>
11029 <const name="HostOnly" value="4"/>
11030 <const name="VDE" value="5"/>
11031 </enum>
11032
11033 <enum
11034 name="NetworkAdapterType"
11035 uuid="3c2281e4-d952-4e87-8c7d-24379cb6a81c"
11036 >
11037 <desc>
11038 Network adapter type.
11039 </desc>
11040
11041 <const name="Null" value="0">
11042 <desc>Null value (never used by the API).</desc>
11043 </const>
11044 <const name="Am79C970A" value="1">
11045 <desc>AMD PCNet-PCI II network card (Am79C970A).</desc>
11046 </const>
11047 <const name="Am79C973" value="2">
11048 <desc>AMD PCNet-FAST III network card (Am79C973).</desc>
11049 </const>
11050 <const name="I82540EM" value="3">
11051 <desc>Intel PRO/1000 MT Desktop network card (82540EM).</desc>
11052 </const>
11053 <const name="I82543GC" value="4">
11054 <desc>Intel PRO/1000 T Server network card (82543GC).</desc>
11055 </const>
11056 <const name="I82545EM" value="5">
11057 <desc>Intel PRO/1000 MT Server network card (82545EM).</desc>
11058 </const>
11059 <const name="Virtio" value="6">
11060 <desc>Virtio network device.</desc>
11061 </const>
11062 </enum>
11063
11064 <interface
11065 name="INetworkAdapter" extends="$unknown"
11066 uuid="5bdb9df8-a5e1-4322-a139-b7a4a734c790"
11067 wsmap="managed"
11068 >
11069 <desc>
11070 Represents a virtual network adapter that is attached to a virtual machine.
11071 Each virtual machine has a fixed number of network adapter slots with one
11072 instance of this attached to each of them. Call
11073 <link to="IMachine::getNetworkAdapter" /> to get the network adapter that
11074 is attached to a given slot in a given machine.
11075
11076 Each network adapter can be in one of five attachment modes, which are
11077 represented by the <link to="NetworkAttachmentType" /> enumeration;
11078 see the <link to="#attachmentType" /> attribute.
11079 </desc>
11080
11081 <attribute name="adapterType" type="NetworkAdapterType">
11082 <desc>
11083 Type of the virtual network adapter. Depending on this value,
11084 VirtualBox will provide a different virtual network hardware
11085 to the guest.
11086 </desc>
11087 </attribute>
11088
11089 <attribute name="slot" type="unsigned long" readonly="yes">
11090 <desc>
11091 Slot number this adapter is plugged into. Corresponds to
11092 the value you pass to <link to="IMachine::getNetworkAdapter"/>
11093 to obtain this instance.
11094 </desc>
11095 </attribute>
11096
11097 <attribute name="enabled" type="boolean">
11098 <desc>
11099 Flag whether the network adapter is present in the
11100 guest system. If disabled, the virtual guest hardware will
11101 not contain this network adapter. Can only be changed when
11102 the VM is not running.
11103 </desc>
11104 </attribute>
11105
11106 <attribute name="MACAddress" type="wstring">
11107 <desc>
11108 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
11109 it to @c null or an empty string, VirtualBox will generate a unique MAC address.
11110 </desc>
11111 </attribute>
11112
11113 <attribute name="attachmentType" type="NetworkAttachmentType" readonly="yes"/>
11114
11115 <attribute name="hostInterface" type="wstring">
11116 <desc>
11117 Name of the host network interface the VM is attached to.
11118 </desc>
11119 </attribute>
11120
11121 <attribute name="internalNetwork" type="wstring">
11122 <desc>
11123 Name of the internal network the VM is attached to.
11124 </desc>
11125 </attribute>
11126
11127 <attribute name="NATNetwork" type="wstring">
11128 <desc>
11129 Name of the NAT network the VM is attached to.
11130 </desc>
11131 </attribute>
11132
11133 <attribute name="VDENetwork" type="wstring">
11134 <desc>
11135 Name of the VDE switch the VM is attached to.
11136 </desc>
11137 </attribute>
11138
11139 <attribute name="cableConnected" type="boolean">
11140 <desc>
11141 Flag whether the adapter reports the cable as connected or not.
11142 It can be used to report offline situations to a VM.
11143 </desc>
11144 </attribute>
11145
11146 <attribute name="lineSpeed" type="unsigned long">
11147 <desc>
11148 Line speed reported by custom drivers, in units of 1 kbps.
11149 </desc>
11150 </attribute>
11151
11152 <attribute name="traceEnabled" type="boolean">
11153 <desc>
11154 Flag whether network traffic from/to the network card should be traced.
11155 Can only be toggled when the VM is turned off.
11156 </desc>
11157 </attribute>
11158
11159 <attribute name="traceFile" type="wstring">
11160 <desc>
11161 Filename where a network trace will be stored. If not set, VBox-pid.pcap
11162 will be used.
11163 </desc>
11164 </attribute>
11165
11166 <attribute name="natDriver" type="INATEngine" readonly="yes">
11167 <desc>
11168 Points to the NAT engine which handles the network address translation
11169 for this interface. This is active only when the interface actually uses
11170 NAT (see <link to="#attachToNAT" />).
11171 </desc>
11172 </attribute>
11173
11174 <attribute name="bootPriority" type="unsigned long">
11175 <desc>
11176 Network boot priority of the adapter. Priority 1 is highest. If not set,
11177 the priority is considered to be at the lowest possible setting.
11178 </desc>
11179 </attribute>
11180
11181 <method name="attachToNAT">
11182 <desc>
11183 Attach the network adapter to the Network Address Translation (NAT) interface.
11184 </desc>
11185 </method>
11186
11187 <method name="attachToBridgedInterface">
11188 <desc>
11189 Attach the network adapter to a bridged host interface.
11190 </desc>
11191 </method>
11192
11193 <method name="attachToInternalNetwork">
11194 <desc>
11195 Attach the network adapter to an internal network.
11196 </desc>
11197 </method>
11198
11199 <method name="attachToHostOnlyInterface">
11200 <desc>
11201 Attach the network adapter to the host-only network.
11202 </desc>
11203 </method>
11204
11205 <method name="attachToVDE">
11206 <desc>
11207 Attach the network adapter to a VDE network.
11208 </desc>
11209 </method>
11210
11211 <method name="detach">
11212 <desc>
11213 Detach the network adapter
11214 </desc>
11215 </method>
11216 </interface>
11217
11218
11219 <!--
11220 // ISerialPort
11221 /////////////////////////////////////////////////////////////////////////
11222 -->
11223
11224 <enum
11225 name="PortMode"
11226 uuid="533b5fe3-0185-4197-86a7-17e37dd39d76"
11227 >
11228 <desc>
11229 The PortMode enumeration represents possible communication modes for
11230 the virtual serial port device.
11231 </desc>
11232
11233 <const name="Disconnected" value="0">
11234 <desc>Virtual device is not attached to any real host device.</desc>
11235 </const>
11236 <const name="HostPipe" value="1">
11237 <desc>Virtual device is attached to a host pipe.</desc>
11238 </const>
11239 <const name="HostDevice" value="2">
11240 <desc>Virtual device is attached to a host device.</desc>
11241 </const>
11242 <const name="RawFile" value="3">
11243 <desc>Virtual device is attached to a raw file.</desc>
11244 </const>
11245 </enum>
11246
11247 <interface
11248 name="ISerialPort" extends="$unknown"
11249 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
11250 wsmap="managed"
11251 >
11252
11253 <desc>
11254 The ISerialPort interface represents the virtual serial port device.
11255
11256 The virtual serial port device acts like an ordinary serial port
11257 inside the virtual machine. This device communicates to the real
11258 serial port hardware in one of two modes: host pipe or host device.
11259
11260 In host pipe mode, the #path attribute specifies the path to the pipe on
11261 the host computer that represents a serial port. The #server attribute
11262 determines if this pipe is created by the virtual machine process at
11263 machine startup or it must already exist before starting machine
11264 execution.
11265
11266 In host device mode, the #path attribute specifies the name of the
11267 serial port device on the host computer.
11268
11269 There is also a third communication mode: the disconnected mode. In this
11270 mode, the guest OS running inside the virtual machine will be able to
11271 detect the serial port, but all port write operations will be discarded
11272 and all port read operations will return no data.
11273
11274 <see>IMachine::getSerialPort</see>
11275 </desc>
11276
11277 <attribute name="slot" type="unsigned long" readonly="yes">
11278 <desc>
11279 Slot number this serial port is plugged into. Corresponds to
11280 the value you pass to <link to="IMachine::getSerialPort"/>
11281 to obtain this instance.
11282 </desc>
11283 </attribute>
11284
11285 <attribute name="enabled" type="boolean">
11286 <desc>
11287 Flag whether the serial port is enabled. If disabled,
11288 the serial port will not be reported to the guest OS.
11289 </desc>
11290 </attribute>
11291
11292 <attribute name="IOBase" type="unsigned long">
11293 <desc>Base I/O address of the serial port.</desc>
11294 </attribute>
11295
11296 <attribute name="IRQ" type="unsigned long">
11297 <desc>IRQ number of the serial port.</desc>
11298 </attribute>
11299
11300 <attribute name="hostMode" type="PortMode">
11301 <desc>
11302 How is this port connected to the host.
11303 <note>
11304 Changing this attribute may fail if the conditions for
11305 <link to="#path"/> are not met.
11306 </note>
11307 </desc>
11308 </attribute>
11309
11310 <attribute name="server" type="boolean">
11311 <desc>
11312 Flag whether this serial port acts as a server (creates a new pipe on
11313 the host) or as a client (uses the existing pipe). This attribute is
11314 used only when <link to="#hostMode"/> is PortMode_HostPipe.
11315 </desc>
11316 </attribute>
11317
11318 <attribute name="path" type="wstring">
11319 <desc>
11320 Path to the serial port's pipe on the host when <link to="ISerialPort::hostMode"/> is
11321 PortMode_HostPipe, or the host serial device name when
11322 <link to="ISerialPort::hostMode"/> is PortMode_HostDevice. For both
11323 cases, setting a @c null or empty string as the attribute's value
11324 is an error. Otherwise, the value of this property is ignored.
11325 </desc>
11326 </attribute>
11327
11328 </interface>
11329
11330 <!--
11331 // IParallelPort
11332 /////////////////////////////////////////////////////////////////////////
11333 -->
11334
11335 <interface
11336 name="IParallelPort" extends="$unknown"
11337 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
11338 wsmap="managed"
11339 >
11340
11341 <desc>
11342 The IParallelPort interface represents the virtual parallel port device.
11343
11344 The virtual parallel port device acts like an ordinary parallel port
11345 inside the virtual machine. This device communicates to the real
11346 parallel port hardware using the name of the parallel device on the host
11347 computer specified in the #path attribute.
11348
11349 Each virtual parallel port device is assigned a base I/O address and an
11350 IRQ number that will be reported to the guest operating system and used
11351 to operate the given parallel port from within the virtual machine.
11352
11353 <see>IMachine::getParallelPort</see>
11354 </desc>
11355
11356 <attribute name="slot" type="unsigned long" readonly="yes">
11357 <desc>
11358 Slot number this parallel port is plugged into. Corresponds to
11359 the value you pass to <link to="IMachine::getParallelPort"/>
11360 to obtain this instance.
11361 </desc>
11362 </attribute>
11363
11364 <attribute name="enabled" type="boolean">
11365 <desc>
11366 Flag whether the parallel port is enabled. If disabled,
11367 the parallel port will not be reported to the guest OS.
11368 </desc>
11369 </attribute>
11370
11371 <attribute name="IOBase" type="unsigned long">
11372 <desc>Base I/O address of the parallel port.</desc>
11373 </attribute>
11374
11375 <attribute name="IRQ" type="unsigned long">
11376 <desc>IRQ number of the parallel port.</desc>
11377 </attribute>
11378
11379 <attribute name="path" type="wstring">
11380 <desc>
11381 Host parallel device name. If this parallel port is enabled, setting a
11382 @c null or an empty string as this attribute's value will result into
11383 an error.
11384 </desc>
11385 </attribute>
11386
11387 </interface>
11388
11389
11390 <!--
11391 // IMachineDebugger
11392 /////////////////////////////////////////////////////////////////////////
11393 -->
11394
11395 <interface
11396 name="IMachineDebugger" extends="$unknown"
11397 uuid="b0b2a2dd-0627-4502-91c2-ddc5e77609e0"
11398 wsmap="suppress"
11399 >
11400 <method name="resetStats">
11401 <desc>
11402 Reset VM statistics.
11403 </desc>
11404 <param name="pattern" type="wstring" dir="in">
11405 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11406 </param>
11407 </method>
11408
11409 <method name="dumpStats">
11410 <desc>
11411 Dumps VM statistics.
11412 </desc>
11413 <param name="pattern" type="wstring" dir="in">
11414 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11415 </param>
11416 </method>
11417
11418 <method name="getStats">
11419 <desc>
11420 Get the VM statistics in a XMLish format.
11421 </desc>
11422 <param name="pattern" type="wstring" dir="in">
11423 <desc>The selection pattern. A bit similar to filename globbing.</desc>
11424 </param>
11425 <param name="withDescriptions" type="boolean" dir="in">
11426 <desc>Whether to include the descriptions.</desc>
11427 </param>
11428 <param name="stats" type="wstring" dir="out">
11429 <desc>The XML document containing the statistics.</desc>
11430 </param>
11431 </method>
11432
11433 <method name="injectNMI">
11434 <desc>
11435 Inject an NMI into a running VT-x/AMD-V VM.
11436 </desc>
11437 </method>
11438
11439 <attribute name="singlestep" type="boolean">
11440 <desc>Switch for enabling singlestepping.</desc>
11441 </attribute>
11442
11443 <attribute name="recompileUser" type="boolean">
11444 <desc>Switch for forcing code recompilation for user mode code.</desc>
11445 </attribute>
11446
11447 <attribute name="recompileSupervisor" type="boolean">
11448 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
11449 </attribute>
11450
11451 <attribute name="PATMEnabled" type="boolean">
11452 <desc>Switch for enabling and disabling the PATM component.</desc>
11453 </attribute>
11454
11455 <attribute name="CSAMEnabled" type="boolean">
11456 <desc>Switch for enabling and disabling the CSAM component.</desc>
11457 </attribute>
11458
11459 <attribute name="logEnabled" type="boolean">
11460 <desc>Switch for enabling and disabling logging.</desc>
11461 </attribute>
11462
11463 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
11464 <desc>
11465 Flag indicating whether the VM is currently making use of CPU hardware
11466 virtualization extensions.
11467 </desc>
11468 </attribute>
11469
11470 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
11471 <desc>
11472 Flag indicating whether the VM is currently making use of the nested paging
11473 CPU hardware virtualization extension.
11474 </desc>
11475 </attribute>
11476
11477 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
11478 <desc>
11479 Flag indicating whether the VM is currently making use of the VPID
11480 VT-x extension.
11481 </desc>
11482 </attribute>
11483
11484 <attribute name="PAEEnabled" type="boolean" readonly="yes">
11485 <desc>
11486 Flag indicating whether the VM is currently making use of the Physical
11487 Address Extension CPU feature.
11488 </desc>
11489 </attribute>
11490
11491 <attribute name="virtualTimeRate" type="unsigned long">
11492 <desc>
11493 The rate at which the virtual time runs expressed as a percentage.
11494 The accepted range is 2% to 20000%.
11495 </desc>
11496 </attribute>
11497
11498 <!-- @todo method for setting log flags, groups and destination! -->
11499
11500 <attribute name="VM" type="unsigned long long" readonly="yes">
11501 <desc>
11502 Gets the VM handle. This is only for internal use while
11503 we carve the details of this interface.
11504 </desc>
11505 </attribute>
11506
11507 </interface>
11508
11509 <!--
11510 // IUSBController
11511 /////////////////////////////////////////////////////////////////////////
11512 -->
11513
11514 <interface
11515 name="IUSBController" extends="$unknown"
11516 uuid="6fdcccc5-abd3-4fec-9387-2ad3914fc4a8"
11517 wsmap="managed"
11518 >
11519 <attribute name="enabled" type="boolean">
11520 <desc>
11521 Flag whether the USB controller is present in the
11522 guest system. If disabled, the virtual guest hardware will
11523 not contain any USB controller. Can only be changed when
11524 the VM is powered off.
11525 </desc>
11526 </attribute>
11527
11528 <attribute name="enabledEhci" type="boolean">
11529 <desc>
11530 Flag whether the USB EHCI controller is present in the
11531 guest system. If disabled, the virtual guest hardware will
11532 not contain a USB EHCI controller. Can only be changed when
11533 the VM is powered off.
11534 </desc>
11535 </attribute>
11536
11537 <attribute name="proxyAvailable" type="boolean" readonly="yes">
11538 <desc>
11539 Flag whether there is an USB proxy available.
11540 </desc>
11541 </attribute>
11542
11543 <attribute name="USBStandard" type="unsigned short" readonly="yes">
11544 <desc>
11545 USB standard version which the controller implements.
11546 This is a BCD which means that the major version is in the
11547 high byte and minor version is in the low byte.
11548 </desc>
11549 </attribute>
11550
11551 <attribute name="deviceFilters" type="IUSBDeviceFilter" readonly="yes" safearray="yes">
11552 <desc>
11553 List of USB device filters associated with the machine.
11554
11555 If the machine is currently running, these filters are activated
11556 every time a new (supported) USB device is attached to the host
11557 computer that was not ignored by global filters
11558 (<link to="IHost::USBDeviceFilters"/>).
11559
11560 These filters are also activated when the machine is powered up.
11561 They are run against a list of all currently available USB
11562 devices (in states
11563 <link to="USBDeviceState_Available"/>,
11564 <link to="USBDeviceState_Busy"/>,
11565 <link to="USBDeviceState_Held"/>) that were not previously
11566 ignored by global filters.
11567
11568 If at least one filter matches the USB device in question, this
11569 device is automatically captured (attached to) the virtual USB
11570 controller of this machine.
11571
11572 <see>IUSBDeviceFilter, ::IUSBController</see>
11573 </desc>
11574 </attribute>
11575
11576 <method name="createDeviceFilter">
11577 <desc>
11578 Creates a new USB device filter. All attributes except
11579 the filter name are set to empty (any match),
11580 <i>active</i> is @c false (the filter is not active).
11581
11582 The created filter can then be added to the list of filters using
11583 <link to="#insertDeviceFilter"/>.
11584
11585 <result name="VBOX_E_INVALID_VM_STATE">
11586 The virtual machine is not mutable.
11587 </result>
11588
11589 <see>#deviceFilters</see>
11590 </desc>
11591 <param name="name" type="wstring" dir="in">
11592 <desc>
11593 Filter name. See <link to="IUSBDeviceFilter::name"/>
11594 for more info.
11595 </desc>
11596 </param>
11597 <param name="filter" type="IUSBDeviceFilter" dir="return">
11598 <desc>Created filter object.</desc>
11599 </param>
11600 </method>
11601
11602 <method name="insertDeviceFilter">
11603 <desc>
11604 Inserts the given USB device to the specified position
11605 in the list of filters.
11606
11607 Positions are numbered starting from <tt>0</tt>. If the specified
11608 position is equal to or greater than the number of elements in
11609 the list, the filter is added to the end of the collection.
11610
11611 <note>
11612 Duplicates are not allowed, so an attempt to insert a
11613 filter that is already in the collection, will return an
11614 error.
11615 </note>
11616
11617 <result name="VBOX_E_INVALID_VM_STATE">
11618 Virtual machine is not mutable.
11619 </result>
11620 <result name="E_INVALIDARG">
11621 USB device filter not created within this VirtualBox instance.
11622 </result>
11623 <result name="VBOX_E_INVALID_OBJECT_STATE">
11624 USB device filter already in list.
11625 </result>
11626
11627 <see>#deviceFilters</see>
11628 </desc>
11629 <param name="position" type="unsigned long" dir="in">
11630 <desc>Position to insert the filter to.</desc>
11631 </param>
11632 <param name="filter" type="IUSBDeviceFilter" dir="in">
11633 <desc>USB device filter to insert.</desc>
11634 </param>
11635 </method>
11636
11637 <method name="removeDeviceFilter">
11638 <desc>
11639 Removes a USB device filter from the specified position in the
11640 list of filters.
11641
11642 Positions are numbered starting from <tt>0</tt>. Specifying a
11643 position equal to or greater than the number of elements in
11644 the list will produce an error.
11645
11646 <see>#deviceFilters</see>
11647
11648 <result name="VBOX_E_INVALID_VM_STATE">
11649 Virtual machine is not mutable.
11650 </result>
11651 <result name="E_INVALIDARG">
11652 USB device filter list empty or invalid @a position.
11653 </result>
11654
11655 </desc>
11656 <param name="position" type="unsigned long" dir="in">
11657 <desc>Position to remove the filter from.</desc>
11658 </param>
11659 <param name="filter" type="IUSBDeviceFilter" dir="return">
11660 <desc>Removed USB device filter.</desc>
11661 </param>
11662 </method>
11663
11664 </interface>
11665
11666
11667 <!--
11668 // IUSBDevice
11669 /////////////////////////////////////////////////////////////////////////
11670 -->
11671
11672 <interface
11673 name="IUSBDevice" extends="$unknown"
11674 uuid="f8967b0b-4483-400f-92b5-8b675d98a85b"
11675 wsmap="managed"
11676 >
11677 <desc>
11678 The IUSBDevice interface represents a virtual USB device attached to the
11679 virtual machine.
11680
11681 A collection of objects implementing this interface is stored in the
11682 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
11683 attached to a running virtual machine's USB controller.
11684 </desc>
11685
11686 <attribute name="id" type="uuid" mod="string" readonly="yes">
11687 <desc>
11688 Unique USB device ID. This ID is built from #vendorId,
11689 #productId, #revision and #serialNumber.
11690 </desc>
11691 </attribute>
11692
11693 <attribute name="vendorId" type="unsigned short" readonly="yes">
11694 <desc>Vendor ID.</desc>
11695 </attribute>
11696
11697 <attribute name="productId" type="unsigned short" readonly="yes">
11698 <desc>Product ID.</desc>
11699 </attribute>
11700
11701 <attribute name="revision" type="unsigned short" readonly="yes">
11702 <desc>
11703 Product revision number. This is a packed BCD represented as
11704 unsigned short. The high byte is the integer part and the low
11705 byte is the decimal.
11706 </desc>
11707 </attribute>
11708
11709 <attribute name="manufacturer" type="wstring" readonly="yes">
11710 <desc>Manufacturer string.</desc>
11711 </attribute>
11712
11713 <attribute name="product" type="wstring" readonly="yes">
11714 <desc>Product string.</desc>
11715 </attribute>
11716
11717 <attribute name="serialNumber" type="wstring" readonly="yes">
11718 <desc>Serial number string.</desc>
11719 </attribute>
11720
11721 <attribute name="address" type="wstring" readonly="yes">
11722 <desc>Host specific address of the device.</desc>
11723 </attribute>
11724
11725 <attribute name="port" type="unsigned short" readonly="yes">
11726 <desc>
11727 Host USB port number the device is physically
11728 connected to.
11729 </desc>
11730 </attribute>
11731
11732 <attribute name="version" type="unsigned short" readonly="yes">
11733 <desc>
11734 The major USB version of the device - 1 or 2.
11735 </desc>
11736 </attribute>
11737
11738 <attribute name="portVersion" type="unsigned short" readonly="yes">
11739 <desc>
11740 The major USB version of the host USB port the device is
11741 physically connected to - 1 or 2. For devices not connected to
11742 anything this will have the same value as the version attribute.
11743 </desc>
11744 </attribute>
11745
11746 <attribute name="remote" type="boolean" readonly="yes">
11747 <desc>
11748 Whether the device is physically connected to a remote VRDP
11749 client or to a local host machine.
11750 </desc>
11751 </attribute>
11752
11753 </interface>
11754
11755
11756 <!--
11757 // IUSBDeviceFilter
11758 /////////////////////////////////////////////////////////////////////////
11759 -->
11760
11761 <interface
11762 name="IUSBDeviceFilter" extends="$unknown"
11763 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
11764 wsmap="managed"
11765 >
11766 <desc>
11767 The IUSBDeviceFilter interface represents an USB device filter used
11768 to perform actions on a group of USB devices.
11769
11770 This type of filters is used by running virtual machines to
11771 automatically capture selected USB devices once they are physically
11772 attached to the host computer.
11773
11774 A USB device is matched to the given device filter if and only if all
11775 attributes of the device match the corresponding attributes of the
11776 filter (that is, attributes are joined together using the logical AND
11777 operation). On the other hand, all together, filters in the list of
11778 filters carry the semantics of the logical OR operation. So if it is
11779 desirable to create a match like "this vendor id OR this product id",
11780 one needs to create two filters and specify "any match" (see below)
11781 for unused attributes.
11782
11783 All filter attributes used for matching are strings. Each string
11784 is an expression representing a set of values of the corresponding
11785 device attribute, that will match the given filter. Currently, the
11786 following filtering expressions are supported:
11787
11788 <ul>
11789 <li><i>Interval filters</i>. Used to specify valid intervals for
11790 integer device attributes (Vendor ID, Product ID and Revision).
11791 The format of the string is:
11792
11793 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
11794
11795 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
11796 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
11797 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
11798 is omitted before a dash (<tt>-</tt>), the minimum possible integer
11799 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
11800 possible integer is assumed.
11801 </li>
11802 <li><i>Boolean filters</i>. Used to specify acceptable values for
11803 boolean device attributes. The format of the string is:
11804
11805 <tt>true|false|yes|no|0|1</tt>
11806
11807 </li>
11808 <li><i>Exact match</i>. Used to specify a single value for the given
11809 device attribute. Any string that doesn't start with <tt>int:</tt>
11810 represents the exact match. String device attributes are compared to
11811 this string including case of symbols. Integer attributes are first
11812 converted to a string (see individual filter attributes) and then
11813 compared ignoring case.
11814
11815 </li>
11816 <li><i>Any match</i>. Any value of the corresponding device attribute
11817 will match the given filter. An empty or @c null string is
11818 used to construct this type of filtering expressions.
11819
11820 </li>
11821 </ul>
11822
11823 <note>
11824 On the Windows host platform, interval filters are not currently
11825 available. Also all string filter attributes
11826 (<link to="#manufacturer"/>, <link to="#product"/>,
11827 <link to="#serialNumber"/>) are ignored, so they behave as
11828 <i>any match</i> no matter what string expression is specified.
11829 </note>
11830
11831 <see>IUSBController::deviceFilters, IHostUSBDeviceFilter</see>
11832 </desc>
11833
11834 <attribute name="name" type="wstring">
11835 <desc>
11836 Visible name for this filter.
11837 This name is used to visually distinguish one filter from another,
11838 so it can neither be @c null nor an empty string.
11839 </desc>
11840 </attribute>
11841
11842 <attribute name="active" type="boolean">
11843 <desc>Whether this filter active or has been temporarily disabled.</desc>
11844 </attribute>
11845
11846 <attribute name="vendorId" type="wstring">
11847 <desc>
11848 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
11849 The string representation for the <i>exact matching</i>
11850 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
11851 (including leading zeroes).
11852 </desc>
11853 </attribute>
11854
11855 <attribute name="productId" type="wstring">
11856 <desc>
11857 <link to="IUSBDevice::productId">Product ID</link> filter.
11858 The string representation for the <i>exact matching</i>
11859 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
11860 (including leading zeroes).
11861 </desc>
11862 </attribute>
11863
11864 <attribute name="revision" type="wstring">
11865 <desc>
11866 <link to="IUSBDevice::productId">Product revision number</link>
11867 filter. The string representation for the <i>exact matching</i>
11868 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
11869 of the integer part of the revision, and <tt>F</tt> is the
11870 decimal digit of its fractional part (including leading and
11871 trailing zeros).
11872 Note that for interval filters, it's best to use the hexadecimal
11873 form, because the revision is stored as a 16 bit packed BCD value;
11874 so the expression <tt>int:0x0100-0x0199</tt> will match any
11875 revision from <tt>1.0</tt> to <tt>1.99</tt>.
11876 </desc>
11877 </attribute>
11878
11879 <attribute name="manufacturer" type="wstring">
11880 <desc>
11881 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
11882 </desc>
11883 </attribute>
11884
11885 <attribute name="product" type="wstring">
11886 <desc>
11887 <link to="IUSBDevice::product">Product</link> filter.
11888 </desc>
11889 </attribute>
11890
11891 <attribute name="serialNumber" type="wstring">
11892 <desc>
11893 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
11894 </desc>
11895 </attribute>
11896
11897 <attribute name="port" type="wstring">
11898 <desc>
11899 <link to="IUSBDevice::port">Host USB port</link> filter.
11900 </desc>
11901 </attribute>
11902
11903 <attribute name="remote" type="wstring">
11904 <desc>
11905 <link to="IUSBDevice::remote">Remote state</link> filter.
11906 <note>
11907 This filter makes sense only for machine USB filters,
11908 i.e. it is ignored by IHostUSBDeviceFilter objects.
11909 </note>
11910 </desc>
11911 </attribute>
11912
11913 <attribute name="maskedInterfaces" type="unsigned long">
11914 <desc>
11915 This is an advanced option for hiding one or more USB interfaces
11916 from the guest. The value is a bit mask where the bits that are set
11917 means the corresponding USB interface should be hidden, masked off
11918 if you like.
11919 This feature only works on Linux hosts.
11920 </desc>
11921 </attribute>
11922
11923 </interface>
11924
11925
11926 <!--
11927 // IHostUSBDevice
11928 /////////////////////////////////////////////////////////////////////////
11929 -->
11930
11931 <enum
11932 name="USBDeviceState"
11933 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
11934 >
11935 <desc>
11936 USB device state. This enumeration represents all possible states
11937 of the USB device physically attached to the host computer regarding
11938 its state on the host computer and availability to guest computers
11939 (all currently running virtual machines).
11940
11941 Once a supported USB device is attached to the host, global USB
11942 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
11943 either ignore the device, or put it to USBDeviceState_Held state, or do
11944 nothing. Unless the device is ignored by global filters, filters of all
11945 currently running guests (<link to="IUSBController::deviceFilters"/>) are
11946 activated that can put it to USBDeviceState_Captured state.
11947
11948 If the device was ignored by global filters, or didn't match
11949 any filters at all (including guest ones), it is handled by the host
11950 in a normal way. In this case, the device state is determined by
11951 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
11952 or USBDeviceState_Available, depending on the current device usage.
11953
11954 Besides auto-capturing based on filters, the device can be manually
11955 captured by guests (<link to="IConsole::attachUSBDevice"/>) if its
11956 state is USBDeviceState_Busy, USBDeviceState_Available or
11957 USBDeviceState_Held.
11958
11959 <note>
11960 Due to differences in USB stack implementations in Linux and Win32,
11961 states USBDeviceState_Busy and USBDeviceState_vailable are applicable
11962 only to the Linux version of the product. This also means that (<link
11963 to="IConsole::attachUSBDevice"/>) can only succeed on Win32 if the
11964 device state is USBDeviceState_Held.
11965 </note>
11966
11967 <see>IHostUSBDevice, IHostUSBDeviceFilter</see>
11968 </desc>
11969
11970 <const name="NotSupported" value="0">
11971 <desc>
11972 Not supported by the VirtualBox server, not available to guests.
11973 </desc>
11974 </const>
11975 <const name="Unavailable" value="1">
11976 <desc>
11977 Being used by the host computer exclusively,
11978 not available to guests.
11979 </desc>
11980 </const>
11981 <const name="Busy" value="2">
11982 <desc>
11983 Being used by the host computer, potentially available to guests.
11984 </desc>
11985 </const>
11986 <const name="Available" value="3">
11987 <desc>
11988 Not used by the host computer, available to guests (the host computer
11989 can also start using the device at any time).
11990 </desc>
11991 </const>
11992 <const name="Held" value="4">
11993 <desc>
11994 Held by the VirtualBox server (ignored by the host computer),
11995 available to guests.
11996 </desc>
11997 </const>
11998 <const name="Captured" value="5">
11999 <desc>
12000 Captured by one of the guest computers, not available
12001 to anybody else.
12002 </desc>
12003 </const>
12004 </enum>
12005
12006 <interface
12007 name="IHostUSBDevice" extends="IUSBDevice"
12008 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
12009 wsmap="managed"
12010 >
12011 <desc>
12012 The IHostUSBDevice interface represents a physical USB device attached
12013 to the host computer.
12014
12015 Besides properties inherited from IUSBDevice, this interface adds the
12016 <link to="#state"/> property that holds the current state of the USB
12017 device.
12018
12019 <see>IHost::USBDevices, IHost::USBDeviceFilters</see>
12020 </desc>
12021
12022 <attribute name="state" type="USBDeviceState" readonly="yes">
12023 <desc>
12024 Current state of the device.
12025 </desc>
12026 </attribute>
12027
12028 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
12029
12030 </interface>
12031
12032
12033 <!--
12034 // IHostUSBDeviceFilter
12035 /////////////////////////////////////////////////////////////////////////
12036 -->
12037
12038 <enum
12039 name="USBDeviceFilterAction"
12040 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
12041 >
12042 <desc>
12043 Actions for host USB device filters.
12044 <see>IHostUSBDeviceFilter, USBDeviceState</see>
12045 </desc>
12046
12047 <const name="Null" value="0">
12048 <desc>Null value (never used by the API).</desc>
12049 </const>
12050 <const name="Ignore" value="1">
12051 <desc>Ignore the matched USB device.</desc>
12052 </const>
12053 <const name="Hold" value="2">
12054 <desc>Hold the matched USB device.</desc>
12055 </const>
12056 </enum>
12057
12058 <interface
12059 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
12060 uuid="4cc70246-d74a-400f-8222-3900489c0374"
12061 wsmap="managed"
12062 >
12063 <desc>
12064 The IHostUSBDeviceFilter interface represents a global filter for a
12065 physical USB device used by the host computer. Used indirectly in
12066 <link to="IHost::USBDeviceFilters"/>.
12067
12068 Using filters of this type, the host computer determines the initial
12069 state of the USB device after it is physically attached to the
12070 host's USB controller.
12071
12072 <note>
12073 The <link to="#remote"/> attribute is ignored by this type of
12074 filters, because it makes sense only for
12075 <link to="IUSBController::deviceFilters">machine USB filters</link>.
12076 </note>
12077
12078 <see>IHost::USBDeviceFilters</see>
12079 </desc>
12080
12081 <attribute name="action" type="USBDeviceFilterAction">
12082 <desc>
12083 Action performed by the host when an attached USB device
12084 matches this filter.
12085 </desc>
12086 </attribute>
12087
12088 </interface>
12089
12090 <!--
12091 // IAudioAdapter
12092 /////////////////////////////////////////////////////////////////////////
12093 -->
12094
12095 <enum
12096 name="AudioDriverType"
12097 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
12098 >
12099 <desc>
12100 Host audio driver type.
12101 </desc>
12102
12103 <const name="Null" value="0">
12104 <desc>Null value, also means "dummy audio driver".</desc>
12105 </const>
12106 <const name="WinMM" value="1">
12107 <desc>Windows multimedia (Windows hosts only).</desc>
12108 </const>
12109 <const name="OSS" value="2">
12110 <desc>Open Sound System (Linux hosts only).</desc>
12111 </const>
12112 <const name="ALSA" value="3">
12113 <desc>Advanced Linux Sound Architecture (Linux hosts only).</desc>
12114 </const>
12115 <const name="DirectSound" value="4">
12116 <desc>DirectSound (Windows hosts only).</desc>
12117 </const>
12118 <const name="CoreAudio" value="5">
12119 <desc>CoreAudio (Mac hosts only).</desc>
12120 </const>
12121 <const name="MMPM" value="6">
12122 <desc>Reserved for historical reasons.</desc>
12123 </const>
12124 <const name="Pulse" value="7">
12125 <desc>PulseAudio (Linux hosts only).</desc>
12126 </const>
12127 <const name="SolAudio" value="8">
12128 <desc>Solaris audio (Solaris hosts only).</desc>
12129 </const>
12130 </enum>
12131
12132 <enum
12133 name="AudioControllerType"
12134 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
12135 >
12136 <desc>
12137 Virtual audio controller type.
12138 </desc>
12139
12140 <const name="AC97" value="0"/>
12141 <const name="SB16" value="1"/>
12142 </enum>
12143
12144 <interface
12145 name="IAudioAdapter" extends="$unknown"
12146 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
12147 wsmap="managed"
12148 >
12149 <desc>
12150 The IAudioAdapter interface represents the virtual audio adapter of
12151 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
12152 </desc>
12153 <attribute name="enabled" type="boolean">
12154 <desc>
12155 Flag whether the audio adapter is present in the
12156 guest system. If disabled, the virtual guest hardware will
12157 not contain any audio adapter. Can only be changed when
12158 the VM is not running.
12159 </desc>
12160 </attribute>
12161 <attribute name="audioController" type="AudioControllerType">
12162 <desc>
12163 The audio hardware we emulate.
12164 </desc>
12165 </attribute>
12166 <attribute name="audioDriver" type="AudioDriverType">
12167 <desc>
12168 Audio driver the adapter is connected to. This setting
12169 can only be changed when the VM is not running.
12170 </desc>
12171 </attribute>
12172 </interface>
12173
12174 <!--
12175 // IVRDPServer
12176 /////////////////////////////////////////////////////////////////////////
12177 -->
12178
12179 <enum
12180 name="VRDPAuthType"
12181 uuid="3d91887a-b67f-4b33-85bf-2da7ab1ea83a"
12182 >
12183 <desc>
12184 VRDP authentication type.
12185 </desc>
12186
12187 <const name="Null" value="0">
12188 <desc>Null value, also means "no authentication".</desc>
12189 </const>
12190 <const name="External" value="1"/>
12191 <const name="Guest" value="2"/>
12192 </enum>
12193
12194 <interface
12195 name="IVRDPServer" extends="$unknown"
12196 uuid="7aeeb530-0b08-41fe-835d-9be9ec1dbe5c"
12197 wsmap="managed"
12198 >
12199 <attribute name="enabled" type="boolean">
12200 <desc>VRDP server status.</desc>
12201 </attribute>
12202
12203 <attribute name="ports" type="wstring">
12204 <desc>
12205 VRDP server port numbers. The server will try to bind to one of free ports from the list.
12206 <note>
12207 This is a string of comma separated TCP port numbers or port number ranges.
12208 Example <tt>5000,5010-5012,5015</tt>
12209 </note>
12210 </desc>
12211 </attribute>
12212
12213 <attribute name="netAddress" type="wstring">
12214 <desc>VRDP server address.</desc>
12215 </attribute>
12216
12217 <attribute name="authType" type="VRDPAuthType">
12218 <desc>VRDP authentication method.</desc>
12219 </attribute>
12220
12221 <attribute name="authTimeout" type="unsigned long">
12222 <desc>Timeout for guest authentication. Milliseconds.</desc>
12223 </attribute>
12224
12225 <attribute name="allowMultiConnection" type="boolean">
12226 <desc>
12227 Flag whether multiple simultaneous connections to the VM are permitted.
12228 Note that this will be replaced by a more powerful mechanism in the future.
12229 </desc>
12230 </attribute>
12231
12232 <attribute name="reuseSingleConnection" type="boolean">
12233 <desc>
12234 Flag whether the existing connection must be dropped and a new connection
12235 must be established by the VRDP server, when a new client connects in single
12236 connection mode.
12237 </desc>
12238 </attribute>
12239
12240 <attribute name="videoChannel" type="boolean">
12241 <desc>
12242 Flag whether RDP video channel is supported.
12243 </desc>
12244 </attribute>
12245
12246 <attribute name="videoChannelQuality" type="unsigned long">
12247 <desc>
12248 Image quality in percents.
12249 </desc>
12250 </attribute>
12251
12252 </interface>
12253
12254
12255 <!--
12256 // ISharedFolder
12257 /////////////////////////////////////////////////////////////////////////
12258 -->
12259
12260 <interface
12261 name="ISharedFolder" extends="$unknown"
12262 uuid="64637bb2-9e17-471c-b8f3-f8968dd9884e"
12263 wsmap="struct"
12264 >
12265 <desc>
12266 The ISharedFolder interface represents a folder in the host computer's
12267 file system accessible from the guest OS running inside a virtual
12268 machine using an associated logical name.
12269
12270 There are three types of shared folders:
12271 <ul>
12272 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
12273 folders available to all virtual machines.</li>
12274 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
12275 VM-specific shared folders available to the given virtual machine at
12276 startup.</li>
12277 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
12278 VM-specific shared folders created in the session context (for
12279 example, when the virtual machine is running) and automatically
12280 discarded when the session is closed (the VM is powered off).</li>
12281 </ul>
12282
12283 Logical names of shared folders must be unique within the given scope
12284 (global, permanent or transient). However, they do not need to be unique
12285 across scopes. In this case, the definition of the shared folder in a
12286 more specific scope takes precedence over definitions in all other
12287 scopes. The order of precedence is (more specific to more general):
12288 <ol>
12289 <li>Transient definitions</li>
12290 <li>Permanent definitions</li>
12291 <li>Global definitions</li>
12292 </ol>
12293
12294 For example, if MyMachine has a shared folder named
12295 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
12296 transient shared folder named <tt>C_DRIVE</tt> (that points
12297 to <tt>C:\\\\WINDOWS</tt>) will change the definition
12298 of <tt>C_DRIVE</tt> in the guest OS so
12299 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
12300 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
12301 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
12302 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
12303 to <tt>C:\\</tt> if it still exists.
12304
12305 Note that permanent and transient shared folders of different machines
12306 are in different name spaces, so they don't overlap and don't need to
12307 have unique logical names.
12308
12309 <note>
12310 Global shared folders are not implemented in the current version of the
12311 product.
12312 </note>
12313 </desc>
12314
12315 <attribute name="name" type="wstring" readonly="yes">
12316 <desc>Logical name of the shared folder.</desc>
12317 </attribute>
12318
12319 <attribute name="hostPath" type="wstring" readonly="yes">
12320 <desc>Full path to the shared folder in the host file system.</desc>
12321 </attribute>
12322
12323 <attribute name="accessible" type="boolean" readonly="yes">
12324 <desc>
12325 Whether the folder defined by the host path is currently
12326 accessible or not.
12327 For example, the folder can be unaccessible if it is placed
12328 on the network share that is not available by the time
12329 this property is read.
12330 </desc>
12331 </attribute>
12332
12333 <attribute name="writable" type="boolean" readonly="yes">
12334 <desc>
12335 Whether the folder defined by the host path is writable or
12336 not.
12337 </desc>
12338 </attribute>
12339
12340 <attribute name="lastAccessError" type="wstring" readonly="yes">
12341 <desc>
12342 Text message that represents the result of the last accessibility
12343 check.
12344
12345 Accessibility checks are performed each time the <link to="#accessible"/>
12346 attribute is read. An empty string is returned if the last
12347 accessibility check was successful. A non-empty string indicates a
12348 failure and should normally describe a reason of the failure (for
12349 example, a file read error).
12350 </desc>
12351 </attribute>
12352
12353 </interface>
12354
12355 <!--
12356 // ISession
12357 /////////////////////////////////////////////////////////////////////////
12358 -->
12359
12360 <interface
12361 name="IInternalSessionControl" extends="$unknown"
12362 uuid="ab161f72-e4b3-44e6-a919-2256474bda66"
12363 internal="yes"
12364 wsmap="suppress"
12365 >
12366 <method name="getPID">
12367 <desc>PID of the process that has created this Session object.
12368 </desc>
12369 <param name="pid" type="unsigned long" dir="return"/>
12370 </method>
12371
12372 <method name="getRemoteConsole">
12373 <desc>
12374 Returns the console object suitable for remote control.
12375
12376 <result name="VBOX_E_INVALID_VM_STATE">
12377 Session state prevents operation.
12378 </result>
12379 <result name="VBOX_E_INVALID_OBJECT_STATE">
12380 Session type prevents operation.
12381 </result>
12382
12383 </desc>
12384 <param name="console" type="IConsole" dir="return"/>
12385 </method>
12386
12387 <method name="assignMachine">
12388 <desc>
12389 Assigns the machine object associated with this direct-type
12390 session or informs the session that it will be a remote one
12391 (if @a machine == @c null).
12392
12393 <result name="VBOX_E_INVALID_VM_STATE">
12394 Session state prevents operation.
12395 </result>
12396 <result name="VBOX_E_INVALID_OBJECT_STATE">
12397 Session type prevents operation.
12398 </result>
12399
12400 </desc>
12401 <param name="machine" type="IMachine" dir="in"/>
12402 </method>
12403
12404 <method name="assignRemoteMachine">
12405 <desc>
12406 Assigns the machine and the (remote) console object associated with
12407 this remote-type session.
12408
12409 <result name="VBOX_E_INVALID_VM_STATE">
12410 Session state prevents operation.
12411 </result>
12412
12413 </desc>
12414 <param name="machine" type="IMachine" dir="in"/>
12415 <param name="console" type="IConsole" dir="in"/>
12416 </method>
12417
12418 <method name="updateMachineState">
12419 <desc>
12420 Updates the machine state in the VM process.
12421 Must be called only in certain cases
12422 (see the method implementation).
12423
12424 <result name="VBOX_E_INVALID_VM_STATE">
12425 Session state prevents operation.
12426 </result>
12427 <result name="VBOX_E_INVALID_OBJECT_STATE">
12428 Session type prevents operation.
12429 </result>
12430
12431 </desc>
12432 <param name="aMachineState" type="MachineState" dir="in"/>
12433 </method>
12434
12435 <method name="uninitialize">
12436 <desc>
12437 Uninitializes (closes) this session. Used by VirtualBox to close
12438 the corresponding remote session when the direct session dies
12439 or gets closed.
12440
12441 <result name="VBOX_E_INVALID_VM_STATE">
12442 Session state prevents operation.
12443 </result>
12444
12445 </desc>
12446 </method>
12447
12448 <method name="onNetworkAdapterChange">
12449 <desc>
12450 Triggered when settings of a network adapter of the
12451 associated virtual machine have changed.
12452
12453 <result name="VBOX_E_INVALID_VM_STATE">
12454 Session state prevents operation.
12455 </result>
12456 <result name="VBOX_E_INVALID_OBJECT_STATE">
12457 Session type prevents operation.
12458 </result>
12459
12460 </desc>
12461 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
12462 <param name="changeAdapter" type="boolean" dir="in"/>
12463 </method>
12464
12465 <method name="onSerialPortChange">
12466 <desc>
12467 Triggered when settings of a serial port of the
12468 associated virtual machine have changed.
12469
12470 <result name="VBOX_E_INVALID_VM_STATE">
12471 Session state prevents operation.
12472 </result>
12473 <result name="VBOX_E_INVALID_OBJECT_STATE">
12474 Session type prevents operation.
12475 </result>
12476
12477 </desc>
12478 <param name="serialPort" type="ISerialPort" dir="in"/>
12479 </method>
12480
12481 <method name="onParallelPortChange">
12482 <desc>
12483 Triggered when settings of a parallel port of the
12484 associated virtual machine have changed.
12485
12486 <result name="VBOX_E_INVALID_VM_STATE">
12487 Session state prevents operation.
12488 </result>
12489 <result name="VBOX_E_INVALID_OBJECT_STATE">
12490 Session type prevents operation.
12491 </result>
12492
12493 </desc>
12494 <param name="parallelPort" type="IParallelPort" dir="in"/>
12495 </method>
12496
12497 <method name="onStorageControllerChange">
12498 <desc>
12499 Triggered when settings of a storage controller of the
12500 associated virtual machine have changed.
12501
12502 <result name="VBOX_E_INVALID_VM_STATE">
12503 Session state prevents operation.
12504 </result>
12505 <result name="VBOX_E_INVALID_OBJECT_STATE">
12506 Session type prevents operation.
12507 </result>
12508
12509 </desc>
12510 </method>
12511
12512 <method name="onMediumChange">
12513 <desc>
12514 Triggered when attached media of the
12515 associated virtual machine have changed.
12516
12517 <result name="VBOX_E_INVALID_VM_STATE">
12518 Session state prevents operation.
12519 </result>
12520 <result name="VBOX_E_INVALID_OBJECT_STATE">
12521 Session type prevents operation.
12522 </result>
12523
12524 </desc>
12525
12526 <param name="mediumAttachment" type="IMediumAttachment" dir="in"/>
12527 <param name="force" type="boolean" dir="in"/>
12528 </method>
12529
12530 <method name="onCPUChange">
12531 <desc>
12532 Notification when a CPU changes.
12533 </desc>
12534 <param name="cpu" type="unsigned long" dir="in">
12535 <desc>The CPU which changed</desc>
12536 </param>
12537 <param name="add" type="boolean" dir="in">
12538 <desc>Flag whether the CPU was added or removed</desc>
12539 </param>
12540 </method>
12541
12542 <method name="onVRDPServerChange">
12543 <desc>
12544 Triggered when settings of the VRDP server object of the
12545 associated virtual machine have changed.
12546
12547 <result name="VBOX_E_INVALID_VM_STATE">
12548 Session state prevents operation.
12549 </result>
12550 <result name="VBOX_E_INVALID_OBJECT_STATE">
12551 Session type prevents operation.
12552 </result>
12553
12554 </desc>
12555 <param name="restart" type="boolean" dir="in">
12556 <desc>Flag whether the server must be restarted</desc>
12557 </param>
12558 </method>
12559
12560 <method name="onUSBControllerChange">
12561 <desc>
12562 Triggered when settings of the USB controller object of the
12563 associated virtual machine have changed.
12564
12565 <result name="VBOX_E_INVALID_VM_STATE">
12566 Session state prevents operation.
12567 </result>
12568 <result name="VBOX_E_INVALID_OBJECT_STATE">
12569 Session type prevents operation.
12570 </result>
12571
12572 </desc>
12573 </method>
12574
12575 <method name="onSharedFolderChange">
12576 <desc>
12577 Triggered when a permanent (global or machine) shared folder has been
12578 created or removed.
12579 <note>
12580 We don't pass shared folder parameters in this notification because
12581 the order in which parallel notifications are delivered is not defined,
12582 therefore it could happen that these parameters were outdated by the
12583 time of processing this notification.
12584 </note>
12585
12586 <result name="VBOX_E_INVALID_VM_STATE">
12587 Session state prevents operation.
12588 </result>
12589 <result name="VBOX_E_INVALID_OBJECT_STATE">
12590 Session type prevents operation.
12591 </result>
12592
12593 </desc>
12594 <param name="global" type="boolean" dir="in"/>
12595 </method>
12596
12597 <method name="onUSBDeviceAttach">
12598 <desc>
12599 Triggered when a request to capture a USB device (as a result
12600 of matched USB filters or direct call to
12601 <link to="IConsole::attachUSBDevice"/>) has completed.
12602 A @c null @a error object means success, otherwise it
12603 describes a failure.
12604
12605 <result name="VBOX_E_INVALID_VM_STATE">
12606 Session state prevents operation.
12607 </result>
12608 <result name="VBOX_E_INVALID_OBJECT_STATE">
12609 Session type prevents operation.
12610 </result>
12611
12612 </desc>
12613 <param name="device" type="IUSBDevice" dir="in"/>
12614 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
12615 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
12616 </method>
12617
12618 <method name="onUSBDeviceDetach">
12619 <desc>
12620 Triggered when a request to release the USB device (as a result
12621 of machine termination or direct call to
12622 <link to="IConsole::detachUSBDevice"/>) has completed.
12623 A @c null @a error object means success, otherwise it
12624 describes a failure.
12625
12626 <result name="VBOX_E_INVALID_VM_STATE">
12627 Session state prevents operation.
12628 </result>
12629 <result name="VBOX_E_INVALID_OBJECT_STATE">
12630 Session type prevents operation.
12631 </result>
12632
12633 </desc>
12634 <param name="id" type="uuid" mod="string" dir="in"/>
12635 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
12636 </method>
12637
12638 <method name="onShowWindow">
12639 <desc>
12640 Called by <link to="IMachine::canShowConsoleWindow"/> and by
12641 <link to="IMachine::showConsoleWindow"/> in order to notify
12642 console listeners
12643 <link to="ICanShowWindowEvent"/>
12644 and <link to="IShowWindowEvent"/>.
12645
12646 <result name="VBOX_E_INVALID_OBJECT_STATE">
12647 Session type prevents operation.
12648 </result>
12649
12650 </desc>
12651 <param name="check" type="boolean" dir="in"/>
12652 <param name="canShow" type="boolean" dir="out"/>
12653 <param name="winId" type="unsigned long long" dir="out"/>
12654 </method>
12655
12656 <method name="accessGuestProperty">
12657 <desc>
12658 Called by <link to="IMachine::getGuestProperty"/> and by
12659 <link to="IMachine::setGuestProperty"/> in order to read and
12660 modify guest properties.
12661
12662 <result name="VBOX_E_INVALID_VM_STATE">
12663 Machine session is not open.
12664 </result>
12665 <result name="VBOX_E_INVALID_OBJECT_STATE">
12666 Session type is not direct.
12667 </result>
12668
12669 </desc>
12670 <param name="name" type="wstring" dir="in"/>
12671 <param name="value" type="wstring" dir="in"/>
12672 <param name="flags" type="wstring" dir="in"/>
12673 <param name="isSetter" type="boolean" dir="in"/>
12674 <param name="retValue" type="wstring" dir="out"/>
12675 <param name="retTimestamp" type="unsigned long long" dir="out"/>
12676 <param name="retFlags" type="wstring" dir="out"/>
12677 </method>
12678
12679 <method name="enumerateGuestProperties">
12680 <desc>
12681 Return a list of the guest properties matching a set of patterns along
12682 with their values, time stamps and flags.
12683
12684 <result name="VBOX_E_INVALID_VM_STATE">
12685 Machine session is not open.
12686 </result>
12687 <result name="VBOX_E_INVALID_OBJECT_STATE">
12688 Session type is not direct.
12689 </result>
12690
12691 </desc>
12692 <param name="patterns" type="wstring" dir="in">
12693 <desc>
12694 The patterns to match the properties against as a comma-separated
12695 string. If this is empty, all properties currently set will be
12696 returned.
12697 </desc>
12698 </param>
12699 <param name="key" type="wstring" dir="out" safearray="yes">
12700 <desc>
12701 The key names of the properties returned.
12702 </desc>
12703 </param>
12704 <param name="value" type="wstring" dir="out" safearray="yes">
12705 <desc>
12706 The values of the properties returned. The array entries match the
12707 corresponding entries in the @a key array.
12708 </desc>
12709 </param>
12710 <param name="timestamp" type="unsigned long long" dir="out" safearray="yes">
12711 <desc>
12712 The time stamps of the properties returned. The array entries match
12713 the corresponding entries in the @a key array.
12714 </desc>
12715 </param>
12716 <param name="flags" type="wstring" dir="out" safearray="yes">
12717 <desc>
12718 The flags of the properties returned. The array entries match the
12719 corresponding entries in the @a key array.
12720 </desc>
12721 </param>
12722 </method>
12723
12724 <method name="onlineMergeMedium">
12725 <desc>
12726 Triggers online merging of a hard disk. Used internally when deleting
12727 a snapshot while a VM referring to the same hard disk chain is running.
12728
12729 <result name="VBOX_E_INVALID_VM_STATE">
12730 Machine session is not open.
12731 </result>
12732 <result name="VBOX_E_INVALID_OBJECT_STATE">
12733 Session type is not direct.
12734 </result>
12735
12736 </desc>
12737 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
12738 <desc>The medium attachment to identify the medium chain.</desc>
12739 </param>
12740 <param name="sourceIdx" type="unsigned long" dir="in">
12741 <desc>The index of the source image in the chain.
12742 Redundant, but drastically reduces IPC.</desc>
12743 </param>
12744 <param name="targetIdx" type="unsigned long" dir="in">
12745 <desc>The index of the target image in the chain.
12746 Redundant, but drastically reduces IPC.</desc>
12747 </param>
12748 <param name="source" type="IMedium" dir="in">
12749 <desc>Merge source medium.</desc>
12750 </param>
12751 <param name="target" type="IMedium" dir="in">
12752 <desc>Merge target medium.</desc>
12753 </param>
12754 <param name="mergeForward" type="boolean" dir="in">
12755 <desc>Merge direction.</desc>
12756 </param>
12757 <param name="parentForTarget" type="IMedium" dir="in">
12758 <desc>For forward merges: new parent for target medium.</desc>
12759 </param>
12760 <param name="childrenToReparent" type="IMedium" safearray="yes" dir="in">
12761 <desc>For backward merges: list of media which need their parent UUID
12762 updated.</desc>
12763 </param>
12764 <param name="progress" type="IProgress" dir="in">
12765 <desc>
12766 Progress object for this operation.
12767 </desc>
12768 </param>
12769 </method>
12770
12771 </interface>
12772
12773 <interface
12774 name="ISession" extends="$unknown"
12775 uuid="12F4DCDB-12B2-4EC1-B7CD-DDD9F6C5BF4D"
12776 wsmap="managed"
12777 >
12778 <desc>
12779 The ISession interface represents a serialization primitive for virtual
12780 machines.
12781
12782 With VirtualBox, every time one wishes to manipulate a virtual machine
12783 (e.g. change its settings or start execution), a session object is
12784 required. Such an object must be passed to one of the session methods
12785 that open the given session, which then initiates the machine manipulation.
12786
12787 A session serves several purposes: it identifies to the inter-process VirtualBox
12788 code which process is currently working with the virtual machine, and it ensures
12789 that there are no incompatible requests from several processes for the
12790 same virtual machine. Session objects can therefore be thought of as mutex
12791 semaphores that lock virtual machines to prevent conflicting accesses from
12792 several processes.
12793
12794 How sessions objects are used depends on whether you use the Main API
12795 via COM or via the webservice:
12796
12797 <ul>
12798 <li>When using the COM API directly, an object of the Session class from the
12799 VirtualBox type library needs to be created. In regular COM C++ client code,
12800 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
12801 This object will then act as a local session object in further calls to open
12802 a session.
12803 </li>
12804
12805 <li>In the webservice, the session manager (IWebsessionManager) instead creates
12806 one session object automatically when <link to="IWebsessionManager::logon" />
12807 is called. A managed object reference to that session object can be retrieved by
12808 calling <link to="IWebsessionManager::getSessionObject" />. This session object
12809 reference can then be used to open sessions.
12810 </li>
12811 </ul>
12812
12813 Sessions are mainly used in two variations:
12814
12815 <ul>
12816 <li>
12817 To start a virtual machine in a separate process, one would call
12818 <link to="IVirtualBox::openRemoteSession"/>, which requires a session
12819 object as its first parameter. This session then identifies the caller
12820 and lets him control the started machine (for example, pause machine
12821 execution or power it down) as well as be notified about machine
12822 execution state changes.
12823 </li>
12824
12825 <li>To alter machine settings, or to start machine execution within the
12826 current process, one needs to open a direct session for the machine first by
12827 calling <link to="IVirtualBox::openSession"/>. While a direct session
12828 is open within one process, no any other process may open another direct
12829 session for the same machine. This prevents the machine from being changed
12830 by other processes while it is running or while the machine is being configured.
12831 </li>
12832 </ul>
12833
12834 One also can attach to an existing direct session already opened by
12835 another process (for example, in order to send a control request to the
12836 virtual machine such as the pause or the reset request). This is done by
12837 calling <link to="IVirtualBox::openExistingSession"/>.
12838
12839 <note>
12840 Unless you are trying to write a new VirtualBox front-end that
12841 performs direct machine execution (like the VirtualBox or VBoxSDL
12842 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
12843 session opened by <link to="IVirtualBox::openSession"/> and use this
12844 session only to change virtual machine settings. If you simply want to
12845 start virtual machine execution using one of the existing front-ends
12846 (for example the VirtualBox GUI or headless server), simply use
12847 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
12848 will power up the machine automatically for you.
12849 </note>
12850 </desc>
12851
12852 <attribute name="state" type="SessionState" readonly="yes">
12853 <desc>Current state of this session.</desc>
12854 </attribute>
12855
12856 <attribute name="type" type="SessionType" readonly="yes">
12857 <desc>
12858 Type of this session. The value of this attribute is valid only
12859 if the session is currently open (i.e. its #state is
12860 SessionType_SessionOpen), otherwise an error will be returned.
12861 </desc>
12862 </attribute>
12863
12864 <attribute name="machine" type="IMachine" readonly="yes">
12865 <desc>Machine object associated with this session.</desc>
12866 </attribute>
12867
12868 <attribute name="console" type="IConsole" readonly="yes">
12869 <desc>Console object associated with this session.</desc>
12870 </attribute>
12871
12872 <method name="close">
12873 <desc>
12874 Closes a session that was previously opened.
12875
12876 It is recommended that every time an "open session" method (such as
12877 <link to="IVirtualBox::openRemoteSession" /> or
12878 <link to="IVirtualBox::openSession" />) has been called to
12879 manipulate a virtual machine, the caller invoke
12880 ISession::close() when it's done doing so. Since sessions are
12881 serialization primitives much like ordinary mutexes, they are
12882 best used the same way: for each "open" call, there should be
12883 a matching "close" call, even when errors occur.
12884
12885 Otherwise, if a direct session for a machine opened with
12886 <link to="IVirtualBox::openSession"/> is not explicitly closed
12887 when the application terminates, the state of the machine will
12888 be set to <link to="MachineState_Aborted" /> on the server.
12889
12890 Generally, it is recommended to close all open sessions explicitly
12891 before terminating the application (regardless of the reason for
12892 the termination).
12893
12894 <note>
12895 Do not expect the session state (<link to="ISession::state" />
12896 to return to "Closed" immediately after you invoke
12897 ISession::close(), particularly if you have started a remote
12898 session to execute the VM in a new process. The session state will
12899 automatically return to "Closed" once the VM is no longer executing,
12900 which can of course take a very long time.
12901 </note>
12902
12903 <result name="E_UNEXPECTED">
12904 Session is not open.
12905 </result>
12906
12907 </desc>
12908 </method>
12909
12910 </interface>
12911
12912 <!--
12913 // IStorageController
12914 /////////////////////////////////////////////////////////////////////////
12915 -->
12916
12917 <enum
12918 name="StorageBus"
12919 uuid="eee67ab3-668d-4ef5-91e0-7025fe4a0d7a"
12920 >
12921 <desc>
12922 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy);
12923 see <link to="IStorageController::bus" />.
12924 </desc>
12925 <const name="Null" value="0">
12926 <desc>@c null value. Never used by the API.</desc>
12927 </const>
12928 <const name="IDE" value="1"/>
12929 <const name="SATA" value="2"/>
12930 <const name="SCSI" value="3"/>
12931 <const name="Floppy" value="4"/>
12932 <const name="SAS" value="5"/>
12933 </enum>
12934
12935 <enum
12936 name="StorageControllerType"
12937 uuid="8a412b8a-f43e-4456-bd37-b474f0879a58"
12938 >
12939 <desc>
12940 The exact variant of storage controller hardware presented
12941 to the guest; see <link to="IStorageController::controllerType" />.
12942 </desc>
12943
12944 <const name="Null" value="0">
12945 <desc>@c null value. Never used by the API.</desc>
12946 </const>
12947 <const name="LsiLogic" value="1">
12948 <desc>A SCSI controller of the LsiLogic variant.</desc>
12949 </const>
12950 <const name="BusLogic" value="2">
12951 <desc>A SCSI controller of the BusLogic variant.</desc>
12952 </const>
12953 <const name="IntelAhci" value="3">
12954 <desc>An Intel AHCI SATA controller; this is the only variant for SATA.</desc>
12955 </const>
12956 <const name="PIIX3" value="4">
12957 <desc>An IDE controller of the PIIX3 variant.</desc>
12958 </const>
12959 <const name="PIIX4" value="5">
12960 <desc>An IDE controller of the PIIX4 variant.</desc>
12961 </const>
12962 <const name="ICH6" value="6">
12963 <desc>An IDE controller of the ICH6 variant.</desc>
12964 </const>
12965 <const name="I82078" value="7">
12966 <desc>A floppy disk controller; this is the only variant for floppy drives.</desc>
12967 </const>
12968 <const name="LsiLogicSas" value="8">
12969 <desc>A variant of the LsiLogic controller using SAS.</desc>
12970 </const>
12971 </enum>
12972
12973 <interface
12974 name="IStorageController" extends="$unknown"
12975 uuid="fd93adc0-bbaa-4256-9e6e-00e29f9151c9"
12976 wsmap="managed"
12977 >
12978 <desc>
12979 Represents a storage controller that is attached to a virtual machine
12980 (<link to="IMachine" />). Just as drives (hard disks, DVDs, FDs) are
12981 attached to storage controllers in a real computer, virtual drives
12982 (represented by <link to="IMediumAttachment" />) are attached to virtual
12983 storage controllers, represented by this interface.
12984
12985 As opposed to physical hardware, VirtualBox has a very generic concept
12986 of a storage controller, and for purposes of the Main API, all virtual
12987 storage is attached to virtual machines via instances of this interface.
12988 There are five types of such virtual storage controllers: IDE, SCSI, SATA,
12989 SAS and Floppy (see <link to="#bus" />). Depending on which of these four
12990 is used, certain sub-types may be available and can be selected in
12991 <link to="#controllerType" />.
12992
12993 Depending on these settings, the guest operating system might see
12994 significantly different virtual hardware.
12995 </desc>
12996
12997 <attribute name="name" type="wstring" readonly="yes">
12998 <desc>
12999 Name of the storage controller, as originally specified with
13000 <link to="IMachine::addStorageController" />. This then uniquely
13001 identifies this controller with other method calls such as
13002 <link to="IMachine::attachDevice" /> and <link to="IMachine::mountMedium" />.
13003 </desc>
13004 </attribute>
13005
13006 <attribute name="maxDevicesPerPortCount" type="unsigned long" readonly="yes">
13007 <desc>
13008 Maximum number of devices which can be attached to one port.
13009 </desc>
13010 </attribute>
13011
13012 <attribute name="minPortCount" type="unsigned long" readonly="yes">
13013 <desc>
13014 Minimum number of ports that <link to="IStorageController::portCount"/> can be set to.
13015 </desc>
13016 </attribute>
13017
13018 <attribute name="maxPortCount" type="unsigned long" readonly="yes">
13019 <desc>
13020 Maximum number of ports that <link to="IStorageController::portCount"/> can be set to.
13021 </desc>
13022 </attribute>
13023
13024 <attribute name="instance" type="unsigned long">
13025 <desc>
13026 The instance number of the device in the running VM.
13027 </desc>
13028 </attribute>
13029
13030 <attribute name="portCount" type="unsigned long">
13031 <desc>
13032 The number of currently usable ports on the controller.
13033 The minimum and maximum number of ports for one controller are
13034 stored in <link to="IStorageController::minPortCount"/>
13035 and <link to="IStorageController::maxPortCount"/>.
13036 </desc>
13037 </attribute>
13038
13039 <attribute name="bus" type="StorageBus" readonly="yes">
13040 <desc>
13041 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy).
13042 </desc>
13043 </attribute>
13044
13045 <attribute name="controllerType" type="StorageControllerType">
13046 <desc>
13047 The exact variant of storage controller hardware presented
13048 to the guest.
13049 Depending on this value, VirtualBox will provide a different
13050 virtual storage controller hardware to the guest.
13051 For SATA, SAS and floppy controllers, only one variant is
13052 available, but for IDE and SCSI, there are several.
13053
13054 For SCSI controllers, the default type is LsiLogic.
13055 </desc>
13056 </attribute>
13057
13058 <attribute name="useHostIOCache" type="boolean">
13059 <desc>
13060 If true, the storage controller emulation will use a dedicated I/O thread, enable the host I/O
13061 caches and use synchronous file APIs on the host. This was the only option in the API before
13062 VirtualBox 3.2 and is still the default for IDE controllers.
13063
13064 If false, the host I/O cache will be disabled for image files attached to this storage controller.
13065 Instead, the storage controller emulation will use asynchronous I/O APIs on the host. This makes
13066 it possible to turn off the host I/O caches because the emulation can handle unaligned access to
13067 the file. This should be used on OS X and Linux hosts if a high I/O load is expected or many
13068 virtual machines are running at the same time to prevent I/O cache related hangs.
13069 This option new with the API of VirtualBox 3.2 and is now the default for non-IDE storage controllers.
13070 </desc>
13071 </attribute>
13072
13073 <method name="getIDEEmulationPort">
13074 <desc>
13075 Gets the corresponding port number which is emulated as an IDE device.
13076 Works only with SATA controllers.
13077
13078 <result name="E_INVALIDARG">
13079 The @a devicePosition is not in the range 0 to 3.
13080 </result>
13081 <result name="E_NOTIMPL">
13082 The storage controller type is not SATAIntelAhci.
13083 </result>
13084
13085 </desc>
13086 <param name="devicePosition" type="long" dir="in"/>
13087 <param name="portNumber" type="long" dir="return"/>
13088 </method>
13089
13090 <method name="setIDEEmulationPort">
13091 <desc>
13092 Sets the port number which is emulated as an IDE device.
13093 Works only with SATA controllers.
13094
13095 <result name="E_INVALIDARG">
13096 The @a devicePosition is not in the range 0 to 3 or the
13097 @a portNumber is not in the range 0 to 29.
13098 </result>
13099 <result name="E_NOTIMPL">
13100 The storage controller type is not SATAIntelAhci.
13101 </result>
13102
13103 </desc>
13104 <param name="devicePosition" type="long" dir="in"/>
13105 <param name="portNumber" type="long" dir="in"/>
13106 </method>
13107
13108 </interface>
13109
13110<if target="wsdl">
13111
13112 <!--
13113 // IManagedObjectRef
13114 /////////////////////////////////////////////////////////////////////////
13115 -->
13116
13117 <interface
13118 name="IManagedObjectRef" extends="$unknown"
13119 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
13120 internal="yes"
13121 wsmap="managed"
13122 wscpp="hardcoded"
13123 >
13124 <desc>
13125 Managed object reference.
13126
13127 Only within the webservice, a managed object reference (which is really
13128 an opaque number) allows a webservice client to address an object
13129 that lives in the address space of the webservice server.
13130
13131 Behind each managed object reference, there is a COM object that lives
13132 in the webservice server's address space. The COM object is not freed
13133 until the managed object reference is released, either by an explicit
13134 call to <link to="IManagedObjectRef::release" /> or by logging off from
13135 the webservice (<link to="IWebsessionManager::logoff" />), which releases
13136 all objects created during the webservice session.
13137
13138 Whenever a method call of the VirtualBox API returns a COM object, the
13139 webservice representation of that method will instead return a
13140 managed object reference, which can then be used to invoke methods
13141 on that object.
13142 </desc>
13143
13144 <method name="getInterfaceName">
13145 <desc>
13146 Returns the name of the interface that this managed object represents,
13147 for example, "IMachine", as a string.
13148 </desc>
13149 <param name="return" type="wstring" dir="return"/>
13150 </method>
13151
13152 <method name="release">
13153 <desc>
13154 Releases this managed object reference and frees the resources that
13155 were allocated for it in the webservice server process. After calling
13156 this method, the identifier of the reference can no longer be used.
13157 </desc>
13158 </method>
13159
13160 </interface>
13161
13162 <!--
13163 // IWebsessionManager
13164 /////////////////////////////////////////////////////////////////////////
13165 -->
13166
13167 <interface
13168 name="IWebsessionManager" extends="$unknown"
13169 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
13170 internal="yes"
13171 wsmap="global"
13172 wscpp="hardcoded"
13173 >
13174 <desc>
13175 Websession manager. This provides essential services
13176 to webservice clients.
13177 </desc>
13178 <method name="logon">
13179 <desc>
13180 Logs a new client onto the webservice and returns a managed object reference to
13181 the IVirtualBox instance, which the client can then use as a basis to further
13182 queries, since all calls to the VirtualBox API are based on the IVirtualBox
13183 interface, in one way or the other.
13184 </desc>
13185 <param name="username" type="wstring" dir="in"/>
13186 <param name="password" type="wstring" dir="in"/>
13187 <param name="return" type="IVirtualBox" dir="return"/>
13188 </method>
13189
13190 <method name="getSessionObject">
13191 <desc>
13192 Returns a managed object reference to the internal ISession object that was created
13193 for this web service session when the client logged on.
13194
13195 <see>ISession</see>
13196 </desc>
13197 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13198 <param name="return" type="ISession" dir="return"/>
13199 </method>
13200
13201 <method name="logoff">
13202 <desc>
13203 Logs off the client who has previously logged on with <link to="IWebsessionManager::logoff" />
13204 and destroys all resources associated with the session (most importantly, all
13205 managed objects created in the server while the session was active).
13206 </desc>
13207 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
13208 </method>
13209
13210 </interface>
13211
13212</if>
13213
13214 <!--
13215 // IPerformanceCollector & friends
13216 /////////////////////////////////////////////////////////////////////////
13217 -->
13218
13219 <interface
13220 name="IPerformanceMetric" extends="$unknown"
13221 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
13222 >
13223 <desc>
13224 The IPerformanceMetric interface represents parameters of the given
13225 performance metric.
13226 </desc>
13227
13228 <attribute name="metricName" type="wstring" readonly="yes">
13229 <desc>
13230 Name of the metric.
13231 </desc>
13232 </attribute>
13233
13234 <attribute name="object" type="$unknown" readonly="yes">
13235 <desc>
13236 Object this metric belongs to.
13237 </desc>
13238 </attribute>
13239
13240 <attribute name="description" type="wstring" readonly="yes">
13241 <desc>
13242 Textual description of the metric.
13243 </desc>
13244 </attribute>
13245
13246 <attribute name="period" type="unsigned long" readonly="yes">
13247 <desc>
13248 Time interval between samples, measured in seconds.
13249 </desc>
13250 </attribute>
13251
13252 <attribute name="count" type="unsigned long" readonly="yes">
13253 <desc>
13254 Number of recent samples retained by the performance collector for this
13255 metric.
13256
13257 When the collected sample count exceeds this number, older samples
13258 are discarded.
13259 </desc>
13260 </attribute>
13261
13262 <attribute name="unit" type="wstring" readonly="yes">
13263 <desc>
13264 Unit of measurement.
13265 </desc>
13266 </attribute>
13267
13268 <attribute name="minimumValue" type="long" readonly="yes">
13269 <desc>
13270 Minimum possible value of this metric.
13271 </desc>
13272 </attribute>
13273
13274 <attribute name="maximumValue" type="long" readonly="yes">
13275 <desc>
13276 Maximum possible value of this metric.
13277 </desc>
13278 </attribute>
13279 </interface>
13280
13281 <interface
13282 name="IPerformanceCollector" extends="$unknown"
13283 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
13284 wsmap="managed"
13285 >
13286 <desc>
13287 The IPerformanceCollector interface represents a service that collects
13288 and stores performance metrics data.
13289
13290 Performance metrics are associated with objects of interfaces like IHost
13291 and IMachine. Each object has a distinct set of performance metrics. The
13292 set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
13293
13294 Metric data is collected at the specified intervals and is retained
13295 internally. The interval and the number of retained samples can be set
13296 with <link to="IPerformanceCollector::setupMetrics" />. Both metric data
13297 and collection settings are not persistent, they are discarded as soon as
13298 VBoxSVC process terminates. Moreover, metric settings and data associated
13299 with a particular VM only exist while VM is running. They disappear as
13300 soon as VM shuts down. It is not possible to set up metrics for machines
13301 that are powered off. One needs to start VM first, then set up metric
13302 collection parameters.
13303
13304 Metrics are organized hierarchically, with each level separated by a
13305 slash (/) character. Generally, the scheme for metric names is like this:
13306
13307 <tt>Category/Metric[/SubMetric][:aggregation]</tt>
13308
13309 "Category/Metric" together form the base metric name. A base metric is
13310 the smallest unit for which a sampling interval and the number of
13311 retained samples can be set. Only base metrics can be enabled and
13312 disabled. All sub-metrics are collected when their base metric is
13313 collected. Collected values for any set of sub-metrics can be queried
13314 with <link to="IPerformanceCollector::queryMetricsData" />.
13315
13316 For example "CPU/Load/User:avg" metric name stands for the "CPU"
13317 category, "Load" metric, "User" submetric, "average" aggregate. An
13318 aggregate function is computed over all retained data. Valid aggregate
13319 functions are:
13320
13321 <ul>
13322 <li>avg -- average</li>
13323 <li>min -- minimum</li>
13324 <li>max -- maximum</li>
13325 </ul>
13326
13327 When setting up metric parameters, querying metric data, enabling or
13328 disabling metrics wildcards can be used in metric names to specify a
13329 subset of metrics. For example, to select all CPU-related metrics
13330 use <tt>CPU/*</tt>, all averages can be queried using <tt>*:avg</tt> and
13331 so on. To query metric values without aggregates <tt>*:</tt> can be used.
13332
13333 The valid names for base metrics are:
13334
13335 <ul>
13336 <li>CPU/Load</li>
13337 <li>CPU/MHz</li>
13338 <li>RAM/Usage</li>
13339 </ul>
13340
13341 The general sequence for collecting and retrieving the metrics is:
13342 <ul>
13343 <li>
13344 Obtain an instance of IPerformanceCollector with
13345 <link to="IVirtualBox::performanceCollector" />
13346 </li>
13347 <li>
13348 Allocate and populate an array with references to objects the metrics
13349 will be collected for. Use references to IHost and IMachine objects.
13350 </li>
13351 <li>
13352 Allocate and populate an array with base metric names the data will
13353 be collected for.
13354 </li>
13355 <li>
13356 Call <link to="IPerformanceCollector::setupMetrics" />. From now on
13357 the metric data will be collected and stored.
13358 </li>
13359 <li>
13360 Wait for the data to get collected.
13361 </li>
13362 <li>
13363 Allocate and populate an array with references to objects the metric
13364 values will be queried for. You can re-use the object array used for
13365 setting base metrics.
13366 </li>
13367 <li>
13368 Allocate and populate an array with metric names the data will be
13369 collected for. Note that metric names differ from base metric names.
13370 </li>
13371 <li>
13372 Call <link to="IPerformanceCollector::queryMetricsData" />. The data
13373 that have been collected so far are returned. Note that the values
13374 are still retained internally and data collection continues.
13375 </li>
13376 </ul>
13377
13378 For an example of usage refer to the following files in VirtualBox SDK:
13379 <ul>
13380 <li>
13381 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
13382 </li>
13383 <li>
13384 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
13385 </li>
13386 </ul>
13387 </desc>
13388
13389 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
13390 <desc>
13391 Array of unique names of metrics.
13392
13393 This array represents all metrics supported by the performance
13394 collector. Individual objects do not necessarily support all of them.
13395 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
13396 list of supported metrics for a particular object.
13397 </desc>
13398 </attribute>
13399
13400 <method name="getMetrics">
13401 <desc>
13402 Returns parameters of specified metrics for a set of objects.
13403 <note>
13404 @c Null metrics array means all metrics. @c Null object array means
13405 all existing objects.
13406 </note>
13407 </desc>
13408 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13409 <desc>
13410 Metric name filter. Currently, only a comma-separated list of metrics
13411 is supported.
13412 </desc>
13413 </param>
13414 <param name="objects" type="$unknown" dir="in" safearray="yes">
13415 <desc>
13416 Set of objects to return metric parameters for.
13417 </desc>
13418 </param>
13419 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
13420 <desc>
13421 Array of returned metric parameters.
13422 </desc>
13423 </param>
13424 </method>
13425
13426 <method name="setupMetrics">
13427 <desc>
13428 Sets parameters of specified base metrics for a set of objects. Returns
13429 an array of <link to="IPerformanceMetric" /> describing the metrics
13430 have been affected.
13431 <note>
13432 @c Null or empty metric name array means all metrics. @c Null or
13433 empty object array means all existing objects. If metric name array
13434 contains a single element and object array contains many, the single
13435 metric name array element is applied to each object array element to
13436 form metric/object pairs.
13437 </note>
13438 </desc>
13439 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13440 <desc>
13441 Metric name filter. Comma-separated list of metrics with wildcard
13442 support.
13443 </desc>
13444 </param>
13445 <param name="objects" type="$unknown" dir="in" safearray="yes">
13446 <desc>
13447 Set of objects to setup metric parameters for.
13448 </desc>
13449 </param>
13450 <param name="period" type="unsigned long" dir="in">
13451 <desc>
13452 Time interval in seconds between two consecutive samples of
13453 performance data.
13454 </desc>
13455 </param>
13456 <param name="count" type="unsigned long" dir="in">
13457 <desc>
13458 Number of samples to retain in performance data history. Older
13459 samples get discarded.
13460 </desc>
13461 </param>
13462 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13463 <desc>
13464 Array of metrics that have been modified by the call to this method.
13465 </desc>
13466 </param>
13467 </method>
13468
13469 <method name="enableMetrics">
13470 <desc>
13471 Turns on collecting specified base metrics. Returns an array of
13472 <link to="IPerformanceMetric" /> describing the metrics have been
13473 affected.
13474 <note>
13475 @c Null or empty metric name array means all metrics. @c Null or
13476 empty object array means all existing objects. If metric name array
13477 contains a single element and object array contains many, the single
13478 metric name array element is applied to each object array element to
13479 form metric/object pairs.
13480 </note>
13481 </desc>
13482 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13483 <desc>
13484 Metric name filter. Comma-separated list of metrics with wildcard
13485 support.
13486 </desc>
13487 </param>
13488 <param name="objects" type="$unknown" dir="in" safearray="yes">
13489 <desc>
13490 Set of objects to enable metrics for.
13491 </desc>
13492 </param>
13493 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13494 <desc>
13495 Array of metrics that have been modified by the call to this method.
13496 </desc>
13497 </param>
13498 </method>
13499
13500 <method name="disableMetrics">
13501 <desc>
13502 Turns off collecting specified base metrics. Returns an array of
13503 <link to="IPerformanceMetric" /> describing the metrics have been
13504 affected.
13505 <note>
13506 @c Null or empty metric name array means all metrics. @c Null or
13507 empty object array means all existing objects. If metric name array
13508 contains a single element and object array contains many, the single
13509 metric name array element is applied to each object array element to
13510 form metric/object pairs.
13511 </note>
13512 </desc>
13513 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13514 <desc>
13515 Metric name filter. Comma-separated list of metrics with wildcard
13516 support.
13517 </desc>
13518 </param>
13519 <param name="objects" type="$unknown" dir="in" safearray="yes">
13520 <desc>
13521 Set of objects to disable metrics for.
13522 </desc>
13523 </param>
13524 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
13525 <desc>
13526 Array of metrics that have been modified by the call to this method.
13527 </desc>
13528 </param>
13529 </method>
13530
13531 <method name="queryMetricsData">
13532 <desc>
13533 Queries collected metrics data for a set of objects.
13534
13535 The data itself and related metric information are returned in seven
13536 parallel and one flattened array of arrays. Elements of
13537 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
13538 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
13539 the same index describe one set of values corresponding to a single
13540 metric.
13541
13542 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
13543 start and length of a sub-array is indicated by
13544 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
13545 value for metric <tt>metricNames[i]</tt> is at
13546 <tt>returnData[returnIndices[i]]</tt>.
13547
13548 <note>
13549 @c Null or empty metric name array means all metrics. @c Null or
13550 empty object array means all existing objects. If metric name array
13551 contains a single element and object array contains many, the single
13552 metric name array element is applied to each object array element to
13553 form metric/object pairs.
13554 </note>
13555 <note>
13556 Data collection continues behind the scenes after call to @c
13557 queryMetricsData. The return data can be seen as the snapshot of the
13558 current state at the time of @c queryMetricsData call. The internally
13559 kept metric values are not cleared by the call. This makes possible
13560 querying different subsets of metrics or aggregates with subsequent
13561 calls. If periodic querying is needed it is highly suggested to query
13562 the values with @c interval*count period to avoid confusion. This way
13563 a completely new set of data values will be provided by each query.
13564 </note>
13565 </desc>
13566 <param name="metricNames" type="wstring" dir="in" safearray="yes">
13567 <desc>
13568 Metric name filter. Comma-separated list of metrics with wildcard
13569 support.
13570 </desc>
13571 </param>
13572 <param name="objects" type="$unknown" dir="in" safearray="yes">
13573 <desc>
13574 Set of objects to query metrics for.
13575 </desc>
13576 </param>
13577 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
13578 <desc>
13579 Names of metrics returned in @c returnData.
13580 </desc>
13581 </param>
13582 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
13583 <desc>
13584 Objects associated with metrics returned in @c returnData.
13585 </desc>
13586 </param>
13587 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
13588 <desc>
13589 Units of measurement for each returned metric.
13590 </desc>
13591 </param>
13592 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
13593 <desc>
13594 Divisor that should be applied to return values in order to get
13595 floating point values. For example:
13596 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
13597 will retrieve the floating point value of i-th sample of the first
13598 metric.
13599 </desc>
13600 </param>
13601 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
13602 <desc>
13603 Sequence numbers of the first elements of value sequences of
13604 particular metrics returned in @c returnData. For aggregate metrics
13605 it is the sequence number of the sample the aggregate started
13606 calculation from.
13607 </desc>
13608 </param>
13609 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
13610 <desc>
13611 Indices of the first elements of value sequences of particular
13612 metrics returned in @c returnData.
13613 </desc>
13614 </param>
13615 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
13616 <desc>
13617 Lengths of value sequences of particular metrics.
13618 </desc>
13619 </param>
13620 <param name="returnData" type="long" dir="return" safearray="yes">
13621 <desc>
13622 Flattened array of all metric data containing sequences of values for
13623 each metric.
13624 </desc>
13625 </param>
13626 </method>
13627
13628 </interface>
13629 <enum
13630 name="NATAliasMode"
13631 uuid="67772168-50d9-11df-9669-7fb714ee4fa1">
13632 <desc></desc>
13633 <const name="AliasLog" value="0x1">
13634 <desc></desc>
13635 </const>
13636 <const name="AliasProxyOnly" value="0x02">
13637 <desc></desc>
13638 </const>
13639 <const name="AliasUseSamePorts" value="0x04">
13640 <desc></desc>
13641 </const>
13642 </enum>
13643 <enum
13644 name="NATProtocol"
13645 uuid="e90164be-eb03-11de-94af-fff9b1c1b19f"
13646 >
13647 <desc>Protocol definitions used with NAT port-forwarding rules.</desc>
13648 <const name="UDP" value="0">
13649 <desc>Port-forwarding uses UDP protocol.</desc>
13650 </const>
13651 <const name="TCP" value="1">
13652 <desc>Port-forwarding uses TCP protocol.</desc>
13653 </const>
13654 </enum>
13655
13656 <interface
13657 name="INATEngine" extends="$unknown"
13658 uuid="4b286616-eb03-11de-b0fb-1701eca42246"
13659 wsmap="managed"
13660 >
13661 <desc>Interface for managing a NAT engine which is used with a virtual machine. This
13662 allows for changing NAT behavior such as port-forwarding rules. This interface is
13663 used in the <link to="INetworkAdapter::natDriver" /> attribute.</desc>
13664 <attribute name="network" type="wstring">
13665 <desc>The network attribute of the NAT engine (the same value is used with built-in
13666 DHCP server to fill corresponding fields of DHCP leases).</desc>
13667 </attribute>
13668 <attribute name="hostIP" type="wstring">
13669 <desc>IP of host interface to bind all opened sockets to.
13670 <note>Changing this does not change binding of port forwarding.</note>
13671 </desc>
13672 </attribute>
13673 <attribute name="tftpPrefix" type="wstring">
13674 <desc>TFTP prefix attribute which is used with the built-in DHCP server to fill
13675 the corresponding fields of DHCP leases.</desc>
13676 </attribute>
13677 <attribute name="tftpBootFile" type="wstring">
13678 <desc>TFTP boot file attribute which is used with the built-in DHCP server to fill
13679 the corresponding fields of DHCP leases.</desc>
13680 </attribute>
13681 <attribute name="tftpNextServer" type="wstring">
13682 <desc>TFTP server attribute which is used with the built-in DHCP server to fill
13683 the corresponding fields of DHCP leases.
13684 <note>The preferred form is IPv4 addresses.</note>
13685 </desc>
13686 </attribute>
13687 <attribute name="aliasMode" type="unsigned long">
13688 <desc></desc>
13689 </attribute>
13690 <attribute name="dnsPassDomain" type="boolean">
13691 <desc>Whether the DHCP server should pass the DNS domain used by the host.</desc>
13692 </attribute>
13693 <attribute name="dnsProxy" type="boolean">
13694 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
13695 of the DNS proxy and process traffic using DNS servers registered on the host.</desc>
13696 </attribute>
13697 <attribute name="dnsUseHostResolver" type="boolean">
13698 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
13699 of the DNS proxy and process traffic using the host resolver mechanism.</desc>
13700 </attribute>
13701 <attribute name="redirects" type="wstring" readonly="yes" safearray="yes">
13702 <desc>Array of NAT port-forwarding rules in string representation, in the following
13703 format: "name,protocol id,host ip,host port,guest ip,guest port".</desc>
13704 </attribute>
13705 <method name="setNetworkSettings">
13706 <desc>Sets network configuration of the NAT engine.</desc>
13707 <param name="mtu" type="unsigned long" dir="in">
13708 <desc>MTU (maximum transmission unit) of the NAT engine in bytes.</desc>
13709 </param>
13710 <param name="sockSnd" type="unsigned long" dir="in">
13711 <desc>Capacity of the socket send buffer in bytes when creating a new socket.</desc>
13712 </param>
13713 <param name="sockRcv" type="unsigned long" dir="in">
13714 <desc>Capacity of the socket receive buffer in bytes when creating a new socket.</desc>
13715 </param>
13716 <param name="TcpWndSnd" type="unsigned long" dir="in">
13717 <desc>Initial size of the NAT engine's sending TCP window in bytes when
13718 establishing a new TCP connection.</desc>
13719 </param>
13720 <param name="TcpWndRcv" type="unsigned long" dir="in">
13721 <desc>Initial size of the NAT engine's receiving TCP window in bytes when
13722 establishing a new TCP connection.</desc>
13723 </param>
13724 </method>
13725 <method name="getNetworkSettings">
13726 <desc>Returns network configuration of NAT engine. See <link to="#setNetworkSettings" />
13727 for parameter descriptions.</desc>
13728 <param name="mtu" type="unsigned long" dir="out" />
13729 <param name="sockSnd" type="unsigned long" dir="out" />
13730 <param name="sockRcv" type="unsigned long" dir="out" />
13731 <param name="TcpWndSnd" type="unsigned long" dir="out" />
13732 <param name="TcpWndRcv" type="unsigned long" dir="out" />
13733 </method>
13734 <method name="addRedirect">
13735 <desc>Adds a new NAT port-forwarding rule.</desc>
13736 <param name="name" type="wstring" dir="in">
13737 <desc>The name of the rule. An empty name is acceptable, in which case the NAT engine
13738 auto-generates one using the other parameters.</desc>
13739 </param>
13740 <param name="proto" type="NATProtocol" dir="in">
13741 <desc>Protocol handled with the rule.</desc>
13742 </param>
13743 <param name="hostIp" type="wstring" dir="in">
13744 <desc>IP of the host interface to which the rule should apply. An empty ip address is
13745 acceptable, in which case the NAT engine binds the handling socket to any interface.</desc>
13746 </param>
13747 <param name="hostPort" type="unsigned short" dir="in">
13748 <desc>The port number to listen on.</desc>
13749 </param>
13750 <param name="guestIp" type="wstring" dir="in">
13751 <desc>The IP address of the guest which the NAT engine will forward matching packets
13752 to. An empty IP address is acceptable, in which case the NAT engine will forward
13753 packets to the first DHCP lease (x.x.x.15).</desc>
13754 </param>
13755 <param name="guestPort" type="unsigned short" dir="in">
13756 <desc>The port number to forward.</desc>
13757 </param>
13758 </method>
13759 <method name="removeRedirect">
13760 <desc>Removes a port-forwarding rule that was previously registered.</desc>
13761 <param name="name" type="wstring" dir="in">
13762 <desc>The name of the rule to delete.</desc>
13763 </param>
13764 </method>
13765 </interface>
13766
13767 <enum
13768 name="VBoxEventType"
13769 uuid="7d695029-32b8-4855-86d3-75de9082923b">
13770
13771 <desc>
13772 Type of an event.
13773 </desc>
13774
13775 <const name="Invalid" value="0">
13776 <desc>
13777 Invalid event, must be first.
13778 </desc>
13779 </const>
13780
13781 <const name="Any" value="1">
13782 <desc>
13783 Wildcard for all events. Events of this type are never delivered, and only used in
13784 registerListener() call to simplify registration.
13785 </desc>
13786 </const>
13787
13788 <const name="MachineEvent" value="2">
13789 <desc>
13790 Wildcard for all machine events. Events of this type are never delivered, and only used in
13791 registerListener() call to simplify registration.
13792 </desc>
13793 </const>
13794
13795 <const name="SnapshotEvent" value="3">
13796 <desc>
13797 Wildcard for all snapshot events. Events of this type are never delivered, and only used in
13798 registerListener() call to simplify registration.
13799 </desc>
13800 </const>
13801
13802 <const name="InputEvent" value="4">
13803 <desc>
13804 Wildcard for all input device (keyboard, mouse) events.
13805 Events of this type are never delivered, and only used in
13806 registerListener() call to simplify registration.
13807 </desc>
13808 </const>
13809
13810 <const name="LastWildcard" value="31">
13811 <desc>
13812 Last wildcard.
13813 </desc>
13814 </const>
13815
13816 <const name="OnMachineStateChanged" value="32">
13817 <desc>
13818 <see>IMachineStateChangedEvent</see>
13819 </desc>
13820 </const>
13821 <const name="OnMachineDataChanged" value="33">
13822 <desc>
13823 <see>IMachineDataChangedEvent</see>
13824 </desc>
13825 </const>
13826 <const name="OnExtraDataChanged" value="34">
13827 <desc>
13828 <see>IExtraDataChangedEvent</see>
13829 </desc>
13830 </const>
13831 <const name="OnExtraDataCanChange" value="35">
13832 <desc>
13833 <see>IExtraDataCanChangeEvent</see>
13834 </desc>
13835 </const>
13836 <const name="OnMediumRegistered" value="36">
13837 <desc>
13838 <see>IMediumRegistered</see>
13839 </desc>
13840 </const>
13841 <const name="OnMachineRegistered" value="37">
13842 <desc>
13843 <see>IMachineRegisteredEvent</see>
13844 </desc>
13845 </const>
13846 <const name="OnSessionStateChanged" value="38">
13847 <desc>
13848 <see>ISessionStateChangedEvent</see>
13849 </desc>
13850 </const>
13851 <const name="OnSnapshotTaken" value="39">
13852 <desc>
13853 <see>ISnapshotTakenEvent</see>
13854 </desc>
13855 </const>
13856 <const name="OnSnapshotDeleted" value="40">
13857 <desc>
13858 <see>ISnapshotDeletedEvent</see>
13859 </desc>
13860 </const>
13861 <const name="OnSnapshotChanged" value="41">
13862 <desc>
13863 <see>ISnapshotChangedEvent</see>
13864 </desc>
13865 </const>
13866 <const name="OnGuestPropertyChanged" value="42">
13867 <desc>
13868 <see>IGuestPropertyChangedEvent</see>
13869 </desc>
13870 </const>
13871 <!-- Console events -->
13872 <const name="OnMousePointerShapeChanged" value="43">
13873 <desc>
13874 <see>IMousePointerShapeChangedEvent</see>
13875 </desc>
13876 </const>
13877 <const name="OnMouseCapabilityChanged" value="44">
13878 <desc>
13879 <see>IMouseCapabilityChangedEvent</see>
13880 </desc>
13881 </const>
13882 <const name="OnKeyboardLedsChanged" value="45">
13883 <desc>
13884 <see>IKeyboardLedsChangedEvent</see>
13885 </desc>
13886 </const>
13887 <const name="OnStateChanged" value="46">
13888 <desc>
13889 <see>IStateChangedEvent</see>
13890 </desc>
13891 </const>
13892 <const name="OnAdditionsStateChanged" value="47">
13893 <desc>
13894 <see>IAdditionsStateChangedEvent</see>
13895 </desc>
13896 </const>
13897 <const name="OnNetworkAdapterChanged" value="48">
13898 <desc>
13899 <see>INetworkAdapterChangedEvent</see>
13900 </desc>
13901 </const>
13902 <const name="OnSerialPortChanged" value="49">
13903 <desc>
13904 <see>ISerialPortChangedEvent</see>
13905 </desc>
13906 </const>
13907 <const name="OnParallelPortChanged" value="50">
13908 <desc>
13909 <see>IParallelPortChangedEvent</see>
13910 </desc>
13911 </const>
13912 <const name="OnStorageControllerChanged" value="51">
13913 <desc>
13914 <see>IStorageControllerChangedEvent</see>
13915 </desc>
13916 </const>
13917 <const name="OnMediumChanged" value="52">
13918 <desc>
13919 <see>IMediumChangedEvent</see>
13920 </desc>
13921 </const>
13922 <const name="OnVRDPServerChanged" value="53">
13923 <desc>
13924 <see>IVRDPServerChangedEvent</see>
13925 </desc>
13926 </const>
13927 <const name="OnUSBControllerChanged" value="54">
13928 <desc>
13929 <see>IUSBControllerChangedEvent</see>
13930 </desc>
13931 </const>
13932 <const name="OnUSBDeviceStateChanged" value="55">
13933 <desc>
13934 <see>IUSBDeviceStateChangedEvent</see>
13935 </desc>
13936 </const>
13937 <const name="OnSharedFolderChanged" value="56">
13938 <desc>
13939 <see>ISharedFolderChangedEvent</see>
13940 </desc>
13941 </const>
13942 <const name="OnRuntimeError" value="57">
13943 <desc>
13944 <see>IRuntimeErrorEvent</see>
13945 </desc>
13946 </const>
13947 <const name="OnCanShowWindow" value="58">
13948 <desc>
13949 <see>ICanShowWindowEvent</see>
13950 </desc>
13951 </const>
13952 <const name="OnShowWindow" value="59">
13953 <desc>
13954 <see>IShowWindowEvent</see>
13955 </desc>
13956 </const>
13957 <const name="OnCPUChanged" value="60">
13958 <desc>
13959 <see>ICPUChangedEvent</see>
13960 </desc>
13961 </const>
13962 <const name="OnRemoteDisplayInfoChanged" value="61">
13963 <desc>
13964 <see>IRemoteDisplayInfoChangedEvent</see>
13965 </desc>
13966 </const>
13967 <const name="OnEventSourceChanged" value="62">
13968 <desc>
13969 <see>IEventSourceChangedEvent</see>
13970 </desc>
13971 </const>
13972 <!-- Last event marker -->
13973 <const name="Last" value="63">
13974 <desc>
13975 Must be last event, used for iterations and structures relying on numerical event values.
13976 </desc>
13977 </const>
13978
13979 </enum>
13980
13981 <interface
13982 name="IEventSource" extends="$unknown"
13983 uuid="3c670618-f727-4fe9-94d2-8243f489a033"
13984 wsmap="managed"
13985 >
13986 <desc>
13987 Event source. Generally, any object which could generate events can be an event source,
13988 or aggregate one. To simplify using one-way protocols, such as webservices running on top of HTTP(S),
13989 event source can work with listeners in either active or passive mode. In active mode it's up to
13990 IEventSource implementation to call handleEvent(), in passive mode event source keeps track of
13991 pending events for each listener and returns available events on demand.
13992 </desc>
13993
13994 <method name="createListener">
13995 <desc>
13996 Creates new listener object, useful for passive mode.
13997 <see>IEventListener</see>
13998 </desc>
13999 <param name="listener" type="IEventListener" dir="return"/>
14000 </method>
14001
14002 <method name="registerListener">
14003 <desc>
14004 Register an event listener.
14005 </desc>
14006 <param name="listener" type="IEventListener" dir="in">
14007 <desc>Listener to register.</desc>
14008 </param>
14009 <param name="interesting" type="VBoxEventType" dir="in" safearray="yes">
14010 <desc>
14011 Event types listener is interested in. One can use wildcards like Any -
14012 <see>VBoxEventType::Any</see> to specify wildcards.
14013 </desc>
14014 </param>
14015 <param name="active" type="boolean" dir="in">
14016 <desc>
14017 Which mode this listener shall function in.
14018 If in active mode, IEventListener's handleEvent() is called directly.
14019 If in passive mode - for this IEventListener internal event queue is created.
14020 When next event comes, it's added to queues for all interested registered passive
14021 listeners. It's up to external code to call listener's handleEvent() then.
14022 When done with event, it shall call source's eventComplete().
14023 </desc>
14024 </param>
14025 </method>
14026
14027 <method name="unregisterListener">
14028 <desc>
14029 Unregister an event listener. If listener is passive, and some waitable events are still
14030 in queue they are marked as processed automatically.
14031 </desc>
14032 <param name="listener" type="IEventListener" dir="in">
14033 <desc>Listener to unregister.</desc>
14034 </param>
14035 </method>
14036
14037 <method name="fireEvent">
14038 <desc>
14039 Fire an event for this source.
14040 </desc>
14041 <param name="event" type="IEvent" dir="in">
14042 <desc>Event to deliver.</desc>
14043 </param>
14044 <param name="timeout" type="long" dir="in">
14045 <desc>
14046 Timeout to wait until event processed in ms (if event is waitable),
14047 0 - no wait, -1 - forever until delivered.
14048 </desc>
14049 </param>
14050 <param name="result" type="boolean" dir="return">
14051 <desc>true if an event was delivered to all targets, or is non-waitable.</desc>
14052 </param>
14053 </method>
14054
14055 <method name="getEvent">
14056 <desc>
14057 Get events from this peer's event queue (for passive mode). Consumer's implementation
14058 must call listener's handleEvent() once event is available.
14059 </desc>
14060 <param name="listener" type="IEventListener" dir="in">
14061 <desc>Which listener get data for.</desc>
14062 </param>
14063 <param name="timeout" type="long" dir="in">
14064 <desc>Timeout to wait until event available in ms, 0 - no wait, -1 - forever until available.</desc>
14065 </param>
14066 <param name="event" type="IEvent" dir="return">
14067 <desc>Event retrieved, or null if none available.</desc>
14068 </param>
14069 </method>
14070
14071 <method name="eventProcessed">
14072 <desc>
14073 Must be called for waitable events when particular listener finished event processing.
14074 When all listeners who this event was aimed to call eventProcessed() event source
14075 can call event's setProcessed().
14076 </desc>
14077 <param name="listener" type="IEventListener" dir="in">
14078 <desc>Which listener processed event.</desc>
14079 </param>
14080 <param name="event" type="IEvent" dir="in">
14081 <desc>Which event.</desc>
14082 </param>
14083 </method>
14084
14085 </interface>
14086
14087 <interface
14088 name="IEventListener" extends="$unknown"
14089 uuid="67099191-32e7-4f6c-85ee-422304c71b90"
14090 wsmap="managed"
14091 >
14092 <desc>
14093 Event listener. Event listener can work in either active, or passive mode, depending on the way it's registered.
14094 </desc>
14095
14096 <method name="handleEvent">
14097 <desc>
14098 Handle event callback (called directly by IEventSource in active mode, or could be
14099 called by event processor thread in passive mode).
14100 </desc>
14101 <param name="event" type="IEvent" dir="in">
14102 <desc>Event available.</desc>
14103 </param>
14104 </method>
14105
14106 </interface>
14107
14108 <interface
14109 name="IEvent" extends="$unknown"
14110 uuid="0ca2adba-8f30-401b-a8cd-fe31dbe839c0"
14111 wsmap="managed"
14112 >
14113 <desc>
14114 Generic event. Usually events implements some of IEvent subinterfaces, so
14115 standard use pattern is to check 'type' attribute and downcast (with QueryInterface())
14116 appropraitely.
14117 </desc>
14118
14119 <attribute name="type" readonly="yes" type="VBoxEventType">
14120 <desc>
14121 Event type.
14122 </desc>
14123 </attribute>
14124
14125 <attribute name="source" readonly="yes" type="IEventSource">
14126 <desc>
14127 Source of this event.
14128 </desc>
14129 </attribute>
14130
14131 <attribute name="waitable" readonly="yes" type="boolean">
14132 <desc>
14133 If we can wait for this event being processed. If false, waitProcessed() returns immediately,
14134 and setProcessed() doesn't make sense. Non-waitable events are generally better performing,
14135 as no additional overhead associated with waitability imposed.
14136 Waitable events are needed when some need to be able to wait for particular event processed,
14137 for example for vetoable changes, or if event refers to some resource which need to be kept immutable
14138 until all consumers confirmed events.
14139 </desc>
14140 </attribute>
14141
14142 <method name="setProcessed">
14143 <desc>
14144 Called to mark the moment when this event is considered processed.
14145 </desc>
14146 </method>
14147
14148 <method name="waitProcessed">
14149 <desc>
14150 Wait until time outs, or this event is processed. Event must be waitable for this operation to have
14151 described semantics, for non-waitable returns true immediately.
14152 </desc>
14153 <param name="timeout" type="long" dir="in">
14154 <desc>Timeout to wait until event processed in ms, 0 - no wait, -1 - forever until processed.</desc>
14155 </param>
14156 <param name="result" type="boolean" dir="return">
14157 <desc>If this event was processed before timeout.</desc>
14158 </param>
14159 </method>
14160 </interface>
14161
14162
14163 <interface
14164 name="IMachineEvent" extends="IEvent"
14165 uuid="92ed7b1a-0d96-40ed-ae46-a564d484325e"
14166 wsmap="managed" id="MachineEvent"
14167 >
14168 <desc>Base abstract interface for all machine events.</desc>
14169
14170 <attribute name="machineId" readonly="yes" type="uuid" mod="string">
14171 <desc>ID of the machine this event relates to.</desc>
14172 </attribute>
14173
14174 </interface>
14175
14176 <interface
14177 name="IMachineStateChangedEvent" extends="IMachineEvent"
14178 uuid="5748F794-48DF-438D-85EB-98FFD70D18C9"
14179 wsmap="managed" autogen="VBoxEvent" id="OnMachineStateChanged"
14180 >
14181 <desc>Machine state change event.</desc>
14182
14183 <attribute name="state" readonly="yes" type="MachineState">
14184 <desc>New execution state.</desc>
14185 </attribute>
14186 </interface>
14187
14188 <interface
14189 name="IMachineDataChangedEvent" extends="IMachineEvent"
14190 uuid="6AA70A6C-0DCA-4810-8C5C-457B278E3D49"
14191 wsmap="managed" autogen="VBoxEvent" id="OnMachineDataChanged"
14192 >
14193 <desc>
14194 Any of the settings of the given machine has changed.
14195 </desc>
14196 </interface>
14197
14198 <interface
14199 name="IMachineRegisteredEvent" extends="IMachineEvent"
14200 uuid="c354a762-3ff2-4f2e-8f09-07382ee25088"
14201 wsmap="managed" autogen="VBoxEvent" id="OnMachineRegistered"
14202 >
14203 <desc>
14204 The given machine was registered or unregistered
14205 within this VirtualBox installation.
14206 </desc>
14207
14208 <attribute name="registered" type="boolean" readonly="yes">
14209 <desc>
14210 If @c true, the machine was registered, otherwise it was
14211 unregistered.
14212 </desc>
14213 </attribute>
14214 </interface>
14215
14216 <interface
14217 name="ISessionStateChangedEvent" extends="IMachineEvent"
14218 uuid="714a3eef-799a-4489-86cd-fe8e45b2ff8e"
14219 wsmap="managed" autogen="VBoxEvent" id="OnSessionStateChanged"
14220 >
14221 <desc>
14222 The state of the session for the given machine was changed.
14223 <see>IMachine::sessionState</see>
14224 </desc>
14225
14226 <attribute name="state" type="SessionState" readonly="yes">
14227 <desc>
14228 New session state.
14229 </desc>
14230 </attribute>
14231 </interface>
14232
14233 <interface
14234 name="IGuestPropertyChangedEvent" extends="IMachineEvent"
14235 uuid="3f63597a-26f1-4edb-8dd2-6bddd0912368"
14236 wsmap="managed" autogen="VBoxEvent" id="OnGuestPropertyChanged"
14237 >
14238 <desc>
14239 Notification when a guest property has changed.
14240 </desc>
14241
14242 <attribute name="name" readonly="yes" type="wstring">
14243 <desc>
14244 The name of the property that has changed.
14245 </desc>
14246 </attribute>
14247
14248 <attribute name="value" readonly="yes" type="wstring">
14249 <desc>
14250 The new property value.
14251 </desc>
14252 </attribute>
14253
14254 <attribute name="flags" readonly="yes" type="wstring">
14255 <desc>
14256 The new property flags.
14257 </desc>
14258 </attribute>
14259
14260 </interface>
14261
14262 <interface
14263 name="ISnapshotEvent" extends="IMachineEvent"
14264 uuid="21637b0e-34b8-42d3-acfb-7e96daf77c22"
14265 wsmap="managed" id="SnapshotEvent"
14266 >
14267 <desc>Base interface for all snapshot events.</desc>
14268
14269 <attribute name="snapshotId" readonly="yes" type="uuid" mod="string">
14270 <desc>ID of the snapshot this event relates to.</desc>
14271 </attribute>
14272
14273 </interface>
14274
14275 <interface
14276 name="ISnapshotTakenEvent" extends="ISnapshotEvent"
14277 uuid="d27c0b3d-6038-422c-b45e-6d4a0503d9f1"
14278 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotTaken"
14279 >
14280 <desc>
14281 A new snapshot of the machine has been taken.
14282 <see>ISnapshot</see>
14283 </desc>
14284 </interface>
14285
14286 <interface
14287 name="ISnapshotDeletedEvent" extends="ISnapshotEvent"
14288 uuid="c48f3401-4a9e-43f4-b7a7-54bd285e22f4"
14289 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotDeleted"
14290 >
14291 <desc>
14292 Snapshot of the given machine has been deleted.
14293
14294 <note>
14295 This notification is delivered <b>after</b> the snapshot
14296 object has been uninitialized on the server (so that any
14297 attempt to call its methods will return an error).
14298 </note>
14299
14300 <see>ISnapshot</see>
14301 </desc>
14302 </interface>
14303
14304 <interface
14305 name="ISnapshotChangedEvent" extends="ISnapshotEvent"
14306 uuid="07541941-8079-447a-a33e-47a69c7980db"
14307 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotChanged"
14308 >
14309 <desc>
14310 Snapshot properties (name and/or description) have been changed.
14311 <see>ISnapshot</see>
14312 </desc>
14313 </interface>
14314
14315 <interface
14316 name="IMousePointerShapeChangedEvent" extends="IEvent"
14317 uuid="a6dcf6e8-416b-4181-8c4a-45ec95177aef"
14318 wsmap="managed" autogen="VBoxEvent" id="OnMousePointerShapeChanged"
14319 >
14320 <desc>
14321 Notification when the guest mouse pointer shape has
14322 changed. The new shape data is given.
14323 </desc>
14324
14325 <attribute name="visible" type="boolean" readonly="yes">
14326 <desc>
14327 Flag whether the pointer is visible.
14328 </desc>
14329 </attribute>
14330 <attribute name="alpha" type="boolean" readonly="yes">
14331 <desc>
14332 Flag whether the pointer has an alpha channel.
14333 </desc>
14334 </attribute>
14335 <attribute name="xhot" type="unsigned long" readonly="yes">
14336 <desc>
14337 The pointer hot spot X coordinate.
14338 </desc>
14339 </attribute>
14340 <attribute name="yhot" type="unsigned long" readonly="yes">
14341 <desc>
14342 The pointer hot spot Y coordinate.
14343 </desc>
14344 </attribute>
14345 <attribute name="width" type="unsigned long" readonly="yes">
14346 <desc>
14347 Width of the pointer shape in pixels.
14348 </desc>
14349 </attribute>
14350 <attribute name="height" type="unsigned long" readonly="yes">
14351 <desc>
14352 Height of the pointer shape in pixels.
14353 </desc>
14354 </attribute>
14355 <attribute name="shape" type="octet" safearray="yes" readonly="yes">
14356 <desc>
14357 Shape buffer arrays.
14358
14359 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
14360 followed by a 32-bpp XOR (color) mask.
14361
14362 For pointers without alpha channel the XOR mask pixels are 32
14363 bit values: (lsb)BGR0(msb). For pointers with alpha channel
14364 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
14365
14366 An AND mask is used for pointers with alpha channel, so if the
14367 callback does not support alpha, the pointer could be
14368 displayed as a normal color pointer.
14369
14370 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
14371 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
14372 height</tt>. The padding bits at the end of each scanline are
14373 undefined.
14374
14375 The XOR mask follows the AND mask on the next 4-byte aligned
14376 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
14377 Bytes in the gap between the AND and the XOR mask are undefined.
14378 The XOR mask scanlines have no gap between them and the size of
14379 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
14380
14381 <note>
14382 If @a shape is 0, only the pointer visibility is changed.
14383 </note>
14384 </desc>
14385 </attribute>
14386 </interface>
14387
14388 <interface
14389 name="IMouseCapabilityChangedEvent" extends="IEvent"
14390 uuid="d633ad48-820c-4207-b46c-6bd3596640d5"
14391 wsmap="managed" autogen="VBoxEvent" id="OnMouseCapabilityChanged"
14392 >
14393 <desc>
14394 Notification when the mouse capabilities reported by the
14395 guest have changed. The new capabilities are passed.
14396 </desc>
14397 <attribute name="supportsAbsolute" type="boolean" readonly="yes">
14398 <desc>
14399 Supports absolute coordinates.
14400 </desc>
14401 </attribute>
14402 <attribute name="supportsRelative" type="boolean" readonly="yes">
14403 <desc>
14404 Supports relative coordinates.
14405 </desc>
14406 </attribute>
14407 <attribute name="needsHostCursor" type="boolean" readonly="yes">
14408 <desc>
14409 If host cursor is needed.
14410 </desc>
14411 </attribute>
14412 </interface>
14413
14414 <interface
14415 name="IKeyboardLedsChangedEvent" extends="IEvent"
14416 uuid="6DDEF35E-4737-457B-99FC-BC52C851A44F"
14417 wsmap="managed" autogen="VBoxEvent" id="OnKeyboardLedsChanged"
14418 >
14419 <desc>
14420 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
14421 to alter the state of the keyboard LEDs.
14422 </desc>
14423 <attribute name="numLock" type="boolean" readonly="yes">
14424 <desc>
14425 NumLock status.
14426 </desc>
14427 </attribute>
14428 <attribute name="capsLock" type="boolean" readonly="yes">
14429 <desc>
14430 CapsLock status.
14431 </desc>
14432 </attribute>
14433 <attribute name="scrollLock" type="boolean" readonly="yes">
14434 <desc>
14435 ScrollLock status.
14436 </desc>
14437 </attribute>
14438 </interface>
14439
14440 <interface
14441 name="IStateChangedEvent" extends="IEvent"
14442 uuid="4376693C-CF37-453B-9289-3B0F521CAF27"
14443 wsmap="managed" autogen="VBoxEvent" id="OnStateChanged"
14444 >
14445 <desc>
14446 Notification when the execution state of the machine has changed.
14447 The new state is given.
14448 </desc>
14449 <attribute name="state" type="MachineState" readonly="yes">
14450 <desc>
14451 New machine state.
14452 </desc>
14453 </attribute>
14454 </interface>
14455
14456 <interface
14457 name="IAdditionsStateChangedEvent" extends="IEvent"
14458 uuid="D70F7915-DA7C-44C8-A7AC-9F173490446A"
14459 wsmap="managed" autogen="VBoxEvent" id="OnAdditionsStateChanged"
14460 >
14461 <desc>
14462 Notification when a Guest Additions property changes.
14463 Interested callees should query IGuest attributes to
14464 find out what has changed.
14465 </desc>
14466 </interface>
14467
14468 <interface
14469 name="INetworkAdapterChangedEvent" extends="IEvent"
14470 uuid="08889892-1EC6-4883-801D-77F56CFD0103"
14471 wsmap="managed" autogen="VBoxEvent" id="OnNetworkAdapterChanged"
14472 >
14473 <desc>
14474 Notification when a property of one of the
14475 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
14476 changes. Interested callees should use INetworkAdapter methods and
14477 attributes to find out what has changed.
14478 </desc>
14479 <attribute name="networkAdapter" type="INetworkAdapter" readonly="yes">
14480 <desc>
14481 Network adapter that is subject to change.
14482 </desc>
14483 </attribute>
14484 </interface>
14485
14486 <interface
14487 name="ISerialPortChangedEvent" extends="IEvent"
14488 uuid="3BA329DC-659C-488B-835C-4ECA7AE71C6C"
14489 wsmap="managed" autogen="VBoxEvent" id="OnSerialPortChanged"
14490 >
14491 <desc>
14492 Notification when a property of one of the
14493 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
14494 Interested callees should use ISerialPort methods and attributes
14495 to find out what has changed.
14496 </desc>
14497 <attribute name="serialPort" type="ISerialPort" readonly="yes">
14498 <desc>
14499 Serial port that is subject to change.
14500 </desc>
14501 </attribute>
14502 </interface>
14503
14504 <interface
14505 name="IParallelPortChangedEvent" extends="IEvent"
14506 uuid="813C99FC-9849-4F47-813E-24A75DC85615"
14507 wsmap="managed" autogen="VBoxEvent" id="OnParallelPortChanged"
14508 >
14509 <desc>
14510 Notification when a property of one of the
14511 virtual <link to="IMachine::getParallelPort">parallel ports</link>
14512 changes. Interested callees should use ISerialPort methods and
14513 attributes to find out what has changed.
14514 </desc>
14515 <attribute name="parallelPort" type="IParallelPort" readonly="yes">
14516 <desc>
14517 Parallel port that is subject to change.
14518 </desc>
14519 </attribute>
14520 </interface>
14521
14522 <interface
14523 name="IStorageControllerChangedEvent" extends="IEvent"
14524 uuid="715212BF-DA59-426E-8230-3831FAA52C56"
14525 wsmap="managed" autogen="VBoxEvent" id="OnStorageControllerChanged"
14526 >
14527 <desc>
14528 Notification when a
14529 <link to="IMachine::mediumAttachments">medium attachment</link>
14530 changes.
14531 </desc>
14532 </interface>
14533
14534 <interface
14535 name="IMediumChangedEvent" extends="IEvent"
14536 uuid="0FE2DA40-5637-472A-9736-72019EABD7DE"
14537 wsmap="managed" autogen="VBoxEvent" id="OnMediumChanged"
14538 >
14539 <desc>
14540 Notification when a
14541 <link to="IMachine::mediumAttachments">medium attachment</link>
14542 changes.
14543 </desc>
14544 <attribute name="mediumAttachment" type="IMediumAttachment" readonly="yes">
14545 <desc>
14546 Medium attachment that is subject to change.
14547 </desc>
14548 </attribute>
14549 </interface>
14550
14551 <interface
14552 name="ICPUChangedEvent" extends="IEvent"
14553 uuid="D0F0BECC-EE17-4D17-A8CC-383B0EB55E9D"
14554 wsmap="managed" autogen="VBoxEvent" id="OnCPUChanged"
14555 >
14556 <desc>
14557 Notification when a CPU changes.
14558 </desc>
14559 <attribute name="cpu" type="unsigned long" readonly="yes">
14560 <desc>
14561 The CPU which changed.
14562 </desc>
14563 </attribute>
14564 <attribute name="add" type="boolean" readonly="yes">
14565 <desc>
14566 Flag whether the CPU was added or removed.
14567 </desc>
14568 </attribute>
14569 </interface>
14570
14571 <interface
14572 name="IVRDPServerChangedEvent" extends="IEvent"
14573 uuid="726038B6-6279-4A7A-8037-D041693D1915"
14574 wsmap="managed" autogen="VBoxEvent" id="OnVRDPServerChanged"
14575 >
14576 <desc>
14577 Notification when a property of the
14578 <link to="IMachine::VRDPServer">VRDP server</link> changes.
14579 Interested callees should use IVRDPServer methods and attributes to
14580 find out what has changed.
14581 </desc>
14582 </interface>
14583
14584 <interface
14585 name="IRemoteDisplayInfoChangedEvent" extends="IEvent"
14586 uuid="65B556C5-2A99-47D8-B311-FC177F0914CD"
14587 wsmap="managed" autogen="VBoxEvent" id="OnRemoteDisplayInfoChanged"
14588 >
14589 <desc>
14590 Notification when the status of the VRDP server changes. Interested callees
14591 should use <link to="IConsole::RemoteDisplayInfo">IRemoteDisplayInfo</link>
14592 attributes to find out what is the current status.
14593 </desc>
14594 </interface>
14595
14596 <interface
14597 name="IUSBControllerChangedEvent" extends="IEvent"
14598 uuid="93BADC0C-61D9-4940-A084-E6BB29AF3D83"
14599 wsmap="managed" autogen="VBoxEvent" id="OnUSBControllerChanged"
14600 >
14601 <desc>
14602 Notification when a property of the virtual
14603 <link to="IMachine::USBController">USB controller</link> changes.
14604 Interested callees should use IUSBController methods and attributes to
14605 find out what has changed.
14606 </desc>
14607 </interface>
14608
14609 <interface
14610 name="IUSBDeviceStateChangedEvent" extends="IEvent"
14611 uuid="806da61b-6679-422a-b629-51b06b0c6d93"
14612 wsmap="managed" autogen="VBoxEvent" id="OnUSBDeviceStateChanged"
14613 >
14614 <desc>
14615 Notification when a USB device is attached to or detached from
14616 the virtual USB controller.
14617
14618 This notification is sent as a result of the indirect
14619 request to attach the device because it matches one of the
14620 machine USB filters, or as a result of the direct request
14621 issued by <link to="IConsole::attachUSBDevice"/> or
14622 <link to="IConsole::detachUSBDevice"/>.
14623
14624 This notification is sent in case of both a succeeded and a
14625 failed request completion. When the request succeeds, the
14626 @a error parameter is @c null, and the given device has been
14627 already added to (when @a attached is @c true) or removed from
14628 (when @a attached is @c false) the collection represented by
14629 <link to="IConsole::USBDevices"/>. On failure, the collection
14630 doesn't change and the @a error parameter represents the error
14631 message describing the failure.
14632 </desc>
14633 <attribute name="device" type="IUSBDevice" readonly="yes">
14634 <desc>
14635 Device that is subject to state change.
14636 </desc>
14637 </attribute>
14638 <attribute name="attached" type="boolean" readonly="yes">
14639 <desc>
14640 @c true if the device was attached and @c false otherwise.
14641 </desc>
14642 </attribute>
14643 <attribute name="error" type="IVirtualBoxErrorInfo" readonly="yes">
14644 <desc>
14645 @c null on success or an error message object on failure.
14646 </desc>
14647 </attribute>
14648 </interface>
14649
14650 <interface
14651 name="ISharedFolderChangedEvent" extends="IEvent"
14652 uuid="B66349B5-3534-4239-B2DE-8E1535D94C0B"
14653 wsmap="managed" autogen="VBoxEvent" id="OnSharedFolderChanged"
14654 >
14655 <desc>
14656 Notification when a shared folder is added or removed.
14657 The @a scope argument defines one of three scopes:
14658 <link to="IVirtualBox::sharedFolders">global shared folders</link>
14659 (<link to="Scope_Global">Global</link>),
14660 <link to="IMachine::sharedFolders">permanent shared folders</link> of
14661 the machine (<link to="Scope_Machine">Machine</link>) or <link
14662 to="IConsole::sharedFolders">transient shared folders</link> of the
14663 machine (<link to="Scope_Session">Session</link>). Interested callees
14664 should use query the corresponding collections to find out what has
14665 changed.
14666 </desc>
14667 <attribute name="scope" type="Scope" readonly="yes">
14668 <desc>
14669 Scope of the notification.
14670 </desc>
14671 </attribute>
14672 </interface>
14673
14674 <interface
14675 name="IRuntimeErrorEvent" extends="IEvent"
14676 uuid="883DD18B-0721-4CDE-867C-1A82ABAF914C"
14677 wsmap="managed" autogen="VBoxEvent" id="OnRuntimeError"
14678 >
14679 <desc>
14680 Notification when an error happens during the virtual
14681 machine execution.
14682
14683 There are three kinds of runtime errors:
14684 <ul>
14685 <li><i>fatal</i></li>
14686 <li><i>non-fatal with retry</i></li>
14687 <li><i>non-fatal warnings</i></li>
14688 </ul>
14689
14690 <b>Fatal</b> errors are indicated by the @a fatal parameter set
14691 to @c true. In case of fatal errors, the virtual machine
14692 execution is always paused before calling this notification, and
14693 the notification handler is supposed either to immediately save
14694 the virtual machine state using <link to="IConsole::saveState"/>
14695 or power it off using <link to="IConsole::powerDown"/>.
14696 Resuming the execution can lead to unpredictable results.
14697
14698 <b>Non-fatal</b> errors and warnings are indicated by the
14699 @a fatal parameter set to @c false. If the virtual machine
14700 is in the Paused state by the time the error notification is
14701 received, it means that the user can <i>try to resume</i> the machine
14702 execution after attempting to solve the problem that caused the
14703 error. In this case, the notification handler is supposed
14704 to show an appropriate message to the user (depending on the
14705 value of the @a id parameter) that offers several actions such
14706 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
14707 wants to retry, the notification handler should continue
14708 the machine execution using the <link to="IConsole::resume"/>
14709 call. If the machine execution is not Paused during this
14710 notification, then it means this notification is a <i>warning</i>
14711 (for example, about a fatal condition that can happen very soon);
14712 no immediate action is required from the user, the machine
14713 continues its normal execution.
14714
14715 Note that in either case the notification handler
14716 <b>must not</b> perform any action directly on a thread
14717 where this notification is called. Everything it is allowed to
14718 do is to post a message to another thread that will then talk
14719 to the user and take the corresponding action.
14720
14721 Currently, the following error identifiers are known:
14722 <ul>
14723 <li><tt>"HostMemoryLow"</tt></li>
14724 <li><tt>"HostAudioNotResponding"</tt></li>
14725 <li><tt>"VDIStorageFull"</tt></li>
14726 <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
14727 </ul>
14728 </desc>
14729 <attribute name="fatal" type="boolean" readonly="yes">
14730 <desc>
14731 Whether the error is fatal or not.
14732 </desc>
14733 </attribute>
14734 <attribute name="id" type="wstring" readonly="yes">
14735 <desc>
14736 Error identifier.
14737 </desc>
14738 </attribute>
14739 <attribute name="message" type="wstring" readonly="yes">
14740 <desc>
14741 Optional error message.
14742 </desc>
14743 </attribute>
14744 </interface>
14745
14746
14747 <interface
14748 name="IEventSourceChangedEvent" extends="IEvent"
14749 uuid="e7932cb8-f6d4-4ab6-9cbf-558eb8959a6a"
14750 waitable="yes"
14751 wsmap="managed" autogen="VBoxEvent" id="OnEventSourceChanged"
14752 >
14753 <desc>
14754 Notification when an event source state changes (listener added or removed).
14755 </desc>
14756
14757 <attribute name="listener" type="IEventListener" readonly="yes">
14758 <desc>
14759 Event listener which has changed.
14760 </desc>
14761 </attribute>
14762
14763 <attribute name="add" type="boolean" readonly="yes">
14764 <desc>
14765 Flag whether listener was added or removed.
14766 </desc>
14767 </attribute>
14768 </interface>
14769
14770 <interface
14771 name="IExtraDataChangedEvent" extends="IEvent"
14772 uuid="024F00CE-6E0B-492A-A8D0-968472A94DC7"
14773 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataChanged"
14774 >
14775 <desc>
14776 Notification when machine specific or global extra data
14777 has changed.
14778 </desc>
14779 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
14780 <desc>
14781 ID of the machine this event relates to.
14782 Null for global extra data changes.
14783 </desc>
14784 </attribute>
14785 <attribute name="key" type="wstring" readonly="yes">
14786 <desc>
14787 Extra data key that has changed.
14788 </desc>
14789 </attribute>
14790 <attribute name="value" type="wstring" readonly="yes">
14791 <desc>
14792 Extra data value for the given key.
14793 </desc>
14794 </attribute>
14795 </interface>
14796
14797 <interface
14798 name="IVetoEvent" extends="IEvent"
14799 uuid="9a1a4130-69fe-472f-ac10-c6fa25d75007"
14800 wsmap="managed"
14801 >
14802 <desc>Base abstract interface for veto events.</desc>
14803
14804 <method name="addVeto">
14805 <desc>
14806 Adds a veto on this event.
14807 </desc>
14808 <param name="reason" type="wstring" dir="in">
14809 <desc>
14810 Reason for veto, could be null or empty string.
14811 </desc>
14812 </param>
14813 </method>
14814
14815 <method name="isVetoed">
14816 <desc>
14817 If this event was vetoed.
14818 </desc>
14819 <param name="result" type="boolean" dir="return">
14820 <desc>
14821 Reason for veto.
14822 </desc>
14823 </param>
14824 </method>
14825
14826 <method name="getVetos">
14827 <desc>
14828 Current veto reason list, if size is 0 - no veto.
14829 </desc>
14830 <param name="result" type="wstring" dir="return" safearray="yes">
14831 <desc>
14832 Array of reasons for veto provided by different event handlers.
14833 </desc>
14834 </param>
14835 </method>
14836
14837 </interface>
14838
14839 <interface
14840 name="IExtraDataCanChangeEvent" extends="IVetoEvent"
14841 uuid="245d88bd-800a-40f8-87a6-170d02249a55"
14842 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataCanChange"
14843 waitable="true"
14844 >
14845 <desc>
14846 Notification when someone tries to change extra data for
14847 either the given machine or (if @c null) global extra data.
14848 This gives the chance to veto against changes.
14849 </desc>
14850 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
14851 <desc>
14852 ID of the machine this event relates to.
14853 Null for global extra data changes.
14854 </desc>
14855 </attribute>
14856 <attribute name="key" type="wstring" readonly="yes">
14857 <desc>
14858 Extra data key that has changed.
14859 </desc>
14860 </attribute>
14861 <attribute name="value" type="wstring" readonly="yes">
14862 <desc>
14863 Extra data value for the given key.
14864 </desc>
14865 </attribute>
14866 </interface>
14867
14868 <interface
14869 name="ICanShowWindowEvent" extends="IVetoEvent"
14870 uuid="adf292b0-92c9-4a77-9d35-e058b39fe0b9"
14871 wsmap="managed" autogen="VBoxEvent" id="OnCanShowWindow"
14872 waitable="true"
14873 >
14874 <desc>
14875 Notification when a call to
14876 <link to="IMachine::canShowConsoleWindow"/> is made by a
14877 front-end to check if a subsequent call to
14878 <link to="IMachine::showConsoleWindow"/> can succeed.
14879
14880 The callee should give an answer appropriate to the current
14881 machine state using event veto. This answer must
14882 remain valid at least until the next
14883 <link to="IConsole::state">machine state</link> change.
14884 </desc>
14885 </interface>
14886
14887 <interface
14888 name="IShowWindowEvent" extends="IEvent"
14889 uuid="B0A0904D-2F05-4D28-855F-488F96BAD2B2"
14890 wsmap="managed" autogen="VBoxEvent" id="OnShowWindow"
14891 waitable="true"
14892 >
14893 <desc>
14894 Notification when a call to
14895 <link to="IMachine::showConsoleWindow"/>
14896 requests the console window to be activated and brought to
14897 foreground on the desktop of the host PC.
14898
14899 This notification should cause the VM console process to
14900 perform the requested action as described above. If it is
14901 impossible to do it at a time of this notification, this
14902 method should return a failure.
14903
14904 Note that many modern window managers on many platforms
14905 implement some sort of focus stealing prevention logic, so
14906 that it may be impossible to activate a window without the
14907 help of the currently active application (which is supposedly
14908 an initiator of this notification). In this case, this method
14909 must return a non-zero identifier that represents the
14910 top-level window of the VM console process. The caller, if it
14911 represents a currently active process, is responsible to use
14912 this identifier (in a platform-dependent manner) to perform
14913 actual window activation.
14914
14915 This method must set @a winId to zero if it has performed all
14916 actions necessary to complete the request and the console
14917 window is now active and in foreground, to indicate that no
14918 further action is required on the caller's side.
14919 </desc>
14920 <attribute name="winId" type="unsigned long long">
14921 <desc>
14922 Platform-dependent identifier of the top-level VM console
14923 window, or zero if this method has performed all actions
14924 necessary to implement the <i>show window</i> semantics for
14925 the given platform and/or this VirtualBox front-end.
14926 </desc>
14927 </attribute>
14928 </interface>
14929
14930 <module name="VBoxSVC" context="LocalServer">
14931 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
14932 namespace="virtualbox.org">
14933 <interface name="IVirtualBox" default="yes"/>
14934 </class>
14935 </module>
14936
14937 <module name="VBoxC" context="InprocServer" threadingModel="Free">
14938 <class name="Session" uuid="3C02F46D-C9D2-4F11-A384-53F0CF917214"
14939 namespace="virtualbox.org">
14940 <interface name="ISession" default="yes"/>
14941 </class>
14942
14943 <class name="Console" uuid="577230FF-164F-4CAC-8548-312D8275A4A7"
14944 namespace="virtualbox.org">
14945 <interface name="IConsole" default="yes"/>
14946 </class>
14947 </module>
14948
14949</library>
14950
14951</idl>
14952
14953<!-- vim: set shiftwidth=2 tabstop=2 expandtab: -->
Note: See TracBrowser for help on using the repository browser.

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