VirtualBox

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

Last change on this file since 42699 was 42693, checked in by vboxsync, 12 years ago

Guest Control 2.0: Update.

  • Property svn:eol-style set to native
File size: 720.0 KB
Line 
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4
5 Copyright (C) 2006-2012 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 and the VBoxManage command-line interface) 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
110 The naming of methods and attributes is very clearly defined: they all start
111 with a lowercase letter (except if they start with an acronym), and are using
112 CamelCase style otherwise. This naming only applies to the IDL description,
113 and is modified by the various language bindings (some convert the first
114 character to upper case, some not). See the SDK reference for more details
115 about how to call a method or attribute from a specific programming language.
116</desc>
117
118<if target="midl">
119 <cpp line="enum {"/>
120 <cpp line=" kTypeLibraryMajorVersion = 1,"/>
121 <cpp line=" kTypeLibraryMinorVersion = 0"/>
122 <cpp line="};"/>
123</if>
124
125<if target="xpidl">
126 <!-- NS_IMPL_THREADSAFE_ISUPPORTSxx_CI macros are placed here, for convenience -->
127 <cpp>
128/* currently, nsISupportsImpl.h lacks the below-like macros */
129
130#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI NS_IMPL_QUERY_INTERFACE1_CI
131#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI NS_IMPL_QUERY_INTERFACE2_CI
132#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI NS_IMPL_QUERY_INTERFACE3_CI
133#define NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI NS_IMPL_QUERY_INTERFACE4_CI
134
135
136#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
137# define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
138 NS_IMPL_THREADSAFE_ADDREF(_class) \
139 NS_IMPL_THREADSAFE_RELEASE(_class) \
140 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_CI(_class, _interface) \
141 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
142#endif
143
144#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
145# define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
146 NS_IMPL_THREADSAFE_ADDREF(_class) \
147 NS_IMPL_THREADSAFE_RELEASE(_class) \
148 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
149 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
150#endif
151
152#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_CI
153# define NS_IMPL_THREADSAFE_ISUPPORTS3_CI(_class, _i1, _i2, _i3) \
154 NS_IMPL_THREADSAFE_ADDREF(_class) \
155 NS_IMPL_THREADSAFE_RELEASE(_class) \
156 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3) \
157 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
158#endif
159
160#ifndef NS_IMPL_THREADSAFE_ISUPPORTS4_CI
161# define NS_IMPL_THREADSAFE_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4) \
162 NS_IMPL_THREADSAFE_ADDREF(_class) \
163 NS_IMPL_THREADSAFE_RELEASE(_class) \
164 NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4) \
165 NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
166#endif
167
168#ifndef NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
169# define NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
170 NS_INTERFACE_MAP_BEGIN(_class) \
171 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
172 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
173 NS_IMPL_QUERY_CLASSINFO(_class) \
174 NS_INTERFACE_MAP_END
175#endif
176
177#ifndef NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
178# define NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
179 _i2, _ic2) \
180 NS_INTERFACE_MAP_BEGIN(_class) \
181 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
182 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
183 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
184 NS_IMPL_QUERY_CLASSINFO(_class) \
185 NS_INTERFACE_MAP_END
186#endif
187
188#ifndef NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
189# define NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
190 _i2, _ic2, _i3, _ic3) \
191 NS_INTERFACE_MAP_BEGIN(_class) \
192 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i1, _ic1) \
193 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i2, _ic2) \
194 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(_i3, _ic3) \
195 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, _ic1) \
196 NS_IMPL_QUERY_CLASSINFO(_class) \
197 NS_INTERFACE_MAP_END
198#endif
199
200#define NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE1_AMBIGUOUS_CI
201#define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE2_AMBIGUOUS_CI
202#define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI NS_IMPL_QUERY_INTERFACE3_AMBIGUOUS_CI
203
204#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI
205# define NS_IMPL_THREADSAFE_ISUPPORTS1_AMBIGUOUS_CI(_class, _i1, _ic1) \
206 NS_IMPL_THREADSAFE_ADDREF(_class) \
207 NS_IMPL_THREADSAFE_RELEASE(_class) \
208 NS_IMPL_THREADSAFE_QUERY_INTERFACE1_AMBIGUOUS_CI(_class, _i1, _ic1) \
209 NS_IMPL_CI_INTERFACE_GETTER1(_class, _i1)
210#endif
211
212#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI
213# define NS_IMPL_THREADSAFE_ISUPPORTS2_AMBIGUOUS_CI(_class, _i1, _ic1, \
214 _i2, _ic2) \
215 NS_IMPL_THREADSAFE_ADDREF(_class) \
216 NS_IMPL_THREADSAFE_RELEASE(_class) \
217 NS_IMPL_THREADSAFE_QUERY_INTERFACE2_AMBIGUOUS_CI(_class, _i1, _ic1, \
218 _i2, _ic2) \
219 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
220#endif
221
222#ifndef NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI
223# define NS_IMPL_THREADSAFE_ISUPPORTS3_AMBIGUOUS_CI(_class, _i1, _ic1, \
224 _i2, _ic2, _i3, _ic3) \
225 NS_IMPL_THREADSAFE_ADDREF(_class) \
226 NS_IMPL_THREADSAFE_RELEASE(_class) \
227 NS_IMPL_THREADSAFE_QUERY_INTERFACE3_AMBIGUOUS_CI(_class, _i1, _ic1, \
228 _i2, _ic2, _i3, _ic3) \
229 NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
230#endif
231
232 </cpp>
233</if>
234
235<library
236 name="VirtualBox"
237 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
238 version="1.3"
239 desc="VirtualBox Type Library"
240 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
241 supportsErrorInfo="yes"
242>
243
244
245 <!--
246 // COM result codes for VirtualBox
247 /////////////////////////////////////////////////////////////////////////
248 -->
249
250 <descGroup id="VirtualBox_COM_result_codes" title="VirtualBox COM result codes">
251 <desc>
252 This section describes all VirtualBox-specific COM result codes that may
253 be returned by methods of VirtualBox COM interfaces in addition to
254 standard COM result codes.
255
256 Note that along with the result code, every VirtualBox method returns
257 extended error information through the IVirtualBoxErrorInfo interface on
258 failure. This interface is a preferred way to present the error to the end
259 user because it contains a human readable description of the error. Raw
260 result codes, both standard and described in this section, are intended to
261 be used by programs to analyze the reason of a failure and select an
262 appropriate course of action without involving the end user (for example,
263 retry the operation later or make a different call).
264
265 The standard COM result codes that may originate from our methods include:
266
267 <table>
268 <tr><td>E_INVALIDARG</td>
269 <td>
270 Returned when the value of the method's argument is not within the range
271 of valid values. This should not be confused with situations when the
272 value is within the range but simply doesn't suit the current object
273 state and there is a possibility that it will be accepted later (in such
274 cases VirtualBox-specific codes are returned, for example,
275 <link to="VBOX_E_OBJECT_NOT_FOUND"/>).
276 </td>
277 </tr>
278 <tr><td>E_POINTER</td>
279 <td>
280 Returned if a memory pointer for the output argument is invalid (for
281 example, @c null). When pointers representing input arguments (such
282 as strings) are invalid, E_INVALIDARG is returned.
283 </td>
284 </tr>
285 <tr><td>E_ACCESSDENIED</td>
286 <td>
287 Returned when the called object is not ready. Since the lifetime of a
288 public COM object cannot be fully controlled by the implementation,
289 VirtualBox maintains the readiness state for all objects it creates and
290 returns this code in response to any method call on the object that was
291 deactivated by VirtualBox and is not functioning any more.
292 </td>
293 </tr>
294 <tr><td>E_OUTOFMEMORY</td>
295 <td>
296 Returned when a memory allocation operation fails.
297 </td>
298 </tr>
299 </table>
300 </desc>
301 </descGroup>
302
303 <!--
304 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
305 everything in <result>/<desc> after (and including) the first dot, so express
306 the matter of the error code in the first sentence and keep it short.
307 -->
308
309 <result name="VBOX_E_OBJECT_NOT_FOUND" value="0x80BB0001">
310 <desc>
311 Object corresponding to the supplied arguments does not exist.
312 </desc>
313 </result>
314
315 <result name="VBOX_E_INVALID_VM_STATE" value="0x80BB0002">
316 <desc>
317 Current virtual machine state prevents the operation.
318 </desc>
319 </result>
320
321 <result name="VBOX_E_VM_ERROR" value="0x80BB0003">
322 <desc>
323 Virtual machine error occurred attempting the operation.
324 </desc>
325 </result>
326
327 <result name="VBOX_E_FILE_ERROR" value="0x80BB0004">
328 <desc>
329 File not accessible or erroneous file contents.
330 </desc>
331 </result>
332
333 <result name="VBOX_E_IPRT_ERROR" value="0x80BB0005">
334 <desc>
335 Runtime subsystem error.
336 </desc>
337 </result>
338
339 <result name="VBOX_E_PDM_ERROR" value="0x80BB0006">
340 <desc>
341 Pluggable Device Manager error.
342 </desc>
343 </result>
344
345 <result name="VBOX_E_INVALID_OBJECT_STATE" value="0x80BB0007">
346 <desc>
347 Current object state prohibits operation.
348 </desc>
349 </result>
350
351 <result name="VBOX_E_HOST_ERROR" value="0x80BB0008">
352 <desc>
353 Host operating system related error.
354 </desc>
355 </result>
356
357 <result name="VBOX_E_NOT_SUPPORTED" value="0x80BB0009">
358 <desc>
359 Requested operation is not supported.
360 </desc>
361 </result>
362
363 <result name="VBOX_E_XML_ERROR" value="0x80BB000A">
364 <desc>
365 Invalid XML found.
366 </desc>
367 </result>
368
369 <result name="VBOX_E_INVALID_SESSION_STATE" value="0x80BB000B">
370 <desc>
371 Current session state prohibits operation.
372 </desc>
373 </result>
374
375 <result name="VBOX_E_OBJECT_IN_USE" value="0x80BB000C">
376 <desc>
377 Object being in use prohibits operation.
378 </desc>
379 </result>
380
381 <!--
382 Note that src/VBox/Runtime/common/err/errmsgvboxcom.xsl will ignore
383 everything in <result>/<desc> after (and including) the first dot, so express
384 the matter of the error code in the first sentence and keep it short.
385 -->
386
387 <descGroup/>
388
389 <!--
390 // all common enums
391 /////////////////////////////////////////////////////////////////////////
392 -->
393
394 <enum
395 name="SettingsVersion"
396 uuid="52bd6f5f-1adb-4493-975d-581a9c4b803f"
397 >
398 <desc>
399 Settings version of VirtualBox settings files. This is written to
400 the "version" attribute of the root "VirtualBox" element in the settings
401 file XML and indicates which VirtualBox version wrote the file.
402 </desc>
403
404 <const name="Null" value="0">
405 <desc>Null value, indicates invalid version.</desc>
406 </const>
407 <const name="v1_0" value="1">
408 <desc>Legacy settings version, not currently supported.</desc>
409 </const>
410 <const name="v1_1" value="2">
411 <desc>Legacy settings version, not currently supported.</desc>
412 </const>
413 <const name="v1_2" value="3">
414 <desc>Legacy settings version, not currently supported.</desc>
415 </const>
416 <const name="v1_3pre" value="4">
417 <desc>Legacy settings version, not currently supported.</desc>
418 </const>
419 <const name="v1_3" value="5">
420 <desc>Settings version "1.3", written by VirtualBox 2.0.12.</desc>
421 <!--
422 Machine XML: Capitalization of Uart, Lpt elements and many attributes changed.
423 -->
424 </const>
425 <const name="v1_4" value="6">
426 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
427 <!--
428 VirtualBox.xml: big DiskRegistry -> MediaRegistry revamp, various HardDisk types merged
429 (was VirtualDiskImage, VMDKImage, VHDImage, ISCSIHardDisk, CustomHardDisk, DiffHardDisk)
430 -->
431 </const>
432 <const name="v1_5" value="7">
433 <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
434 <!--
435 2008-09-04: 2.0.0 released
436 2008-11-20: settings version 1.5 introduced
437 2008-12-17: 2.1.0 released
438 Machine changes:
439 guest OS identifiers changed;
440 Machine/Hardware/Display/MonitorCount renamed to monitorCount;
441 Machine/Hardware/Display/Accelerate3D renamed to accelerate3D;
442 Machine/Hardware/CPU/CPUCount/@count changed to CPU/@count
443 -->
444 </const>
445 <const name="v1_6" value="8">
446 <desc>Settings version "1.6", written by VirtualBox 2.1.4 (at least).</desc>
447 <!--
448 2008-12-17: 2.1.0 released
449 2008-12-19: settings version 1.6 introduced (is in 2.1 branch)
450 2009-04-08: 2.2.0 released
451 Machine changes: remove all Machine/Hardware/Network/Adapter/HostInterface[@TAPSetup or @TAPTerminate]/ attributes (done)
452 -->
453 </const>
454 <const name="v1_7" value="9">
455 <desc>Settings version "1.7", written by VirtualBox 2.2.x and 3.0.x.</desc>
456 <!--
457 2008-12-17: 2.1.0 released
458 2009-03-11: settings version 1.7 introduced (is in 2.2 branch)
459 2009-04-08: 2.2.0 released
460 VirtualBox.xml additions: NetserviceRegistry with DHCPServers (done)
461 Machine changes: HardDiskAttachments is now StorageControllers (done)
462 -->
463 </const>
464 <const name="v1_8" value="10">
465 <desc>Intermediate settings version "1.8", understood by VirtualBox 3.1.x.</desc>
466 <!--
467 Machine additions: Display/@accelerate2DVideo (done)
468 -->
469 </const>
470 <const name="v1_9" value="11">
471 <desc>Settings version "1.9", written by VirtualBox 3.1.x.</desc>
472 <!--
473 The big storage controller / DVD / Floppy rework (done)
474 -->
475 </const>
476 <const name="v1_10" value="12">
477 <desc>Settings version "1.10", written by VirtualBox 3.2.x.</desc>
478 <!--
479 Machine changes: RTC localOrUTC (done)
480 CPU hot-plug support
481 -->
482 </const>
483 <const name="v1_11" value="13">
484 <desc>Settings version "1.11", written by VirtualBox 4.0.x.</desc>
485 <!--
486 Machine changes: HD Audio controller, per-machine disk registries,
487 /@format attribute for DVD and floppy images.
488 -->
489 </const>
490 <const name="v1_12" value="14">
491 <desc>Settings version "1.12", written by VirtualBox 4.1.x.</desc>
492 <!--
493 Machine changes: raw PCI device attachment;
494 NetworkAdapter changes: bandwidth group.
495 -->
496 </const>
497 <const name="v1_13" value="15">
498 <desc>Settings version "1.13", written by VirtualBox 4.2.x.</desc>
499 <!--
500 Machine changes: tracing config, groups, autostart;
501 NetworkAdapter changes: unit for bandwidth group limits.
502 -->
503 </const>
504
505 <const name="Future" value="99999">
506 <desc>Settings version greater than "1.13", written by a future VirtualBox version.</desc>
507 </const>
508 </enum>
509
510 <enum
511 name="AccessMode"
512 uuid="1da0007c-ddf7-4be8-bcac-d84a1558785f"
513 >
514 <desc>
515 Access mode for opening files.
516 </desc>
517
518 <const name="ReadOnly" value="1"/>
519 <const name="ReadWrite" value="2"/>
520 </enum>
521
522 <enum
523 name="MachineState"
524 uuid="ec6c6a9e-113d-4ff4-b44f-0b69f21c97fe"
525 >
526 <desc>
527 Virtual machine execution state.
528
529 This enumeration represents possible values of the <link
530 to="IMachine::state"/> attribute.
531
532 Below is the basic virtual machine state diagram. It shows how the state
533 changes during virtual machine execution. The text in square braces shows
534 a method of the IConsole interface that performs the given state
535 transition.
536
537 <pre>
538 +---------[powerDown()] &lt;- Stuck &lt;--[failure]-+
539 V |
540 +-&gt; PoweredOff --+--&gt;[powerUp()]--&gt; Starting --+ | +-----[resume()]-----+
541 | | | | V |
542 | Aborted -----+ +--&gt; Running --[pause()]--&gt; Paused
543 | | ^ | ^ |
544 | Saved -----------[powerUp()]--&gt; Restoring -+ | | | |
545 | ^ | | | |
546 | | +-----------------------------------------+-|-------------------+ +
547 | | | | |
548 | | +-- Saving &lt;--------[takeSnapshot()]&lt;-------+---------------------+
549 | | | |
550 | +-------- Saving &lt;--------[saveState()]&lt;----------+---------------------+
551 | | |
552 +-------------- Stopping -------[powerDown()]&lt;----------+---------------------+
553 </pre>
554
555 Note that states to the right from PoweredOff, Aborted and Saved in the
556 above diagram are called <i>online VM states</i>. These states
557 represent the virtual machine which is being executed in a dedicated
558 process (usually with a GUI window attached to it where you can see the
559 activity of the virtual machine and interact with it). There are two
560 special pseudo-states, FirstOnline and LastOnline, that can be used in
561 relational expressions to detect if the given machine state is online or
562 not:
563
564 <pre>
565 if (machine.GetState() &gt;= MachineState_FirstOnline &amp;&amp;
566 machine.GetState() &lt;= MachineState_LastOnline)
567 {
568 ...the machine is being executed...
569 }
570 </pre>
571
572 When the virtual machine is in one of the online VM states (that is, being
573 executed), only a few machine settings can be modified. Methods working
574 with such settings contain an explicit note about that. An attempt to
575 change any other setting or perform a modifying operation during this time
576 will result in the @c VBOX_E_INVALID_VM_STATE error.
577
578 All online states except Running, Paused and Stuck are transitional: they
579 represent temporary conditions of the virtual machine that will last as
580 long as the operation that initiated such a condition.
581
582 The Stuck state is a special case. It means that execution of the machine
583 has reached the "Guru Meditation" condition. This condition indicates an
584 internal VMM (virtual machine manager) failure which may happen as a
585 result of either an unhandled low-level virtual hardware exception or one
586 of the recompiler exceptions (such as the <i>too-many-traps</i>
587 condition).
588
589 Note also that any online VM state may transit to the Aborted state. This
590 happens if the process that is executing the virtual machine terminates
591 unexpectedly (for example, crashes). Other than that, the Aborted state is
592 equivalent to PoweredOff.
593
594 There are also a few additional state diagrams that do not deal with
595 virtual machine execution and therefore are shown separately. The states
596 shown on these diagrams are called <i>offline VM states</i> (this includes
597 PoweredOff, Aborted and Saved too).
598
599 The first diagram shows what happens when a lengthy setup operation is
600 being executed (such as <link to="IMachine::attachDevice"/>).
601
602 <pre>
603 +----------------------------------(same state as before the call)------+
604 | |
605 +-&gt; PoweredOff --+ |
606 | | |
607 |-&gt; Aborted -----+--&gt;[lengthy VM configuration call] --&gt; SettingUp -----+
608 | |
609 +-&gt; Saved -------+
610 </pre>
611
612 The next two diagrams demonstrate the process of taking a snapshot of a
613 powered off virtual machine, restoring the state to that as of a snapshot
614 or deleting a snapshot, respectively.
615
616 <pre>
617 +----------------------------------(same state as before the call)------+
618 | |
619 +-&gt; PoweredOff --+ |
620 | +--&gt;[takeSnapshot()] -------------------&gt; Saving ------+
621 +-&gt; Aborted -----+
622
623 +-&gt; PoweredOff --+
624 | |
625 | Aborted -----+--&gt;[restoreSnapshot() ]-------&gt; RestoringSnapshot -+
626 | | [deleteSnapshot() ]-------&gt; DeletingSnapshot --+
627 +-&gt; Saved -------+ |
628 | |
629 +---(Saved if restored from an online snapshot, PoweredOff otherwise)---+
630 </pre>
631
632 Note that the Saving state is present in both the offline state group and
633 online state group. Currently, the only way to determine what group is
634 assumed in a particular case is to remember the previous machine state: if
635 it was Running or Paused, then Saving is an online state, otherwise it is
636 an offline state. This inconsistency may be removed in one of the future
637 versions of VirtualBox by adding a new state.
638
639 <note internal="yes">
640 For whoever decides to touch this enum: In order to keep the
641 comparisons involving FirstOnline and LastOnline pseudo-states valid,
642 the numeric values of these states must be correspondingly updated if
643 needed: for any online VM state, the condition
644 <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
645 @c true. The same relates to transient states for which
646 the condition <tt>FirstOnline &lt;= state &lt;= LastOnline</tt> must be
647 @c true.
648 </note>
649 </desc>
650
651 <const name="Null" value="0">
652 <desc>Null value (never used by the API).</desc>
653 </const>
654 <const name="PoweredOff" value="1">
655 <desc>
656 The machine is not running and has no saved execution state; it has
657 either never been started or been shut down successfully.
658 </desc>
659 </const>
660 <const name="Saved" value="2">
661 <desc>
662 The machine is not currently running, but the execution state of the machine
663 has been saved to an external file when it was running, from where
664 it can be resumed.
665 </desc>
666 </const>
667 <const name="Teleported" value="3">
668 <desc>
669 The machine was teleported to a different host (or process) and then
670 powered off. Take care when powering it on again may corrupt resources
671 it shares with the teleportation target (e.g. disk and network).
672 </desc>
673 </const>
674 <const name="Aborted" value="4">
675 <desc>
676 The process running the machine has terminated abnormally. This may
677 indicate a crash of the VM process in host execution context, or
678 the VM process has been terminated externally.
679 </desc>
680 </const>
681 <const name="Running" value="5">
682 <desc>
683 The machine is currently being executed.
684 <note internal="yes">
685 For whoever decides to touch this enum: In order to keep the
686 comparisons in the old source code valid, this state must immediately
687 precede the Paused state.
688 TODO: Lift this spectacularly wonderful restriction.
689 </note>
690 </desc>
691 </const>
692 <const name="Paused" value="6">
693 <desc>
694 Execution of the machine has been paused.
695 <note internal="yes">
696 For whoever decides to touch this enum: In order to keep the
697 comparisons in the old source code valid, this state must immediately
698 follow the Running state.
699 TODO: Lift this spectacularly wonderful restriction.
700 </note>
701 </desc>
702 </const>
703 <const name="Stuck" value="7">
704 <desc>
705 Execution of the machine has reached the "Guru Meditation"
706 condition. This indicates a severe error in the hypervisor itself.
707 <note internal="yes">
708 bird: Why this uncool name? Could we rename it to "GuruMeditation" or
709 "Guru", perhaps? Or are there some other VMM states that are
710 intended to be lumped in here as well?
711 </note>
712 </desc>
713 </const>
714 <const name="Teleporting" value="8">
715 <desc>
716 The machine is about to be teleported to a different host or process.
717 It is possible to pause a machine in this state, but it will go to the
718 @c TeleportingPausedVM state and it will not be
719 possible to resume it again unless the teleportation fails.
720 </desc>
721 </const>
722 <const name="LiveSnapshotting" value="9">
723 <desc>
724 A live snapshot is being taken. The machine is running normally, but
725 some of the runtime configuration options are inaccessible. Also, if
726 paused while in this state it will transition to
727 @c Saving and it will not be resume the
728 execution until the snapshot operation has completed.
729 </desc>
730 </const>
731 <const name="Starting" value="10">
732 <desc>
733 Machine is being started after powering it on from a
734 zero execution state.
735 </desc>
736 </const>
737 <const name="Stopping" value="11">
738 <desc>
739 Machine is being normally stopped powering it off, or after the guest OS
740 has initiated a shutdown sequence.
741 </desc>
742 </const>
743 <const name="Saving" value="12">
744 <desc>
745 Machine is saving its execution state to a file, or an online
746 snapshot of the machine is being taken.
747 </desc>
748 </const>
749 <const name="Restoring" value="13">
750 <desc>
751 Execution state of the machine is being restored from a file
752 after powering it on from the saved execution state.
753 </desc>
754 </const>
755 <const name="TeleportingPausedVM" value="14">
756 <desc>
757 The machine is being teleported to another host or process, but it is
758 not running. This is the paused variant of the
759 @c state.
760 </desc>
761 </const>
762 <const name="TeleportingIn" value="15">
763 <desc>
764 Teleporting the machine state in from another host or process.
765 </desc>
766 </const>
767 <const name="FaultTolerantSyncing" value="16">
768 <desc>
769 The machine is being synced with a fault tolerant VM running elsewhere.
770 </desc>
771 </const>
772 <const name="DeletingSnapshotOnline" value="17">
773 <desc>
774 Like @c DeletingSnapshot, but the merging of media is ongoing in
775 the background while the machine is running.
776 </desc>
777 </const>
778 <const name="DeletingSnapshotPaused" value="18">
779 <desc>
780 Like @c DeletingSnapshotOnline, but the machine was paused when the
781 merging of differencing media was started.
782 </desc>
783 </const>
784 <const name="RestoringSnapshot" value="19">
785 <desc>
786 A machine snapshot is being restored; this typically does not take long.
787 </desc>
788 </const>
789 <const name="DeletingSnapshot" value="20">
790 <desc>
791 A machine snapshot is being deleted; this can take a long time since this
792 may require merging differencing media. This value indicates that the
793 machine is not running while the snapshot is being deleted.
794 </desc>
795 </const>
796 <const name="SettingUp" value="21">
797 <desc>
798 Lengthy setup operation is in progress.
799 </desc>
800 </const>
801
802 <const name="FirstOnline" value="5" wsmap="suppress"> <!-- Running -->
803 <desc>
804 Pseudo-state: first online state (for use in relational expressions).
805 </desc>
806 </const>
807 <const name="LastOnline" value="18" wsmap="suppress"> <!-- DeletingSnapshotPaused -->
808 <desc>
809 Pseudo-state: last online state (for use in relational expressions).
810 </desc>
811 </const>
812
813 <const name="FirstTransient" value="8" wsmap="suppress"> <!-- Teleporting -->
814 <desc>
815 Pseudo-state: first transient state (for use in relational expressions).
816 </desc>
817 </const>
818 <const name="LastTransient" value="21" wsmap="suppress"> <!-- SettingUp -->
819 <desc>
820 Pseudo-state: last transient state (for use in relational expressions).
821 </desc>
822 </const>
823
824 </enum>
825
826 <enum
827 name="SessionState"
828 uuid="cf2700c0-ea4b-47ae-9725-7810114b94d8"
829 >
830 <desc>
831 Session state. This enumeration represents possible values of
832 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
833 attributes.
834 </desc>
835
836 <const name="Null" value="0">
837 <desc>Null value (never used by the API).</desc>
838 </const>
839 <const name="Unlocked" value="1">
840 <desc>
841 In <link to="IMachine::sessionState"/>, this means that the machine
842 is not locked for any sessions.
843
844 In <link to="ISession::state"/>, this means that no machine is
845 currently locked for this session.
846 </desc>
847 </const>
848 <const name="Locked" value="2">
849 <desc>
850 In <link to="IMachine::sessionState"/>, this means that the machine
851 is currently locked for a session, whose process identifier can
852 then be found in the <link to="IMachine::sessionPID" /> attribute.
853
854 In <link to="ISession::state"/>, this means that a machine is
855 currently locked for this session, and the mutable machine object
856 can be found in the <link to="ISession::machine"/> attribute
857 (see <link to="IMachine::lockMachine" /> for details).
858 </desc>
859 </const>
860 <const name="Spawning" value="3">
861 <desc>
862 A new process is being spawned for the machine as a result of
863 <link to="IMachine::launchVMProcess"/> call. This state also occurs
864 as a short transient state during an <link to="IMachine::lockMachine"/>
865 call.
866 </desc>
867 </const>
868 <const name="Unlocking" value="4">
869 <desc>
870 The session is being unlocked.
871 </desc>
872 </const>
873 </enum>
874
875 <enum
876 name="CPUPropertyType"
877 uuid="24d356a6-2f45-4abd-b977-1cbe9c4701f5"
878 >
879 <desc>
880 Virtual CPU property type. This enumeration represents possible values of the
881 IMachine get- and setCPUProperty methods.
882 </desc>
883 <const name="Null" value="0">
884 <desc>Null value (never used by the API).</desc>
885 </const>
886 <const name="PAE" value="1">
887 <desc>
888 This setting determines whether VirtualBox will expose the Physical Address
889 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
890 is not available, it will not be reported.
891 </desc>
892 </const>
893 <const name="Synthetic" value="2">
894 <desc>
895 This setting determines whether VirtualBox will expose a synthetic CPU to the guest to allow
896 teleporting between host systems that differ significantly.
897 </desc>
898 </const>
899 </enum>
900
901
902 <enum
903 name="HWVirtExPropertyType"
904 uuid="ce81dfdd-d2b8-4a90-bbea-40ee8b7ffcee"
905 >
906 <desc>
907 Hardware virtualization property type. This enumeration represents possible values
908 for the <link to="IMachine::getHWVirtExProperty"/> and
909 <link to="IMachine::setHWVirtExProperty"/> methods.
910 </desc>
911 <const name="Null" value="0">
912 <desc>Null value (never used by the API).</desc>
913 </const>
914 <const name="Enabled" value="1">
915 <desc>
916 Whether hardware virtualization (VT-x/AMD-V) is enabled at all. If
917 such extensions are not available, they will not be used.
918 </desc>
919 </const>
920 <const name="Exclusive" value="2">
921 <desc>
922 Whether hardware virtualization is used exclusively by VirtualBox. When enabled,
923 VirtualBox assumes it can acquire full and exclusive access to the VT-x or AMD-V
924 feature of the host. To share these with other hypervisors, you must disable this property.
925 </desc>
926 </const>
927 <const name="VPID" value="3">
928 <desc>
929 Whether VT-x VPID is enabled. If this extension is not available, it will not be used.
930 </desc>
931 </const>
932 <const name="NestedPaging" value="4">
933 <desc>
934 Whether Nested Paging is enabled. If this extension is not available, it will not be used.
935 </desc>
936 </const>
937 <const name="LargePages" value="5">
938 <desc>
939 Whether large page allocation is enabled; requires nested paging and a 64 bits host.
940 </desc>
941 </const>
942 <const name="Force" value="6">
943 <desc>
944 Whether the VM should fail to start if hardware virtualization (VT-x/AMD-V) cannot be used. If
945 not set, there will be an automatic fallback to software virtualization.
946 </desc>
947 </const>
948 </enum>
949
950 <enum
951 name="FaultToleranceState"
952 uuid="5124f7ec-6b67-493c-9dee-ee45a44114e1"
953 >
954 <desc>
955 Used with <link to="IMachine::faultToleranceState" />.
956 </desc>
957 <const name="Inactive" value="1">
958 <desc>No fault tolerance enabled.</desc>
959 </const>
960 <const name="Master" value="2">
961 <desc>Fault tolerant master VM.</desc>
962 </const>
963 <const name="Standby" value="3">
964 <desc>Fault tolerant standby VM.</desc>
965 </const>
966 </enum>
967
968 <enum
969 name="LockType"
970 uuid="168a6a8e-12fd-4878-a1f9-38a750a56089"
971 >
972 <desc>
973 Used with <link to="IMachine::lockMachine" />.
974 </desc>
975 <const name="Write" value="2">
976 <desc>Lock the machine for writing.</desc>
977 </const>
978 <const name="Shared" value="1">
979 <desc>Request only a shared read lock for remote-controlling the machine.</desc>
980 </const>
981 <const name="VM" value="3">
982 <desc>Lock the machine for writing, and create objects necessary for
983 running a VM in this process.</desc>
984 </const>
985 </enum>
986
987 <enum
988 name="SessionType"
989 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
990 >
991 <desc>
992 Session type. This enumeration represents possible values of the
993 <link to="ISession::type"/> attribute.
994 </desc>
995
996 <const name="Null" value="0">
997 <desc>Null value (never used by the API).</desc>
998 </const>
999 <const name="WriteLock" value="1">
1000 <desc>
1001 Session has acquired an exclusive write lock on a machine
1002 using <link to="IMachine::lockMachine"/>.
1003 </desc>
1004 </const>
1005 <const name="Remote" value="2">
1006 <desc>
1007 Session has launched a VM process using
1008 <link to="IMachine::launchVMProcess"/>
1009 </desc>
1010 </const>
1011 <const name="Shared" value="3">
1012 <desc>
1013 Session has obtained a link to another session using
1014 <link to="IMachine::lockMachine"/>
1015 </desc>
1016 </const>
1017 </enum>
1018
1019 <enum
1020 name="DeviceType"
1021 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
1022 >
1023 <desc>
1024 Device type.
1025 </desc>
1026 <const name="Null" value="0">
1027 <desc>
1028 Null value, may also mean "no device" (not allowed for
1029 <link to="IConsole::getDeviceActivity"/>).
1030 </desc>
1031 </const>
1032 <const name="Floppy" value="1">
1033 <desc>Floppy device.</desc>
1034 </const>
1035 <const name="DVD" value="2">
1036 <desc>CD/DVD-ROM device.</desc>
1037 </const>
1038 <const name="HardDisk" value="3">
1039 <desc>Hard disk device.</desc>
1040 </const>
1041 <const name="Network" value="4">
1042 <desc>Network device.</desc>
1043 </const>
1044 <const name="USB" value="5">
1045 <desc>USB device.</desc>
1046 </const>
1047 <const name="SharedFolder" value="6">
1048 <desc>Shared folder device.</desc>
1049 </const>
1050 </enum>
1051
1052 <enum
1053 name="DeviceActivity"
1054 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
1055 >
1056 <desc>
1057 Device activity for <link to="IConsole::getDeviceActivity"/>.
1058 </desc>
1059
1060 <const name="Null" value="0"/>
1061 <const name="Idle" value="1"/>
1062 <const name="Reading" value="2"/>
1063 <const name="Writing" value="3"/>
1064 </enum>
1065
1066 <enum
1067 name="ClipboardMode"
1068 uuid="33364716-4008-4701-8f14-be0fa3d62950"
1069 >
1070 <desc>
1071 Host-Guest clipboard interchange mode.
1072 </desc>
1073
1074 <const name="Disabled" value="0"/>
1075 <const name="HostToGuest" value="1"/>
1076 <const name="GuestToHost" value="2"/>
1077 <const name="Bidirectional" value="3"/>
1078 </enum>
1079
1080 <enum
1081 name="DragAndDropMode"
1082 uuid="b618ea0e-b6fb-4f8d-97f7-5e237e49b547"
1083 >
1084 <desc>
1085 Drag'n'Drop interchange mode.
1086 </desc>
1087
1088 <const name="Disabled" value="0"/>
1089 <const name="HostToGuest" value="1"/>
1090 <const name="GuestToHost" value="2"/>
1091 <const name="Bidirectional" value="3"/>
1092 </enum>
1093
1094 <enum
1095 name="Scope"
1096 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
1097 >
1098 <desc>
1099 Scope of the operation.
1100
1101 A generic enumeration used in various methods to define the action or
1102 argument scope.
1103 </desc>
1104
1105 <const name="Global" value="0"/>
1106 <const name="Machine" value="1"/>
1107 <const name="Session" value="2"/>
1108 </enum>
1109
1110 <enum
1111 name="BIOSBootMenuMode"
1112 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
1113 >
1114 <desc>
1115 BIOS boot menu mode.
1116 </desc>
1117
1118 <const name="Disabled" value="0"/>
1119 <const name="MenuOnly" value="1"/>
1120 <const name="MessageAndMenu" value="2"/>
1121 </enum>
1122
1123 <enum
1124 name="ProcessorFeature"
1125 uuid="64c38e6b-8bcf-45ad-ac03-9b406287c5bf"
1126 >
1127 <desc>
1128 CPU features.
1129 </desc>
1130
1131 <const name="HWVirtEx" value="0"/>
1132 <const name="PAE" value="1"/>
1133 <const name="LongMode" value="2"/>
1134 <const name="NestedPaging" value="3"/>
1135 </enum>
1136
1137 <enum
1138 name="FirmwareType"
1139 uuid="b903f264-c230-483e-ac74-2b37ce60d371"
1140 >
1141 <desc>
1142 Firmware type.
1143 </desc>
1144 <const name="BIOS" value="1">
1145 <desc>BIOS Firmware.</desc>
1146 </const>
1147 <const name="EFI" value="2">
1148 <desc>EFI Firmware, bitness detected basing on OS type.</desc>
1149 </const>
1150 <const name="EFI32" value="3">
1151 <desc>Efi firmware, 32-bit.</desc>
1152 </const>
1153 <const name="EFI64" value="4">
1154 <desc>Efi firmware, 64-bit.</desc>
1155 </const>
1156 <const name="EFIDUAL" value="5">
1157 <desc>Efi firmware, combined 32 and 64-bit.</desc>
1158 </const>
1159 </enum>
1160
1161 <enum
1162 name="PointingHIDType"
1163 uuid="e44b2f7b-72ba-44fb-9e53-2186014f0d17"
1164 >
1165 <desc>
1166 Type of pointing device used in a virtual machine.
1167 </desc>
1168 <const name="None" value="1">
1169 <desc>No mouse.</desc>
1170 </const>
1171 <const name="PS2Mouse" value="2">
1172 <desc>PS/2 auxiliary device, a.k.a. mouse.</desc>
1173 </const>
1174 <const name="USBMouse" value="3">
1175 <desc>USB mouse (relative pointer).</desc>
1176 </const>
1177 <const name="USBTablet" value="4">
1178 <desc>USB tablet (absolute pointer).</desc>
1179 </const>
1180 <const name="ComboMouse" value="5">
1181 <desc>Combined device, working as PS/2 or USB mouse, depending on guest behavior.
1182 Using of such device can have negative performance implications. </desc>
1183 </const>
1184 </enum>
1185
1186 <enum
1187 name="KeyboardHIDType"
1188 uuid="383e43d7-5c7c-4ec8-9cb8-eda1bccd6699"
1189 >
1190 <desc>
1191 Type of keyboard device used in a virtual machine.
1192 </desc>
1193 <const name="None" value="1">
1194 <desc>No keyboard.</desc>
1195 </const>
1196 <const name="PS2Keyboard" value="2">
1197 <desc>PS/2 keyboard.</desc>
1198 </const>
1199 <const name="USBKeyboard" value="3">
1200 <desc>USB keyboard.</desc>
1201 </const>
1202 <const name="ComboKeyboard" value="4">
1203 <desc>Combined device, working as PS/2 or USB keyboard, depending on guest behavior.
1204 Using of such device can have negative performance implications. </desc>
1205 </const>
1206 </enum>
1207
1208 <!--
1209 // IVirtualBoxErrorInfo
1210 /////////////////////////////////////////////////////////////////////////
1211 -->
1212
1213 <interface
1214 name="IVirtualBoxErrorInfo" extends="$errorinfo"
1215 uuid="f91e6e91-49e1-4fd2-b21e-269003350d06"
1216 supportsErrorInfo="no"
1217 wsmap="managed"
1218 >
1219 <desc>
1220 The IVirtualBoxErrorInfo interface represents extended error information.
1221
1222 Extended error information can be set by VirtualBox components after
1223 unsuccessful or partially successful method invocation. This information
1224 can be retrieved by the calling party as an IVirtualBoxErrorInfo object
1225 and then shown to the client in addition to the plain 32-bit result code.
1226
1227 In MS COM, this interface extends the IErrorInfo interface,
1228 in XPCOM, it extends the nsIException interface. In both cases,
1229 it provides a set of common attributes to retrieve error
1230 information.
1231
1232 Sometimes invocation of some component's method may involve methods of
1233 other components that may also fail (independently of this method's
1234 failure), or a series of non-fatal errors may precede a fatal error that
1235 causes method failure. In cases like that, it may be desirable to preserve
1236 information about all errors happened during method invocation and deliver
1237 it to the caller. The <link to="#next"/> attribute is intended
1238 specifically for this purpose and allows to represent a chain of errors
1239 through a single IVirtualBoxErrorInfo object set after method invocation.
1240
1241 <note>errors are stored to a chain in the reverse order, i.e. the
1242 initial error object you query right after method invocation is the last
1243 error set by the callee, the object it points to in the @a next attribute
1244 is the previous error and so on, up to the first error (which is the last
1245 in the chain).</note>
1246 </desc>
1247
1248 <attribute name="resultCode" type="long" readonly="yes">
1249 <desc>
1250 Result code of the error.
1251 Usually, it will be the same as the result code returned
1252 by the method that provided this error information, but not
1253 always. For example, on Win32, CoCreateInstance() will most
1254 likely return E_NOINTERFACE upon unsuccessful component
1255 instantiation attempt, but not the value the component factory
1256 returned. Value is typed 'long', not 'result',
1257 to make interface usable from scripting languages.
1258 <note>
1259 In MS COM, there is no equivalent.
1260 In XPCOM, it is the same as nsIException::result.
1261 </note>
1262 </desc>
1263 </attribute>
1264
1265 <attribute name="interfaceID" type="uuid" mod="string" readonly="yes">
1266 <desc>
1267 UUID of the interface that defined the error.
1268 <note>
1269 In MS COM, it is the same as IErrorInfo::GetGUID, except for the
1270 data type.
1271 In XPCOM, there is no equivalent.
1272 </note>
1273 </desc>
1274 </attribute>
1275
1276 <attribute name="component" type="wstring" readonly="yes">
1277 <desc>
1278 Name of the component that generated the error.
1279 <note>
1280 In MS COM, it is the same as IErrorInfo::GetSource.
1281 In XPCOM, there is no equivalent.
1282 </note>
1283 </desc>
1284 </attribute>
1285
1286 <attribute name="text" type="wstring" readonly="yes">
1287 <desc>
1288 Text description of the error.
1289 <note>
1290 In MS COM, it is the same as IErrorInfo::GetDescription.
1291 In XPCOM, it is the same as nsIException::message.
1292 </note>
1293 </desc>
1294 </attribute>
1295
1296 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
1297 <desc>
1298 Next error object if there is any, or @c null otherwise.
1299 <note>
1300 In MS COM, there is no equivalent.
1301 In XPCOM, it is the same as nsIException::inner.
1302 </note>
1303 </desc>
1304 </attribute>
1305
1306 </interface>
1307
1308 <!--
1309 // IVirtualBox
1310 /////////////////////////////////////////////////////////////////////////
1311 -->
1312
1313 <interface
1314 name="IDHCPServer" extends="$unknown"
1315 uuid="6cfe387c-74fb-4ca7-bff6-973bec8af7a3"
1316 wsmap="managed"
1317 >
1318 <desc>
1319 The IDHCPServer interface represents the vbox DHCP server configuration.
1320
1321 To enumerate all the DHCP servers on the host, use the
1322 <link to="IVirtualBox::DHCPServers"/> attribute.
1323 </desc>
1324
1325 <attribute name="enabled" type="boolean">
1326 <desc>
1327 specifies if the DHCP server is enabled
1328 </desc>
1329 </attribute>
1330
1331 <attribute name="IPAddress" type="wstring" readonly="yes">
1332 <desc>
1333 specifies server IP
1334 </desc>
1335 </attribute>
1336
1337 <attribute name="networkMask" type="wstring" readonly="yes">
1338 <desc>
1339 specifies server network mask
1340 </desc>
1341 </attribute>
1342
1343 <attribute name="networkName" type="wstring" readonly="yes">
1344 <desc>
1345 specifies internal network name the server is used for
1346 </desc>
1347 </attribute>
1348
1349 <attribute name="lowerIP" type="wstring" readonly="yes">
1350 <desc>
1351 specifies from IP address in server address range
1352 </desc>
1353 </attribute>
1354
1355 <attribute name="upperIP" type="wstring" readonly="yes">
1356 <desc>
1357 specifies to IP address in server address range
1358 </desc>
1359 </attribute>
1360
1361 <method name="setConfiguration">
1362 <desc>
1363 configures the server
1364 <result name="E_INVALIDARG">
1365 invalid configuration supplied
1366 </result>
1367 </desc>
1368 <param name="IPAddress" type="wstring" dir="in">
1369 <desc>
1370 server IP address
1371 </desc>
1372 </param>
1373 <param name="networkMask" type="wstring" dir="in">
1374 <desc>
1375 server network mask
1376 </desc>
1377 </param>
1378 <param name="FromIPAddress" type="wstring" dir="in">
1379 <desc>
1380 server From IP address for address range
1381 </desc>
1382 </param>
1383 <param name="ToIPAddress" type="wstring" dir="in">
1384 <desc>
1385 server To IP address for address range
1386 </desc>
1387 </param>
1388 </method>
1389
1390 <method name="start">
1391 <desc>
1392 Starts DHCP server process.
1393 <result name="E_FAIL">
1394 Failed to start the process.
1395 </result>
1396 </desc>
1397 <param name="networkName" type="wstring" dir="in">
1398 <desc>
1399 Name of internal network DHCP server should attach to.
1400 </desc>
1401 </param>
1402 <param name="trunkName" type="wstring" dir="in">
1403 <desc>
1404 Name of internal network trunk.
1405 </desc>
1406 </param>
1407 <param name="trunkType" type="wstring" dir="in">
1408 <desc>
1409 Type of internal network trunk.
1410 </desc>
1411 </param>
1412 </method>
1413
1414 <method name="stop">
1415 <desc>
1416 Stops DHCP server process.
1417 <result name="E_FAIL">
1418 Failed to stop the process.
1419 </result>
1420 </desc>
1421 </method>
1422 </interface>
1423
1424 <interface
1425 name="IVirtualBox" extends="$unknown"
1426 uuid="3b90eded-f061-432f-9e0f-4b53cc7b6fa0"
1427 wsmap="managed"
1428 >
1429 <desc>
1430 The IVirtualBox interface represents the main interface exposed by the
1431 product that provides virtual machine management.
1432
1433 An instance of IVirtualBox is required for the product to do anything
1434 useful. Even though the interface does not expose this, internally,
1435 IVirtualBox is implemented as a singleton and actually lives in the
1436 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
1437 IVirtualBox can track the state of all virtual machines on a particular
1438 host, regardless of which frontend started them.
1439
1440 To enumerate all the virtual machines on the host, use the
1441 <link to="IVirtualBox::machines"/> attribute.
1442 </desc>
1443
1444 <attribute name="version" type="wstring" readonly="yes">
1445 <desc>
1446 A string representing the version number of the product. The
1447 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
1448 last number represents the build number and will frequently change.
1449
1450 This may be followed by a _ALPHA[0-9]*, _BETA[0-9]* or _RC[0-9]* tag
1451 in prerelease builds. Non-Oracle builds may (/shall) also have a
1452 publisher tag, at the end. The publisher tag starts with an underscore
1453 just like the prerelease build type tag.
1454 </desc>
1455 </attribute>
1456
1457 <attribute name="revision" type="unsigned long" readonly="yes">
1458 <desc>
1459 The internal build revision number of the product.
1460 </desc>
1461 </attribute>
1462
1463 <attribute name="packageType" type="wstring" readonly="yes">
1464 <desc>
1465 A string representing the package type of this product. The
1466 format is OS_ARCH_DIST where OS is either WINDOWS, LINUX,
1467 SOLARIS, DARWIN. ARCH is either 32BITS or 64BITS. DIST
1468 is either GENERIC, UBUNTU_606, UBUNTU_710, or something like
1469 this.
1470 </desc>
1471 </attribute>
1472
1473 <attribute name="APIVersion" type="wstring" readonly="yes">
1474 <desc>
1475 A string representing the VirtualBox API version number. The format is
1476 2 integer numbers divided by an underscore (e.g. 1_0). After the
1477 first public release of packages with a particular API version the
1478 API will not be changed in an incompatible way. Note that this
1479 guarantee does not apply to development builds, and also there is no
1480 guarantee that this version is identical to the first two integer
1481 numbers of the package version.
1482 </desc>
1483 </attribute>
1484
1485 <attribute name="homeFolder" type="wstring" readonly="yes">
1486 <desc>
1487 Full path to the directory where the global settings file,
1488 <tt>VirtualBox.xml</tt>, is stored.
1489
1490 In this version of VirtualBox, the value of this property is
1491 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
1492 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
1493 as determined by the host OS), and cannot be changed.
1494
1495 This path is also used as the base to resolve relative paths in
1496 places where relative paths are allowed (unless otherwise
1497 expressly indicated).
1498 </desc>
1499 </attribute>
1500
1501 <attribute name="settingsFilePath" type="wstring" readonly="yes">
1502 <desc>
1503 Full name of the global settings file.
1504 The value of this property corresponds to the value of
1505 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
1506 </desc>
1507 </attribute>
1508
1509 <attribute name="host" type="IHost" readonly="yes">
1510 <desc>Associated host object.</desc>
1511 </attribute>
1512
1513 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
1514 <desc>Associated system information object.</desc>
1515 </attribute>
1516
1517 <attribute name="machines" type="IMachine" readonly="yes" safearray="yes">
1518 <desc>
1519 Array of machine objects registered within this VirtualBox instance.
1520 </desc>
1521 </attribute>
1522
1523 <attribute name="machineGroups" type="wstring" readonly="yes" safearray="yes">
1524 <desc>
1525 Array of all machine group names which are used by the machines which
1526 are accessible. Each group is only listed once, however they are listed
1527 in no particular order and there is no guarantee that there are no gaps
1528 in the group hierarchy (i.e. <tt>"/"</tt>, <tt>"/group/subgroup"</tt>
1529 is a valid result).
1530 </desc>
1531 </attribute>
1532
1533 <attribute name="hardDisks" type="IMedium" readonly="yes" safearray="yes">
1534 <desc>
1535 Array of medium objects known to this VirtualBox installation.
1536
1537 This array contains only base media. All differencing
1538 media of the given base medium can be enumerated using
1539 <link to="IMedium::children"/>.
1540 </desc>
1541 </attribute>
1542
1543 <attribute name="DVDImages" type="IMedium" readonly="yes" safearray="yes">
1544 <desc>
1545 Array of CD/DVD image objects currently in use by this VirtualBox instance.
1546 </desc>
1547 </attribute>
1548
1549 <attribute name="floppyImages" type="IMedium" readonly="yes" safearray="yes">
1550 <desc>
1551 Array of floppy image objects currently in use by this VirtualBox instance.
1552 </desc>
1553 </attribute>
1554
1555 <attribute name="progressOperations" type="IProgress" readonly="yes" safearray="yes"/>
1556
1557 <attribute name="guestOSTypes" type="IGuestOSType" readonly="yes" safearray="yes"/>
1558
1559 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
1560 <desc>
1561 Collection of global shared folders. Global shared folders are
1562 available to all virtual machines.
1563
1564 New shared folders are added to the collection using
1565 <link to="#createSharedFolder"/>. Existing shared folders can be
1566 removed using <link to="#removeSharedFolder"/>.
1567
1568 <note>
1569 In the current version of the product, global shared folders are not
1570 implemented and therefore this collection is always empty.
1571 </note>
1572 </desc>
1573 </attribute>
1574
1575 <attribute name="performanceCollector" type="IPerformanceCollector" readonly="yes">
1576 <desc>
1577 Associated performance collector object.
1578 </desc>
1579 </attribute>
1580
1581 <attribute name="DHCPServers" type="IDHCPServer" safearray="yes" readonly="yes">
1582 <desc>
1583 DHCP servers.
1584 </desc>
1585 </attribute>
1586
1587 <attribute name="eventSource" type="IEventSource" readonly="yes">
1588 <desc>
1589 Event source for VirtualBox events.
1590 </desc>
1591 </attribute>
1592
1593 <attribute name="extensionPackManager" type="IExtPackManager" readonly="yes">
1594 <desc>
1595 The extension pack manager.
1596 </desc>
1597 </attribute>
1598
1599
1600 <attribute name="internalNetworks" type="wstring" safearray="yes" readonly="yes">
1601 <desc>
1602 Names of all internal networks.
1603 </desc>
1604 </attribute>
1605
1606 <attribute name="genericNetworkDrivers" type="wstring" safearray="yes" readonly="yes">
1607 <desc>
1608 Names of all generic network drivers.
1609 </desc>
1610 </attribute>
1611
1612 <method name="composeMachineFilename">
1613 <desc>
1614 Returns a recommended full path of the settings file name for a new virtual
1615 machine.
1616
1617 This API serves two purposes:
1618
1619 <ul>
1620 <li>It gets called by <link to="#createMachine" /> if @c null or
1621 empty string (which is recommended) is specified for the
1622 @a settingsFile argument there, which means that API should use
1623 a recommended default file name.</li>
1624
1625 <li>It can be called manually by a client software before creating a machine,
1626 e.g. if that client wants to pre-create the machine directory to create
1627 virtual hard disks in that directory together with the new machine
1628 settings file. In that case, the file name should be stripped from the
1629 full settings file path returned by this function to obtain the
1630 machine directory.</li>
1631 </ul>
1632
1633 See <link to="IMachine::name"/> and <link to="#createMachine"/> for more
1634 details about the machine name.
1635
1636 @a groupName defines which additional subdirectory levels should be
1637 included. It must be either a valid group name or @c null or empty
1638 string which designates that the machine will not be related to a
1639 machine group.
1640
1641 If @a baseFolder is a @c null or empty string (which is recommended), the
1642 default machine settings folder
1643 (see <link to="ISystemProperties::defaultMachineFolder" />) will be used as
1644 a base folder for the created machine, resulting in a file name like
1645 "/home/user/VirtualBox VMs/name/name.vbox". Otherwise the given base folder
1646 will be used.
1647
1648 This method does not access the host disks. In particular, it does not check
1649 for whether a machine with this name already exists.
1650 </desc>
1651 <param name="name" type="wstring" dir="in">
1652 <desc>Suggested machine name.</desc>
1653 </param>
1654 <param name="group" type="wstring" dir="in">
1655 <desc>Machine group name for the new machine or machine group. It is
1656 used to determine the right subdirectory.</desc>
1657 </param>
1658 <param name="baseFolder" type="wstring" dir="in">
1659 <desc>Base machine folder (optional).</desc>
1660 </param>
1661 <param name="file" type="wstring" dir="return">
1662 <desc>Fully qualified path where the machine would be created.</desc>
1663 </param>
1664 </method>
1665
1666 <method name="createMachine">
1667 <desc>
1668 Creates a new virtual machine by creating a machine settings file at
1669 the given location.
1670
1671 VirtualBox machine settings files use a custom XML dialect. Starting
1672 with VirtualBox 4.0, a ".vbox" extension is recommended, but not enforced,
1673 and machine files can be created at arbitrary locations.
1674
1675 However, it is recommended that machines are created in the default
1676 machine folder (e.g. "/home/user/VirtualBox VMs/name/name.vbox"; see
1677 <link to="ISystemProperties::defaultMachineFolder" />). If you specify
1678 @c null or empty string (which is recommended) for the @a settingsFile
1679 argument, <link to="#composeMachineFilename" /> is called automatically
1680 to have such a recommended name composed based on the machine name
1681 given in the @a name argument and the primary group.
1682
1683 If the resulting settings file already exists, this method will fail,
1684 unless @a forceOverwrite is set.
1685
1686 The new machine is created unregistered, with the initial configuration
1687 set according to the specified guest OS type. A typical sequence of
1688 actions to create a new virtual machine is as follows:
1689
1690 <ol>
1691 <li>
1692 Call this method to have a new machine created. The returned machine
1693 object will be "mutable" allowing to change any machine property.
1694 </li>
1695
1696 <li>
1697 Configure the machine using the appropriate attributes and methods.
1698 </li>
1699
1700 <li>
1701 Call <link to="IMachine::saveSettings" /> to write the settings
1702 to the machine's XML settings file. The configuration of the newly
1703 created machine will not be saved to disk until this method is
1704 called.
1705 </li>
1706
1707 <li>
1708 Call <link to="#registerMachine" /> to add the machine to the list
1709 of machines known to VirtualBox.
1710 </li>
1711 </ol>
1712
1713 The specified guest OS type identifier must match an ID of one of known
1714 guest OS types listed in the <link to="IVirtualBox::guestOSTypes"/>
1715 array.
1716
1717 Optionally, you may specify an UUID of to assign to the created machine.
1718 However, this is not recommended and you should normally pass an empty
1719 (@c null) UUID to this method so that a new UUID will be automatically
1720 generated for every created machine. You can use UUID
1721 00000000-0000-0000-0000-000000000000 as @c null value.
1722
1723 <note>
1724 There is no way to change the name of the settings file or
1725 subfolder of the created machine directly.
1726 </note>
1727
1728 <result name="VBOX_E_OBJECT_NOT_FOUND">
1729 @a osTypeId is invalid.
1730 </result>
1731 <result name="VBOX_E_FILE_ERROR">
1732 Resulting settings file name is invalid or the settings file already
1733 exists or could not be created due to an I/O error.
1734 </result>
1735 <result name="E_INVALIDARG">
1736 @a name is empty or @c null.
1737 </result>
1738 </desc>
1739
1740 <param name="settingsFile" type="wstring" dir="in">
1741 <desc>Fully qualified path where the settings file should be created,
1742 empty string or @c null for a default folder and file based on the
1743 @a name argument and the primary group.
1744 (see <link to="#composeMachineFilename" />).</desc>
1745 </param>
1746 <param name="name" type="wstring" dir="in">
1747 <desc>Machine name.</desc>
1748 </param>
1749 <param name="groups" type="wstring" safearray="yes" dir="in">
1750 <desc>Array of group names. @c null or an empty array have the same
1751 meaning as an array with just the empty string or <tt>"/"</tt>, i.e.
1752 create a machine without group association.</desc>
1753 </param>
1754 <param name="osTypeId" type="wstring" dir="in">
1755 <desc>Guest OS Type ID.</desc>
1756 </param>
1757 <param name="id" type="uuid" mod="string" dir="in">
1758 <desc>Machine UUID (optional).</desc>
1759 </param>
1760 <param name="forceOverwrite" type="boolean" dir="in">
1761 <desc>If true, an existing machine settings file will be overwritten.</desc>
1762 </param>
1763 <param name="machine" type="IMachine" dir="return">
1764 <desc>Created machine object.</desc>
1765 </param>
1766 </method>
1767
1768 <method name="openMachine">
1769 <desc>
1770 Opens a virtual machine from the existing settings file.
1771 The opened machine remains unregistered until you call
1772 <link to="#registerMachine"/>.
1773
1774 The specified settings file name must be fully qualified.
1775 The file must exist and be a valid machine XML settings file
1776 whose contents will be used to construct the machine object.
1777
1778 <result name="VBOX_E_FILE_ERROR">
1779 Settings file name invalid, not found or sharing violation.
1780 </result>
1781 </desc>
1782 <param name="settingsFile" type="wstring" dir="in">
1783 <desc>
1784 Name of the machine settings file.
1785 </desc>
1786 </param>
1787 <param name="machine" type="IMachine" dir="return">
1788 <desc>Opened machine object.</desc>
1789 </param>
1790 <note>
1791 <link to="IMachine::settingsModified"/> will return
1792 @c false for the created machine, until any of machine settings
1793 are changed.
1794 </note>
1795 </method>
1796
1797 <method name="registerMachine">
1798 <desc>
1799
1800 Registers the machine previously created using
1801 <link to="#createMachine"/> or opened using
1802 <link to="#openMachine"/> within this VirtualBox installation. After
1803 successful method invocation, the
1804 <link to="IMachineRegisteredEvent"/> event is fired.
1805
1806 <note>
1807 This method implicitly calls <link to="IMachine::saveSettings"/>
1808 to save all current machine settings before registering it.
1809 </note>
1810
1811 <result name="VBOX_E_OBJECT_NOT_FOUND">
1812 No matching virtual machine found.
1813 </result>
1814 <result name="VBOX_E_INVALID_OBJECT_STATE">
1815 Virtual machine was not created within this VirtualBox instance.
1816 </result>
1817
1818 </desc>
1819 <param name="machine" type="IMachine" dir="in"/>
1820 </method>
1821
1822 <method name="findMachine">
1823 <desc>
1824 Attempts to find a virtual machine given its name or UUID.
1825
1826 <note>Inaccessible machines cannot be found by name, only by UUID, because their name
1827 cannot safely be determined.</note>
1828
1829 <result name="VBOX_E_OBJECT_NOT_FOUND">
1830 Could not find registered machine matching @a nameOrId.
1831 </result>
1832
1833 </desc>
1834 <param name="nameOrId" type="wstring" dir="in">
1835 <desc>What to search for. This can either be the UUID or the name of a virtual machine.</desc>
1836 </param>
1837 <param name="machine" type="IMachine" dir="return">
1838 <desc>Machine object, if found.</desc>
1839 </param>
1840 </method>
1841
1842 <method name="getMachinesByGroups">
1843 <desc>
1844 Gets all machine references which are in one of the specified groups.
1845 </desc>
1846 <param name="groups" type="wstring" dir="in" safearray="yes">
1847 <desc>What groups to match. The usual group list rules apply, i.e.
1848 passing an empty list will match VMs in the toplevel group, likewise
1849 the empty string.</desc>
1850 </param>
1851 <param name="machines" type="IMachine" dir="return" safearray="yes">
1852 <desc>All machines which matched.</desc>
1853 </param>
1854 </method>
1855
1856 <method name="getMachineStates">
1857 <desc>
1858 Gets the state of several machines in a single operation.
1859 </desc>
1860 <param name="machines" type="IMachine" dir="in" safearray="yes">
1861 <desc>Array with the machine references.</desc>
1862 </param>
1863 <param name="states" type="MachineState" dir="return" safearray="yes">
1864 <desc>Machine states, corresponding to the machines.</desc>
1865 </param>
1866 </method>
1867
1868 <method name="createAppliance">
1869 <desc>
1870 Creates a new appliance object, which represents an appliance in the Open Virtual Machine
1871 Format (OVF). This can then be used to import an OVF appliance into VirtualBox or to export
1872 machines as an OVF appliance; see the documentation for <link to="IAppliance" /> for details.
1873 </desc>
1874 <param name="appliance" type="IAppliance" dir="return">
1875 <desc>New appliance.</desc>
1876 </param>
1877 </method>
1878
1879 <method name="createHardDisk">
1880 <desc>
1881 Creates a new base medium object that will use the given storage
1882 format and location for medium data.
1883
1884 The actual storage unit is not created by this method. In order to
1885 do it, and before you are able to attach the created medium to
1886 virtual machines, you must call one of the following methods to
1887 allocate a format-specific storage unit at the specified location:
1888 <ul>
1889 <li><link to="IMedium::createBaseStorage"/></li>
1890 <li><link to="IMedium::createDiffStorage"/></li>
1891 </ul>
1892
1893 Some medium attributes, such as <link to="IMedium::id"/>, may
1894 remain uninitialized until the medium storage unit is successfully
1895 created by one of the above methods.
1896
1897 After the storage unit is successfully created, it will be
1898 accessible through the <link to="#openMedium"/> method and can
1899 be found in the <link to="#hardDisks"/> array.
1900
1901 The list of all storage formats supported by this VirtualBox
1902 installation can be obtained using
1903 <link to="ISystemProperties::mediumFormats"/>. If the @a format
1904 attribute is empty or @c null then the default storage format
1905 specified by <link to="ISystemProperties::defaultHardDiskFormat"/> will
1906 be used for creating a storage unit of the medium.
1907
1908 Note that the format of the location string is storage format specific.
1909 See <link to="IMedium::location"/> and IMedium for more details.
1910
1911 <result name="VBOX_E_OBJECT_NOT_FOUND">
1912 @a format identifier is invalid. See
1913 <link to="ISystemProperties::mediumFormats"/>.
1914 </result>
1915 <result name="VBOX_E_FILE_ERROR">
1916 @a location is a not valid file name (for file-based formats only).
1917 </result>
1918 </desc>
1919 <param name="format" type="wstring" dir="in">
1920 <desc>
1921 Identifier of the storage format to use for the new medium.
1922 </desc>
1923 </param>
1924 <param name="location" type="wstring" dir="in">
1925 <desc>
1926 Location of the storage unit for the new medium.
1927 </desc>
1928 </param>
1929 <param name="medium" type="IMedium" dir="return">
1930 <desc>Created medium object.</desc>
1931 </param>
1932 </method>
1933
1934 <method name="openMedium">
1935 <desc>
1936 Finds existing media or opens a medium from an existing storage location.
1937
1938 Once a medium has been opened, it can be passed to other VirtualBox
1939 methods, in particular to <link to="IMachine::attachDevice" />.
1940
1941 Depending on the given device type, the file at the storage location
1942 must be in one of the media formats understood by VirtualBox:
1943
1944 <ul>
1945 <li>With a "HardDisk" device type, the file must be a hard disk image
1946 in one of the formats supported by VirtualBox (see
1947 <link to="ISystemProperties::mediumFormats" />).
1948 After this method succeeds, if the medium is a base medium, it
1949 will be added to the <link to="#hardDisks"/> array attribute. </li>
1950 <li>With a "DVD" device type, the file must be an ISO 9960 CD/DVD image.
1951 After this method succeeds, the medium will be added to the
1952 <link to="#DVDImages"/> array attribute.</li>
1953 <li>With a "Floppy" device type, the file must be an RAW floppy image.
1954 After this method succeeds, the medium will be added to the
1955 <link to="#floppyImages"/> array attribute.</li>
1956 </ul>
1957
1958 After having been opened, the medium can be re-found by this method
1959 and can be attached to virtual machines. See <link to="IMedium" /> for
1960 more details.
1961
1962 The UUID of the newly opened medium will either be retrieved from the
1963 storage location, if the format supports it (e.g. for hard disk images),
1964 or a new UUID will be randomly generated (e.g. for ISO and RAW files).
1965 If for some reason you need to change the medium's UUID, use
1966 <link to="IMedium::setIds" />.
1967
1968 If a differencing hard disk medium is to be opened by this method, the
1969 operation will succeed only if its parent medium and all ancestors,
1970 if any, are already known to this VirtualBox installation (for example,
1971 were opened by this method before).
1972
1973 This method attempts to guess the storage format of the specified medium
1974 by reading medium data at the specified location.
1975
1976 If @a accessMode is ReadWrite (which it should be for hard disks and floppies),
1977 the image is opened for read/write access and must have according permissions,
1978 as VirtualBox may actually write status information into the disk's metadata
1979 sections.
1980
1981 Note that write access is required for all typical hard disk usage in VirtualBox,
1982 since VirtualBox may need to write metadata such as a UUID into the image.
1983 The only exception is opening a source image temporarily for copying and
1984 cloning (see <link to="IMedium::cloneTo" /> when the image will be closed
1985 again soon.
1986
1987 The format of the location string is storage format specific. See
1988 <link to="IMedium::location"/> and IMedium for more details.
1989
1990 <result name="VBOX_E_FILE_ERROR">
1991 Invalid medium storage file location or could not find the medium
1992 at the specified location.
1993 </result>
1994 <result name="VBOX_E_IPRT_ERROR">
1995 Could not get medium storage format.
1996 </result>
1997 <result name="E_INVALIDARG">
1998 Invalid medium storage format.
1999 </result>
2000 <result name="VBOX_E_INVALID_OBJECT_STATE">
2001 Medium has already been added to a media registry.
2002 </result>
2003 </desc>
2004 <param name="location" type="wstring" dir="in">
2005 <desc>
2006 Location of the storage unit that contains medium data in one of
2007 the supported storage formats.
2008 </desc>
2009 </param>
2010 <param name="deviceType" type="DeviceType" dir="in">
2011 <desc>
2012 Must be one of "HardDisk", "DVD" or "Floppy".
2013 </desc>
2014 </param>
2015 <param name="accessMode" type="AccessMode" dir="in">
2016 <desc>Whether to open the image in read/write or read-only mode. For
2017 a "DVD" device type, this is ignored and read-only mode is always assumed.</desc>
2018 </param>
2019 <param name="forceNewUuid" type="boolean" dir="in">
2020 <desc>Allows the caller to request a completely new medium UUID for
2021 the image which is to be opened. Useful if one intends to open an exact
2022 copy of a previously opened image, as this would normally fail due to
2023 the duplicate UUID.</desc>
2024 </param>
2025 <param name="medium" type="IMedium" dir="return">
2026 <desc>Opened medium object.</desc>
2027 </param>
2028 </method>
2029
2030 <method name="getGuestOSType">
2031 <desc>
2032 Returns an object describing the specified guest OS type.
2033
2034 The requested guest OS type is specified using a string which is a
2035 mnemonic identifier of the guest operating system, such as
2036 <tt>"win31"</tt> or <tt>"ubuntu"</tt>. The guest OS type ID of a
2037 particular virtual machine can be read or set using the
2038 <link to="IMachine::OSTypeId"/> attribute.
2039
2040 The <link to="IVirtualBox::guestOSTypes"/> collection contains all
2041 available guest OS type objects. Each object has an
2042 <link to="IGuestOSType::id"/> attribute which contains an identifier of
2043 the guest OS this object describes.
2044
2045 <result name="E_INVALIDARG">
2046 @a id is not a valid Guest OS type.
2047 </result>
2048
2049 </desc>
2050 <param name="id" type="uuid" mod="string" dir="in">
2051 <desc>Guest OS type ID string.</desc>
2052 </param>
2053 <param name="type" type="IGuestOSType" dir="return">
2054 <desc>Guest OS type object.</desc>
2055 </param>
2056 </method>
2057
2058 <method name="createSharedFolder">
2059 <desc>
2060 Creates a new global shared folder by associating the given logical
2061 name with the given host path, adds it to the collection of shared
2062 folders and starts sharing it. Refer to the description of
2063 <link to="ISharedFolder"/> to read more about logical names.
2064 <note>
2065 In the current implementation, this operation is not
2066 implemented.
2067 </note>
2068 </desc>
2069 <param name="name" type="wstring" dir="in">
2070 <desc>Unique logical name of the shared folder.</desc>
2071 </param>
2072 <param name="hostPath" type="wstring" dir="in">
2073 <desc>Full path to the shared folder in the host file system.</desc>
2074 </param>
2075 <param name="writable" type="boolean" dir="in">
2076 <desc>Whether the share is writable or readonly</desc>
2077 </param>
2078 <param name="automount" type="boolean" dir="in">
2079 <desc>Whether the share gets automatically mounted by the guest
2080 or not.</desc>
2081 </param>
2082 </method>
2083
2084 <method name="removeSharedFolder">
2085 <desc>
2086 Removes the global shared folder with the given name previously
2087 created by <link to="#createSharedFolder"/> from the collection of
2088 shared folders and stops sharing it.
2089 <note>
2090 In the current implementation, this operation is not
2091 implemented.
2092 </note>
2093 </desc>
2094 <param name="name" type="wstring" dir="in">
2095 <desc>Logical name of the shared folder to remove.</desc>
2096 </param>
2097 </method>
2098
2099 <method name="getExtraDataKeys">
2100 <desc>
2101 Returns an array representing the global extra data keys which currently
2102 have values defined.
2103 </desc>
2104 <param name="value" type="wstring" dir="return" safearray="yes">
2105 <desc>Array of extra data keys.</desc>
2106 </param>
2107 </method>
2108
2109 <method name="getExtraData">
2110 <desc>
2111 Returns associated global extra data.
2112
2113 If the requested data @a key does not exist, this function will
2114 succeed and return an empty string in the @a value argument.
2115
2116 <result name="VBOX_E_FILE_ERROR">
2117 Settings file not accessible.
2118 </result>
2119 <result name="VBOX_E_XML_ERROR">
2120 Could not parse the settings file.
2121 </result>
2122
2123 </desc>
2124 <param name="key" type="wstring" dir="in">
2125 <desc>Name of the data key to get.</desc>
2126 </param>
2127 <param name="value" type="wstring" dir="return">
2128 <desc>Value of the requested data key.</desc>
2129 </param>
2130 </method>
2131
2132 <method name="setExtraData">
2133 <desc>
2134 Sets associated global extra data.
2135
2136 If you pass @c null or empty string as a key @a value, the given @a key
2137 will be deleted.
2138
2139 <note>
2140 Before performing the actual data change, this method will ask all
2141 registered event listener using the
2142 <link to="IExtraDataCanChangeEvent"/>
2143 notification for a permission. If one of the listeners refuses the
2144 new value, the change will not be performed.
2145 </note>
2146 <note>
2147 On success, the
2148 <link to="IExtraDataChangedEvent"/> notification
2149 is called to inform all registered listeners about a successful data
2150 change.
2151 </note>
2152
2153 <result name="VBOX_E_FILE_ERROR">
2154 Settings file not accessible.
2155 </result>
2156 <result name="VBOX_E_XML_ERROR">
2157 Could not parse the settings file.
2158 </result>
2159 <result name="E_ACCESSDENIED">
2160 Modification request refused.
2161 </result>
2162
2163 </desc>
2164 <param name="key" type="wstring" dir="in">
2165 <desc>Name of the data key to set.</desc>
2166 </param>
2167 <param name="value" type="wstring" dir="in">
2168 <desc>Value to assign to the key.</desc>
2169 </param>
2170 </method>
2171
2172 <method name="setSettingsSecret">
2173 <desc>
2174 Unlocks the secret data by passing the unlock password to the
2175 server. The server will cache the password for that machine.
2176
2177 <result name="VBOX_E_INVALID_VM_STATE">
2178 Virtual machine is not mutable.
2179 </result>
2180
2181 </desc>
2182 <param name="password" type="wstring" dir="in">
2183 <desc>
2184 The cipher key.
2185 </desc>
2186 </param>
2187 </method>
2188
2189 <!--method name="createDHCPServerForInterface">
2190 <desc>
2191 Creates a DHCP server settings to be used for the given interface
2192 <result name="E_INVALIDARG">
2193 Host network interface @a name already exists.
2194 </result>
2195 </desc>
2196 <param name="interface" type="IHostNetworkInterface" dir="in">
2197 <desc>Network Interface</desc>
2198 </param>
2199 <param name="server" type="IDHCPServer" dir="out">
2200 <desc>DHCP server settings</desc>
2201 </param>
2202 </method-->
2203
2204 <method name="createDHCPServer">
2205 <desc>
2206 Creates a DHCP server settings to be used for the given internal network name
2207 <result name="E_INVALIDARG">
2208 Host network interface @a name already exists.
2209 </result>
2210 </desc>
2211 <param name="name" type="wstring" dir="in">
2212 <desc>server name</desc>
2213 </param>
2214 <param name="server" type="IDHCPServer" dir="return">
2215 <desc>DHCP server settings</desc>
2216 </param>
2217 </method>
2218
2219 <method name="findDHCPServerByNetworkName">
2220 <desc>
2221 Searches a DHCP server settings to be used for the given internal network name
2222 <result name="E_INVALIDARG">
2223 Host network interface @a name already exists.
2224 </result>
2225
2226 </desc>
2227 <param name="name" type="wstring" dir="in">
2228 <desc>server name</desc>
2229 </param>
2230 <param name="server" type="IDHCPServer" dir="return">
2231 <desc>DHCP server settings</desc>
2232 </param>
2233 </method>
2234
2235 <!--method name="findDHCPServerForInterface">
2236 <desc>
2237 Searches a DHCP server settings to be used for the given interface
2238 <result name="E_INVALIDARG">
2239 Host network interface @a name already exists.
2240 </result>
2241 </desc>
2242 <param name="interface" type="IHostNetworkInterface" dir="in">
2243 <desc>Network Interface</desc>
2244 </param>
2245 <param name="server" type="IDHCPServer" dir="out">
2246 <desc>DHCP server settings</desc>
2247 </param>
2248 </method-->
2249
2250 <method name="removeDHCPServer">
2251 <desc>
2252 Removes the DHCP server settings
2253 <result name="E_INVALIDARG">
2254 Host network interface @a name already exists.
2255 </result>
2256 </desc>
2257 <param name="server" type="IDHCPServer" dir="in">
2258 <desc>DHCP server settings to be removed</desc>
2259 </param>
2260 </method>
2261
2262
2263 <method name="checkFirmwarePresent">
2264 <desc>
2265 Check if this VirtualBox installation has a firmware
2266 of the given type available, either system-wide or per-user.
2267 Optionally, this may return a hint where this firmware can be
2268 downloaded from.
2269 </desc>
2270 <param name="firmwareType" type="FirmwareType" dir="in">
2271 <desc>
2272 Type of firmware to check.
2273 </desc>
2274 </param>
2275 <param name="version" type="wstring" dir="in">
2276 <desc>Expected version number, usually empty string (presently ignored).</desc>
2277 </param>
2278
2279 <param name="url" type="wstring" dir="out">
2280 <desc>
2281 Suggested URL to download this firmware from.
2282 </desc>
2283 </param>
2284
2285 <param name="file" type="wstring" dir="out">
2286 <desc>
2287 Filename of firmware, only valid if result == TRUE.
2288 </desc>
2289 </param>
2290
2291 <param name="result" type="boolean" dir="return">
2292 <desc>If firmware of this type and version is available.</desc>
2293 </param>
2294 </method>
2295
2296 </interface>
2297
2298 <!--
2299 // IVFSExplorer
2300 /////////////////////////////////////////////////////////////////////////
2301 -->
2302
2303 <enum
2304 name="VFSType"
2305 uuid="813999ba-b949-48a8-9230-aadc6285e2f2"
2306 >
2307 <desc>
2308 Virtual file systems supported by VFSExplorer.
2309 </desc>
2310
2311 <const name="File" value="1" />
2312 <const name="Cloud" value="2" />
2313 <const name="S3" value="3" />
2314 <const name="WebDav" value="4" />
2315 </enum>
2316
2317 <enum
2318 name="VFSFileType"
2319 uuid="714333cd-44e2-415f-a245-d378fa9b1242"
2320 >
2321 <desc>
2322 File types known by VFSExplorer.
2323 </desc>
2324
2325 <const name="Unknown" value="1" />
2326 <const name="Fifo" value="2" />
2327 <const name="DevChar" value="3" />
2328 <const name="Directory" value="4" />
2329 <const name="DevBlock" value="5" />
2330 <const name="File" value="6" />
2331 <const name="SymLink" value="7" />
2332 <const name="Socket" value="8" />
2333 <const name="WhiteOut" value="9" />
2334 </enum>
2335
2336 <interface
2337 name="IVFSExplorer" extends="$unknown"
2338 uuid="003d7f92-d38e-487f-b790-8c5e8631cb2f"
2339 wsmap="managed"
2340 >
2341 <desc>
2342 The VFSExplorer interface unifies access to different file system
2343 types. This includes local file systems as well remote file systems like
2344 S3. For a list of supported types see <link to="VFSType" />.
2345 An instance of this is returned by <link to="IAppliance::createVFSExplorer" />.
2346 </desc>
2347
2348 <attribute name="path" type="wstring" readonly="yes">
2349 <desc>Returns the current path in the virtual file system.</desc>
2350 </attribute>
2351
2352 <attribute name="type" type="VFSType" readonly="yes">
2353 <desc>Returns the file system type which is currently in use.</desc>
2354 </attribute>
2355
2356 <method name="update">
2357 <desc>Updates the internal list of files/directories from the
2358 current directory level. Use <link to="#entryList" /> to get the full list
2359 after a call to this method.</desc>
2360
2361 <param name="aProgress" type="IProgress" dir="return">
2362 <desc>Progress object to track the operation completion.</desc>
2363 </param>
2364 </method>
2365
2366 <method name="cd">
2367 <desc>Change the current directory level.</desc>
2368
2369 <param name="aDir" type="wstring" dir="in">
2370 <desc>The name of the directory to go in.</desc>
2371 </param>
2372
2373 <param name="aProgress" type="IProgress" dir="return">
2374 <desc>Progress object to track the operation completion.</desc>
2375 </param>
2376 </method>
2377
2378 <method name="cdUp">
2379 <desc>Go one directory upwards from the current directory level.</desc>
2380
2381 <param name="aProgress" type="IProgress" dir="return">
2382 <desc>Progress object to track the operation completion.</desc>
2383 </param>
2384 </method>
2385
2386 <method name="entryList">
2387 <desc>Returns a list of files/directories after a call to <link
2388 to="#update" />. The user is responsible for keeping this internal
2389 list up do date.</desc>
2390
2391 <param name="aNames" type="wstring" safearray="yes" dir="out">
2392 <desc>The list of names for the entries.</desc>
2393 </param>
2394
2395 <param name="aTypes" type="unsigned long" safearray="yes" dir="out">
2396 <desc>The list of types for the entries.</desc>
2397 </param>
2398
2399 <param name="aSizes" type="unsigned long" safearray="yes" dir="out">
2400 <desc>The list of sizes (in bytes) for the entries.</desc>
2401 </param>
2402
2403 <param name="aModes" type="unsigned long" safearray="yes" dir="out">
2404 <desc>The list of file modes (in octal form) for the entries.</desc>
2405 </param>
2406 </method>
2407
2408 <method name="exists">
2409 <desc>Checks if the given file list exists in the current directory
2410 level.</desc>
2411
2412 <param name="aNames" type="wstring" safearray="yes" dir="in">
2413 <desc>The names to check.</desc>
2414 </param>
2415
2416 <param name="aExists" type="wstring" safearray="yes" dir="return">
2417 <desc>The names which exist.</desc>
2418 </param>
2419 </method>
2420
2421 <method name="remove">
2422 <desc>Deletes the given files in the current directory level.</desc>
2423
2424 <param name="aNames" type="wstring" safearray="yes" dir="in">
2425 <desc>The names to remove.</desc>
2426 </param>
2427
2428 <param name="aProgress" type="IProgress" dir="return">
2429 <desc>Progress object to track the operation completion.</desc>
2430 </param>
2431 </method>
2432
2433 </interface>
2434
2435 <enum
2436 name="ImportOptions" extends="$unknown"
2437 uuid="0a981523-3b20-4004-8ee3-dfd322202ace"
2438 >
2439
2440 <desc>
2441 Import options, used with <link to="IAppliance::importMachines" />.
2442 </desc>
2443
2444 <const name="KeepAllMACs" value="1">
2445 <desc>Don't generate new MAC addresses of the attached network adapters.</desc>
2446 </const>
2447 <const name="KeepNATMACs" value="2">
2448 <desc>Don't generate new MAC addresses of the attached network adapters when they are using NAT.</desc>
2449 </const>
2450
2451 </enum>
2452
2453
2454 <!--
2455 // IAppliance
2456 /////////////////////////////////////////////////////////////////////////
2457 -->
2458
2459 <interface
2460 name="IAppliance" extends="$unknown"
2461 uuid="3059cf9e-25c7-4f0b-9fa5-3c42e441670b"
2462 wsmap="managed"
2463 >
2464 <desc>
2465 Represents a platform-independent appliance in OVF format. An instance of this is returned
2466 by <link to="IVirtualBox::createAppliance" />, which can then be used to import and export
2467 virtual machines within an appliance with VirtualBox.
2468
2469 The OVF standard suggests two different physical file formats:
2470
2471 <ol>
2472 <li>If the appliance is distributed as a set of files, there must be at least one XML descriptor
2473 file that conforms to the OVF standard and carries an <tt>.ovf</tt> file extension. If
2474 this descriptor file references other files such as disk images, as OVF appliances typically
2475 do, those additional files must be in the same directory as the descriptor file.</li>
2476
2477 <li>If the appliance is distributed as a single file, it must be in TAR format and have the
2478 <tt>.ova</tt> file extension. This TAR file must then contain at least the OVF descriptor
2479 files and optionally other files.
2480
2481 At this time, VirtualBox does not not yet support the packed (TAR) variant; support will
2482 be added with a later version.</li>
2483 </ol>
2484
2485 <b>Importing</b> an OVF appliance into VirtualBox as instances of
2486 <link to="IMachine" /> involves the following sequence of API calls:
2487
2488 <ol>
2489 <li>Call <link to="IVirtualBox::createAppliance" />. This will create an empty IAppliance object.
2490 </li>
2491
2492 <li>On the new object, call <link to="#read" /> with the full path of the OVF file you
2493 would like to import. So long as this file is syntactically valid, this will succeed
2494 and fill the appliance object with the parsed data from the OVF file.
2495 </li>
2496
2497 <li>Next, call <link to="#interpret" />, which analyzes the OVF data and sets up the
2498 contents of the IAppliance attributes accordingly. These can be inspected by a
2499 VirtualBox front-end such as the GUI, and the suggestions can be displayed to the
2500 user. In particular, the <link to="#virtualSystemDescriptions" /> array contains
2501 instances of <link to="IVirtualSystemDescription" /> which represent the virtual
2502 systems (machines) in the OVF, which in turn describe the virtual hardware prescribed
2503 by the OVF (network and hardware adapters, virtual disk images, memory size and so on).
2504 The GUI can then give the user the option to confirm and/or change these suggestions.
2505 </li>
2506
2507 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
2508 virtual system (machine) to override the suggestions made by the <link to="#interpret" /> routine.
2509 </li>
2510
2511 <li>Finally, call <link to="#importMachines" /> to create virtual machines in
2512 VirtualBox as instances of <link to="IMachine" /> that match the information in the
2513 virtual system descriptions. After this call succeeded, the UUIDs of the machines created
2514 can be found in the <link to="#machines" /> array attribute.
2515 </li>
2516 </ol>
2517
2518 <b>Exporting</b> VirtualBox machines into an OVF appliance involves the following steps:
2519
2520 <ol>
2521 <li>As with importing, first call <link to="IVirtualBox::createAppliance" /> to create
2522 an empty IAppliance object.
2523 </li>
2524
2525 <li>For each machine you would like to export, call <link to="IMachine::export" />
2526 with the IAppliance object you just created. Each such call creates one instance of
2527 <link to="IVirtualSystemDescription" /> inside the appliance.
2528 </li>
2529
2530 <li>If desired, call <link to="IVirtualSystemDescription::setFinalValues" /> for each
2531 virtual system (machine) to override the suggestions made by the <link to="IMachine::export"/> routine.
2532 </li>
2533
2534 <li>Finally, call <link to="#write" /> with a path specification to have the OVF
2535 file written.</li>
2536 </ol>
2537
2538 </desc>
2539
2540 <attribute name="path" type="wstring" readonly="yes">
2541 <desc>Path to the main file of the OVF appliance, which is either the <tt>.ovf</tt> or
2542 the <tt>.ova</tt> file passed to <link to="#read" /> (for import) or
2543 <link to="#write" /> (for export).
2544 This attribute is empty until one of these methods has been called.
2545 </desc>
2546 </attribute>
2547
2548 <attribute name="disks" type="wstring" readonly="yes" safearray="yes">
2549 <desc>
2550 Array of virtual disk definitions. One such description exists for each
2551 disk definition in the OVF; each string array item represents one such piece of
2552 disk information, with the information fields separated by tab (\\t) characters.
2553
2554 The caller should be prepared for additional fields being appended to
2555 this string in future versions of VirtualBox and therefore check for
2556 the number of tabs in the strings returned.
2557
2558 In the current version, the following eight fields are returned per string
2559 in the array:
2560
2561 <ol>
2562 <li>Disk ID (unique string identifier given to disk)</li>
2563
2564 <li>Capacity (unsigned integer indicating the maximum capacity of the disk)</li>
2565
2566 <li>Populated size (optional unsigned integer indicating the current size of the
2567 disk; can be approximate; -1 if unspecified)</li>
2568
2569 <li>Format (string identifying the disk format, typically
2570 "http://www.vmware.com/specifications/vmdk.html#sparse")</li>
2571
2572 <li>Reference (where to find the disk image, typically a file name; if empty,
2573 then the disk should be created on import)</li>
2574
2575 <li>Image size (optional unsigned integer indicating the size of the image,
2576 which need not necessarily be the same as the values specified above, since
2577 the image may be compressed or sparse; -1 if not specified)</li>
2578
2579 <li>Chunk size (optional unsigned integer if the image is split into chunks;
2580 presently unsupported and always -1)</li>
2581
2582 <li>Compression (optional string equalling "gzip" if the image is gzip-compressed)</li>
2583 </ol>
2584 </desc>
2585 </attribute>
2586
2587 <attribute name="virtualSystemDescriptions" type="IVirtualSystemDescription" readonly="yes" safearray="yes">
2588 <desc> Array of virtual system descriptions. One such description is created
2589 for each virtual system (machine) found in the OVF.
2590 This array is empty until either <link to="#interpret" /> (for import) or <link to="IMachine::export" />
2591 (for export) has been called.
2592 </desc>
2593 </attribute>
2594
2595 <attribute name="machines" type="wstring" readonly="yes" safearray="yes">
2596 <desc>
2597 Contains the UUIDs of the machines created from the information in this appliances. This is only
2598 relevant for the import case, and will only contain data after a call to <link to="#importMachines" />
2599 succeeded.
2600 </desc>
2601 </attribute>
2602
2603 <method name="read">
2604 <desc>
2605 Reads an OVF file into the appliance object.
2606
2607 This method succeeds if the OVF is syntactically valid and, by itself, without errors. The
2608 mere fact that this method returns successfully does not mean that VirtualBox supports all
2609 features requested by the appliance; this can only be examined after a call to <link to="#interpret" />.
2610 </desc>
2611 <param name="file" type="wstring" dir="in">
2612 <desc>
2613 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
2614 on whether the appliance is distributed as a set of files or as a single file, respectively).
2615 </desc>
2616 </param>
2617 <param name="aProgress" type="IProgress" dir="return">
2618 <desc>Progress object to track the operation completion.</desc>
2619 </param>
2620 </method>
2621
2622 <method name="interpret">
2623 <desc>
2624 Interprets the OVF data that was read when the appliance was constructed. After
2625 calling this method, one can inspect the
2626 <link to="#virtualSystemDescriptions" /> array attribute, which will then contain
2627 one <link to="IVirtualSystemDescription" /> for each virtual machine found in
2628 the appliance.
2629
2630 Calling this method is the second step of importing an appliance into VirtualBox;
2631 see <link to="IAppliance" /> for an overview.
2632
2633 After calling this method, one should call <link to="#getWarnings" /> to find out
2634 if problems were encountered during the processing which might later lead to
2635 errors.
2636 </desc>
2637 </method>
2638
2639 <method name="importMachines">
2640 <desc>
2641 Imports the appliance into VirtualBox by creating instances of <link to="IMachine" />
2642 and other interfaces that match the information contained in the appliance as
2643 closely as possible, as represented by the import instructions in the
2644 <link to="#virtualSystemDescriptions" /> array.
2645
2646 Calling this method is the final step of importing an appliance into VirtualBox;
2647 see <link to="IAppliance" /> for an overview.
2648
2649 Since importing the appliance will most probably involve copying and converting
2650 disk images, which can take a long time, this method operates asynchronously and
2651 returns an IProgress object to allow the caller to monitor the progress.
2652
2653 After the import succeeded, the UUIDs of the IMachine instances created can be
2654 retrieved from the <link to="#machines" /> array attribute.
2655 </desc>
2656
2657 <param name="options" type="ImportOptions" dir="in" safearray="yes">
2658 <desc>Options for the importing operation.</desc>
2659 </param>
2660
2661 <param name="aProgress" type="IProgress" dir="return">
2662 <desc>Progress object to track the operation completion.</desc>
2663 </param>
2664 </method>
2665
2666 <method name="createVFSExplorer">
2667 <desc>Returns a <link to="IVFSExplorer" /> object for the given URI.</desc>
2668
2669 <param name="aUri" type="wstring" dir="in">
2670 <desc>The URI describing the file system to use.</desc>
2671 </param>
2672
2673 <param name="aExplorer" type="IVFSExplorer" dir="return">
2674 <desc></desc>
2675 </param>
2676 </method>
2677
2678 <method name="write">
2679 <desc>
2680 Writes the contents of the appliance exports into a new OVF file.
2681
2682 Calling this method is the final step of exporting an appliance from VirtualBox;
2683 see <link to="IAppliance" /> for an overview.
2684
2685 Since exporting the appliance will most probably involve copying and converting
2686 disk images, which can take a long time, this method operates asynchronously and
2687 returns an IProgress object to allow the caller to monitor the progress.
2688 </desc>
2689 <param name="format" type="wstring" dir="in">
2690 <desc>
2691 Output format, as a string. Currently supported formats are "ovf-0.9", "ovf-1.0"
2692 and "ovf-2.0"; future versions of VirtualBox may support additional formats.
2693 </desc>
2694 </param>
2695 <param name="manifest" type="boolean" dir="in">
2696 <desc>
2697 Indicate if the optional manifest file (.mf) should be written. The manifest file
2698 is used for integrity checks prior import.
2699 </desc>
2700 </param>
2701 <param name="path" type="wstring" dir="in">
2702 <desc>
2703 Name of appliance file to open (either with an <tt>.ovf</tt> or <tt>.ova</tt> extension, depending
2704 on whether the appliance is distributed as a set of files or as a single file, respectively).
2705 </desc>
2706 </param>
2707 <param name="progress" type="IProgress" dir="return">
2708 <desc>Progress object to track the operation completion.</desc>
2709 </param>
2710 </method>
2711
2712 <method name="getWarnings">
2713 <desc>Returns textual warnings which occurred during execution of <link to="#interpret" />.</desc>
2714
2715 <param name="aWarnings" type="wstring" dir="return" safearray="yes">
2716 <desc></desc>
2717 </param>
2718 </method>
2719
2720 </interface>
2721
2722 <enum
2723 name="VirtualSystemDescriptionType"
2724 uuid="303c0900-a746-4612-8c67-79003e91f459"
2725 >
2726 <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
2727 a configuration value.</desc>
2728
2729 <const name="Ignore" value="1" />
2730 <const name="OS" value="2" />
2731 <const name="Name" value="3" />
2732 <const name="Product" value="4" />
2733 <const name="Vendor" value="5" />
2734 <const name="Version" value="6" />
2735 <const name="ProductUrl" value="7" />
2736 <const name="VendorUrl" value="8" />
2737 <const name="Description" value="9" />
2738 <const name="License" value="10" />
2739 <const name="Miscellaneous" value="11" />
2740 <const name="CPU" value="12" />
2741 <const name="Memory" value="13" />
2742 <const name="HardDiskControllerIDE" value="14" />
2743 <const name="HardDiskControllerSATA" value="15" />
2744 <const name="HardDiskControllerSCSI" value="16" />
2745 <const name="HardDiskControllerSAS" value="17" />
2746 <const name="HardDiskImage" value="18" />
2747 <const name="Floppy" value="19" />
2748 <const name="CDROM" value="20" />
2749 <const name="NetworkAdapter" value="21" />
2750 <const name="USBController" value="22" />
2751 <const name="SoundCard" value="23" />
2752 <const name="SettingsFile" value="24">
2753 <desc>Not used/implemented right now, will be added later in 4.1.x.</desc>
2754 </const>
2755 </enum>
2756
2757 <enum
2758 name="VirtualSystemDescriptionValueType"
2759 uuid="56d9403f-3425-4118-9919-36f2a9b8c77c"
2760 >
2761 <desc>Used with <link to="IVirtualSystemDescription::getValuesByType" /> to describe the value
2762 type to fetch.</desc>
2763
2764 <const name="Reference" value="1" />
2765 <const name="Original" value="2" />
2766 <const name="Auto" value="3" />
2767 <const name="ExtraConfig" value="4" />
2768
2769 </enum>
2770
2771 <interface
2772 name="IVirtualSystemDescription" extends="$unknown"
2773 uuid="d7525e6c-531a-4c51-8e04-41235083a3d8"
2774 wsmap="managed"
2775 >
2776
2777 <desc>Represents one virtual system (machine) in an appliance. This interface is used in
2778 the <link to="IAppliance::virtualSystemDescriptions" /> array. After
2779 <link to="IAppliance::interpret" /> has been called, that array contains information
2780 about how the virtual systems described in the OVF should best be imported into
2781 VirtualBox virtual machines. See <link to="IAppliance" /> for the steps required to
2782 import an OVF into VirtualBox.
2783 </desc>
2784
2785 <attribute name="count" type="unsigned long" readonly="yes">
2786 <desc>Return the number of virtual system description entries.</desc>
2787 </attribute>
2788
2789 <method name="getDescription">
2790 <desc>Returns information about the virtual system as arrays of instruction items. In each array, the
2791 items with the same indices correspond and jointly represent an import instruction for VirtualBox.
2792
2793 The list below identifies the value sets that are possible depending on the
2794 <link to="VirtualSystemDescriptionType" /> enum value in the array item in @a aTypes[]. In each case,
2795 the array item with the same index in @a aOvfValues[] will contain the original value as contained
2796 in the OVF file (just for informational purposes), and the corresponding item in @a aVBoxValues[]
2797 will contain a suggested value to be used for VirtualBox. Depending on the description type,
2798 the @a aExtraConfigValues[] array item may also be used.
2799
2800 <ul>
2801 <li>
2802 "OS": the guest operating system type. There must be exactly one such array item on import. The
2803 corresponding item in @a aVBoxValues[] contains the suggested guest operating system for VirtualBox.
2804 This will be one of the values listed in <link to="IVirtualBox::guestOSTypes" />. The corresponding
2805 item in @a aOvfValues[] will contain a numerical value that described the operating system in the OVF.
2806 </li>
2807 <li>
2808 "Name": the name to give to the new virtual machine. There can be at most one such array item;
2809 if none is present on import, then an automatic name will be created from the operating system
2810 type. The corresponding item im @a aOvfValues[] will contain the suggested virtual machine name
2811 from the OVF file, and @a aVBoxValues[] will contain a suggestion for a unique VirtualBox
2812 <link to="IMachine" /> name that does not exist yet.
2813 </li>
2814 <li>
2815 "Description": an arbitrary description.
2816 </li>
2817 <li>
2818 "License": the EULA section from the OVF, if present. It is the responsibility of the calling
2819 code to display such a license for agreement; the Main API does not enforce any such policy.
2820 </li>
2821 <li>
2822 Miscellaneous: reserved for future use.
2823 </li>
2824 <li>
2825 "CPU": the number of CPUs. There can be at most one such item, which will presently be ignored.
2826 </li>
2827 <li>
2828 "Memory": the amount of guest RAM, in bytes. There can be at most one such array item; if none
2829 is present on import, then VirtualBox will set a meaningful default based on the operating system
2830 type.
2831 </li>
2832 <li>
2833 "HardDiskControllerIDE": an IDE hard disk controller. There can be at most two such items.
2834 An optional value in @a aOvfValues[] and @a aVBoxValues[] can be "PIIX3" or "PIIX4" to specify
2835 the type of IDE controller; this corresponds to the ResourceSubType element which VirtualBox
2836 writes into the OVF.
2837 The matching item in the @a aRefs[] array will contain an integer that items of the "Harddisk"
2838 type can use to specify which hard disk controller a virtual disk should be connected to.
2839 Note that in OVF, an IDE controller has two channels, corresponding to "master" and "slave"
2840 in traditional terminology, whereas the IDE storage controller that VirtualBox supports in
2841 its virtual machines supports four channels (primary master, primary slave, secondary master,
2842 secondary slave) and thus maps to two IDE controllers in the OVF sense.
2843 </li>
2844 <li>
2845 "HardDiskControllerSATA": an SATA hard disk controller. There can be at most one such item. This
2846 has no value in @a aOvfValues[] or @a aVBoxValues[].
2847 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
2848 </li>
2849 <li>
2850 "HardDiskControllerSCSI": a SCSI hard disk controller. There can be at most one such item.
2851 The items in @a aOvfValues[] and @a aVBoxValues[] will either be "LsiLogic", "BusLogic" or
2852 "LsiLogicSas". (Note that in OVF, the LsiLogicSas controller is treated as a SCSI controller
2853 whereas VirtualBox considers it a class of storage controllers of its own; see
2854 <link to="StorageControllerType" />).
2855 The matching item in the @a aRefs[] array will be used as with IDE controllers (see above).
2856 </li>
2857 <li>
2858 "HardDiskImage": a virtual hard disk, most probably as a reference to an image file. There can be an
2859 arbitrary number of these items, one for each virtual disk image that accompanies the OVF.
2860
2861 The array item in @a aOvfValues[] will contain the file specification from the OVF file (without
2862 a path since the image file should be in the same location as the OVF file itself), whereas the
2863 item in @a aVBoxValues[] will contain a qualified path specification to where VirtualBox uses the
2864 hard disk image. This means that on import the image will be copied and converted from the
2865 "ovf" location to the "vbox" location; on export, this will be handled the other way round.
2866
2867 The matching item in the @a aExtraConfigValues[] array must contain a string of the following
2868 format: "controller=&lt;index&gt;;channel=&lt;c&gt;"
2869 In this string, &lt;index&gt; must be an integer specifying the hard disk controller to connect
2870 the image to. That number must be the index of an array item with one of the hard disk controller
2871 types (HardDiskControllerSCSI, HardDiskControllerSATA, HardDiskControllerIDE).
2872 In addition, &lt;c&gt; must specify the channel to use on that controller. For IDE controllers,
2873 this can be 0 or 1 for master or slave, respectively. For compatibility with VirtualBox versions
2874 before 3.2, the values 2 and 3 (for secondary master and secondary slave) are also supported, but
2875 no longer exported. For SATA and SCSI controllers, the channel can range from 0-29.
2876 </li>
2877 <li>
2878 "CDROM": a virtual CD-ROM drive. The matching item in @a aExtraConfigValue[] contains the same
2879 attachment information as with "HardDiskImage" items.
2880 </li>
2881 <li>
2882 "CDROM": a virtual floppy drive. The matching item in @a aExtraConfigValue[] contains the same
2883 attachment information as with "HardDiskImage" items.
2884 </li>
2885 <li>
2886 "NetworkAdapter": a network adapter. The array item in @a aVBoxValues[] will specify the hardware
2887 for the network adapter, whereas the array item in @a aExtraConfigValues[] will have a string
2888 of the "type=&lt;X&gt;" format, where &lt;X&gt; must be either "NAT" or "Bridged".
2889 </li>
2890 <li>
2891 "USBController": a USB controller. There can be at most one such item. If and only if such an
2892 item ispresent, USB support will be enabled for the new virtual machine.
2893 </li>
2894 <li>
2895 "SoundCard": a sound card. There can be at most one such item. If and only if such an item is
2896 present, sound support will be enabled for the new virtual machine. Note that the virtual
2897 machine in VirtualBox will always be presented with the standard VirtualBox soundcard, which
2898 may be different from the virtual soundcard expected by the appliance.
2899 </li>
2900 </ul>
2901
2902 </desc>
2903
2904 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
2905 <desc></desc>
2906 </param>
2907
2908 <param name="aRefs" type="wstring" dir="out" safearray="yes">
2909 <desc></desc>
2910 </param>
2911
2912 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
2913 <desc></desc>
2914 </param>
2915
2916 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
2917 <desc></desc>
2918 </param>
2919
2920 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
2921 <desc></desc>
2922 </param>
2923
2924 </method>
2925
2926 <method name="getDescriptionByType">
2927 <desc>This is the same as <link to="#getDescription" /> except that you can specify which types
2928 should be returned.</desc>
2929
2930 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
2931 <desc></desc>
2932 </param>
2933
2934 <param name="aTypes" type="VirtualSystemDescriptionType" dir="out" safearray="yes">
2935 <desc></desc>
2936 </param>
2937
2938 <param name="aRefs" type="wstring" dir="out" safearray="yes">
2939 <desc></desc>
2940 </param>
2941
2942 <param name="aOvfValues" type="wstring" dir="out" safearray="yes">
2943 <desc></desc>
2944 </param>
2945
2946 <param name="aVBoxValues" type="wstring" dir="out" safearray="yes">
2947 <desc></desc>
2948 </param>
2949
2950 <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
2951 <desc></desc>
2952 </param>
2953
2954 </method>
2955
2956 <method name="getValuesByType">
2957 <desc>This is the same as <link to="#getDescriptionByType" /> except that you can specify which
2958 value types should be returned. See <link to="VirtualSystemDescriptionValueType" /> for possible
2959 values.</desc>
2960
2961 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
2962 <desc></desc>
2963 </param>
2964
2965 <param name="aWhich" type="VirtualSystemDescriptionValueType" dir="in">
2966 <desc></desc>
2967 </param>
2968
2969 <param name="aValues" type="wstring" dir="return" safearray="yes">
2970 <desc></desc>
2971 </param>
2972
2973 </method>
2974
2975 <method name="setFinalValues">
2976 <desc>
2977 This method allows the appliance's user to change the configuration for the virtual
2978 system descriptions. For each array item returned from <link to="#getDescription" />,
2979 you must pass in one boolean value and one configuration value.
2980
2981 Each item in the boolean array determines whether the particular configuration item
2982 should be enabled.
2983 You can only disable items of the types HardDiskControllerIDE, HardDiskControllerSATA,
2984 HardDiskControllerSCSI, HardDiskImage, CDROM, Floppy, NetworkAdapter, USBController
2985 and SoundCard.
2986
2987 For the "vbox" and "extra configuration" values, if you pass in the same arrays
2988 as returned in the aVBoxValues and aExtraConfigValues arrays from <link to="#getDescription"/>,
2989 the configuration remains unchanged. Please see the documentation for <link to="#getDescription"/>
2990 for valid configuration values for the individual array item types. If the
2991 corresponding item in the aEnabled array is @c false, the configuration value is ignored.
2992 </desc>
2993
2994 <param name="aEnabled" type="boolean" dir="in" safearray="yes">
2995 <desc></desc>
2996 </param>
2997
2998 <param name="aVBoxValues" type="wstring" dir="in" safearray="yes">
2999 <desc></desc>
3000 </param>
3001
3002 <param name="aExtraConfigValues" type="wstring" dir="in" safearray="yes">
3003 <desc></desc>
3004 </param>
3005 </method>
3006
3007 <method name="addDescription">
3008 <desc>
3009 This method adds an additional description entry to the stack of already
3010 available descriptions for this virtual system. This is handy for writing
3011 values which aren't directly supported by VirtualBox. One example would
3012 be the License type of <link to="VirtualSystemDescriptionType" />.
3013 </desc>
3014
3015 <param name="aType" type="VirtualSystemDescriptionType" dir="in">
3016 <desc></desc>
3017 </param>
3018
3019 <param name="aVBoxValue" type="wstring" dir="in">
3020 <desc></desc>
3021 </param>
3022
3023 <param name="aExtraConfigValue" type="wstring" dir="in">
3024 <desc></desc>
3025 </param>
3026 </method>
3027 </interface>
3028
3029
3030 <!--
3031 // IMachine
3032 /////////////////////////////////////////////////////////////////////////
3033 -->
3034
3035 <interface
3036 name="IInternalMachineControl" extends="$unknown"
3037 uuid="ec824977-e43f-479c-81c9-ac6cae1423a5"
3038 internal="yes"
3039 wsmap="suppress"
3040 >
3041 <method name="setRemoveSavedStateFile">
3042 <desc>
3043 Updates the flag whether the saved state file is removed on a
3044 machine state change from Saved to PoweredOff.
3045 </desc>
3046 <param name="aRemove" type="boolean" dir="in"/>
3047 </method>
3048
3049 <method name="updateState">
3050 <desc>
3051 Updates the VM state.
3052 <note>
3053 This operation will also update the settings file with the correct
3054 information about the saved state file and delete this file from disk
3055 when appropriate.
3056 </note>
3057 </desc>
3058 <param name="state" type="MachineState" dir="in"/>
3059 </method>
3060
3061 <method name="getIPCId">
3062 <param name="id" type="wstring" dir="return"/>
3063 </method>
3064
3065 <method name="beginPowerUp">
3066 <desc>
3067 Tells VBoxSVC that <link to="IConsole::powerUp"/> is under ways and
3068 gives it the progress object that should be part of any pending
3069 <link to="IMachine::launchVMProcess"/> operations. The progress
3070 object may be called back to reflect an early cancelation, so some care
3071 have to be taken with respect to any cancelation callbacks. The console
3072 object will call <link to="IInternalMachineControl::endPowerUp"/>
3073 to signal the completion of the progress object.
3074 </desc>
3075 <param name="aProgress" type="IProgress" dir="in" />
3076 </method>
3077
3078 <method name="endPowerUp">
3079 <desc>
3080 Tells VBoxSVC that <link to="IConsole::powerUp"/> has completed.
3081 This method may query status information from the progress object it
3082 received in <link to="IInternalMachineControl::beginPowerUp"/> and copy
3083 it over to any in-progress <link to="IMachine::launchVMProcess"/>
3084 call in order to complete that progress object.
3085 </desc>
3086 <param name="result" type="long" dir="in"/>
3087 </method>
3088
3089 <method name="beginPoweringDown">
3090 <desc>
3091 Called by the VM process to inform the server it wants to
3092 stop the VM execution and power down.
3093 </desc>
3094 <param name="progress" type="IProgress" dir="out">
3095 <desc>
3096 Progress object created by VBoxSVC to wait until
3097 the VM is powered down.
3098 </desc>
3099 </param>
3100 </method>
3101
3102 <method name="endPoweringDown">
3103 <desc>
3104 Called by the VM process to inform the server that powering
3105 down previously requested by #beginPoweringDown is either
3106 successfully finished or there was a failure.
3107
3108 <result name="VBOX_E_FILE_ERROR">
3109 Settings file not accessible.
3110 </result>
3111 <result name="VBOX_E_XML_ERROR">
3112 Could not parse the settings file.
3113 </result>
3114
3115 </desc>
3116
3117 <param name="result" type="long" dir="in">
3118 <desc>@c S_OK to indicate success.
3119 </desc>
3120 </param>
3121 <param name="errMsg" type="wstring" dir="in">
3122 <desc>@c human readable error message in case of failure.
3123 </desc>
3124 </param>
3125 </method>
3126
3127 <method name="runUSBDeviceFilters">
3128 <desc>
3129 Asks the server to run USB devices filters of the associated
3130 machine against the given USB device and tell if there is
3131 a match.
3132 <note>
3133 Intended to be used only for remote USB devices. Local
3134 ones don't require to call this method (this is done
3135 implicitly by the Host and USBProxyService).
3136 </note>
3137 </desc>
3138 <param name="device" type="IUSBDevice" dir="in"/>
3139 <param name="matched" type="boolean" dir="out"/>
3140 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
3141 </method>
3142
3143 <method name="captureUSBDevice">
3144 <desc>
3145 Requests a capture of the given host USB device.
3146 When the request is completed, the VM process will
3147 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3148 notification.
3149 </desc>
3150 <param name="id" type="uuid" mod="string" dir="in"/>
3151 </method>
3152
3153 <method name="detachUSBDevice">
3154 <desc>
3155 Notification that a VM is going to detach (@a done = @c false) or has
3156 already detached (@a done = @c true) the given USB device.
3157 When the @a done = @c true request is completed, the VM process will
3158 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
3159 notification.
3160 <note>
3161 In the @a done = @c true case, the server must run its own filters
3162 and filters of all VMs but this one on the detached device
3163 as if it were just attached to the host computer.
3164 </note>
3165 </desc>
3166 <param name="id" type="uuid" mod="string" dir="in"/>
3167 <param name="done" type="boolean" dir="in"/>
3168 </method>
3169
3170 <method name="autoCaptureUSBDevices">
3171 <desc>
3172 Requests a capture all matching USB devices attached to the host.
3173 When the request is completed, the VM process will
3174 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
3175 notification per every captured device.
3176 </desc>
3177 </method>
3178
3179 <method name="detachAllUSBDevices">
3180 <desc>
3181 Notification that a VM that is being powered down. The done
3182 parameter indicates whether which stage of the power down
3183 we're at. When @a done = @c false the VM is announcing its
3184 intentions, while when @a done = @c true the VM is reporting
3185 what it has done.
3186 <note>
3187 In the @a done = @c true case, the server must run its own filters
3188 and filters of all VMs but this one on all detach devices as
3189 if they were just attached to the host computer.
3190 </note>
3191 </desc>
3192 <param name="done" type="boolean" dir="in"/>
3193 </method>
3194
3195 <method name="onSessionEnd">
3196 <desc>
3197 Triggered by the given session object when the session is about
3198 to close normally.
3199 </desc>
3200 <param name="session" type="ISession" dir="in">
3201 <desc>Session that is being closed</desc>
3202 </param>
3203 <param name="progress" type="IProgress" dir="return">
3204 <desc>
3205 Used to wait until the corresponding machine is actually
3206 dissociated from the given session on the server.
3207 Returned only when this session is a direct one.
3208 </desc>
3209 </param>
3210 </method>
3211
3212 <method name="beginSavingState">
3213 <desc>
3214 Called by the VM process to inform the server it wants to
3215 save the current state and stop the VM execution.
3216 </desc>
3217 <param name="progress" type="IProgress" dir="out">
3218 <desc>
3219 Progress object created by VBoxSVC to wait until
3220 the state is saved.
3221 </desc>
3222 </param>
3223 <param name="stateFilePath" type="wstring" dir="out">
3224 <desc>
3225 File path the VM process must save the execution state to.
3226 </desc>
3227 </param>
3228 </method>
3229
3230 <method name="endSavingState">
3231 <desc>
3232 Called by the VM process to inform the server that saving
3233 the state previously requested by #beginSavingState is either
3234 successfully finished or there was a failure.
3235
3236 <result name="VBOX_E_FILE_ERROR">
3237 Settings file not accessible.
3238 </result>
3239 <result name="VBOX_E_XML_ERROR">
3240 Could not parse the settings file.
3241 </result>
3242
3243 </desc>
3244
3245 <param name="result" type="long" dir="in">
3246 <desc>@c S_OK to indicate success.
3247 </desc>
3248 </param>
3249 <param name="errMsg" type="wstring" dir="in">
3250 <desc>@c human readable error message in case of failure.
3251 </desc>
3252 </param>
3253 </method>
3254
3255 <method name="adoptSavedState">
3256 <desc>
3257 Gets called by <link to="IConsole::adoptSavedState"/>.
3258 <result name="VBOX_E_FILE_ERROR">
3259 Invalid saved state file path.
3260 </result>
3261 </desc>
3262 <param name="savedStateFile" type="wstring" dir="in">
3263 <desc>Path to the saved state file to adopt.</desc>
3264 </param>
3265 </method>
3266
3267 <method name="beginTakingSnapshot">
3268 <desc>
3269 Called from the VM process to request from the server to perform the
3270 server-side actions of creating a snapshot (creating differencing images
3271 and the snapshot object).
3272
3273 <result name="VBOX_E_FILE_ERROR">
3274 Settings file not accessible.
3275 </result>
3276 <result name="VBOX_E_XML_ERROR">
3277 Could not parse the settings file.
3278 </result>
3279 </desc>
3280 <param name="initiator" type="IConsole" dir="in">
3281 <desc>The console object that initiated this call.</desc>
3282 </param>
3283 <param name="name" type="wstring" dir="in">
3284 <desc>Snapshot name.</desc>
3285 </param>
3286 <param name="description" type="wstring" dir="in">
3287 <desc>Snapshot description.</desc>
3288 </param>
3289 <param name="consoleProgress" type="IProgress" dir="in">
3290 <desc>
3291 Progress object created by the VM process tracking the
3292 snapshot's progress. This has the following sub-operations:
3293 <ul>
3294 <li>setting up (weight 1);</li>
3295 <li>one for each medium attachment that needs a differencing image (weight 1 each);</li>
3296 <li>another one to copy the VM state (if offline with saved state, weight is VM memory size in MB);</li>
3297 <li>another one to save the VM state (if online, weight is VM memory size in MB);</li>
3298 <li>finishing up (weight 1)</li>
3299 </ul>
3300 </desc>
3301 </param>
3302 <param name="fTakingSnapshotOnline" type="boolean" dir="in">
3303 <desc>
3304 Whether this is an online snapshot (i.e. the machine is running).
3305 </desc>
3306 </param>
3307 <param name="stateFilePath" type="wstring" dir="out">
3308 <desc>
3309 File path the VM process must save the execution state to.
3310 </desc>
3311 </param>
3312 </method>
3313
3314 <method name="endTakingSnapshot">
3315 <desc>
3316 Called by the VM process to inform the server that the snapshot
3317 previously requested by #beginTakingSnapshot is either
3318 successfully taken or there was a failure.
3319 </desc>
3320
3321 <param name="success" type="boolean" dir="in">
3322 <desc>@c true to indicate success and @c false otherwise</desc>
3323 </param>
3324 </method>
3325
3326 <method name="deleteSnapshot">
3327 <desc>
3328 Gets called by <link to="IConsole::deleteSnapshot"/>,
3329 <link to="IConsole::deleteSnapshotAndAllChildren"/> and
3330 <link to="IConsole::deleteSnapshotRange"/>.
3331 <result name="VBOX_E_INVALID_OBJECT_STATE">
3332 Snapshot has more than one child snapshot. Only possible if the
3333 delete operation does not delete all children or the range does
3334 not meet the linearity condition.
3335 </result>
3336 </desc>
3337 <param name="initiator" type="IConsole" dir="in">
3338 <desc>The console object that initiated this call.</desc>
3339 </param>
3340 <param name="startId" type="uuid" mod="string" dir="in">
3341 <desc>UUID of the first snapshot to delete.</desc>
3342 </param>
3343 <param name="endId" type="uuid" mod="string" dir="in">
3344 <desc>UUID of the last snapshot to delete.</desc>
3345 </param>
3346 <param name="deleteAllChildren" type="boolean" dir="in">
3347 <desc>Whether all children should be deleted.</desc>
3348 </param>
3349 <param name="machineState" type="MachineState" dir="out">
3350 <desc>New machine state after this operation is started.</desc>
3351 </param>
3352 <param name="progress" type="IProgress" dir="return">
3353 <desc>Progress object to track the operation completion.</desc>
3354 </param>
3355 </method>
3356
3357 <method name="finishOnlineMergeMedium">
3358 <desc>
3359 Gets called by <link to="IInternalSessionControl::onlineMergeMedium"/>.
3360 </desc>
3361 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
3362 <desc>The medium attachment which needs to be cleaned up.</desc>
3363 </param>
3364 <param name="source" type="IMedium" dir="in">
3365 <desc>Merge source medium.</desc>
3366 </param>
3367 <param name="target" type="IMedium" dir="in">
3368 <desc>Merge target medium.</desc>
3369 </param>
3370 <param name="mergeForward" type="boolean" dir="in">
3371 <desc>Merge direction.</desc>
3372 </param>
3373 <param name="parentForTarget" type="IMedium" dir="in">
3374 <desc>For forward merges: new parent for target medium.</desc>
3375 </param>
3376 <param name="childrenToReparent" type="IMedium" safearray="yes" dir="in">
3377 <desc>For backward merges: list of media which need their parent UUID
3378 updated.</desc>
3379 </param>
3380 </method>
3381
3382 <method name="restoreSnapshot">
3383 <desc>
3384 Gets called by <link to="IConsole::restoreSnapshot"/>.
3385 </desc>
3386 <param name="initiator" type="IConsole" dir="in">
3387 <desc>The console object that initiated this call.</desc>
3388 </param>
3389 <param name="snapshot" type="ISnapshot" dir="in">
3390 <desc>The snapshot to restore the VM state from.</desc>
3391 </param>
3392 <param name="machineState" type="MachineState" dir="out">
3393 <desc>New machine state after this operation is started.</desc>
3394 </param>
3395 <param name="progress" type="IProgress" dir="return">
3396 <desc>Progress object to track the operation completion.</desc>
3397 </param>
3398 </method>
3399
3400 <method name="pullGuestProperties">
3401 <desc>
3402 Get the list of the guest properties matching a set of patterns along
3403 with their values, time stamps and flags and give responsibility for
3404 managing properties to the console.
3405 </desc>
3406 <param name="name" type="wstring" dir="out" safearray="yes">
3407 <desc>
3408 The names of the properties returned.
3409 </desc>
3410 </param>
3411 <param name="value" type="wstring" dir="out" safearray="yes">
3412 <desc>
3413 The values of the properties returned. The array entries match the
3414 corresponding entries in the @a name array.
3415 </desc>
3416 </param>
3417 <param name="timestamp" type="long long" dir="out" safearray="yes">
3418 <desc>
3419 The time stamps of the properties returned. The array entries match
3420 the corresponding entries in the @a name array.
3421 </desc>
3422 </param>
3423 <param name="flags" type="wstring" dir="out" safearray="yes">
3424 <desc>
3425 The flags of the properties returned. The array entries match the
3426 corresponding entries in the @a name array.
3427 </desc>
3428 </param>
3429 </method>
3430
3431 <method name="pushGuestProperty">
3432 <desc>
3433 Update a single guest property in IMachine.
3434 </desc>
3435 <param name="name" type="wstring" dir="in">
3436 <desc>
3437 The name of the property to be updated.
3438 </desc>
3439 </param>
3440 <param name="value" type="wstring" dir="in">
3441 <desc>
3442 The value of the property.
3443 </desc>
3444 </param>
3445 <param name="timestamp" type="long long" dir="in">
3446 <desc>
3447 The timestamp of the property.
3448 </desc>
3449 </param>
3450 <param name="flags" type="wstring" dir="in">
3451 <desc>
3452 The flags of the property.
3453 </desc>
3454 </param>
3455 </method>
3456
3457 <method name="lockMedia">
3458 <desc>
3459 Locks all media attached to the machine for writing and parents of
3460 attached differencing media (if any) for reading. This operation is
3461 atomic so that if it fails no media is actually locked.
3462
3463 This method is intended to be called when the machine is in Starting or
3464 Restoring state. The locked media will be automatically unlocked when
3465 the machine is powered off or crashed.
3466 </desc>
3467 </method>
3468 <method name="unlockMedia">
3469 <desc>
3470 Unlocks all media previously locked using
3471 <link to="IInternalMachineControl::lockMedia"/>.
3472
3473 This method is intended to be used with teleportation so that it is
3474 possible to teleport between processes on the same machine.
3475 </desc>
3476 </method>
3477
3478 <method name="ejectMedium">
3479 <desc>
3480 Tells VBoxSVC that the guest has ejected the medium associated with
3481 the medium attachment.
3482 </desc>
3483 <param name="attachment" type="IMediumAttachment" dir="in">
3484 <desc>
3485 The medium attachment where the eject happened.
3486 </desc>
3487 </param>
3488 <param name="newAttachment" type="IMediumAttachment" dir="return">
3489 <desc>
3490 A new reference to the medium attachment, as the config change can
3491 result in the creation of a new instance.
3492 </desc>
3493 </param>
3494 </method>
3495
3496 <method name="reportGuestStatistics">
3497 <desc>
3498 Passes collected guest statistics to VBoxSVC.
3499 </desc>
3500 <param name="validStats" type="unsigned long" dir="in">
3501 <desc>
3502 Mask defining which parameters are valid. For example: 0x11 means
3503 that cpuIdle and XXX are valid. Other parameters should be ignored.
3504 </desc>
3505 </param>
3506 <param name="cpuUser" type="unsigned long" dir="in">
3507 <desc>Percentage of processor time spent in user mode as seen by the guest.</desc>
3508 </param>
3509 <param name="cpuKernel" type="unsigned long" dir="in">
3510 <desc>Percentage of processor time spent in kernel mode as seen by the guest.</desc>
3511 </param>
3512 <param name="cpuIdle" type="unsigned long" dir="in">
3513 <desc>Percentage of processor time spent idling as seen by the guest.</desc>
3514 </param>
3515 <param name="memTotal" type="unsigned long" dir="in">
3516 <desc>Total amount of physical guest RAM.</desc>
3517 </param>
3518 <param name="memFree" type="unsigned long" dir="in">
3519 <desc>Free amount of physical guest RAM.</desc>
3520 </param>
3521 <param name="memBalloon" type="unsigned long" dir="in">
3522 <desc>Amount of ballooned physical guest RAM.</desc>
3523 </param>
3524 <param name="memShared" type="unsigned long" dir="in">
3525 <desc>Amount of shared physical guest RAM.</desc>
3526 </param>
3527 <param name="memCache" type="unsigned long" dir="in">
3528 <desc>Total amount of guest (disk) cache memory.</desc>
3529 </param>
3530 <param name="pagedTotal" type="unsigned long" dir="in">
3531 <desc>Total amount of space in the page file.</desc>
3532 </param>
3533 <param name="memAllocTotal" type="unsigned long" dir="in">
3534 <desc>Total amount of memory allocated by the hypervisor.</desc>
3535 </param>
3536 <param name="memFreeTotal" type="unsigned long" dir="in">
3537 <desc>Total amount of free memory available in the hypervisor.</desc>
3538 </param>
3539 <param name="memBalloonTotal" type="unsigned long" dir="in">
3540 <desc>Total amount of memory ballooned by the hypervisor.</desc>
3541 </param>
3542 <param name="memSharedTotal" type="unsigned long" dir="in">
3543 <desc>Total amount of shared memory in the hypervisor.</desc>
3544 </param>
3545 </method>
3546 </interface>
3547
3548 <interface
3549 name="IBIOSSettings" extends="$unknown"
3550 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
3551 wsmap="managed"
3552 >
3553 <desc>
3554 The IBIOSSettings interface represents BIOS settings of the virtual
3555 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
3556 </desc>
3557 <attribute name="logoFadeIn" type="boolean">
3558 <desc>Fade in flag for BIOS logo animation.</desc>
3559 </attribute>
3560
3561 <attribute name="logoFadeOut" type="boolean">
3562 <desc>Fade out flag for BIOS logo animation.</desc>
3563 </attribute>
3564
3565 <attribute name="logoDisplayTime" type="unsigned long">
3566 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
3567 </attribute>
3568
3569 <attribute name="logoImagePath" type="wstring">
3570 <desc>
3571 Local file system path for external BIOS splash image. Empty string
3572 means the default image is shown on boot.
3573 </desc>
3574 </attribute>
3575
3576 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
3577 <desc>Mode of the BIOS boot device menu.</desc>
3578 </attribute>
3579
3580 <attribute name="ACPIEnabled" type="boolean">
3581 <desc>ACPI support flag.</desc>
3582 </attribute>
3583
3584 <attribute name="IOAPICEnabled" type="boolean">
3585 <desc>
3586 IO APIC support flag. If set, VirtualBox will provide an IO APIC
3587 and support IRQs above 15.
3588 </desc>
3589 </attribute>
3590
3591 <attribute name="timeOffset" type="long long">
3592 <desc>
3593 Offset in milliseconds from the host system time. This allows for
3594 guests running with a different system date/time than the host.
3595 It is equivalent to setting the system date/time in the BIOS except
3596 it is not an absolute value but a relative one. Guest Additions
3597 time synchronization honors this offset.
3598 </desc>
3599 </attribute>
3600
3601 <attribute name="PXEDebugEnabled" type="boolean">
3602 <desc>
3603 PXE debug logging flag. If set, VirtualBox will write extensive
3604 PXE trace information to the release log.
3605 </desc>
3606 </attribute>
3607 </interface>
3608
3609 <enum
3610 name="CleanupMode"
3611 uuid="67897c50-7cca-47a9-83f6-ce8fd8eb5441"
3612 >
3613 <desc>Cleanup mode, used with <link to="IMachine::unregister" />.
3614 </desc>
3615 <const name="UnregisterOnly" value="1">
3616 <desc>Unregister only the machine, but neither delete snapshots nor detach media.</desc>
3617 </const>
3618 <const name="DetachAllReturnNone" value="2">
3619 <desc>Delete all snapshots and detach all media but return none; this will keep all media registered.</desc>
3620 </const>
3621 <const name="DetachAllReturnHardDisksOnly" value="3">
3622 <desc>Delete all snapshots, detach all media and return hard disks for closing, but not removable media.</desc>
3623 </const>
3624 <const name="Full" value="4">
3625 <desc>Delete all snapshots, detach all media and return all media for closing.</desc>
3626 </const>
3627 </enum>
3628
3629 <interface
3630 name="IPCIAddress" extends="$unknown"
3631 uuid="D88B324F-DB19-4D3B-A1A9-BF5B127199A8"
3632 wsmap="struct"
3633 >
3634
3635 <desc>
3636 Address on the PCI bus.
3637 </desc>
3638
3639 <attribute name="bus" type="short">
3640 <desc>
3641 Bus number.
3642 </desc>
3643 </attribute>
3644
3645 <attribute name="device" type="short">
3646 <desc>
3647 Device number.
3648 </desc>
3649 </attribute>
3650
3651 <attribute name="devFunction" type="short">
3652 <desc>
3653 Device function number.
3654 </desc>
3655 </attribute>
3656
3657 <method name="asLong">
3658 <desc>
3659 Convert PCI address into long.
3660 </desc>
3661 <param name="result" type="long" dir="return" />
3662 </method>
3663
3664 <method name="fromLong">
3665 <desc>
3666 Make PCI address from long.
3667 </desc>
3668 <param name="number" type="long" dir="in" />
3669 </method>
3670 </interface>
3671
3672 <interface
3673 name="IPCIDeviceAttachment" extends="$unknown"
3674 uuid="91f33d6f-e621-4f70-a77e-15f0e3c714d5"
3675 wsmap="struct"
3676 >
3677
3678 <desc>
3679 Information about PCI attachments.
3680 </desc>
3681
3682 <attribute name="name" type="wstring" readonly="yes">
3683 <desc>
3684 Device name.
3685 </desc>
3686 </attribute>
3687
3688 <attribute name="isPhysicalDevice" type="boolean" readonly="yes">
3689 <desc>
3690 If this is physical or virtual device.
3691 </desc>
3692 </attribute>
3693
3694 <attribute name="hostAddress" type="long" readonly="yes">
3695 <desc>
3696 Address of device on the host, applicable only to host devices.
3697 </desc>
3698 </attribute>
3699
3700 <attribute name="guestAddress" type="long" readonly="yes">
3701 <desc>
3702 Address of device on the guest.
3703 </desc>
3704 </attribute>
3705
3706 </interface>
3707
3708 <enum
3709 name="CloneMode" extends="$unknown"
3710 uuid="A7A159FE-5096-4B8D-8C3C-D033CB0B35A8"
3711 >
3712
3713 <desc>
3714 Clone mode, used with <link to="IMachine::cloneTo" />.
3715 </desc>
3716
3717 <const name="MachineState" value="1">
3718 <desc>Clone the state of the selected machine.</desc>
3719 </const>
3720 <const name="MachineAndChildStates" value="2">
3721 <desc>Clone the state of the selected machine and its child snapshots if present.</desc>
3722 </const>
3723 <const name="AllStates" value="3">
3724 <desc>Clone all states (including all snapshots) of the machine, regardless of the machine object used.</desc>
3725 </const>
3726
3727 </enum>
3728
3729 <enum
3730 name="CloneOptions" extends="$unknown"
3731 uuid="22243f8e-96ab-497c-8cf0-f40a566c630b"
3732 >
3733
3734 <desc>
3735 Clone options, used with <link to="IMachine::cloneTo" />.
3736 </desc>
3737
3738 <const name="Link" value="1">
3739 <desc>Create a clone VM where all virtual disks are linked to the original VM.</desc>
3740 </const>
3741 <const name="KeepAllMACs" value="2">
3742 <desc>Don't generate new MAC addresses of the attached network adapters.</desc>
3743 </const>
3744 <const name="KeepNATMACs" value="3">
3745 <desc>Don't generate new MAC addresses of the attached network adapters when they are using NAT.</desc>
3746 </const>
3747 <const name="KeepDiskNames" value="4">
3748 <desc>Don't change the disk names.</desc>
3749 </const>
3750
3751 </enum>
3752
3753 <enum
3754 name="AutostopType" extends="$unknown"
3755 uuid="6bb96740-cf34-470d-aab2-2cd48ea2e10e"
3756 >
3757
3758 <desc>
3759 Autostop types, used with <link to="IMachine::autostopType" />.
3760 </desc>
3761
3762 <const name="Disabled" value="1">
3763 <desc>Stopping the VM during system shutdown is disabled.</desc>
3764 </const>
3765 <const name="SaveState" value="2">
3766 <desc>The state of the VM will be saved when the system shuts down.</desc>
3767 </const>
3768 <const name="PowerOff" value="3">
3769 <desc>The VM is powered off when the system shuts down.</desc>
3770 </const>
3771 <const name="AcpiShutdown" value="4">
3772 <desc>An ACPI shutdown event is generated.</desc>
3773 </const>
3774
3775 </enum>
3776
3777
3778 <interface
3779 name="IMachine" extends="$unknown"
3780 uuid="22781af3-1c96-4126-9edf-67a020e0e858"
3781 wsmap="managed"
3782 >
3783 <desc>
3784 The IMachine interface represents a virtual machine, or guest, created
3785 in VirtualBox.
3786
3787 This interface is used in two contexts. First of all, a collection of
3788 objects implementing this interface is stored in the
3789 <link to="IVirtualBox::machines"/> attribute which lists all the virtual
3790 machines that are currently registered with this VirtualBox
3791 installation. Also, once a session has been opened for the given virtual
3792 machine (e.g. the virtual machine is running), the machine object
3793 associated with the open session can be queried from the session object;
3794 see <link to="ISession"/> for details.
3795
3796 The main role of this interface is to expose the settings of the virtual
3797 machine and provide methods to change various aspects of the virtual
3798 machine's configuration. For machine objects stored in the
3799 <link to="IVirtualBox::machines"/> collection, all attributes are
3800 read-only unless explicitly stated otherwise in individual attribute
3801 and method descriptions.
3802
3803 In order to change a machine setting, a session for this machine must be
3804 opened using one of the <link to="IMachine::lockMachine" /> or
3805 <link to="IMachine::launchVMProcess"/> methods. After the
3806 machine has been successfully locked for a session, a mutable machine object
3807 needs to be queried from the session object and then the desired settings
3808 changes can be applied to the returned object using IMachine attributes and
3809 methods. See the <link to="ISession"/> interface description for more
3810 information about sessions.
3811
3812 Note that IMachine does not provide methods to control virtual machine
3813 execution (such as start the machine, or power it down) -- these methods
3814 are grouped in a separate interface called <link to="IConsole" />.
3815
3816 <see><link to="ISession"/>, <link to="IConsole"/></see>
3817 </desc>
3818
3819 <attribute name="parent" type="IVirtualBox" readonly="yes">
3820 <desc>Associated parent object.</desc>
3821 </attribute>
3822
3823 <attribute name="accessible" type="boolean" readonly="yes">
3824 <desc>
3825 Whether this virtual machine is currently accessible or not.
3826
3827 A machine is always deemed accessible unless it is registered <i>and</i>
3828 its settings file cannot be read or parsed (either because the file itself
3829 is unavailable or has invalid XML contents).
3830
3831 Every time this property is read, the accessibility state of
3832 this machine is re-evaluated. If the returned value is @c false,
3833 the <link to="#accessError"/> property may be used to get the
3834 detailed error information describing the reason of
3835 inaccessibility, including XML error messages.
3836
3837 When the machine is inaccessible, only the following properties
3838 can be used on it:
3839 <ul>
3840 <li><link to="#parent"/></li>
3841 <li><link to="#id"/></li>
3842 <li><link to="#settingsFilePath"/></li>
3843 <li><link to="#accessible"/></li>
3844 <li><link to="#accessError"/></li>
3845 </ul>
3846
3847 An attempt to access any other property or method will return
3848 an error.
3849
3850 The only possible action you can perform on an inaccessible
3851 machine is to unregister it using the
3852 <link to="IMachine::unregister"/> call (or, to check
3853 for the accessibility state once more by querying this
3854 property).
3855
3856 <note>
3857 In the current implementation, once this property returns
3858 @c true, the machine will never become inaccessible
3859 later, even if its settings file cannot be successfully
3860 read/written any more (at least, until the VirtualBox
3861 server is restarted). This limitation may be removed in
3862 future releases.
3863 </note>
3864 </desc>
3865 </attribute>
3866
3867 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
3868 <desc>
3869 Error information describing the reason of machine
3870 inaccessibility.
3871
3872 Reading this property is only valid after the last call to
3873 <link to="#accessible"/> returned @c false (i.e. the
3874 machine is currently inaccessible). Otherwise, a @c null
3875 IVirtualBoxErrorInfo object will be returned.
3876 </desc>
3877 </attribute>
3878
3879 <attribute name="name" type="wstring">
3880 <desc>
3881 Name of the virtual machine.
3882
3883 Besides being used for human-readable identification purposes
3884 everywhere in VirtualBox, the virtual machine name is also used
3885 as a name of the machine's settings file and as a name of the
3886 subdirectory this settings file resides in. Thus, every time you
3887 change the value of this property, the settings file will be
3888 renamed once you call <link to="#saveSettings"/> to confirm the
3889 change. The containing subdirectory will be also renamed, but
3890 only if it has exactly the same name as the settings file
3891 itself prior to changing this property (for backward compatibility
3892 with previous API releases). The above implies the following
3893 limitations:
3894 <ul>
3895 <li>The machine name cannot be empty.</li>
3896 <li>The machine name can contain only characters that are valid
3897 file name characters according to the rules of the file
3898 system used to store VirtualBox configuration.</li>
3899 <li>You cannot have two or more machines with the same name
3900 if they use the same subdirectory for storing the machine
3901 settings files.</li>
3902 <li>You cannot change the name of the machine if it is running,
3903 or if any file in the directory containing the settings file
3904 is being used by another running machine or by any other
3905 process in the host operating system at a time when
3906 <link to="#saveSettings"/> is called.
3907 </li>
3908 </ul>
3909 If any of the above limitations are hit, <link to="#saveSettings"/>
3910 will return an appropriate error message explaining the exact
3911 reason and the changes you made to this machine will not be saved.
3912
3913 Starting with VirtualBox 4.0, a ".vbox" extension of the settings
3914 file is recommended, but not enforced. (Previous versions always
3915 used a generic ".xml" extension.)
3916 </desc>
3917 </attribute>
3918
3919 <attribute name="description" type="wstring">
3920 <desc>
3921 Description of the virtual machine.
3922
3923 The description attribute can contain any text and is
3924 typically used to describe the hardware and software
3925 configuration of the virtual machine in detail (i.e. network
3926 settings, versions of the installed software and so on).
3927 </desc>
3928 </attribute>
3929
3930 <attribute name="id" type="uuid" mod="string" readonly="yes">
3931 <desc>UUID of the virtual machine.</desc>
3932 </attribute>
3933
3934 <attribute name="groups" type="wstring" safearray="yes">
3935 <desc>
3936 Array of machine group names of which this machine is a member.
3937 <tt>""</tt> and <tt>"/"</tt> are synonyms for the toplevel group. Each
3938 group is only listed once, however they are listed in no particular
3939 order and there is no guarantee that there are no gaps in the group
3940 hierarchy (i.e. <tt>"/group"</tt>,
3941 <tt>"/group/subgroup/subsubgroup"</tt> is a valid result).
3942 </desc>
3943 </attribute>
3944
3945 <attribute name="OSTypeId" type="wstring">
3946 <desc>
3947 User-defined identifier of the Guest OS type.
3948 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
3949 an IGuestOSType object representing details about the given
3950 Guest OS type.
3951 <note>
3952 This value may differ from the value returned by
3953 <link to="IGuest::OSTypeId"/> if Guest Additions are
3954 installed to the guest OS.
3955 </note>
3956 </desc>
3957 </attribute>
3958
3959 <attribute name="hardwareVersion" type="wstring">
3960 <desc>Hardware version identifier. Internal use only for now.</desc>
3961 </attribute>
3962
3963 <attribute name="hardwareUUID" type="uuid" mod="string">
3964 <desc>
3965 The UUID presented to the guest via memory tables, hardware and guest
3966 properties. For most VMs this is the same as the @a id, but for VMs
3967 which have been cloned or teleported it may be the same as the source
3968 VM. The latter is because the guest shouldn't notice that it was
3969 cloned or teleported.
3970 </desc>
3971 </attribute>
3972
3973 <attribute name="CPUCount" type="unsigned long">
3974 <desc>Number of virtual CPUs in the VM.</desc>
3975 </attribute>
3976
3977 <attribute name="CPUHotPlugEnabled" type="boolean">
3978 <desc>
3979 This setting determines whether VirtualBox allows CPU
3980 hotplugging for this machine.</desc>
3981 </attribute>
3982
3983 <attribute name="CPUExecutionCap" type="unsigned long">
3984 <desc>
3985 Means to limit the number of CPU cycles a guest can use. The unit
3986 is percentage of host CPU cycles per second. The valid range
3987 is 1 - 100. 100 (the default) implies no limit.
3988 </desc>
3989 </attribute>
3990
3991 <attribute name="memorySize" type="unsigned long">
3992 <desc>System memory size in megabytes.</desc>
3993 </attribute>
3994
3995 <attribute name="memoryBalloonSize" type="unsigned long">
3996 <desc>Memory balloon size in megabytes.</desc>
3997 </attribute>
3998
3999 <attribute name="pageFusionEnabled" type="boolean">
4000 <desc>
4001 This setting determines whether VirtualBox allows page
4002 fusion for this machine (64 bits host only).
4003 </desc>
4004 </attribute>
4005
4006 <attribute name="VRAMSize" type="unsigned long">
4007 <desc>Video memory size in megabytes.</desc>
4008 </attribute>
4009
4010 <attribute name="accelerate3DEnabled" type="boolean" default="false">
4011 <desc>
4012 This setting determines whether VirtualBox allows this machine to make
4013 use of the 3D graphics support available on the host.</desc>
4014 </attribute>
4015
4016 <attribute name="accelerate2DVideoEnabled" type="boolean" default="false">
4017 <desc>
4018 This setting determines whether VirtualBox allows this machine to make
4019 use of the 2D video acceleration support available on the host.</desc>
4020 </attribute>
4021
4022 <attribute name="monitorCount" type="unsigned long">
4023 <desc>
4024 Number of virtual monitors.
4025 <note>
4026 Only effective on Windows XP and later guests with
4027 Guest Additions installed.
4028 </note>
4029 </desc>
4030 </attribute>
4031
4032 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
4033 <desc>Object containing all BIOS settings.</desc>
4034 </attribute>
4035
4036 <attribute name="firmwareType" type="FirmwareType">
4037 <desc>Type of firmware (such as legacy BIOS or EFI), used for initial
4038 bootstrap in this VM.</desc>
4039 </attribute>
4040
4041 <attribute name="pointingHIDType" type="PointingHIDType">
4042 <desc>Type of pointing HID (such as mouse or tablet) used in this VM.
4043 The default is typically "PS2Mouse" but can vary depending on the
4044 requirements of the guest operating system.</desc>
4045 </attribute>
4046
4047 <attribute name="keyboardHIDType" type="KeyboardHIDType">
4048 <desc>Type of keyboard HID used in this VM.
4049 The default is typically "PS2Keyboard" but can vary depending on the
4050 requirements of the guest operating system.</desc>
4051 </attribute>
4052
4053 <attribute name="HPETEnabled" type="boolean">
4054 <desc>This attribute controls if High Precision Event Timer (HPET) is
4055 enabled in this VM. Use this property if you want to provide guests
4056 with additional time source, or if guest requires HPET to function correctly.
4057 Default is false.</desc>
4058 </attribute>
4059
4060 <attribute name="chipsetType" type="ChipsetType">
4061 <desc>Chipset type used in this VM.</desc>
4062 </attribute>
4063
4064 <attribute name="snapshotFolder" type="wstring">
4065 <desc>
4066 Full path to the directory used to store snapshot data
4067 (differencing media and saved state files) of this machine.
4068
4069 The initial value of this property is
4070 <tt>&lt;</tt><link to="#settingsFilePath">
4071 path_to_settings_file</link><tt>&gt;/&lt;</tt>
4072 <link to="#id">machine_uuid</link>
4073 <tt>&gt;</tt>.
4074
4075 Currently, it is an error to try to change this property on
4076 a machine that has snapshots (because this would require to
4077 move possibly large files to a different location).
4078 A separate method will be available for this purpose later.
4079
4080 <note>
4081 Setting this property to @c null or to an empty string will restore
4082 the initial value.
4083 </note>
4084 <note>
4085 When setting this property, the specified path can be
4086 absolute (full path) or relative to the directory where the
4087 <link to="#settingsFilePath">machine settings file</link>
4088 is located. When reading this property, a full path is
4089 always returned.
4090 </note>
4091 <note>
4092 The specified path may not exist, it will be created
4093 when necessary.
4094 </note>
4095 </desc>
4096 </attribute>
4097
4098 <attribute name="VRDEServer" type="IVRDEServer" readonly="yes">
4099 <desc>VirtualBox Remote Desktop Extension (VRDE) server object.</desc>
4100 </attribute>
4101
4102 <attribute name="emulatedUSBWebcameraEnabled" type="boolean" default="false"/>
4103 <attribute name="emulatedUSBCardReaderEnabled" type="boolean" default="false"/>
4104
4105 <attribute name="mediumAttachments" type="IMediumAttachment" readonly="yes" safearray="yes">
4106 <desc>Array of media attached to this machine.</desc>
4107 </attribute>
4108
4109 <attribute name="USBController" type="IUSBController" readonly="yes">
4110 <desc>
4111 Associated USB controller object.
4112
4113 <note>
4114 If USB functionality is not available in the given edition of
4115 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4116 </note>
4117 </desc>
4118 </attribute>
4119
4120 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
4121 <desc>Associated audio adapter, always present.</desc>
4122 </attribute>
4123
4124 <attribute name="storageControllers" type="IStorageController" readonly="yes" safearray="yes">
4125 <desc>Array of storage controllers attached to this machine.</desc>
4126 </attribute>
4127
4128 <attribute name="settingsFilePath" type="wstring" readonly="yes">
4129 <desc>
4130 Full name of the file containing machine settings data.
4131 </desc>
4132 </attribute>
4133
4134 <attribute name="settingsModified" type="boolean" readonly="yes">
4135 <desc>
4136 Whether the settings of this machine have been modified
4137 (but neither yet saved nor discarded).
4138 <note>
4139 Reading this property is only valid on instances returned
4140 by <link to="ISession::machine"/> and on new machines
4141 created by <link to="IVirtualBox::createMachine"/> or opened
4142 by <link to="IVirtualBox::openMachine"/> but not
4143 yet registered, or on unregistered machines after calling
4144 <link to="IMachine::unregister"/>. For all other
4145 cases, the settings can never be modified.
4146 </note>
4147 <note>
4148 For newly created unregistered machines, the value of this
4149 property is always @c true until <link to="#saveSettings"/>
4150 is called (no matter if any machine settings have been
4151 changed after the creation or not). For opened machines
4152 the value is set to @c false (and then follows to normal rules).
4153 </note>
4154 </desc>
4155 </attribute>
4156
4157 <attribute name="sessionState" type="SessionState" readonly="yes">
4158 <desc>Current session state for this machine.</desc>
4159 </attribute>
4160
4161 <attribute name="sessionType" type="wstring" readonly="yes">
4162 <desc>
4163 Type of the session. If <link to="#sessionState"/> is
4164 Spawning or Locked, this attribute contains the
4165 same value as passed to the
4166 <link to="IMachine::launchVMProcess"/> method in the
4167 @a type parameter. If the session was used with
4168 <link to="IMachine::lockMachine" />, or if
4169 <link to="#sessionState"/> is SessionClosed, the value of this
4170 attribute is an empty string.
4171 </desc>
4172 </attribute>
4173
4174 <attribute name="sessionPID" type="unsigned long" readonly="yes">
4175 <desc>
4176 Identifier of the session process. This attribute contains the
4177 platform-dependent identifier of the process whose session was
4178 used with <link to="IMachine::lockMachine" /> call. The returned
4179 value is only valid if <link to="#sessionState"/> is Locked or
4180 Unlocking by the time this property is read.
4181 </desc>
4182 </attribute>
4183
4184 <attribute name="state" type="MachineState" readonly="yes">
4185 <desc>Current execution state of this machine.</desc>
4186 </attribute>
4187
4188 <attribute name="lastStateChange" type="long long" readonly="yes">
4189 <desc>
4190 Time stamp of the last execution state change,
4191 in milliseconds since 1970-01-01 UTC.
4192 </desc>
4193 </attribute>
4194
4195 <attribute name="stateFilePath" type="wstring" readonly="yes">
4196 <desc>
4197 Full path to the file that stores the execution state of
4198 the machine when it is in the <link to="MachineState_Saved"/> state.
4199 <note>
4200 When the machine is not in the Saved state, this attribute is
4201 an empty string.
4202 </note>
4203 </desc>
4204 </attribute>
4205
4206 <attribute name="logFolder" type="wstring" readonly="yes">
4207 <desc>
4208 Full path to the folder that stores a set of rotated log files
4209 recorded during machine execution. The most recent log file is
4210 named <tt>VBox.log</tt>, the previous log file is
4211 named <tt>VBox.log.1</tt> and so on (up to <tt>VBox.log.3</tt>
4212 in the current version).
4213 </desc>
4214 </attribute>
4215
4216 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
4217 <desc>
4218 Current snapshot of this machine. This is @c null if the machine
4219 currently has no snapshots. If it is not @c null, then it was
4220 set by one of <link to="IConsole::takeSnapshot" />,
4221 <link to="IConsole::deleteSnapshot" />
4222 or <link to="IConsole::restoreSnapshot" />, depending on which
4223 was called last. See <link to="ISnapshot"/> for details.
4224 </desc>
4225 </attribute>
4226
4227 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
4228 <desc>
4229 Number of snapshots taken on this machine. Zero means the
4230 machine doesn't have any snapshots.
4231 </desc>
4232 </attribute>
4233
4234 <attribute name="currentStateModified" type="boolean" readonly="yes">
4235 <desc>
4236 Returns @c true if the current state of the machine is not
4237 identical to the state stored in the current snapshot.
4238
4239 The current state is identical to the current snapshot only
4240 directly after one of the following calls are made:
4241
4242 <ul>
4243 <li><link to="IConsole::restoreSnapshot"/>
4244 </li>
4245 <li><link to="IConsole::takeSnapshot"/> (issued on a
4246 "powered off" or "saved" machine, for which
4247 <link to="#settingsModified"/> returns @c false)
4248 </li>
4249 </ul>
4250
4251 The current state remains identical until one of the following
4252 happens:
4253 <ul>
4254 <li>settings of the machine are changed</li>
4255 <li>the saved state is deleted</li>
4256 <li>the current snapshot is deleted</li>
4257 <li>an attempt to execute the machine is made</li>
4258 </ul>
4259
4260 <note>
4261 For machines that don't have snapshots, this property is
4262 always @c false.
4263 </note>
4264 </desc>
4265 </attribute>
4266
4267 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
4268 <desc>
4269 Collection of shared folders for this machine (permanent shared
4270 folders). These folders are shared automatically at machine startup
4271 and available only to the guest OS installed within this machine.
4272
4273 New shared folders are added to the collection using
4274 <link to="#createSharedFolder"/>. Existing shared folders can be
4275 removed using <link to="#removeSharedFolder"/>.
4276 </desc>
4277 </attribute>
4278
4279 <attribute name="clipboardMode" type="ClipboardMode">
4280 <desc>
4281 Synchronization mode between the host OS clipboard
4282 and the guest OS clipboard.
4283 </desc>
4284 </attribute>
4285
4286 <attribute name="dragAndDropMode" type="DragAndDropMode">
4287 <desc>
4288 Which mode is allowed for drag'n'drop.
4289 </desc>
4290 </attribute>
4291
4292 <attribute name="guestPropertyNotificationPatterns" type="wstring">
4293 <desc>
4294 A comma-separated list of simple glob patterns. Changes to guest
4295 properties whose name matches one of the patterns will generate an
4296 <link to="IGuestPropertyChangedEvent"/> signal.
4297 </desc>
4298 </attribute>
4299
4300 <attribute name="teleporterEnabled" type="boolean">
4301 <desc>
4302 When set to @a true, the virtual machine becomes a target teleporter
4303 the next time it is powered on. This can only set to @a true when the
4304 VM is in the @a PoweredOff or @a Aborted state.
4305
4306 <!-- This property is automatically set to @a false when the VM is powered
4307 on. (bird: This doesn't work yet ) -->
4308 </desc>
4309 </attribute>
4310
4311 <attribute name="teleporterPort" type="unsigned long">
4312 <desc>
4313 The TCP port the target teleporter will listen for incoming
4314 teleportations on.
4315
4316 0 means the port is automatically selected upon power on. The actual
4317 value can be read from this property while the machine is waiting for
4318 incoming teleportations.
4319 </desc>
4320 </attribute>
4321
4322 <attribute name="teleporterAddress" type="wstring">
4323 <desc>
4324 The address the target teleporter will listen on. If set to an empty
4325 string, it will listen on all addresses.
4326 </desc>
4327 </attribute>
4328
4329 <attribute name="teleporterPassword" type="wstring">
4330 <desc>
4331 The password to check for on the target teleporter. This is just a
4332 very basic measure to prevent simple hacks and operators accidentally
4333 beaming a virtual machine to the wrong place.
4334
4335 Note that you SET a plain text password while reading back a HASHED
4336 password. Setting a hashed password is currently not supported.
4337 </desc>
4338 </attribute>
4339
4340 <attribute name="faultToleranceState" type="FaultToleranceState">
4341 <desc>
4342 Fault tolerance state; disabled, source or target.
4343 This property can be changed at any time. If you change it for a running
4344 VM, then the fault tolerance address and port must be set beforehand.
4345 </desc>
4346 </attribute>
4347
4348 <attribute name="faultTolerancePort" type="unsigned long">
4349 <desc>
4350 The TCP port the fault tolerance source or target will use for
4351 communication.
4352 </desc>
4353 </attribute>
4354
4355 <attribute name="faultToleranceAddress" type="wstring">
4356 <desc>
4357 The address the fault tolerance source or target.
4358 </desc>
4359 </attribute>
4360
4361 <attribute name="faultTolerancePassword" type="wstring">
4362 <desc>
4363 The password to check for on the standby VM. This is just a
4364 very basic measure to prevent simple hacks and operators accidentally
4365 choosing the wrong standby VM.
4366 </desc>
4367 </attribute>
4368
4369 <attribute name="faultToleranceSyncInterval" type="unsigned long">
4370 <desc>
4371 The interval in ms used for syncing the state between source and target.
4372 </desc>
4373 </attribute>
4374
4375 <attribute name="RTCUseUTC" type="boolean">
4376 <desc>
4377 When set to @a true, the RTC device of the virtual machine will run
4378 in UTC time, otherwise in local time. Especially Unix guests prefer
4379 the time in UTC.
4380 </desc>
4381 </attribute>
4382
4383 <attribute name="IOCacheEnabled" type="boolean">
4384 <desc>
4385 When set to @a true, the builtin I/O cache of the virtual machine
4386 will be enabled.
4387 </desc>
4388 </attribute>
4389
4390 <attribute name="IOCacheSize" type="unsigned long">
4391 <desc>
4392 Maximum size of the I/O cache in MB.
4393 </desc>
4394 </attribute>
4395
4396 <attribute name="PCIDeviceAssignments" type="IPCIDeviceAttachment" readonly="yes" safearray="yes">
4397 <desc>Array of PCI devices assigned to this machine, to get list of all
4398 PCI devices attached to the machine use
4399 <link to="IConsole::attachedPCIDevices"/> attribute, as this attribute
4400 is intended to list only devices additional to what described in
4401 virtual hardware config. Usually, this list keeps host's physical
4402 devices assigned to the particular machine.
4403 </desc>
4404 </attribute>
4405
4406 <attribute name="bandwidthControl" type="IBandwidthControl" readonly="yes">
4407 <desc>
4408 Bandwidth control manager.
4409 </desc>
4410 </attribute>
4411
4412 <attribute name="tracingEnabled" type="boolean">
4413 <desc>
4414 Enables the tracing facility in the VMM (including PDM devices +
4415 drivers). The VMM will consume about 0.5MB of more memory when
4416 enabled and there may be some extra overhead from tracepoints that are
4417 always enabled.
4418 </desc>
4419 </attribute>
4420
4421 <attribute name="tracingConfig" type="wstring">
4422 <desc>
4423 Tracepoint configuration to apply at startup when
4424 <link to="IMachine::tracingEnabled" /> is true. The string specifies
4425 a space separated of tracepoint group names to enable. The special
4426 group 'all' enables all tracepoints. Check DBGFR3TracingConfig for
4427 more details on available tracepoint groups and such.
4428
4429 Note that on hosts supporting DTrace (or similar), a lot of the
4430 tracepoints may be implemented exclusivly as DTrace probes. So, the
4431 effect of the same config may differ between Solaris and Windows for
4432 example.
4433 </desc>
4434 </attribute>
4435
4436 <attribute name="allowTracingToAccessVM" type="boolean">
4437 <desc>
4438 Enables tracepoints in PDM devices and drivers to use the VMCPU or VM
4439 structures when firing off trace points. This is especially useful
4440 with DTrace tracepoints, as it allows you to use the VMCPU or VM
4441 pointer to obtain useful information such as guest register state.
4442
4443 This is disabled by default because devices and drivers normally has no
4444 business accessing the VMCPU or VM structures, and are therefore unable
4445 to get any pointers to these.
4446 </desc>
4447 </attribute>
4448
4449 <attribute name="autostartEnabled" type="boolean">
4450 <desc>
4451 Enables autostart of the VM during system boot.
4452 </desc>
4453 </attribute>
4454
4455 <attribute name="autostartDelay" type="unsigned long">
4456 <desc>
4457 Number of seconds to wait until the VM should be started during system boot.
4458 </desc>
4459 </attribute>
4460
4461 <attribute name="autostopType" type="AutostopType">
4462 <desc>
4463 Action type to do when the system is shutting down.
4464 </desc>
4465 </attribute>
4466
4467 <method name="lockMachine">
4468 <desc>
4469 Locks the machine for the given session to enable the caller
4470 to make changes to the machine or start the VM or control
4471 VM execution.
4472
4473 There are two ways to lock a machine for such uses:
4474
4475 <ul>
4476 <li>If you want to make changes to the machine settings,
4477 you must obtain an exclusive write lock on the machine
4478 by setting @a lockType to @c Write.
4479
4480 This will only succeed if no other process has locked
4481 the machine to prevent conflicting changes. Only after
4482 an exclusive write lock has been obtained using this method, one
4483 can change all VM settings or execute the VM in the process
4484 space of the session object. (Note that the latter is only of
4485 interest if you actually want to write a new front-end for
4486 virtual machines; but this API gets called internally by
4487 the existing front-ends such as VBoxHeadless and the VirtualBox
4488 GUI to acquire a write lock on the machine that they are running.)
4489
4490 On success, write-locking the machine for a session creates
4491 a second copy of the IMachine object. It is this second object
4492 upon which changes can be made; in VirtualBox terminology, the
4493 second copy is "mutable". It is only this second, mutable machine
4494 object upon which you can call methods that change the
4495 machine state. After having called this method, you can
4496 obtain this second, mutable machine object using the
4497 <link to="ISession::machine" /> attribute.
4498 </li>
4499 <li>If you only want to check the machine state or control
4500 machine execution without actually changing machine
4501 settings (e.g. to get access to VM statistics or take
4502 a snapshot or save the machine state), then set the
4503 @a lockType argument to @c Shared.
4504
4505 If no other session has obtained a lock, you will obtain an
4506 exclusive write lock as described above. However, if another
4507 session has already obtained such a lock, then a link to that
4508 existing session will be established which allows you
4509 to control that existing session.
4510
4511 To find out which type of lock was obtained, you can
4512 inspect <link to="ISession::type" />, which will have been
4513 set to either @c WriteLock or @c Shared.
4514 </li>
4515 </ul>
4516
4517 In either case, you can get access to the <link to="IConsole" />
4518 object which controls VM execution.
4519
4520 Also in all of the above cases, one must always call
4521 <link to="ISession::unlockMachine" /> to release the lock on the machine, or
4522 the machine's state will eventually be set to "Aborted".
4523
4524 To change settings on a machine, the following sequence is typically
4525 performed:
4526
4527 <ol>
4528 <li>Call this method to obtain an exclusive write lock for the current session.</li>
4529
4530 <li>Obtain a mutable IMachine object from <link to="ISession::machine" />.</li>
4531
4532 <li>Change the settings of the machine by invoking IMachine methods.</li>
4533
4534 <li>Call <link to="IMachine::saveSettings" />.</li>
4535
4536 <li>Release the write lock by calling <link to="ISession::unlockMachine"/>.</li>
4537 </ol>
4538
4539 <result name="E_UNEXPECTED">
4540 Virtual machine not registered.
4541 </result>
4542 <result name="E_ACCESSDENIED">
4543 Process not started by OpenRemoteSession.
4544 </result>
4545 <result name="VBOX_E_INVALID_OBJECT_STATE">
4546 Session already open or being opened.
4547 </result>
4548 <result name="VBOX_E_VM_ERROR">
4549 Failed to assign machine to session.
4550 </result>
4551 </desc>
4552 <param name="session" type="ISession" dir="in">
4553 <desc>
4554 Session object for which the machine will be locked.
4555 </desc>
4556 </param>
4557 <param name="lockType" type="LockType" dir="in">
4558 <desc>
4559 If set to @c Write, then attempt to acquire an exclusive write lock or fail.
4560 If set to @c Shared, then either acquire an exclusive write lock or establish
4561 a link to an existing session.
4562 </desc>
4563 </param>
4564 </method>
4565
4566 <method name="launchVMProcess">
4567 <desc>
4568 Spawns a new process that will execute the virtual machine and obtains a shared
4569 lock on the machine for the calling session.
4570
4571 If launching the VM succeeds, the new VM process will create its own session
4572 and write-lock the machine for it, preventing conflicting changes from other
4573 processes. If the machine is already locked (because it is already running or
4574 because another session has a write lock), launching the VM process will therefore
4575 fail. Reversely, future attempts to obtain a write lock will also fail while the
4576 machine is running.
4577
4578 The caller's session object remains separate from the session opened by the new
4579 VM process. It receives its own <link to="IConsole" /> object which can be used
4580 to control machine execution, but it cannot be used to change all VM settings
4581 which would be available after a <link to="#lockMachine" /> call.
4582
4583 The caller must eventually release the session's shared lock by calling
4584 <link to="ISession::unlockMachine" /> on the local session object once this call
4585 has returned. However, the session's state (see <link to="ISession::state" />)
4586 will not return to "Unlocked" until the remote session has also unlocked
4587 the machine (i.e. the machine has stopped running).
4588
4589 Launching a VM process can take some time (a new VM is started in a new process,
4590 for which memory and other resources need to be set up). Because of this,
4591 an <link to="IProgress" /> object is returned to allow the caller to wait
4592 for this asynchronous operation to be completed. Until then, the caller's
4593 session object remains in the "Unlocked" state, and its <link to="ISession::machine" />
4594 and <link to="ISession::console" /> attributes cannot be accessed.
4595 It is recommended to use <link to="IProgress::waitForCompletion" /> or
4596 similar calls to wait for completion. Completion is signalled when the VM
4597 is powered on. If launching the VM fails, error messages can be queried
4598 via the progress object, if available.
4599
4600 The progress object will have at least 2 sub-operations. The first
4601 operation covers the period up to the new VM process calls powerUp.
4602 The subsequent operations mirror the <link to="IConsole::powerUp"/>
4603 progress object. Because <link to="IConsole::powerUp"/> may require
4604 some extra sub-operations, the <link to="IProgress::operationCount"/>
4605 may change at the completion of operation.
4606
4607 For details on the teleportation progress operation, see
4608 <link to="IConsole::powerUp"/>.
4609
4610 The @a environment argument is a string containing definitions of
4611 environment variables in the following format:
4612 <pre>
4613 NAME[=VALUE]\n
4614 NAME[=VALUE]\n
4615 ...
4616 </pre>
4617 where <tt>\\n</tt> is the new line character. These environment
4618 variables will be appended to the environment of the VirtualBox server
4619 process. If an environment variable exists both in the server process
4620 and in this list, the value from this list takes precedence over the
4621 server's variable. If the value of the environment variable is
4622 omitted, this variable will be removed from the resulting environment.
4623 If the environment string is @c null or empty, the server environment
4624 is inherited by the started process as is.
4625
4626 <result name="E_UNEXPECTED">
4627 Virtual machine not registered.
4628 </result>
4629 <result name="E_INVALIDARG">
4630 Invalid session type @a type.
4631 </result>
4632 <result name="VBOX_E_OBJECT_NOT_FOUND">
4633 No machine matching @a machineId found.
4634 </result>
4635 <result name="VBOX_E_INVALID_OBJECT_STATE">
4636 Session already open or being opened.
4637 </result>
4638 <result name="VBOX_E_IPRT_ERROR">
4639 Launching process for machine failed.
4640 </result>
4641 <result name="VBOX_E_VM_ERROR">
4642 Failed to assign machine to session.
4643 </result>
4644 </desc>
4645 <param name="session" type="ISession" dir="in">
4646 <desc>
4647 Client session object to which the VM process will be connected (this
4648 must be in "Unlocked" state).
4649 </desc>
4650 </param>
4651 <param name="type" type="wstring" dir="in">
4652 <desc>
4653 Front-end to use for the new VM process. The following are currently supported:
4654 <ul>
4655 <li><tt>"gui"</tt>: VirtualBox Qt GUI front-end</li>
4656 <li><tt>"headless"</tt>: VBoxHeadless (VRDE Server) front-end</li>
4657 <li><tt>"sdl"</tt>: VirtualBox SDL front-end</li>
4658 <li><tt>"emergencystop"</tt>: reserved value, used for aborting
4659 the currently running VM or session owner. In this case the
4660 @a session parameter may be @c null (if it is non-null it isn't
4661 used in any way), and the @a progress return value will be always
4662 @c null. The operation completes immediately.</li>
4663 </ul>
4664 </desc>
4665 </param>
4666 <param name="environment" type="wstring" dir="in">
4667 <desc>
4668 Environment to pass to the VM process.
4669 </desc>
4670 </param>
4671 <param name="progress" type="IProgress" dir="return">
4672 <desc>Progress object to track the operation completion.</desc>
4673 </param>
4674 </method>
4675
4676 <method name="setBootOrder">
4677 <desc>
4678 Puts the given device to the specified position in
4679 the boot order.
4680
4681 To indicate that no device is associated with the given position,
4682 <link to="DeviceType_Null"/> should be used.
4683
4684 @todo setHardDiskBootOrder(), setNetworkBootOrder()
4685
4686 <result name="E_INVALIDARG">
4687 Boot @a position out of range.
4688 </result>
4689 <result name="E_NOTIMPL">
4690 Booting from USB @a device currently not supported.
4691 </result>
4692
4693 </desc>
4694 <param name="position" type="unsigned long" dir="in">
4695 <desc>
4696 Position in the boot order (@c 1 to the total number of
4697 devices the machine can boot from, as returned by
4698 <link to="ISystemProperties::maxBootPosition"/>).
4699 </desc>
4700 </param>
4701 <param name="device" type="DeviceType" dir="in">
4702 <desc>
4703 The type of the device used to boot at the given position.
4704 </desc>
4705 </param>
4706 </method>
4707
4708 <method name="getBootOrder" const="yes">
4709 <desc>
4710 Returns the device type that occupies the specified
4711 position in the boot order.
4712
4713 @todo [remove?]
4714 If the machine can have more than one device of the returned type
4715 (such as hard disks), then a separate method should be used to
4716 retrieve the individual device that occupies the given position.
4717
4718 If here are no devices at the given position, then
4719 <link to="DeviceType_Null"/> is returned.
4720
4721 @todo getHardDiskBootOrder(), getNetworkBootOrder()
4722
4723 <result name="E_INVALIDARG">
4724 Boot @a position out of range.
4725 </result>
4726
4727 </desc>
4728 <param name="position" type="unsigned long" dir="in">
4729 <desc>
4730 Position in the boot order (@c 1 to the total number of
4731 devices the machine can boot from, as returned by
4732 <link to="ISystemProperties::maxBootPosition"/>).
4733 </desc>
4734 </param>
4735 <param name="device" type="DeviceType" dir="return">
4736 <desc>
4737 Device at the given position.
4738 </desc>
4739 </param>
4740 </method>
4741
4742 <method name="attachDevice">
4743 <desc>
4744 Attaches a device and optionally mounts a medium to the given storage
4745 controller (<link to="IStorageController" />, identified by @a name),
4746 at the indicated port and device.
4747
4748 This method is intended for managing storage devices in general while a
4749 machine is powered off. It can be used to attach and detach fixed
4750 and removable media. The following kind of media can be attached
4751 to a machine:
4752
4753 <ul>
4754 <li>For fixed and removable media, you can pass in a medium that was
4755 previously opened using <link to="IVirtualBox::openMedium" />.
4756 </li>
4757
4758 <li>Only for storage devices supporting removable media (such as
4759 DVDs and floppies), you can also specify a null pointer to
4760 indicate an empty drive or one of the medium objects listed
4761 in the <link to="IHost::DVDDrives" /> and <link to="IHost::floppyDrives"/>
4762 arrays to indicate a host drive.
4763 For removable devices, you can also use <link to="IMachine::mountMedium"/>
4764 to change the media while the machine is running.
4765 </li>
4766 </ul>
4767
4768 In a VM's default configuration of virtual machines, the secondary
4769 master of the IDE controller is used for a CD/DVD drive.
4770
4771 After calling this returns successfully, a new instance of
4772 <link to="IMediumAttachment"/> will appear in the machine's list of medium
4773 attachments (see <link to="IMachine::mediumAttachments"/>).
4774
4775 See <link to="IMedium"/> and <link to="IMediumAttachment"/> for more
4776 information about attaching media.
4777
4778 The specified device slot must not have a device attached to it,
4779 or this method will fail.
4780
4781 <note>
4782 You cannot attach a device to a newly created machine until
4783 this machine's settings are saved to disk using
4784 <link to="#saveSettings"/>.
4785 </note>
4786 <note>
4787 If the medium is being attached indirectly, a new differencing medium
4788 will implicitly be created for it and attached instead. If the
4789 changes made to the machine settings (including this indirect
4790 attachment) are later cancelled using <link to="#discardSettings"/>,
4791 this implicitly created differencing medium will implicitly
4792 be deleted.
4793 </note>
4794
4795 <result name="E_INVALIDARG">
4796 SATA device, SATA port, IDE port or IDE slot out of range, or
4797 file or UUID not found.
4798 </result>
4799 <result name="VBOX_E_INVALID_OBJECT_STATE">
4800 Machine must be registered before media can be attached.
4801 </result>
4802 <result name="VBOX_E_INVALID_VM_STATE">
4803 Invalid machine state.
4804 </result>
4805 <result name="VBOX_E_OBJECT_IN_USE">
4806 A medium is already attached to this or another virtual machine.
4807 </result>
4808
4809 </desc>
4810 <param name="name" type="wstring" dir="in">
4811 <desc>Name of the storage controller to attach the device to.</desc>
4812 </param>
4813 <param name="controllerPort" type="long" dir="in">
4814 <desc>Port to attach the device to. For an IDE controller, 0 specifies
4815 the primary controller and 1 specifies the secondary controller.
4816 For a SCSI controller, this must range from 0 to 15; for a SATA controller,
4817 from 0 to 29; for an SAS controller, from 0 to 7.</desc>
4818 </param>
4819 <param name="device" type="long" dir="in">
4820 <desc>Device slot in the given port to attach the device to. This is only
4821 relevant for IDE controllers, for which 0 specifies the master device and
4822 1 specifies the slave device. For all other controller types, this must
4823 be 0.</desc>
4824 </param>
4825 <param name="type" type="DeviceType" dir="in">
4826 <desc>Device type of the attached device. For media opened by
4827 <link to="IVirtualBox::openMedium" />, this must match the device type
4828 specified there.</desc>
4829 </param>
4830 <param name="medium" type="IMedium" dir="in">
4831 <desc>Medium to mount or @c null for an empty drive.</desc>
4832 </param>
4833 </method>
4834
4835 <method name="attachDeviceWithoutMedium">
4836 <desc>
4837 Attaches a device and optionally mounts a medium to the given storage
4838 controller (<link to="IStorageController" />, identified by @a name),
4839 at the indicated port and device.
4840
4841 This method is intended for managing storage devices in general while a
4842 machine is powered off. It can be used to attach and detach fixed
4843 and removable media. The following kind of media can be attached
4844 to a machine:
4845 <ul>
4846 <li>
4847 For fixed and removable media, you can pass in a medium that was
4848 previously opened using <link to="IVirtualBox::openMedium" />.
4849 </li>
4850
4851 <li>Only for storage devices supporting removable media (such as
4852 DVDs and floppies) with an empty drive or one of the medium objects listed
4853 in the <link to="IHost::DVDDrives" /> and <link to="IHost::floppyDrives"/>
4854 arrays to indicate a host drive.
4855 For removable devices, you can also use <link to="IMachine::mountMedium"/>
4856 to change the media while the machine is running.
4857 </li>
4858 </ul>
4859
4860 In a VM's default configuration of virtual machines, the secondary
4861 master of the IDE controller is used for a CD/DVD drive.
4862 <link to="IMediumAttachment"/> will appear in the machine's list of medium
4863 attachments (see <link to="IMachine::mediumAttachments"/>).
4864
4865 See <link to="IMedium"/> and <link to="IMediumAttachment"/> for more
4866 information about attaching media.
4867
4868 The specified device slot must not have a device attached to it,
4869 or this method will fail.
4870 <note>
4871 You cannot attach a device to a newly created machine until
4872 this machine's settings are saved to disk using
4873 <link to="#saveSettings"/>.
4874 </note>
4875 <note>
4876 If the medium is being attached indirectly, a new differencing medium
4877 will implicitly be created for it and attached instead. If the
4878 changes made to the machine settings (including this indirect
4879 attachment) are later cancelled using <link to="#discardSettings"/>,
4880 this implicitly created differencing medium will implicitly
4881 be deleted.
4882 </note>
4883
4884 <result name="E_INVALIDARG">
4885 SATA device, SATA port, IDE port or IDE slot out of range, or
4886 file or UUID not found.
4887 </result>
4888 <result name="VBOX_E_INVALID_OBJECT_STATE">
4889 Machine must be registered before media can be attached.
4890 </result>
4891 <result name="VBOX_E_INVALID_VM_STATE">
4892 Invalid machine state.
4893 </result>
4894 <result name="VBOX_E_OBJECT_IN_USE">
4895 A medium is already attached to this or another virtual machine.
4896 </result>
4897 </desc>
4898 <param name="name" type="wstring" dir="in">
4899 <desc>Name of the storage controller to attach the device to.</desc>
4900 </param>
4901 <param name="controllerPort" type="long" dir="in">
4902 <desc>Port to attach the device to. For an IDE controller, 0 specifies
4903 the primary controller and 1 specifies the secondary controller.
4904 For a SCSI controller, this must range from 0 to 15; for a SATA controller,
4905 from 0 to 29; for an SAS controller, from 0 to 7.</desc>
4906 </param>
4907 <param name="device" type="long" dir="in">
4908 <desc>Device slot in the given port to attach the device to. This is only
4909 relevant for IDE controllers, for which 0 specifies the master device and
4910 1 specifies the slave device. For all other controller types, this must
4911 be 0.</desc>
4912 </param>
4913 <param name="type" type="DeviceType" dir="in">
4914 <desc>Device type of the attached device. For media opened by
4915 <link to="IVirtualBox::openMedium" />, this must match the device type
4916 specified there.</desc>
4917 </param>
4918 </method>
4919
4920 <method name="detachDevice">
4921 <desc>
4922 Detaches the device attached to a device slot of the specified bus.
4923
4924 Detaching the device from the virtual machine is deferred. This means
4925 that the medium remains associated with the machine when this method
4926 returns and gets actually de-associated only after a successful
4927 <link to="#saveSettings"/> call. See <link to="IMedium"/>
4928 for more detailed information about attaching media.
4929
4930 <note>
4931 You cannot detach a device from a running machine.
4932 </note>
4933 <note>
4934 Detaching differencing media implicitly created by <link
4935 to="#attachDevice"/> for the indirect attachment using this
4936 method will <b>not</b> implicitly delete them. The
4937 <link to="IMedium::deleteStorage"/> operation should be
4938 explicitly performed by the caller after the medium is successfully
4939 detached and the settings are saved with
4940 <link to="#saveSettings"/>, if it is the desired action.
4941 </note>
4942
4943 <result name="VBOX_E_INVALID_VM_STATE">
4944 Attempt to detach medium from a running virtual machine.
4945 </result>
4946 <result name="VBOX_E_OBJECT_NOT_FOUND">
4947 No medium attached to given slot/bus.
4948 </result>
4949 <result name="VBOX_E_NOT_SUPPORTED">
4950 Medium format does not support storage deletion (only for implicitly
4951 created differencing media, should not happen).
4952 </result>
4953
4954 </desc>
4955 <param name="name" type="wstring" dir="in">
4956 <desc>Name of the storage controller to detach the medium from.</desc>
4957 </param>
4958 <param name="controllerPort" type="long" dir="in">
4959 <desc>Port number to detach the medium from.</desc>
4960 </param>
4961 <param name="device" type="long" dir="in">
4962 <desc>Device slot number to detach the medium from.</desc>
4963 </param>
4964 </method>
4965
4966 <method name="passthroughDevice">
4967 <desc>
4968 Sets the passthrough mode of an existing DVD device. Changing the
4969 setting while the VM is running is forbidden. The setting is only used
4970 if at VM start the device is configured as a host DVD drive, in all
4971 other cases it is ignored. The device must already exist; see
4972 <link to="IMachine::attachDevice"/> for how to attach a new device.
4973
4974 The @a controllerPort and @a device parameters specify the device slot and
4975 have have the same meaning as with <link to="IMachine::attachDevice" />.
4976
4977 <result name="E_INVALIDARG">
4978 SATA device, SATA port, IDE port or IDE slot out of range.
4979 </result>
4980 <result name="VBOX_E_INVALID_OBJECT_STATE">
4981 Attempt to modify an unregistered virtual machine.
4982 </result>
4983 <result name="VBOX_E_INVALID_VM_STATE">
4984 Invalid machine state.
4985 </result>
4986
4987 </desc>
4988 <param name="name" type="wstring" dir="in">
4989 <desc>Name of the storage controller.</desc>
4990 </param>
4991 <param name="controllerPort" type="long" dir="in">
4992 <desc>Storage controller port.</desc>
4993 </param>
4994 <param name="device" type="long" dir="in">
4995 <desc>Device slot in the given port.</desc>
4996 </param>
4997 <param name="passthrough" type="boolean" dir="in">
4998 <desc>New value for the passthrough setting.</desc>
4999 </param>
5000 </method>
5001
5002 <method name="temporaryEjectDevice">
5003 <desc>
5004 Sets the behavior for guest-triggered medium eject. In some situations
5005 it is desirable that such ejects update the VM configuration, and in
5006 others the eject should keep the VM configuration. The device must
5007 already exist; see <link to="IMachine::attachDevice"/> for how to
5008 attach a new device.
5009
5010 The @a controllerPort and @a device parameters specify the device slot and
5011 have have the same meaning as with <link to="IMachine::attachDevice" />.
5012
5013 <result name="E_INVALIDARG">
5014 SATA device, SATA port, IDE port or IDE slot out of range.
5015 </result>
5016 <result name="VBOX_E_INVALID_OBJECT_STATE">
5017 Attempt to modify an unregistered virtual machine.
5018 </result>
5019 <result name="VBOX_E_INVALID_VM_STATE">
5020 Invalid machine state.
5021 </result>
5022
5023 </desc>
5024 <param name="name" type="wstring" dir="in">
5025 <desc>Name of the storage controller.</desc>
5026 </param>
5027 <param name="controllerPort" type="long" dir="in">
5028 <desc>Storage controller port.</desc>
5029 </param>
5030 <param name="device" type="long" dir="in">
5031 <desc>Device slot in the given port.</desc>
5032 </param>
5033 <param name="temporaryEject" type="boolean" dir="in">
5034 <desc>New value for the eject behavior.</desc>
5035 </param>
5036 </method>
5037
5038 <method name="nonRotationalDevice">
5039 <desc>
5040 Sets a flag in the device information which indicates that the medium
5041 is not based on rotational technology, i.e. that the access times are
5042 more or less independent of the position on the medium. This may or may
5043 not be supported by a particular drive, and is silently ignored in the
5044 latter case. At the moment only hard disks (which is a misnomer in this
5045 context) accept this setting. Changing the setting while the VM is
5046 running is forbidden. The device must already exist; see
5047 <link to="IMachine::attachDevice"/> for how to attach a new device.
5048
5049 The @a controllerPort and @a device parameters specify the device slot and
5050 have have the same meaning as with <link to="IMachine::attachDevice" />.
5051
5052 <result name="E_INVALIDARG">
5053 SATA device, SATA port, IDE port or IDE slot out of range.
5054 </result>
5055 <result name="VBOX_E_INVALID_OBJECT_STATE">
5056 Attempt to modify an unregistered virtual machine.
5057 </result>
5058 <result name="VBOX_E_INVALID_VM_STATE">
5059 Invalid machine state.
5060 </result>
5061
5062 </desc>
5063 <param name="name" type="wstring" dir="in">
5064 <desc>Name of the storage controller.</desc>
5065 </param>
5066 <param name="controllerPort" type="long" dir="in">
5067 <desc>Storage controller port.</desc>
5068 </param>
5069 <param name="device" type="long" dir="in">
5070 <desc>Device slot in the given port.</desc>
5071 </param>
5072 <param name="nonRotational" type="boolean" dir="in">
5073 <desc>New value for the non-rotational device flag.</desc>
5074 </param>
5075 </method>
5076
5077 <method name="setAutoDiscardForDevice">
5078 <desc>
5079 Sets a flag in the device information which indicates that the medium
5080 supports discarding unsused blocks (called trimming for SATA or unmap
5081 for SCSI devices) .This may or may not be supported by a particular drive,
5082 and is silently ignored in the latter case. At the moment only hard disks
5083 (which is a misnomer in this context) accept this setting. Changing the
5084 setting while the VM is running is forbidden. The device must already
5085 exist; see <link to="IMachine::attachDevice"/> for how to attach a new
5086 device.
5087
5088 The @a controllerPort and @a device parameters specify the device slot and
5089 have have the same meaning as with <link to="IMachine::attachDevice" />.
5090
5091 <result name="E_INVALIDARG">
5092 SATA device, SATA port, SCSI port out of range.
5093 </result>
5094 <result name="VBOX_E_INVALID_OBJECT_STATE">
5095 Attempt to modify an unregistered virtual machine.
5096 </result>
5097 <result name="VBOX_E_INVALID_VM_STATE">
5098 Invalid machine state.
5099 </result>
5100
5101 </desc>
5102 <param name="name" type="wstring" dir="in">
5103 <desc>Name of the storage controller.</desc>
5104 </param>
5105 <param name="controllerPort" type="long" dir="in">
5106 <desc>Storage controller port.</desc>
5107 </param>
5108 <param name="device" type="long" dir="in">
5109 <desc>Device slot in the given port.</desc>
5110 </param>
5111 <param name="discard" type="boolean" dir="in">
5112 <desc>New value for the discard device flag.</desc>
5113 </param>
5114 </method>
5115
5116 <method name="setBandwidthGroupForDevice">
5117 <desc>
5118 Sets the bandwidth group of an existing storage device.
5119 The device must already exist; see <link to="IMachine::attachDevice"/>
5120 for how to attach a new device.
5121
5122 The @a controllerPort and @a device parameters specify the device slot and
5123 have have the same meaning as with <link to="IMachine::attachDevice" />.
5124
5125 <result name="E_INVALIDARG">
5126 SATA device, SATA port, IDE port or IDE slot out of range.
5127 </result>
5128 <result name="VBOX_E_INVALID_OBJECT_STATE">
5129 Attempt to modify an unregistered virtual machine.
5130 </result>
5131 <result name="VBOX_E_INVALID_VM_STATE">
5132 Invalid machine state.
5133 </result>
5134
5135 </desc>
5136 <param name="name" type="wstring" dir="in">
5137 <desc>Name of the storage controller.</desc>
5138 </param>
5139 <param name="controllerPort" type="long" dir="in">
5140 <desc>Storage controller port.</desc>
5141 </param>
5142 <param name="device" type="long" dir="in">
5143 <desc>Device slot in the given port.</desc>
5144 </param>
5145 <param name="bandwidthGroup" type="IBandwidthGroup" dir="in">
5146 <desc>New value for the bandwidth group or @c null for no group.</desc>
5147 </param>
5148 </method>
5149
5150 <method name="setNoBandwidthGroupForDevice">
5151 <desc>
5152 Sets no bandwidth group for an existing storage device.
5153 The device must already exist; see <link to="IMachine::attachDevice"/>
5154 for how to attach a new device.
5155 The @a controllerPort and @a device parameters specify the device slot and
5156 have have the same meaning as with <link to="IMachine::attachDevice" />.
5157 <result name="E_INVALIDARG">
5158 SATA device, SATA port, IDE port or IDE slot out of range.
5159 </result>
5160 <result name="VBOX_E_INVALID_OBJECT_STATE">
5161 Attempt to modify an unregistered virtual machine.
5162 </result>
5163 <result name="VBOX_E_INVALID_VM_STATE">
5164 Invalid machine state.
5165 </result>
5166
5167 </desc>
5168 <param name="name" type="wstring" dir="in">
5169 <desc>Name of the storage controller.</desc>
5170 </param>
5171 <param name="controllerPort" type="long" dir="in">
5172 <desc>Storage controller port.</desc>
5173 </param>
5174 <param name="device" type="long" dir="in">
5175 <desc>Device slot in the given port.</desc>
5176 </param>
5177 </method>
5178
5179
5180 <method name="unmountMedium">
5181 <desc>
5182 Unmounts any currently mounted medium (<link to="IMedium" />,
5183 identified by the given UUID @a id) to the given storage controller
5184 (<link to="IStorageController" />, identified by @a name),
5185 at the indicated port and device. The device must already exist;
5186
5187 This method is intended only for managing removable media, where the
5188 device is fixed but media is changeable at runtime (such as DVDs
5189 and floppies). It cannot be used for fixed media such as hard disks.
5190
5191 The @a controllerPort and @a device parameters specify the device slot
5192 and have have the same meaning as with
5193 <link to="IMachine::attachDevice" />.
5194
5195 The specified device slot must have a medium mounted, which will be
5196 unmounted. If there is no mounted medium it will do nothing.
5197 See <link to="IMedium"/> for more detailed information about
5198 attaching/unmounting media.
5199
5200 <result name="E_INVALIDARG">
5201 SATA device, SATA port, IDE port or IDE slot out of range.
5202 </result>
5203 <result name="VBOX_E_INVALID_OBJECT_STATE">
5204 Attempt to unmount medium that is not removeable - not dvd or floppy.
5205 </result>
5206 <result name="VBOX_E_INVALID_VM_STATE">
5207 Invalid machine state.
5208 </result>
5209 <result name="VBOX_E_OBJECT_IN_USE">
5210 Medium already attached to this or another virtual machine.
5211 </result>
5212 <result name="VBOX_E_OBJECT_NOT_FOUND">
5213 Medium not attached to specified port, device, controller.
5214 </result>
5215
5216 </desc>
5217 <param name="name" type="wstring" dir="in">
5218 <desc>Name of the storage controller to unmount the medium from.</desc>
5219 </param>
5220 <param name="controllerPort" type="long" dir="in">
5221 <desc>Port to unmount the medium from.</desc>
5222 </param>
5223 <param name="device" type="long" dir="in">
5224 <desc>Device slot in the given port to unmount the medium from.</desc>
5225 </param>
5226 <param name="force" type="boolean" dir="in">
5227 <desc>Allows to force unmount of a medium which is locked by
5228 the device slot in the given port medium is attached to.</desc>
5229 </param>
5230 </method>
5231
5232 <method name="mountMedium">
5233 <desc>
5234 Mounts a medium (<link to="IMedium" />, identified
5235 by the given UUID @a id) to the given storage controller
5236 (<link to="IStorageController" />, identified by @a name),
5237 at the indicated port and device. The device must already exist;
5238 see <link to="IMachine::attachDevice"/> for how to attach a new device.
5239
5240 This method is intended only for managing removable media, where the
5241 device is fixed but media is changeable at runtime (such as DVDs
5242 and floppies). It cannot be used for fixed media such as hard disks.
5243
5244 The @a controllerPort and @a device parameters specify the device slot and
5245 have have the same meaning as with <link to="IMachine::attachDevice" />.
5246
5247 The specified device slot can have a medium mounted, which will be
5248 unmounted first. Specifying a zero UUID (or an empty string) for
5249 @a medium does just an unmount.
5250
5251 See <link to="IMedium"/> for more detailed information about
5252 attaching media.
5253
5254 <result name="E_INVALIDARG">
5255 SATA device, SATA port, IDE port or IDE slot out of range.
5256 </result>
5257 <result name="VBOX_E_INVALID_OBJECT_STATE">
5258 Attempt to attach medium to an unregistered virtual machine.
5259 </result>
5260 <result name="VBOX_E_INVALID_VM_STATE">
5261 Invalid machine state.
5262 </result>
5263 <result name="VBOX_E_OBJECT_IN_USE">
5264 Medium already attached to this or another virtual machine.
5265 </result>
5266
5267 </desc>
5268 <param name="name" type="wstring" dir="in">
5269 <desc>Name of the storage controller to attach the medium to.</desc>
5270 </param>
5271 <param name="controllerPort" type="long" dir="in">
5272 <desc>Port to attach the medium to.</desc>
5273 </param>
5274 <param name="device" type="long" dir="in">
5275 <desc>Device slot in the given port to attach the medium to.</desc>
5276 </param>
5277 <param name="medium" type="IMedium" dir="in">
5278 <desc>Medium to mount or @c null for an empty drive.</desc>
5279 </param>
5280 <param name="force" type="boolean" dir="in">
5281 <desc>Allows to force unmount/mount of a medium which is locked by
5282 the device slot in the given port to attach the medium to.</desc>
5283 </param>
5284 </method>
5285
5286 <method name="getMedium" const="yes">
5287 <desc>
5288 Returns the virtual medium attached to a device slot of the specified
5289 bus.
5290
5291 Note that if the medium was indirectly attached by
5292 <link to="#mountMedium"/> to the given device slot then this
5293 method will return not the same object as passed to the
5294 <link to="#mountMedium"/> call. See <link to="IMedium"/> for
5295 more detailed information about mounting a medium.
5296
5297 <result name="VBOX_E_OBJECT_NOT_FOUND">
5298 No medium attached to given slot/bus.
5299 </result>
5300
5301 </desc>
5302 <param name="name" type="wstring" dir="in">
5303 <desc>Name of the storage controller the medium is attached to.</desc>
5304 </param>
5305 <param name="controllerPort" type="long" dir="in">
5306 <desc>Port to query.</desc>
5307 </param>
5308 <param name="device" type="long" dir="in">
5309 <desc>Device slot in the given port to query.</desc>
5310 </param>
5311 <param name="medium" type="IMedium" dir="return">
5312 <desc>Attached medium object.</desc>
5313 </param>
5314 </method>
5315
5316 <method name="getMediumAttachmentsOfController" const="yes">
5317 <desc>
5318 Returns an array of medium attachments which are attached to the
5319 the controller with the given name.
5320
5321 <result name="VBOX_E_OBJECT_NOT_FOUND">
5322 A storage controller with given name doesn't exist.
5323 </result>
5324 </desc>
5325 <param name="name" type="wstring" dir="in"/>
5326 <param name="mediumAttachments" type="IMediumAttachment" safearray="yes" dir="return"/>
5327 </method>
5328
5329 <method name="getMediumAttachment" const="yes">
5330 <desc>
5331 Returns a medium attachment which corresponds to the controller with
5332 the given name, on the given port and device slot.
5333
5334 <result name="VBOX_E_OBJECT_NOT_FOUND">
5335 No attachment exists for the given controller/port/device combination.
5336 </result>
5337 </desc>
5338 <param name="name" type="wstring" dir="in"/>
5339 <param name="controllerPort" type="long" dir="in"/>
5340 <param name="device" type="long" dir="in"/>
5341 <param name="attachment" type="IMediumAttachment" dir="return"/>
5342 </method>
5343
5344 <method name="attachHostPCIDevice">
5345 <desc>
5346 Attaches host PCI device with the given (host) PCI address to the
5347 PCI bus of the virtual machine. Please note, that this operation
5348 is two phase, as real attachment will happen when VM will start,
5349 and most information will be delivered as IHostPCIDevicePlugEvent
5350 on IVirtualBox event source.
5351
5352 <see><link to="IHostPCIDevicePlugEvent"/></see>
5353
5354 <result name="VBOX_E_INVALID_VM_STATE">
5355 Virtual machine state is not stopped (PCI hotplug not yet implemented).
5356 </result>
5357 <result name="VBOX_E_PDM_ERROR">
5358 Virtual machine does not have a PCI controller allowing attachment of physical devices.
5359 </result>
5360 <result name="VBOX_E_NOT_SUPPORTED">
5361 Hardware or host OS doesn't allow PCI device passthrought.
5362 </result>
5363 </desc>
5364 <param name="hostAddress" type="long" dir="in">
5365 <desc>Address of the host PCI device.</desc>
5366 </param>
5367 <param name="desiredGuestAddress" type="long" dir="in">
5368 <desc>Desired position of this device on guest PCI bus.</desc>
5369 </param>
5370 <param name="tryToUnbind" type="boolean" dir="in">
5371 <desc>If VMM shall try to unbind existing drivers from the
5372 device before attaching it to the guest.</desc>
5373 </param>
5374 </method>
5375
5376 <method name="detachHostPCIDevice">
5377 <desc>
5378 Detach host PCI device from the virtual machine.
5379 Also HostPCIDevicePlugEvent on IVirtualBox event source
5380 will be delivered. As currently we don't support hot device
5381 unplug, IHostPCIDevicePlugEvent event is delivered immediately.
5382
5383 <see><link to="IHostPCIDevicePlugEvent"/></see>
5384
5385 <result name="VBOX_E_INVALID_VM_STATE">
5386 Virtual machine state is not stopped (PCI hotplug not yet implemented).
5387 </result>
5388 <result name="VBOX_E_OBJECT_NOT_FOUND">
5389 This host device is not attached to this machine.
5390 </result>
5391 <result name="VBOX_E_PDM_ERROR">
5392 Virtual machine does not have a PCI controller allowing attachment of physical devices.
5393 </result>
5394 <result name="VBOX_E_NOT_SUPPORTED">
5395 Hardware or host OS doesn't allow PCI device passthrought.
5396 </result>
5397 </desc>
5398 <param name="hostAddress" type="long" dir="in">
5399 <desc>Address of the host PCI device.</desc>
5400 </param>
5401 </method>
5402
5403 <method name="getNetworkAdapter" const="yes">
5404 <desc>
5405 Returns the network adapter associated with the given slot.
5406 Slots are numbered sequentially, starting with zero. The total
5407 number of adapters per machine is defined by the
5408 <link to="ISystemProperties::getMaxNetworkAdapters"/> property,
5409 so the maximum slot number is one less than that property's value.
5410
5411 <result name="E_INVALIDARG">
5412 Invalid @a slot number.
5413 </result>
5414
5415 </desc>
5416 <param name="slot" type="unsigned long" dir="in"/>
5417 <param name="adapter" type="INetworkAdapter" dir="return"/>
5418 </method>
5419
5420 <method name="addStorageController">
5421 <desc>
5422 Adds a new storage controller (SCSI, SAS or SATA controller) to the
5423 machine and returns it as an instance of
5424 <link to="IStorageController" />.
5425
5426 @a name identifies the controller for subsequent calls such as
5427 <link to="#getStorageControllerByName" />,
5428 <link to="#getStorageControllerByInstance" />,
5429 <link to="#removeStorageController" />,
5430 <link to="#attachDevice" /> or <link to="#mountMedium" />.
5431
5432 After the controller has been added, you can set its exact
5433 type by setting the <link to="IStorageController::controllerType" />.
5434
5435 <result name="VBOX_E_OBJECT_IN_USE">
5436 A storage controller with given name exists already.
5437 </result>
5438 <result name="E_INVALIDARG">
5439 Invalid @a controllerType.
5440 </result>
5441 </desc>
5442 <param name="name" type="wstring" dir="in"/>
5443 <param name="connectionType" type="StorageBus" dir="in"/>
5444 <param name="controller" type="IStorageController" dir="return"/>
5445 </method>
5446
5447 <method name="getStorageControllerByName" const="yes">
5448 <desc>
5449 Returns a storage controller with the given name.
5450
5451 <result name="VBOX_E_OBJECT_NOT_FOUND">
5452 A storage controller with given name doesn't exist.
5453 </result>
5454 </desc>
5455 <param name="name" type="wstring" dir="in"/>
5456 <param name="storageController" type="IStorageController" dir="return"/>
5457 </method>
5458
5459 <method name="getStorageControllerByInstance" const="yes">
5460 <desc>
5461 Returns a storage controller with the given instance number.
5462
5463 <result name="VBOX_E_OBJECT_NOT_FOUND">
5464 A storage controller with given instance number doesn't exist.
5465 </result>
5466 </desc>
5467 <param name="instance" type="unsigned long" dir="in"/>
5468 <param name="storageController" type="IStorageController" dir="return"/>
5469 </method>
5470
5471 <method name="removeStorageController">
5472 <desc>
5473 Removes a storage controller from the machine with all devices attached to it.
5474
5475 <result name="VBOX_E_OBJECT_NOT_FOUND">
5476 A storage controller with given name doesn't exist.
5477 </result>
5478 <result name="VBOX_E_NOT_SUPPORTED">
5479 Medium format does not support storage deletion (only for implicitly
5480 created differencing media, should not happen).
5481 </result>
5482 </desc>
5483 <param name="name" type="wstring" dir="in"/>
5484 </method>
5485
5486 <method name="setStorageControllerBootable">
5487 <desc>
5488 Sets the bootable flag of the storage controller with the given name.
5489
5490 <result name="VBOX_E_OBJECT_NOT_FOUND">
5491 A storage controller with given name doesn't exist.
5492 </result>
5493 <result name="VBOX_E_OBJECT_IN_USE">
5494 Another storage controller is marked as bootable already.
5495 </result>
5496 </desc>
5497 <param name="name" type="wstring" dir="in"/>
5498 <param name="bootable" type="boolean" dir="in"/>
5499 </method>
5500
5501 <method name="getSerialPort" const="yes">
5502 <desc>
5503 Returns the serial port associated with the given slot.
5504 Slots are numbered sequentially, starting with zero. The total
5505 number of serial ports per machine is defined by the
5506 <link to="ISystemProperties::serialPortCount"/> property,
5507 so the maximum slot number is one less than that property's value.
5508
5509 <result name="E_INVALIDARG">
5510 Invalid @a slot number.
5511 </result>
5512
5513 </desc>
5514 <param name="slot" type="unsigned long" dir="in"/>
5515 <param name="port" type="ISerialPort" dir="return"/>
5516 </method>
5517
5518 <method name="getParallelPort" const="yes">
5519 <desc>
5520 Returns the parallel port associated with the given slot.
5521 Slots are numbered sequentially, starting with zero. The total
5522 number of parallel ports per machine is defined by the
5523 <link to="ISystemProperties::parallelPortCount"/> property,
5524 so the maximum slot number is one less than that property's value.
5525
5526 <result name="E_INVALIDARG">
5527 Invalid @a slot number.
5528 </result>
5529
5530 </desc>
5531 <param name="slot" type="unsigned long" dir="in"/>
5532 <param name="port" type="IParallelPort" dir="return"/>
5533 </method>
5534
5535 <method name="getExtraDataKeys">
5536 <desc>
5537 Returns an array representing the machine-specific extra data keys
5538 which currently have values defined.
5539 </desc>
5540 <param name="value" type="wstring" dir="return" safearray="yes">
5541 <desc>Array of extra data keys.</desc>
5542 </param>
5543 </method>
5544
5545 <method name="getExtraData">
5546 <desc>
5547 Returns associated machine-specific extra data.
5548
5549 If the requested data @a key does not exist, this function will
5550 succeed and return an empty string in the @a value argument.
5551
5552 <result name="VBOX_E_FILE_ERROR">
5553 Settings file not accessible.
5554 </result>
5555 <result name="VBOX_E_XML_ERROR">
5556 Could not parse the settings file.
5557 </result>
5558
5559 </desc>
5560 <param name="key" type="wstring" dir="in">
5561 <desc>Name of the data key to get.</desc>
5562 </param>
5563 <param name="value" type="wstring" dir="return">
5564 <desc>Value of the requested data key.</desc>
5565 </param>
5566 </method>
5567
5568 <method name="setExtraData">
5569 <desc>
5570 Sets associated machine-specific extra data.
5571
5572 If you pass @c null or an empty string as a key @a value, the given
5573 @a key will be deleted.
5574
5575 <note>
5576 Before performing the actual data change, this method will ask all
5577 registered listeners using the
5578 <link to="IExtraDataCanChangeEvent"/>
5579 notification for a permission. If one of the listeners refuses the
5580 new value, the change will not be performed.
5581 </note>
5582 <note>
5583 On success, the
5584 <link to="IExtraDataChangedEvent"/> notification
5585 is called to inform all registered listeners about a successful data
5586 change.
5587 </note>
5588 <note>
5589 This method can be called outside the machine session and therefore
5590 it's a caller's responsibility to handle possible race conditions
5591 when several clients change the same key at the same time.
5592 </note>
5593
5594 <result name="VBOX_E_FILE_ERROR">
5595 Settings file not accessible.
5596 </result>
5597 <result name="VBOX_E_XML_ERROR">
5598 Could not parse the settings file.
5599 </result>
5600
5601 </desc>
5602 <param name="key" type="wstring" dir="in">
5603 <desc>Name of the data key to set.</desc>
5604 </param>
5605 <param name="value" type="wstring" dir="in">
5606 <desc>Value to assign to the key.</desc>
5607 </param>
5608 </method>
5609
5610 <method name="getCPUProperty" const="yes">
5611 <desc>
5612 Returns the virtual CPU boolean value of the specified property.
5613
5614 <result name="E_INVALIDARG">
5615 Invalid property.
5616 </result>
5617
5618 </desc>
5619 <param name="property" type="CPUPropertyType" dir="in">
5620 <desc>
5621 Property type to query.
5622 </desc>
5623 </param>
5624 <param name="value" type="boolean" dir="return">
5625 <desc>
5626 Property value.
5627 </desc>
5628 </param>
5629 </method>
5630
5631 <method name="setCPUProperty">
5632 <desc>
5633 Sets the virtual CPU boolean value of the specified property.
5634
5635 <result name="E_INVALIDARG">
5636 Invalid property.
5637 </result>
5638
5639 </desc>
5640 <param name="property" type="CPUPropertyType" dir="in">
5641 <desc>
5642 Property type to query.
5643 </desc>
5644 </param>
5645 <param name="value" type="boolean" dir="in">
5646 <desc>
5647 Property value.
5648 </desc>
5649 </param>
5650 </method>
5651
5652 <method name="getCPUIDLeaf" const="yes">
5653 <desc>
5654 Returns the virtual CPU cpuid information for the specified leaf.
5655
5656 Currently supported index values for cpuid:
5657 Standard CPUID leafs: 0 - 0xA
5658 Extended CPUID leafs: 0x80000000 - 0x8000000A
5659
5660 See the Intel and AMD programmer's manuals for detailed information
5661 about the cpuid instruction and its leafs.
5662 <result name="E_INVALIDARG">
5663 Invalid id.
5664 </result>
5665
5666 </desc>
5667 <param name="id" type="unsigned long" dir="in">
5668 <desc>
5669 CPUID leaf index.
5670 </desc>
5671 </param>
5672 <param name="valEax" type="unsigned long" dir="out">
5673 <desc>
5674 CPUID leaf value for register eax.
5675 </desc>
5676 </param>
5677 <param name="valEbx" type="unsigned long" dir="out">
5678 <desc>
5679 CPUID leaf value for register ebx.
5680 </desc>
5681 </param>
5682 <param name="valEcx" type="unsigned long" dir="out">
5683 <desc>
5684 CPUID leaf value for register ecx.
5685 </desc>
5686 </param>
5687 <param name="valEdx" type="unsigned long" dir="out">
5688 <desc>
5689 CPUID leaf value for register edx.
5690 </desc>
5691 </param>
5692 </method>
5693
5694 <method name="setCPUIDLeaf">
5695 <desc>
5696 Sets the virtual CPU cpuid information for the specified leaf. Note that these values
5697 are not passed unmodified. VirtualBox clears features that it doesn't support.
5698
5699 Currently supported index values for cpuid:
5700 Standard CPUID leafs: 0 - 0xA
5701 Extended CPUID leafs: 0x80000000 - 0x8000000A
5702
5703 See the Intel and AMD programmer's manuals for detailed information
5704 about the cpuid instruction and its leafs.
5705
5706 Do not use this method unless you know exactly what you're doing. Misuse can lead to
5707 random crashes inside VMs.
5708 <result name="E_INVALIDARG">
5709 Invalid id.
5710 </result>
5711
5712 </desc>
5713 <param name="id" type="unsigned long" dir="in">
5714 <desc>
5715 CPUID leaf index.
5716 </desc>
5717 </param>
5718 <param name="valEax" type="unsigned long" dir="in">
5719 <desc>
5720 CPUID leaf value for register eax.
5721 </desc>
5722 </param>
5723 <param name="valEbx" type="unsigned long" dir="in">
5724 <desc>
5725 CPUID leaf value for register ebx.
5726 </desc>
5727 </param>
5728 <param name="valEcx" type="unsigned long" dir="in">
5729 <desc>
5730 CPUID leaf value for register ecx.
5731 </desc>
5732 </param>
5733 <param name="valEdx" type="unsigned long" dir="in">
5734 <desc>
5735 CPUID leaf value for register edx.
5736 </desc>
5737 </param>
5738 </method>
5739
5740 <method name="removeCPUIDLeaf">
5741 <desc>
5742 Removes the virtual CPU cpuid leaf for the specified index
5743
5744 <result name="E_INVALIDARG">
5745 Invalid id.
5746 </result>
5747
5748 </desc>
5749 <param name="id" type="unsigned long" dir="in">
5750 <desc>
5751 CPUID leaf index.
5752 </desc>
5753 </param>
5754 </method>
5755
5756 <method name="removeAllCPUIDLeaves">
5757 <desc>
5758 Removes all the virtual CPU cpuid leaves
5759 </desc>
5760 </method>
5761
5762 <method name="getHWVirtExProperty" const="yes">
5763 <desc>
5764 Returns the value of the specified hardware virtualization boolean property.
5765
5766 <result name="E_INVALIDARG">
5767 Invalid property.
5768 </result>
5769
5770 </desc>
5771 <param name="property" type="HWVirtExPropertyType" dir="in">
5772 <desc>
5773 Property type to query.
5774 </desc>
5775 </param>
5776 <param name="value" type="boolean" dir="return">
5777 <desc>
5778 Property value.
5779 </desc>
5780 </param>
5781 </method>
5782
5783 <method name="setHWVirtExProperty">
5784 <desc>
5785 Sets a new value for the specified hardware virtualization boolean property.
5786
5787 <result name="E_INVALIDARG">
5788 Invalid property.
5789 </result>
5790
5791 </desc>
5792 <param name="property" type="HWVirtExPropertyType" dir="in">
5793 <desc>
5794 Property type to set.
5795 </desc>
5796 </param>
5797 <param name="value" type="boolean" dir="in">
5798 <desc>
5799 New property value.
5800 </desc>
5801 </param>
5802 </method>
5803
5804 <method name="saveSettings">
5805 <desc>
5806 Saves any changes to machine settings made since the session
5807 has been opened or a new machine has been created, or since the
5808 last call to <link to="#saveSettings"/> or <link to="#discardSettings"/>.
5809 For registered machines, new settings become visible to all
5810 other VirtualBox clients after successful invocation of this
5811 method.
5812 <note>
5813 The method sends <link to="IMachineDataChangedEvent"/>
5814 notification event after the configuration has been successfully
5815 saved (only for registered machines).
5816 </note>
5817 <note>
5818 Calling this method is only valid on instances returned
5819 by <link to="ISession::machine"/> and on new machines
5820 created by <link to="IVirtualBox::createMachine"/> but not
5821 yet registered, or on unregistered machines after calling
5822 <link to="IMachine::unregister"/>.
5823 </note>
5824
5825 <result name="VBOX_E_FILE_ERROR">
5826 Settings file not accessible.
5827 </result>
5828 <result name="VBOX_E_XML_ERROR">
5829 Could not parse the settings file.
5830 </result>
5831 <result name="E_ACCESSDENIED">
5832 Modification request refused.
5833 </result>
5834
5835 </desc>
5836 </method>
5837
5838 <method name="discardSettings">
5839 <desc>
5840 Discards any changes to the machine settings made since the session
5841 has been opened or since the last call to <link to="#saveSettings"/>
5842 or <link to="#discardSettings"/>.
5843 <note>
5844 Calling this method is only valid on instances returned
5845 by <link to="ISession::machine"/> and on new machines
5846 created by <link to="IVirtualBox::createMachine"/> or
5847 opened by <link to="IVirtualBox::openMachine"/> but not
5848 yet registered, or on unregistered machines after calling
5849 <link to="IMachine::unregister"/>.
5850 </note>
5851
5852 <result name="VBOX_E_INVALID_VM_STATE">
5853 Virtual machine is not mutable.
5854 </result>
5855
5856 </desc>
5857 </method>
5858
5859 <method name="unregister">
5860 <desc>
5861 Unregisters a machine previously registered with
5862 <link to="IVirtualBox::registerMachine"/> and optionally do additional
5863 cleanup before the machine is unregistered.
5864
5865 This method does not delete any files. It only changes the machine configuration and
5866 the list of registered machines in the VirtualBox object. To delete the files which
5867 belonged to the machine, including the XML file of the machine itself, call
5868 <link to="#delete"/>, optionally with the array of IMedium objects which was returned
5869 from this method.
5870
5871 How thoroughly this method cleans up the machine configuration before unregistering
5872 the machine depends on the @a cleanupMode argument.
5873
5874 <ul>
5875 <li>With "UnregisterOnly", the machine will only be unregistered, but no additional
5876 cleanup will be performed. The call will fail if the machine is in "Saved" state
5877 or has any snapshots or any media attached (see <link to="IMediumAttachment" />).
5878 It is the responsibility of the caller to delete all such configuration in this mode.
5879 In this mode, the API behaves like the former @c IVirtualBox::unregisterMachine() API
5880 which it replaces.</li>
5881 <li>With "DetachAllReturnNone", the call will succeed even if the machine is in "Saved"
5882 state or if it has snapshots or media attached. All media attached to the current machine
5883 state or in snapshots will be detached. No medium objects will be returned;
5884 all of the machine's media will remain open.</li>
5885 <li>With "DetachAllReturnHardDisksOnly", the call will behave like with "DetachAllReturnNone",
5886 except that all the hard disk medium objects which were detached from the machine will
5887 be returned as an array. This allows for quickly passing them to the <link to="#delete" />
5888 API for closing and deletion.</li>
5889 <li>With "Full", the call will behave like with "DetachAllReturnHardDisksOnly", except
5890 that all media will be returned in the array, including removable media like DVDs and
5891 floppies. This might be useful if the user wants to inspect in detail which media were
5892 attached to the machine. Be careful when passing the media array to <link to="#delete" />
5893 in that case because users will typically want to preserve ISO and RAW image files.</li>
5894 </ul>
5895
5896 A typical implementation will use "DetachAllReturnHardDisksOnly" and then pass the
5897 resulting IMedium array to <link to="#delete"/>. This way, the machine is completely
5898 deleted with all its saved states and hard disk images, but images for removable
5899 drives (such as ISO and RAW files) will remain on disk.
5900
5901 This API does not verify whether the media files returned in the array are still
5902 attached to other machines (i.e. shared between several machines). If such a shared
5903 image is passed to <link to="#delete" /> however, closing the image will fail there
5904 and the image will be silently skipped.
5905
5906 This API may, however, move media from this machine's media registry to other media
5907 registries (see <link to="IMedium" /> for details on media registries). For machines
5908 created with VirtualBox 4.0 or later, if media from this machine's media registry
5909 are also attached to another machine (shared attachments), each such medium will be
5910 moved to another machine's registry. This is because without this machine's media
5911 registry, the other machine cannot find its media any more and would become inaccessible.
5912
5913 This API implicitly calls <link to="#saveSettings"/> to save all current machine settings
5914 before unregistering it. It may also silently call <link to="#saveSettings"/> on other machines
5915 if media are moved to other machines' media registries.
5916
5917 After successful method invocation, the <link to="IMachineRegisteredEvent"/> event
5918 is fired.
5919
5920 The call will fail if the machine is currently locked (see <link to="ISession" />).
5921
5922 <note>
5923 If the given machine is inaccessible (see <link to="#accessible"/>), it
5924 will be unregistered and fully uninitialized right afterwards. As a result,
5925 the returned machine object will be unusable and an attempt to call
5926 <b>any</b> method will return the "Object not ready" error.
5927 </note>
5928
5929 <result name="VBOX_E_INVALID_OBJECT_STATE">
5930 Machine is currently locked for a session.
5931 </result>
5932 </desc>
5933
5934 <param name="cleanupMode" type="CleanupMode" dir="in">
5935 <desc>How to clean up after the machine has been unregistered.</desc>
5936 </param>
5937 <param name="aMedia" type="IMedium" safearray="yes" dir="return">
5938 <desc>List of media detached from the machine, depending on the @a cleanupMode parameter.</desc>
5939 </param>
5940 </method>
5941
5942 <method name="delete">
5943 <desc>
5944 Deletes the files associated with this machine from disk. If medium objects are passed
5945 in with the @a aMedia argument, they are closed and, if closing was successful, their
5946 storage files are deleted as well. For convenience, this array of media files can be
5947 the same as the one returned from a previous <link to="#unregister" /> call.
5948
5949 This method must only be called on machines which are either write-locked (i.e. on instances
5950 returned by <link to="ISession::machine"/>) or on unregistered machines (i.e. not yet
5951 registered machines created by <link to="IVirtualBox::createMachine"/> or opened by
5952 <link to="IVirtualBox::openMachine"/>, or after having called <link to="#unregister"/>).
5953
5954 The following files will be deleted by this method:
5955 <ul>
5956 <li>If <link to="#unregister" /> had been previously called with a @a cleanupMode
5957 argument other than "UnregisterOnly", this will delete all saved state files that
5958 the machine had in use; possibly one if the machine was in "Saved" state and one
5959 for each online snapshot that the machine had.</li>
5960 <li>On each medium object passed in the @a aMedia array, this will call
5961 <link to="IMedium::close" />. If that succeeds, this will attempt to delete the
5962 medium's storage on disk. Since the <link to="IMedium::close"/> call will fail if the medium is still
5963 in use, e.g. because it is still attached to a second machine; in that case the
5964 storage will not be deleted.</li>
5965 <li>Finally, the machine's own XML file will be deleted.</li>
5966 </ul>
5967
5968 Since deleting large disk image files can be a time-consuming I/O operation, this
5969 method operates asynchronously and returns an IProgress object to allow the caller
5970 to monitor the progress. There will be one sub-operation for each file that is
5971 being deleted (saved state or medium storage file).
5972
5973 <note>
5974 <link to="#settingsModified"/> will return @c true after this
5975 method successfully returns.
5976 </note>
5977
5978 <result name="VBOX_E_INVALID_VM_STATE">
5979 Machine is registered but not write-locked.
5980 </result>
5981 <result name="VBOX_E_IPRT_ERROR">
5982 Could not delete the settings file.
5983 </result>
5984 </desc>
5985 <param name="aMedia" type="IMedium" safearray="yes" dir="in">
5986 <desc>List of media to be closed and whose storage files will be deleted.</desc>
5987 </param>
5988 <param name="aProgress" type="IProgress" dir="return">
5989 <desc>Progress object to track the operation completion.</desc>
5990 </param>
5991 </method>
5992
5993 <method name="export">
5994 <desc>Exports the machine to an OVF appliance. See <link to="IAppliance" /> for the
5995 steps required to export VirtualBox machines to OVF.
5996 </desc>
5997
5998 <param name="aAppliance" type="IAppliance" dir="in">
5999 <desc>Appliance to export this machine to.</desc>
6000 </param>
6001 <param name="location" type="wstring" dir="in">
6002 <desc>The target location.</desc>
6003 </param>
6004 <param name="aDescription" type="IVirtualSystemDescription" dir="return">
6005 <desc>VirtualSystemDescription object which is created for this machine.</desc>
6006 </param>
6007 </method >
6008
6009 <method name="findSnapshot">
6010 <desc>
6011 Returns a snapshot of this machine with the given name or UUID.
6012
6013 Returns a snapshot of this machine with the given UUID.
6014 A @c null argument can be used to obtain the first snapshot
6015 taken on this machine. To traverse the whole tree of snapshots
6016 starting from the root, inspect the root snapshot's
6017 <link to="ISnapshot::children" /> attribute and recurse over those children.
6018
6019 <result name="VBOX_E_OBJECT_NOT_FOUND">
6020 Virtual machine has no snapshots or snapshot not found.
6021 </result>
6022
6023 </desc>
6024 <param name="nameOrId" type="wstring" dir="in">
6025 <desc>What to search for. Name or UUID of the snapshot to find</desc>
6026 </param>
6027 <param name="snapshot" type="ISnapshot" dir="return">
6028 <desc>Snapshot object with the given name.</desc>
6029 </param>
6030 </method>
6031
6032 <method name="createSharedFolder">
6033 <desc>
6034 Creates a new permanent shared folder by associating the given logical
6035 name with the given host path, adds it to the collection of shared
6036 folders and starts sharing it. Refer to the description of
6037 <link to="ISharedFolder"/> to read more about logical names.
6038
6039 <result name="VBOX_E_OBJECT_IN_USE">
6040 Shared folder already exists.
6041 </result>
6042 <result name="VBOX_E_FILE_ERROR">
6043 Shared folder @a hostPath not accessible.
6044 </result>
6045
6046 </desc>
6047 <param name="name" type="wstring" dir="in">
6048 <desc>Unique logical name of the shared folder.</desc>
6049 </param>
6050 <param name="hostPath" type="wstring" dir="in">
6051 <desc>Full path to the shared folder in the host file system.</desc>
6052 </param>
6053 <param name="writable" type="boolean" dir="in">
6054 <desc>Whether the share is writable or readonly.</desc>
6055 </param>
6056 <param name="automount" type="boolean" dir="in">
6057 <desc>Whether the share gets automatically mounted by the guest
6058 or not.</desc>
6059 </param>
6060 </method>
6061
6062 <method name="removeSharedFolder">
6063 <desc>
6064 Removes the permanent shared folder with the given name previously
6065 created by <link to="#createSharedFolder"/> from the collection of
6066 shared folders and stops sharing it.
6067
6068 <result name="VBOX_E_INVALID_VM_STATE">
6069 Virtual machine is not mutable.
6070 </result>
6071 <result name="VBOX_E_OBJECT_NOT_FOUND">
6072 Shared folder @a name does not exist.
6073 </result>
6074
6075 </desc>
6076 <param name="name" type="wstring" dir="in">
6077 <desc>Logical name of the shared folder to remove.</desc>
6078 </param>
6079 </method>
6080
6081 <method name="canShowConsoleWindow">
6082 <desc>
6083 Returns @c true if the VM console process can activate the
6084 console window and bring it to foreground on the desktop of
6085 the host PC.
6086 <note>
6087 This method will fail if a session for this machine is not
6088 currently open.
6089 </note>
6090
6091 <result name="VBOX_E_INVALID_VM_STATE">
6092 Machine session is not open.
6093 </result>
6094
6095 </desc>
6096 <param name="canShow" type="boolean" dir="return">
6097 <desc>
6098 @c true if the console window can be shown and @c false otherwise.
6099 </desc>
6100 </param>
6101 </method>
6102
6103 <method name="showConsoleWindow">
6104 <desc>
6105 Activates the console window and brings it to foreground on
6106 the desktop of the host PC. Many modern window managers on
6107 many platforms implement some sort of focus stealing
6108 prevention logic, so that it may be impossible to activate
6109 a window without the help of the currently active
6110 application. In this case, this method will return a non-zero
6111 identifier that represents the top-level window of the VM
6112 console process. The caller, if it represents a currently
6113 active process, is responsible to use this identifier (in a
6114 platform-dependent manner) to perform actual window
6115 activation.
6116 <note>
6117 This method will fail if a session for this machine is not
6118 currently open.
6119 </note>
6120
6121 <result name="VBOX_E_INVALID_VM_STATE">
6122 Machine session is not open.
6123 </result>
6124
6125 </desc>
6126 <param name="winId" type="long long" dir="return">
6127 <desc>
6128 Platform-dependent identifier of the top-level VM console
6129 window, or zero if this method has performed all actions
6130 necessary to implement the <i>show window</i> semantics for
6131 the given platform and/or VirtualBox front-end.
6132 </desc>
6133 </param>
6134 </method>
6135
6136 <method name="getGuestProperty" const="yes">
6137 <desc>
6138 Reads an entry from the machine's guest property store.
6139
6140 <result name="VBOX_E_INVALID_VM_STATE">
6141 Machine session is not open.
6142 </result>
6143
6144 </desc>
6145 <param name="name" type="wstring" dir="in">
6146 <desc>
6147 The name of the property to read.
6148 </desc>
6149 </param>
6150 <param name="value" type="wstring" dir="out">
6151 <desc>
6152 The value of the property. If the property does not exist then this
6153 will be empty.
6154 </desc>
6155 </param>
6156 <param name="timestamp" type="long long" dir="out">
6157 <desc>
6158 The time at which the property was last modified, as seen by the
6159 server process.
6160 </desc>
6161 </param>
6162 <param name="flags" type="wstring" dir="out">
6163 <desc>
6164 Additional property parameters, passed as a comma-separated list of
6165 "name=value" type entries.
6166 </desc>
6167 </param>
6168 </method>
6169
6170 <method name="getGuestPropertyValue" const="yes">
6171 <desc>
6172 Reads a value from the machine's guest property store.
6173
6174 <result name="VBOX_E_INVALID_VM_STATE">
6175 Machine session is not open.
6176 </result>
6177
6178 </desc>
6179 <param name="property" type="wstring" dir="in">
6180 <desc>
6181 The name of the property to read.
6182 </desc>
6183 </param>
6184 <param name="value" type="wstring" dir="return">
6185 <desc>
6186 The value of the property. If the property does not exist then this
6187 will be empty.
6188 </desc>
6189 </param>
6190 </method>
6191
6192 <method name="getGuestPropertyTimestamp" const="yes">
6193 <desc>
6194 Reads a property timestamp from the machine's guest property store.
6195
6196 <result name="VBOX_E_INVALID_VM_STATE">
6197 Machine session is not open.
6198 </result>
6199
6200 </desc>
6201 <param name="property" type="wstring" dir="in">
6202 <desc>
6203 The name of the property to read.
6204 </desc>
6205 </param>
6206 <param name="value" type="long long" dir="return">
6207 <desc>
6208 The timestamp. If the property does not exist then this will be
6209 empty.
6210 </desc>
6211 </param>
6212 </method>
6213
6214 <method name="setGuestProperty">
6215 <desc>
6216 Sets, changes or deletes an entry in the machine's guest property
6217 store.
6218
6219 <result name="E_ACCESSDENIED">
6220 Property cannot be changed.
6221 </result>
6222 <result name="E_INVALIDARG">
6223 Invalid @a flags.
6224 </result>
6225 <result name="VBOX_E_INVALID_VM_STATE">
6226 Virtual machine is not mutable or session not open.
6227 </result>
6228 <result name="VBOX_E_INVALID_OBJECT_STATE">
6229 Cannot set transient property when machine not running.
6230 </result>
6231
6232 </desc>
6233 <param name="property" type="wstring" dir="in">
6234 <desc>
6235 The name of the property to set, change or delete.
6236 </desc>
6237 </param>
6238 <param name="value" type="wstring" dir="in">
6239 <desc>
6240 The new value of the property to set, change or delete. If the
6241 property does not yet exist and value is non-empty, it will be
6242 created. If the value is @c null or empty, the property will be
6243 deleted if it exists.
6244 </desc>
6245 </param>
6246 <param name="flags" type="wstring" dir="in">
6247 <desc>
6248 Additional property parameters, passed as a comma-separated list of
6249 "name=value" type entries.
6250 </desc>
6251 </param>
6252 </method>
6253
6254 <method name="setGuestPropertyValue">
6255 <desc>
6256 Sets, changes or deletes a value in the machine's guest property
6257 store. The flags field will be left unchanged or created empty for a
6258 new property.
6259
6260 <result name="E_ACCESSDENIED">
6261 Property cannot be changed.
6262 </result>
6263 <result name="VBOX_E_INVALID_VM_STATE">
6264 Virtual machine is not mutable or session not open.
6265 </result>
6266 <result name="VBOX_E_INVALID_OBJECT_STATE">
6267 Cannot set transient property when machine not running.
6268 </result>
6269 </desc>
6270
6271 <param name="property" type="wstring" dir="in">
6272 <desc>
6273 The name of the property to set, change or delete.
6274 </desc>
6275 </param>
6276 <param name="value" type="wstring" dir="in">
6277 <desc>
6278 The new value of the property to set, change or delete. If the
6279 property does not yet exist and value is non-empty, it will be
6280 created. If the value is @c null or empty, the property will be
6281 deleted if it exists.
6282 </desc>
6283 </param>
6284 </method>
6285
6286 <method name="deleteGuestProperty" const="yes">
6287 <desc>
6288 Deletes an entry from the machine's guest property store.
6289
6290 <result name="VBOX_E_INVALID_VM_STATE">
6291 Machine session is not open.
6292 </result>
6293
6294 </desc>
6295 <param name="name" type="wstring" dir="in">
6296 <desc>
6297 The name of the property to delete.
6298 </desc>
6299 </param>
6300 </method>
6301
6302 <method name="enumerateGuestProperties" const="yes">
6303 <desc>
6304 Return a list of the guest properties matching a set of patterns along
6305 with their values, time stamps and flags.
6306 </desc>
6307 <param name="patterns" type="wstring" dir="in">
6308 <desc>
6309 The patterns to match the properties against, separated by '|'
6310 characters. If this is empty or @c null, all properties will match.
6311 </desc>
6312 </param>
6313 <param name="name" type="wstring" dir="out" safearray="yes">
6314 <desc>
6315 The names of the properties returned.
6316 </desc>
6317 </param>
6318 <param name="value" type="wstring" dir="out" safearray="yes">
6319 <desc>
6320 The values of the properties returned. The array entries match the
6321 corresponding entries in the @a name array.
6322 </desc>
6323 </param>
6324 <param name="timestamp" type="long long" dir="out" safearray="yes">
6325 <desc>
6326 The time stamps of the properties returned. The array entries match
6327 the corresponding entries in the @a name array.
6328 </desc>
6329 </param>
6330 <param name="flags" type="wstring" dir="out" safearray="yes">
6331 <desc>
6332 The flags of the properties returned. The array entries match the
6333 corresponding entries in the @a name array.
6334 </desc>
6335 </param>
6336 </method>
6337
6338 <method name="querySavedGuestScreenInfo" const="yes">
6339 <desc>
6340 Returns the guest dimensions from the saved state.
6341 </desc>
6342 <param name="screenId" type="unsigned long" dir="in">
6343 <desc>
6344 Saved guest screen to query info from.
6345 </desc>
6346 </param>
6347 <param name="originX" type="unsigned long" dir="out">
6348 <desc>
6349 The X position of the guest monitor top left corner.
6350 </desc>
6351 </param>
6352 <param name="originY" type="unsigned long" dir="out">
6353 <desc>
6354 The Y position of the guest monitor top left corner.
6355 </desc>
6356 </param>
6357 <param name="width" type="unsigned long" dir="out">
6358 <desc>
6359 Guest width at the time of the saved state was taken.
6360 </desc>
6361 </param>
6362 <param name="height" type="unsigned long" dir="out">
6363 <desc>
6364 Guest height at the time of the saved state was taken.
6365 </desc>
6366 </param>
6367 <param name="enabled" type="boolean" dir="out">
6368 <desc>
6369 Whether the monitor is enabled in the guest.
6370 </desc>
6371 </param>
6372 </method>
6373
6374 <method name="querySavedThumbnailSize">
6375 <desc>
6376 Returns size in bytes and dimensions in pixels of a saved thumbnail bitmap from saved state.
6377 </desc>
6378 <param name="screenId" type="unsigned long" dir="in">
6379 <desc>
6380 Saved guest screen to query info from.
6381 </desc>
6382 </param>
6383 <param name="size" type="unsigned long" dir="out">
6384 <desc>
6385 Size of buffer required to store the bitmap.
6386 </desc>
6387 </param>
6388 <param name="width" type="unsigned long" dir="out">
6389 <desc>
6390 Bitmap width.
6391 </desc>
6392 </param>
6393 <param name="height" type="unsigned long" dir="out">
6394 <desc>
6395 Bitmap height.
6396 </desc>
6397 </param>
6398 </method>
6399
6400 <method name="readSavedThumbnailToArray">
6401 <desc>
6402 Thumbnail is retrieved to an array of bytes in uncompressed 32-bit BGRA or RGBA format.
6403 </desc>
6404 <param name="screenId" type="unsigned long" dir="in">
6405 <desc>
6406 Saved guest screen to read from.
6407 </desc>
6408 </param>
6409 <param name="BGR" type="boolean" dir="in">
6410 <desc>
6411 How to order bytes in the pixel. A pixel consists of 4 bytes. If this parameter is true, then
6412 bytes order is: B, G, R, 0xFF. If this parameter is false, then bytes order is: R, G, B, 0xFF.
6413 </desc>
6414 </param>
6415 <param name="width" type="unsigned long" dir="out">
6416 <desc>
6417 Bitmap width.
6418 </desc>
6419 </param>
6420 <param name="height" type="unsigned long" dir="out">
6421 <desc>
6422 Bitmap height.
6423 </desc>
6424 </param>
6425 <param name="data" type="octet" safearray="yes" dir="return">
6426 <desc>
6427 Array with resulting bitmap data.
6428 </desc>
6429 </param>
6430 </method>
6431
6432 <method name="readSavedThumbnailPNGToArray">
6433 <desc>
6434 Thumbnail in PNG format is retrieved to an array of bytes.
6435 </desc>
6436 <param name="screenId" type="unsigned long" dir="in">
6437 <desc>
6438 Saved guest screen to read from.
6439 </desc>
6440 </param>
6441 <param name="width" type="unsigned long" dir="out">
6442 <desc>
6443 Image width.
6444 </desc>
6445 </param>
6446 <param name="height" type="unsigned long" dir="out">
6447 <desc>
6448 Image height.
6449 </desc>
6450 </param>
6451 <param name="data" type="octet" dir="return" safearray="yes">
6452 <desc>
6453 Array with resulting PNG data.
6454 </desc>
6455 </param>
6456 </method>
6457
6458 <method name="querySavedScreenshotPNGSize">
6459 <desc>
6460 Returns size in bytes and dimensions of a saved PNG image of screenshot from saved state.
6461 </desc>
6462 <param name="screenId" type="unsigned long" dir="in">
6463 <desc>
6464 Saved guest screen to query info from.
6465 </desc>
6466 </param>
6467 <param name="size" type="unsigned long" dir="out">
6468 <desc>
6469 Size of buffer required to store the PNG binary data.
6470 </desc>
6471 </param>
6472 <param name="width" type="unsigned long" dir="out">
6473 <desc>
6474 Image width.
6475 </desc>
6476 </param>
6477 <param name="height" type="unsigned long" dir="out">
6478 <desc>
6479 Image height.
6480 </desc>
6481 </param>
6482 </method>
6483
6484 <method name="readSavedScreenshotPNGToArray">
6485 <desc>
6486 Screenshot in PNG format is retrieved to an array of bytes.
6487 </desc>
6488 <param name="screenId" type="unsigned long" dir="in">
6489 <desc>
6490 Saved guest screen to read from.
6491 </desc>
6492 </param>
6493 <param name="width" type="unsigned long" dir="out">
6494 <desc>
6495 Image width.
6496 </desc>
6497 </param>
6498 <param name="height" type="unsigned long" dir="out">
6499 <desc>
6500 Image height.
6501 </desc>
6502 </param>
6503 <param name="data" type="octet" dir="return" safearray="yes">
6504 <desc>
6505 Array with resulting PNG data.
6506 </desc>
6507 </param>
6508 </method>
6509
6510 <method name="hotPlugCPU">
6511 <desc>
6512 Plugs a CPU into the machine.
6513 </desc>
6514 <param name="cpu" type="unsigned long" dir="in">
6515 <desc>
6516 The CPU id to insert.
6517 </desc>
6518 </param>
6519 </method>
6520
6521 <method name="hotUnplugCPU">
6522 <desc>
6523 Removes a CPU from the machine.
6524 </desc>
6525 <param name="cpu" type="unsigned long" dir="in">
6526 <desc>
6527 The CPU id to remove.
6528 </desc>
6529 </param>
6530 </method>
6531
6532 <method name="getCPUStatus">
6533 <desc>
6534 Returns the current status of the given CPU.
6535 </desc>
6536 <param name="cpu" type="unsigned long" dir="in">
6537 <desc>
6538 The CPU id to check for.
6539 </desc>
6540 </param>
6541 <param name="attached" type="boolean" dir="return">
6542 <desc>
6543 Status of the CPU.
6544 </desc>
6545 </param>
6546 </method>
6547
6548 <method name="queryLogFilename">
6549 <desc>
6550 Queries for the VM log file name of an given index. Returns an empty
6551 string if a log file with that index doesn't exists.
6552 </desc>
6553 <param name="idx" type="unsigned long" dir="in">
6554 <desc>
6555 Which log file name to query. 0=current log file.
6556 </desc>
6557 </param>
6558 <param name="filename" type="wstring" dir="return">
6559 <desc>
6560 On return the full path to the log file or an empty string on error.
6561 </desc>
6562 </param>
6563 </method>
6564
6565 <method name="readLog">
6566 <desc>
6567 Reads the VM log file. The chunk size is limited, so even if you
6568 ask for a big piece there might be less data returned.
6569 </desc>
6570 <param name="idx" type="unsigned long" dir="in">
6571 <desc>
6572 Which log file to read. 0=current log file.
6573 </desc>
6574 </param>
6575 <param name="offset" type="long long" dir="in">
6576 <desc>
6577 Offset in the log file.
6578 </desc>
6579 </param>
6580 <param name="size" type="long long" dir="in">
6581 <desc>
6582 Chunk size to read in the log file.
6583 </desc>
6584 </param>
6585 <param name="data" type="octet" dir="return" safearray="yes">
6586 <desc>
6587 Data read from the log file. A data size of 0 means end of file
6588 if the requested chunk size was not 0. This is the unprocessed
6589 file data, i.e. the line ending style depends on the platform of
6590 the system the server is running on.
6591 </desc>
6592 </param>
6593 </method>
6594
6595 <method name="cloneTo">
6596 <desc>
6597 Creates a clone of this machine, either as a full clone (which means
6598 creating independent copies of the hard disk media, save states and so
6599 on), or as a linked clone (which uses its own differencing media,
6600 sharing the parent media with the source machine).
6601
6602 The target machine object must have been created previously with <link
6603 to="IVirtualBox::createMachine"/>, and all the settings will be
6604 transferred except the VM name and the hardware UUID. You can set the
6605 VM name and the new hardware UUID when creating the target machine. The
6606 network MAC addresses are newly created for all newtwork adapters. You
6607 can change that behaviour with the options parameter. The operation is
6608 performed asynchronously, so the machine object will be not be usable
6609 until the @a progress object signals completion.
6610
6611 <result name="E_INVALIDARG">
6612 @a target is @c null.
6613 </result>
6614 </desc>
6615
6616 <param name="target" type="IMachine" dir="in">
6617 <desc>Target machine object.</desc>
6618 </param>
6619 <param name="mode" type="CloneMode" dir="in">
6620 <desc>Which states should be cloned.</desc>
6621 </param>
6622 <param name="options" type="CloneOptions" dir="in" safearray="yes">
6623 <desc>Options for the cloning operation.</desc>
6624 </param>
6625 <param name="progress" type="IProgress" dir="return">
6626 <desc>Progress object to track the operation completion.</desc>
6627 </param>
6628 </method>
6629
6630 </interface>
6631
6632 <!--
6633 // IConsole
6634 /////////////////////////////////////////////////////////////////////////
6635 -->
6636
6637 <interface
6638 name="IVRDEServerInfo" extends="$unknown"
6639 uuid="714434a1-58c3-4aab-9049-7652c5df113b"
6640 wsmap="struct"
6641 >
6642 <desc>
6643 Contains information about the remote desktop (VRDE) server capabilities and status.
6644 This is used in the <link to="IConsole::VRDEServerInfo" /> attribute.
6645 </desc>
6646
6647 <attribute name="active" type="boolean" readonly="yes">
6648 <desc>
6649 Whether the remote desktop connection is active.
6650 </desc>
6651 </attribute>
6652
6653 <attribute name="port" type="long" readonly="yes">
6654 <desc>
6655 VRDE server port number. If this property is equal to <tt>0</tt>, then
6656 the VRDE server failed to start, usually because there are no free IP
6657 ports to bind to. If this property is equal to <tt>-1</tt>, then the VRDE
6658 server has not yet been started.
6659 </desc>
6660 </attribute>
6661
6662 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
6663 <desc>
6664 How many times a client connected.
6665 </desc>
6666 </attribute>
6667
6668 <attribute name="beginTime" type="long long" readonly="yes">
6669 <desc>
6670 When the last connection was established, in milliseconds since 1970-01-01 UTC.
6671 </desc>
6672 </attribute>
6673
6674 <attribute name="endTime" type="long long" readonly="yes">
6675 <desc>
6676 When the last connection was terminated or the current time, if
6677 connection is still active, in milliseconds since 1970-01-01 UTC.
6678 </desc>
6679 </attribute>
6680
6681 <attribute name="bytesSent" type="long long" readonly="yes">
6682 <desc>
6683 How many bytes were sent in last or current, if still active, connection.
6684 </desc>
6685 </attribute>
6686
6687 <attribute name="bytesSentTotal" type="long long" readonly="yes">
6688 <desc>
6689 How many bytes were sent in all connections.
6690 </desc>
6691 </attribute>
6692
6693 <attribute name="bytesReceived" type="long long" readonly="yes">
6694 <desc>
6695 How many bytes were received in last or current, if still active, connection.
6696 </desc>
6697 </attribute>
6698
6699 <attribute name="bytesReceivedTotal" type="long long" readonly="yes">
6700 <desc>
6701 How many bytes were received in all connections.
6702 </desc>
6703 </attribute>
6704
6705 <attribute name="user" type="wstring" readonly="yes">
6706 <desc>
6707 Login user name supplied by the client.
6708 </desc>
6709 </attribute>
6710
6711 <attribute name="domain" type="wstring" readonly="yes">
6712 <desc>
6713 Login domain name supplied by the client.
6714 </desc>
6715 </attribute>
6716
6717 <attribute name="clientName" type="wstring" readonly="yes">
6718 <desc>
6719 The client name supplied by the client.
6720 </desc>
6721 </attribute>
6722
6723 <attribute name="clientIP" type="wstring" readonly="yes">
6724 <desc>
6725 The IP address of the client.
6726 </desc>
6727 </attribute>
6728
6729 <attribute name="clientVersion" type="unsigned long" readonly="yes">
6730 <desc>
6731 The client software version number.
6732 </desc>
6733 </attribute>
6734
6735 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
6736 <desc>
6737 Public key exchange method used when connection was established.
6738 Values: 0 - RDP4 public key exchange scheme.
6739 1 - X509 certificates were sent to client.
6740 </desc>
6741 </attribute>
6742
6743 </interface>
6744
6745 <interface
6746 name="IConsole" extends="$unknown"
6747 uuid="db7ab4ca-2a3f-4183-9243-c1208da92392"
6748 wsmap="managed"
6749 >
6750 <desc>
6751 The IConsole interface represents an interface to control virtual
6752 machine execution.
6753
6754 A console object gets created when a machine has been locked for a
6755 particular session (client process) using <link to="IMachine::lockMachine" />
6756 or <link to="IMachine::launchVMProcess"/>. The console object can
6757 then be found in the session's <link to="ISession::console" /> attribute.
6758
6759 Methods of the IConsole interface allow the caller to query the current
6760 virtual machine execution state, pause the machine or power it down, save
6761 the machine state or take a snapshot, attach and detach removable media
6762 and so on.
6763
6764 <see><link to="ISession"/></see>
6765 </desc>
6766
6767 <attribute name="machine" type="IMachine" readonly="yes">
6768 <desc>
6769 Machine object for this console session.
6770 <note>
6771 This is a convenience property, it has the same value as
6772 <link to="ISession::machine"/> of the corresponding session
6773 object.
6774 </note>
6775 </desc>
6776 </attribute>
6777
6778 <attribute name="state" type="MachineState" readonly="yes">
6779 <desc>
6780 Current execution state of the machine.
6781 <note>
6782 This property always returns the same value as the corresponding
6783 property of the IMachine object for this console session.
6784 For the process that owns (executes) the VM, this is the
6785 preferable way of querying the VM state, because no IPC
6786 calls are made.
6787 </note>
6788 </desc>
6789 </attribute>
6790
6791 <attribute name="guest" type="IGuest" readonly="yes">
6792 <desc>Guest object.</desc>
6793 </attribute>
6794
6795 <attribute name="keyboard" type="IKeyboard" readonly="yes">
6796 <desc>
6797 Virtual keyboard object.
6798 <note>
6799 If the machine is not running, any attempt to use
6800 the returned object will result in an error.
6801 </note>
6802 </desc>
6803 </attribute>
6804
6805 <attribute name="mouse" type="IMouse" readonly="yes">
6806 <desc>
6807 Virtual mouse object.
6808 <note>
6809 If the machine is not running, any attempt to use
6810 the returned object will result in an error.
6811 </note>
6812 </desc>
6813 </attribute>
6814
6815 <attribute name="display" type="IDisplay" readonly="yes">
6816 <desc>Virtual display object.
6817 <note>
6818 If the machine is not running, any attempt to use
6819 the returned object will result in an error.
6820 </note>
6821 </desc>
6822 </attribute>
6823
6824 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
6825 <desc>Debugging interface.</desc>
6826 </attribute>
6827
6828 <attribute name="USBDevices" type="IUSBDevice" readonly="yes" safearray="yes">
6829 <desc>
6830 Collection of USB devices currently attached to the virtual
6831 USB controller.
6832 <note>
6833 The collection is empty if the machine is not running.
6834 </note>
6835 </desc>
6836 </attribute>
6837
6838 <attribute name="remoteUSBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
6839 <desc>
6840 List of USB devices currently attached to the remote VRDE client.
6841 Once a new device is physically attached to the remote host computer,
6842 it appears in this list and remains there until detached.
6843 </desc>
6844 </attribute>
6845
6846 <attribute name="sharedFolders" type="ISharedFolder" readonly="yes" safearray="yes">
6847 <desc>
6848 Collection of shared folders for the current session. These folders
6849 are called transient shared folders because they are available to the
6850 guest OS running inside the associated virtual machine only for the
6851 duration of the session (as opposed to
6852 <link to="IMachine::sharedFolders"/> which represent permanent shared
6853 folders). When the session is closed (e.g. the machine is powered down),
6854 these folders are automatically discarded.
6855
6856 New shared folders are added to the collection using
6857 <link to="#createSharedFolder"/>. Existing shared folders can be
6858 removed using <link to="#removeSharedFolder"/>.
6859 </desc>
6860 </attribute>
6861
6862 <attribute name="VRDEServerInfo" type="IVRDEServerInfo" readonly="yes">
6863 <desc>
6864 Interface that provides information on Remote Desktop Extension (VRDE) connection.
6865 </desc>
6866 </attribute>
6867
6868 <attribute name="eventSource" type="IEventSource" readonly="yes">
6869 <desc>
6870 Event source for console events.
6871 </desc>
6872 </attribute>
6873
6874 <attribute name="attachedPCIDevices" type="IPCIDeviceAttachment" readonly="yes" safearray="yes">
6875 <desc>Array of PCI devices attached to this machine.</desc>
6876 </attribute>
6877
6878 <attribute name="useHostClipboard" type="boolean">
6879 <desc>
6880 Whether the guest clipboard should be connected to the host one or
6881 whether it should only be allowed access to the VRDE clipboard. This
6882 setting may not affect existing guest clipboard connections which
6883 are already connected to the host clipboard.
6884 </desc>
6885 </attribute>
6886
6887 <method name="powerUp">
6888 <desc>
6889 Starts the virtual machine execution using the current machine
6890 state (that is, its current execution state, current settings and
6891 current storage devices).
6892
6893 <note>
6894 This method is only useful for front-ends that want to actually
6895 execute virtual machines in their own process (like the VirtualBox
6896 or VBoxSDL front-ends). Unless you are intending to write such a
6897 front-end, do not call this method. If you simply want to
6898 start virtual machine execution using one of the existing front-ends
6899 (for example the VirtualBox GUI or headless server), use
6900 <link to="IMachine::launchVMProcess"/> instead; these
6901 front-ends will power up the machine automatically for you.
6902 </note>
6903
6904 If the machine is powered off or aborted, the execution will
6905 start from the beginning (as if the real hardware were just
6906 powered on).
6907
6908 If the machine is in the <link to="MachineState_Saved"/> state,
6909 it will continue its execution the point where the state has
6910 been saved.
6911
6912 If the machine <link to="IMachine::teleporterEnabled"/> property is
6913 enabled on the machine being powered up, the machine will wait for an
6914 incoming teleportation in the <link to="MachineState_TeleportingIn"/>
6915 state. The returned progress object will have at least three
6916 operations where the last three are defined as: (1) powering up and
6917 starting TCP server, (2) waiting for incoming teleportations, and
6918 (3) perform teleportation. These operations will be reflected as the
6919 last three operations of the progress objected returned by
6920 <link to="IMachine::launchVMProcess"/> as well.
6921
6922 <see><link to="#saveState"/></see>
6923
6924 <result name="VBOX_E_INVALID_VM_STATE">
6925 Virtual machine already running.
6926 </result>
6927 <result name="VBOX_E_HOST_ERROR">
6928 Host interface does not exist or name not set.
6929 </result>
6930 <result name="VBOX_E_FILE_ERROR">
6931 Invalid saved state file.
6932 </result>
6933 </desc>
6934 <param name="progress" type="IProgress" dir="return">
6935 <desc>Progress object to track the operation completion.</desc>
6936 </param>
6937 </method>
6938
6939 <method name="powerUpPaused">
6940 <desc>
6941 Identical to powerUp except that the VM will enter the
6942 <link to="MachineState_Paused"/> state, instead of
6943 <link to="MachineState_Running"/>.
6944
6945 <see><link to="#powerUp"/></see>
6946 <result name="VBOX_E_INVALID_VM_STATE">
6947 Virtual machine already running.
6948 </result>
6949 <result name="VBOX_E_HOST_ERROR">
6950 Host interface does not exist or name not set.
6951 </result>
6952 <result name="VBOX_E_FILE_ERROR">
6953 Invalid saved state file.
6954 </result>
6955 </desc>
6956 <param name="progress" type="IProgress" dir="return">
6957 <desc>Progress object to track the operation completion.</desc>
6958 </param>
6959 </method>
6960
6961 <method name="powerDown">
6962 <desc>
6963 Initiates the power down procedure to stop the virtual machine
6964 execution.
6965
6966 The completion of the power down procedure is tracked using the returned
6967 IProgress object. After the operation is complete, the machine will go
6968 to the PoweredOff state.
6969 <result name="VBOX_E_INVALID_VM_STATE">
6970 Virtual machine must be Running, Paused or Stuck to be powered down.
6971 </result>
6972 </desc>
6973 <param name="progress" type="IProgress" dir="return">
6974 <desc>Progress object to track the operation completion.</desc>
6975 </param>
6976 </method>
6977
6978 <method name="reset">
6979 <desc>Resets the virtual machine.
6980 <result name="VBOX_E_INVALID_VM_STATE">
6981 Virtual machine not in Running state.
6982 </result>
6983 <result name="VBOX_E_VM_ERROR">
6984 Virtual machine error in reset operation.
6985 </result>
6986 </desc>
6987 </method>
6988
6989 <method name="pause">
6990 <desc>Pauses the virtual machine execution.
6991 <result name="VBOX_E_INVALID_VM_STATE">
6992 Virtual machine not in Running state.
6993 </result>
6994 <result name="VBOX_E_VM_ERROR">
6995 Virtual machine error in suspend operation.
6996 </result>
6997 </desc>
6998 </method>
6999
7000 <method name="resume">
7001 <desc>Resumes the virtual machine execution.
7002 <result name="VBOX_E_INVALID_VM_STATE">
7003 Virtual machine not in Paused state.
7004 </result>
7005 <result name="VBOX_E_VM_ERROR">
7006 Virtual machine error in resume operation.
7007 </result>
7008 </desc>
7009 </method>
7010
7011 <method name="powerButton">
7012 <desc>Sends the ACPI power button event to the guest.
7013 <result name="VBOX_E_INVALID_VM_STATE">
7014 Virtual machine not in Running state.
7015 </result>
7016 <result name="VBOX_E_PDM_ERROR">
7017 Controlled power off failed.
7018 </result>
7019 </desc>
7020 </method>
7021
7022 <method name="sleepButton">
7023 <desc>Sends the ACPI sleep button event to the guest.
7024 <result name="VBOX_E_INVALID_VM_STATE">
7025 Virtual machine not in Running state.
7026 </result>
7027 <result name="VBOX_E_PDM_ERROR">
7028 Sending sleep button event failed.
7029 </result>
7030 </desc>
7031 </method>
7032
7033 <method name="getPowerButtonHandled">
7034 <desc>Checks if the last power button event was handled by guest.
7035 <result name="VBOX_E_PDM_ERROR">
7036 Checking if the event was handled by the guest OS failed.
7037 </result>
7038 </desc>
7039 <param name="handled" type="boolean" dir="return"/>
7040 </method>
7041
7042 <method name="getGuestEnteredACPIMode">
7043 <desc>Checks if the guest entered the ACPI mode G0 (working) or
7044 G1 (sleeping). If this method returns @c false, the guest will
7045 most likely not respond to external ACPI events.
7046 <result name="VBOX_E_INVALID_VM_STATE">
7047 Virtual machine not in Running state.
7048 </result>
7049 </desc>
7050 <param name="entered" type="boolean" dir="return"/>
7051 </method>
7052
7053 <method name="saveState">
7054 <desc>
7055 Saves the current execution state of a running virtual machine
7056 and stops its execution.
7057
7058 After this operation completes, the machine will go to the
7059 Saved state. Next time it is powered up, this state will
7060 be restored and the machine will continue its execution from
7061 the place where it was saved.
7062
7063 This operation differs from taking a snapshot to the effect
7064 that it doesn't create new differencing media. Also, once
7065 the machine is powered up from the state saved using this method,
7066 the saved state is deleted, so it will be impossible to return
7067 to this state later.
7068
7069 <note>
7070 On success, this method implicitly calls
7071 <link to="IMachine::saveSettings"/> to save all current machine
7072 settings (including runtime changes to the DVD medium, etc.).
7073 Together with the impossibility to change any VM settings when it is
7074 in the Saved state, this guarantees adequate hardware
7075 configuration of the machine when it is restored from the saved
7076 state file.
7077 </note>
7078
7079 <note>
7080 The machine must be in the Running or Paused state, otherwise
7081 the operation will fail.
7082 </note>
7083 <result name="VBOX_E_INVALID_VM_STATE">
7084 Virtual machine state neither Running nor Paused.
7085 </result>
7086 <result name="VBOX_E_FILE_ERROR">
7087 Failed to create directory for saved state file.
7088 </result>
7089
7090 <see><link to="#takeSnapshot"/></see>
7091 </desc>
7092 <param name="progress" type="IProgress" dir="return">
7093 <desc>Progress object to track the operation completion.</desc>
7094 </param>
7095 </method>
7096
7097 <method name="adoptSavedState">
7098 <desc>
7099 Associates the given saved state file to the virtual machine.
7100
7101 On success, the machine will go to the Saved state. Next time it is
7102 powered up, it will be restored from the adopted saved state and
7103 continue execution from the place where the saved state file was
7104 created.
7105
7106 The specified saved state file path may be absolute or relative to the
7107 folder the VM normally saves the state to (usually,
7108 <link to="IMachine::snapshotFolder"/>).
7109
7110 <note>
7111 It's a caller's responsibility to make sure the given saved state
7112 file is compatible with the settings of this virtual machine that
7113 represent its virtual hardware (memory size, storage disk configuration
7114 etc.). If there is a mismatch, the behavior of the virtual machine
7115 is undefined.
7116 </note>
7117 <result name="VBOX_E_INVALID_VM_STATE">
7118 Virtual machine state neither PoweredOff nor Aborted.
7119 </result>
7120 </desc>
7121 <param name="savedStateFile" type="wstring" dir="in">
7122 <desc>Path to the saved state file to adopt.</desc>
7123 </param>
7124 </method>
7125
7126 <method name="discardSavedState">
7127 <desc>
7128 Forcibly resets the machine to "Powered Off" state if it is
7129 currently in the "Saved" state (previously created by <link to="#saveState"/>).
7130 Next time the machine is powered up, a clean boot will occur.
7131 <note>
7132 This operation is equivalent to resetting or powering off
7133 the machine without doing a proper shutdown of the guest
7134 operating system; as with resetting a running phyiscal
7135 computer, it can can lead to data loss.
7136 </note>
7137 If @a fRemoveFile is @c true, the file in the machine directory
7138 into which the machine state was saved is also deleted. If
7139 this is @c false, then the state can be recovered and later
7140 re-inserted into a machine using <link to="#adoptSavedState" />.
7141 The location of the file can be found in the
7142 <link to="IMachine::stateFilePath" /> attribute.
7143 <result name="VBOX_E_INVALID_VM_STATE">
7144 Virtual machine not in state Saved.
7145 </result>
7146 </desc>
7147 <param name="fRemoveFile" type="boolean" dir="in" >
7148 <desc>Whether to also remove the saved state file.</desc>
7149 </param>
7150 </method>
7151
7152 <method name="getDeviceActivity">
7153 <desc>
7154 Gets the current activity type of a given device or device group.
7155 <result name="E_INVALIDARG">
7156 Invalid device type.
7157 </result>
7158 </desc>
7159 <param name="type" type="DeviceType" dir="in"/>
7160 <param name="activity" type="DeviceActivity" dir="return"/>
7161 </method>
7162
7163 <method name="attachUSBDevice">
7164 <desc>
7165 Attaches a host USB device with the given UUID to the
7166 USB controller of the virtual machine.
7167
7168 The device needs to be in one of the following states:
7169 <link to="USBDeviceState_Busy"/>,
7170 <link to="USBDeviceState_Available"/> or
7171 <link to="USBDeviceState_Held"/>,
7172 otherwise an error is immediately returned.
7173
7174 When the device state is
7175 <link to="USBDeviceState_Busy">Busy</link>, an error may also
7176 be returned if the host computer refuses to release it for some reason.
7177
7178 <see><link to="IUSBController::deviceFilters"/>,
7179 <link to="USBDeviceState"/></see>
7180 <result name="VBOX_E_INVALID_VM_STATE">
7181 Virtual machine state neither Running nor Paused.
7182 </result>
7183 <result name="VBOX_E_PDM_ERROR">
7184 Virtual machine does not have a USB controller.
7185 </result>
7186 </desc>
7187 <param name="id" type="uuid" mod="string" dir="in">
7188 <desc>UUID of the host USB device to attach.</desc>
7189 </param>
7190 </method>
7191
7192 <method name="detachUSBDevice">
7193 <desc>
7194 Detaches an USB device with the given UUID from the USB controller
7195 of the virtual machine.
7196
7197 After this method succeeds, the VirtualBox server re-initiates
7198 all USB filters as if the device were just physically attached
7199 to the host, but filters of this machine are ignored to avoid
7200 a possible automatic re-attachment.
7201
7202 <see><link to="IUSBController::deviceFilters"/>,
7203 <link to="USBDeviceState"/></see>
7204
7205 <result name="VBOX_E_PDM_ERROR">
7206 Virtual machine does not have a USB controller.
7207 </result>
7208 <result name="E_INVALIDARG">
7209 USB device not attached to this virtual machine.
7210 </result>
7211 </desc>
7212 <param name="id" type="uuid" mod="string" dir="in">
7213 <desc>UUID of the USB device to detach.</desc>
7214 </param>
7215 <param name="device" type="IUSBDevice" dir="return">
7216 <desc>Detached USB device.</desc>
7217 </param>
7218 </method>
7219
7220 <method name="findUSBDeviceByAddress">
7221 <desc>
7222 Searches for a USB device with the given host address.
7223
7224 <result name="VBOX_E_OBJECT_NOT_FOUND">
7225 Given @c name does not correspond to any USB device.
7226 </result>
7227
7228 <see><link to="IUSBDevice::address"/></see>
7229 </desc>
7230 <param name="name" type="wstring" dir="in">
7231 <desc>
7232 Address of the USB device (as assigned by the host) to
7233 search for.
7234 </desc>
7235 </param>
7236 <param name="device" type="IUSBDevice" dir="return">
7237 <desc>Found USB device object.</desc>
7238 </param>
7239 </method>
7240
7241 <method name="findUSBDeviceById">
7242 <desc>
7243 Searches for a USB device with the given UUID.
7244
7245 <result name="VBOX_E_OBJECT_NOT_FOUND">
7246 Given @c id does not correspond to any USB device.
7247 </result>
7248
7249 <see><link to="IUSBDevice::id"/></see>
7250 </desc>
7251 <param name="id" type="uuid" mod="string" dir="in">
7252 <desc>UUID of the USB device to search for.</desc>
7253 </param>
7254 <param name="device" type="IUSBDevice" dir="return">
7255 <desc>Found USB device object.</desc>
7256 </param>
7257 </method>
7258
7259 <method name="createSharedFolder">
7260 <desc>
7261 Creates a transient new shared folder by associating the given logical
7262 name with the given host path, adds it to the collection of shared
7263 folders and starts sharing it. Refer to the description of
7264 <link to="ISharedFolder"/> to read more about logical names.
7265
7266 <result name="VBOX_E_INVALID_VM_STATE">
7267 Virtual machine in Saved state or currently changing state.
7268 </result>
7269 <result name="VBOX_E_FILE_ERROR">
7270 Shared folder already exists or not accessible.
7271 </result>
7272 </desc>
7273 <param name="name" type="wstring" dir="in">
7274 <desc>Unique logical name of the shared folder.</desc>
7275 </param>
7276 <param name="hostPath" type="wstring" dir="in">
7277 <desc>Full path to the shared folder in the host file system.</desc>
7278 </param>
7279 <param name="writable" type="boolean" dir="in">
7280 <desc>Whether the share is writable or readonly</desc>
7281 </param>
7282 <param name="automount" type="boolean" dir="in">
7283 <desc>Whether the share gets automatically mounted by the guest
7284 or not.</desc>
7285 </param>
7286 </method>
7287
7288 <method name="removeSharedFolder">
7289 <desc>
7290 Removes a transient shared folder with the given name previously
7291 created by <link to="#createSharedFolder"/> from the collection of
7292 shared folders and stops sharing it.
7293 <result name="VBOX_E_INVALID_VM_STATE">
7294 Virtual machine in Saved state or currently changing state.
7295 </result>
7296 <result name="VBOX_E_FILE_ERROR">
7297 Shared folder does not exists.
7298 </result>
7299 </desc>
7300 <param name="name" type="wstring" dir="in">
7301 <desc>Logical name of the shared folder to remove.</desc>
7302 </param>
7303 </method>
7304
7305 <method name="takeSnapshot">
7306 <desc>
7307 Saves the current execution state
7308 and all settings of the machine and creates differencing images
7309 for all normal (non-independent) media.
7310 See <link to="ISnapshot" /> for an introduction to snapshots.
7311
7312 This method can be called for a PoweredOff, Saved (see
7313 <link to="#saveState"/>), Running or
7314 Paused virtual machine. When the machine is PoweredOff, an
7315 offline snapshot is created. When the machine is Running a live
7316 snapshot is created, and an online snapshot is created when Paused.
7317
7318 The taken snapshot is always based on the
7319 <link to="IMachine::currentSnapshot">current snapshot</link>
7320 of the associated virtual machine and becomes a new current snapshot.
7321
7322 <note>
7323 This method implicitly calls <link to="IMachine::saveSettings"/> to
7324 save all current machine settings before taking an offline snapshot.
7325 </note>
7326
7327 <result name="VBOX_E_INVALID_VM_STATE">
7328 Virtual machine currently changing state.
7329 </result>
7330 </desc>
7331 <param name="name" type="wstring" dir="in">
7332 <desc>Short name for the snapshot.</desc>
7333 </param>
7334 <param name="description" type="wstring" dir="in">
7335 <desc>Optional description of the snapshot.</desc>
7336 </param>
7337 <param name="progress" type="IProgress" dir="return">
7338 <desc>Progress object to track the operation completion.</desc>
7339 </param>
7340 </method>
7341
7342 <method name="deleteSnapshot">
7343 <desc>
7344 Starts deleting the specified snapshot asynchronously.
7345 See <link to="ISnapshot" /> for an introduction to snapshots.
7346
7347 The execution state and settings of the associated machine stored in
7348 the snapshot will be deleted. The contents of all differencing media of
7349 this snapshot will be merged with the contents of their dependent child
7350 media to keep the medium chain valid (in other words, all changes
7351 represented by media being deleted will be propagated to their child
7352 medium). After that, this snapshot's differencing medium will be
7353 deleted. The parent of this snapshot will become a new parent for all
7354 its child snapshots.
7355
7356 If the deleted snapshot is the current one, its parent snapshot will
7357 become a new current snapshot. The current machine state is not directly
7358 affected in this case, except that currently attached differencing
7359 media based on media of the deleted snapshot will be also merged as
7360 described above.
7361
7362 If the deleted snapshot is the first or current snapshot, then the
7363 respective IMachine attributes will be adjusted. Deleting the current
7364 snapshot will also implicitly call <link to="IMachine::saveSettings"/>
7365 to make all current machine settings permanent.
7366
7367 Deleting a snapshot has the following preconditions:
7368
7369 <ul>
7370 <li>Child media of all normal media of the deleted snapshot
7371 must be accessible (see <link to="IMedium::state"/>) for this
7372 operation to succeed. If only one running VM refers to all images
7373 which participates in merging the operation can be performed while
7374 the VM is running. Otherwise all virtual machines whose media are
7375 directly or indirectly based on the media of deleted snapshot must
7376 be powered off. In any case, online snapshot deleting usually is
7377 slower than the same operation without any running VM.</li>
7378
7379 <li>You cannot delete the snapshot if a medium attached to it has
7380 more than one child medium (differencing images) because otherwise
7381 merging would be impossible. This might be the case if there is
7382 more than one child snapshot or differencing images were created
7383 for other reason (e.g. implicitly because of multiple machine
7384 attachments).</li>
7385 </ul>
7386
7387 The virtual machine's <link to="IMachine::state">state</link> is
7388 changed to "DeletingSnapshot", "DeletingSnapshotOnline" or
7389 "DeletingSnapshotPaused" while this operation is in progress.
7390
7391 <note>
7392 Merging medium contents can be very time and disk space
7393 consuming, if these media are big in size and have many
7394 children. However, if the snapshot being deleted is the last
7395 (head) snapshot on the branch, the operation will be rather
7396 quick.
7397 </note>
7398 <result name="VBOX_E_INVALID_VM_STATE">
7399 The running virtual machine prevents deleting this snapshot. This
7400 happens only in very specific situations, usually snapshots can be
7401 deleted without trouble while a VM is running. The error message
7402 text explains the reason for the failure.
7403 </result>
7404 </desc>
7405 <param name="id" type="uuid" mod="string" dir="in">
7406 <desc>UUID of the snapshot to delete.</desc>
7407 </param>
7408 <param name="progress" type="IProgress" dir="return">
7409 <desc>Progress object to track the operation completion.</desc>
7410 </param>
7411 </method>
7412
7413 <method name="deleteSnapshotAndAllChildren">
7414 <desc>
7415 Starts deleting the specified snapshot and all its children
7416 asynchronously. See <link to="ISnapshot" /> for an introduction to
7417 snapshots. The conditions and many details are the same as with
7418 <link to="#deleteSnapshot"/>.
7419
7420 This operation is very fast if the snapshot subtree does not include
7421 the current state. It is still significantly faster than deleting the
7422 snapshots one by one if the current state is in the subtree and there
7423 are more than one snapshots from current state to the snapshot which
7424 marks the subtree, since it eliminates the incremental image merging.
7425
7426 <note>This API method is right now not implemented!</note>
7427
7428 <result name="VBOX_E_INVALID_VM_STATE">
7429 The running virtual machine prevents deleting this snapshot. This
7430 happens only in very specific situations, usually snapshots can be
7431 deleted without trouble while a VM is running. The error message
7432 text explains the reason for the failure.
7433 </result>
7434 <result name="E_NOTIMPL">
7435 The method is not implemented yet.
7436 </result>
7437 </desc>
7438 <param name="id" type="uuid" mod="string" dir="in">
7439 <desc>UUID of the snapshot to delete, including all its children.</desc>
7440 </param>
7441 <param name="progress" type="IProgress" dir="return">
7442 <desc>Progress object to track the operation completion.</desc>
7443 </param>
7444 </method>
7445
7446 <method name="deleteSnapshotRange">
7447 <desc>
7448 Starts deleting the specified snapshot range. This is limited to
7449 linear snapshot lists, which means there may not be any other child
7450 snapshots other than the direct sequence between the start and end
7451 snapshot. If the start and end snapshot point to the same snapshot this
7452 method is completely equivalent to <link to="#deleteSnapshot"/>. See
7453 <link to="ISnapshot" /> for an introduction to snapshots. The
7454 conditions and many details are the same as with
7455 <link to="#deleteSnapshot"/>.
7456
7457 This operation is generally faster than deleting snapshots one by one
7458 and often also needs less extra disk space before freeing up disk space
7459 by deleting the removed disk images corresponding to the snapshot.
7460
7461 <note>This API method is right now not implemented!</note>
7462
7463 <result name="VBOX_E_INVALID_VM_STATE">
7464 The running virtual machine prevents deleting this snapshot. This
7465 happens only in very specific situations, usually snapshots can be
7466 deleted without trouble while a VM is running. The error message
7467 text explains the reason for the failure.
7468 </result>
7469 <result name="E_NOTIMPL">
7470 The method is not implemented yet.
7471 </result>
7472 </desc>
7473 <param name="startId" type="uuid" mod="string" dir="in">
7474 <desc>UUID of the first snapshot to delete.</desc>
7475 </param>
7476 <param name="endId" type="uuid" mod="string" dir="in">
7477 <desc>UUID of the last snapshot to delete.</desc>
7478 </param>
7479 <param name="progress" type="IProgress" dir="return">
7480 <desc>Progress object to track the operation completion.</desc>
7481 </param>
7482 </method>
7483
7484 <method name="restoreSnapshot">
7485 <desc>
7486 Starts resetting the machine's current state to the state contained
7487 in the given snapshot, asynchronously. All current settings of the
7488 machine will be reset and changes stored in differencing media
7489 will be lost.
7490 See <link to="ISnapshot" /> for an introduction to snapshots.
7491
7492 After this operation is successfully completed, new empty differencing
7493 media are created for all normal media of the machine.
7494
7495 If the given snapshot is an online snapshot, the machine will go to
7496 the <link to="MachineState_Saved"> saved state</link>, so that the
7497 next time it is powered on, the execution state will be restored
7498 from the state of the snapshot.
7499
7500 <note>
7501 The machine must not be running, otherwise the operation will fail.
7502 </note>
7503
7504 <note>
7505 If the machine state is <link to="MachineState_Saved">Saved</link>
7506 prior to this operation, the saved state file will be implicitly
7507 deleted (as if <link to="IConsole::discardSavedState"/> were
7508 called).
7509 </note>
7510
7511 <result name="VBOX_E_INVALID_VM_STATE">
7512 Virtual machine is running.
7513 </result>
7514 </desc>
7515 <param name="snapshot" type="ISnapshot" dir="in">
7516 <desc>The snapshot to restore the VM state from.</desc>
7517 </param>
7518 <param name="progress" type="IProgress" dir="return">
7519 <desc>Progress object to track the operation completion.</desc>
7520 </param>
7521 </method>
7522
7523 <method name="teleport">
7524 <desc>
7525 Teleport the VM to a different host machine or process.
7526
7527 TODO explain the details.
7528
7529 <result name="VBOX_E_INVALID_VM_STATE">
7530 Virtual machine not running or paused.
7531 </result>
7532 </desc>
7533 <param name="hostname" type="wstring" dir="in">
7534 <desc>The name or IP of the host to teleport to.</desc>
7535 </param>
7536 <param name="tcpport" type="unsigned long" dir="in">
7537 <desc>The TCP port to connect to (1..65535).</desc>
7538 </param>
7539 <param name="password" type="wstring" dir="in">
7540 <desc>The password.</desc>
7541 </param>
7542 <param name="maxDowntime" type="unsigned long" dir="in">
7543 <desc>
7544 The maximum allowed downtime given as milliseconds. 0 is not a valid
7545 value. Recommended value: 250 ms.
7546
7547 The higher the value is, the greater the chance for a successful
7548 teleportation. A small value may easily result in the teleportation
7549 process taking hours and eventually fail.
7550
7551 <note>
7552 The current implementation treats this a guideline, not as an
7553 absolute rule.
7554 </note>
7555 </desc>
7556 </param>
7557 <param name="progress" type="IProgress" dir="return">
7558 <desc>Progress object to track the operation completion.</desc>
7559 </param>
7560 </method>
7561
7562 </interface>
7563
7564 <!--
7565 // IHost
7566 /////////////////////////////////////////////////////////////////////////
7567 -->
7568
7569 <enum
7570 name="HostNetworkInterfaceMediumType"
7571 uuid="1aa54aaf-2497-45a2-bfb1-8eb225e93d5b"
7572 >
7573 <desc>
7574 Type of encapsulation. Ethernet encapsulation includes both wired and
7575 wireless Ethernet connections.
7576 <see><link to="IHostNetworkInterface"/></see>
7577 </desc>
7578
7579 <const name="Unknown" value="0">
7580 <desc>
7581 The type of interface cannot be determined.
7582 </desc>
7583 </const>
7584 <const name="Ethernet" value="1">
7585 <desc>
7586 Ethernet frame encapsulation.
7587 </desc>
7588 </const>
7589 <const name="PPP" value="2">
7590 <desc>
7591 Point-to-point protocol encapsulation.
7592 </desc>
7593 </const>
7594 <const name="SLIP" value="3">
7595 <desc>
7596 Serial line IP encapsulation.
7597 </desc>
7598 </const>
7599 </enum>
7600
7601 <enum
7602 name="HostNetworkInterfaceStatus"
7603 uuid="CC474A69-2710-434B-8D99-C38E5D5A6F41"
7604 >
7605 <desc>
7606 Current status of the interface.
7607 <see><link to="IHostNetworkInterface"/></see>
7608 </desc>
7609
7610 <const name="Unknown" value="0">
7611 <desc>
7612 The state of interface cannot be determined.
7613 </desc>
7614 </const>
7615 <const name="Up" value="1">
7616 <desc>
7617 The interface is fully operational.
7618 </desc>
7619 </const>
7620 <const name="Down" value="2">
7621 <desc>
7622 The interface is not functioning.
7623 </desc>
7624 </const>
7625 </enum>
7626
7627 <enum
7628 name="HostNetworkInterfaceType"
7629 uuid="67431b00-9946-48a2-bc02-b25c5919f4f3"
7630 >
7631 <desc>
7632 Network interface type.
7633 </desc>
7634 <const name="Bridged" value="1"/>
7635 <const name="HostOnly" value="2"/>
7636 </enum>
7637
7638 <interface
7639 name="IHostNetworkInterface" extends="$unknown"
7640 uuid="87a4153d-6889-4dd6-9654-2e9ff0ae8dec"
7641 wsmap="managed"
7642 >
7643 <desc>
7644 Represents one of host's network interfaces. IP V6 address and network
7645 mask are strings of 32 hexdecimal digits grouped by four. Groups are
7646 separated by colons.
7647 For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
7648 </desc>
7649 <attribute name="name" type="wstring" readonly="yes">
7650 <desc>Returns the host network interface name.</desc>
7651 </attribute>
7652
7653 <attribute name="id" type="uuid" mod="string" readonly="yes">
7654 <desc>Returns the interface UUID.</desc>
7655 </attribute>
7656
7657 <attribute name="networkName" type="wstring" readonly="yes">
7658 <desc>Returns the name of a virtual network the interface gets attached to.</desc>
7659 </attribute>
7660
7661 <attribute name="DHCPEnabled" type="boolean" readonly="yes">
7662 <desc>Specifies whether the DHCP is enabled for the interface.</desc>
7663 </attribute>
7664
7665 <attribute name="IPAddress" type="wstring" readonly="yes">
7666 <desc>Returns the IP V4 address of the interface.</desc>
7667 </attribute>
7668
7669 <attribute name="networkMask" type="wstring" readonly="yes">
7670 <desc>Returns the network mask of the interface.</desc>
7671 </attribute>
7672
7673 <attribute name="IPV6Supported" type="boolean" readonly="yes">
7674 <desc>Specifies whether the IP V6 is supported/enabled for the interface.</desc>
7675 </attribute>
7676
7677 <attribute name="IPV6Address" type="wstring" readonly="yes">
7678 <desc>Returns the IP V6 address of the interface.</desc>
7679 </attribute>
7680
7681 <attribute name="IPV6NetworkMaskPrefixLength" type="unsigned long" readonly="yes">
7682 <desc>Returns the length IP V6 network mask prefix of the interface.</desc>
7683 </attribute>
7684
7685 <attribute name="hardwareAddress" type="wstring" readonly="yes">
7686 <desc>Returns the hardware address. For Ethernet it is MAC address.</desc>
7687 </attribute>
7688
7689 <attribute name="mediumType" type="HostNetworkInterfaceMediumType" readonly="yes">
7690 <desc>Type of protocol encapsulation used.</desc>
7691 </attribute>
7692
7693 <attribute name="status" type="HostNetworkInterfaceStatus" readonly="yes">
7694 <desc>Status of the interface.</desc>
7695 </attribute>
7696
7697 <attribute name="interfaceType" type="HostNetworkInterfaceType" readonly="yes">
7698 <desc>specifies the host interface type.</desc>
7699 </attribute>
7700
7701 <method name="enableStaticIPConfig">
7702 <desc>sets and enables the static IP V4 configuration for the given interface.</desc>
7703 <param name="IPAddress" type="wstring" dir="in">
7704 <desc>
7705 IP address.
7706 </desc>
7707 </param>
7708 <param name="networkMask" type="wstring" dir="in">
7709 <desc>
7710 network mask.
7711 </desc>
7712 </param>
7713 </method>
7714
7715 <method name="enableStaticIPConfigV6">
7716 <desc>sets and enables the static IP V6 configuration for the given interface.</desc>
7717 <param name="IPV6Address" type="wstring" dir="in">
7718 <desc>
7719 IP address.
7720 </desc>
7721 </param>
7722 <param name="IPV6NetworkMaskPrefixLength" type="unsigned long" dir="in">
7723 <desc>
7724 network mask.
7725 </desc>
7726 </param>
7727 </method>
7728
7729 <method name="enableDynamicIPConfig">
7730 <desc>enables the dynamic IP configuration.</desc>
7731 </method>
7732
7733 <method name="DHCPRediscover">
7734 <desc>refreshes the IP configuration for DHCP-enabled interface.</desc>
7735 </method>
7736
7737 </interface>
7738
7739 <interface
7740 name="IHost" extends="$unknown"
7741 uuid="30678943-32df-4830-b413-931b25ac86a0"
7742 wsmap="managed"
7743 >
7744 <desc>
7745 The IHost interface represents the physical machine that this VirtualBox
7746 installation runs on.
7747
7748 An object implementing this interface is returned by the
7749 <link to="IVirtualBox::host" /> attribute. This interface contains
7750 read-only information about the host's physical hardware (such as what
7751 processors and disks are available, what the host operating system is,
7752 and so on) and also allows for manipulating some of the host's hardware,
7753 such as global USB device filters and host interface networking.
7754
7755 </desc>
7756 <attribute name="DVDDrives" type="IMedium" readonly="yes" safearray="yes">
7757 <desc>List of DVD drives available on the host.</desc>
7758 </attribute>
7759
7760 <attribute name="floppyDrives" type="IMedium" readonly="yes" safearray="yes">
7761 <desc>List of floppy drives available on the host.</desc>
7762 </attribute>
7763
7764 <attribute name="USBDevices" type="IHostUSBDevice" readonly="yes" safearray="yes">
7765 <desc>
7766 List of USB devices currently attached to the host.
7767 Once a new device is physically attached to the host computer,
7768 it appears in this list and remains there until detached.
7769
7770 <note>
7771 If USB functionality is not available in the given edition of
7772 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7773 </note>
7774 </desc>
7775 </attribute>
7776
7777 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilter" readonly="yes" safearray="yes">
7778 <desc>
7779 List of USB device filters in action.
7780 When a new device is physically attached to the host computer,
7781 filters from this list are applied to it (in order they are stored
7782 in the list). The first matched filter will determine the
7783 <link to="IHostUSBDeviceFilter::action">action</link>
7784 performed on the device.
7785
7786 Unless the device is ignored by these filters, filters of all
7787 currently running virtual machines
7788 (<link to="IUSBController::deviceFilters"/>) are applied to it.
7789
7790 <note>
7791 If USB functionality is not available in the given edition of
7792 VirtualBox, this method will set the result code to @c E_NOTIMPL.
7793 </note>
7794
7795 <see><link to="IHostUSBDeviceFilter"/>,
7796 <link to="USBDeviceState"/></see>
7797 </desc>
7798 </attribute>
7799
7800 <attribute name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" readonly="yes">
7801 <desc>List of host network interfaces currently defined on the host.</desc>
7802 </attribute>
7803
7804 <attribute name="processorCount" type="unsigned long" readonly="yes">
7805 <desc>Number of (logical) CPUs installed in the host system.</desc>
7806 </attribute>
7807
7808 <attribute name="processorOnlineCount" type="unsigned long" readonly="yes">
7809 <desc>Number of (logical) CPUs online in the host system.</desc>
7810 </attribute>
7811
7812 <attribute name="processorCoreCount" type="unsigned long" readonly="yes">
7813 <desc>Number of physical processor cores installed in the host system.</desc>
7814 </attribute>
7815
7816 <method name="getProcessorSpeed">
7817 <desc>Query the (approximate) maximum speed of a specified host CPU in
7818 Megahertz.
7819 </desc>
7820 <param name="cpuId" type="unsigned long" dir="in">
7821 <desc>
7822 Identifier of the CPU.
7823 </desc>
7824 </param>
7825 <param name="speed" type="unsigned long" dir="return">
7826 <desc>
7827 Speed value. 0 is returned if value is not known or @a cpuId is
7828 invalid.
7829 </desc>
7830 </param>
7831 </method>
7832
7833 <method name="getProcessorFeature">
7834 <desc>Query whether a CPU feature is supported or not.</desc>
7835 <param name="feature" type="ProcessorFeature" dir="in">
7836 <desc>
7837 CPU Feature identifier.
7838 </desc>
7839 </param>
7840 <param name="supported" type="boolean" dir="return">
7841 <desc>
7842 Feature is supported or not.
7843 </desc>
7844 </param>
7845 </method>
7846
7847 <method name="getProcessorDescription">
7848 <desc>Query the model string of a specified host CPU.
7849 </desc>
7850 <param name="cpuId" type="unsigned long" dir="in">
7851 <desc>
7852 Identifier of the CPU.
7853 <note>
7854 The current implementation might not necessarily return the
7855 description for this exact CPU.
7856 </note>
7857 </desc>
7858 </param>
7859 <param name="description" type="wstring" dir="return">
7860 <desc>
7861 Model string. An empty string is returned if value is not known or
7862 @a cpuId is invalid.
7863 </desc>
7864 </param>
7865 </method>
7866
7867 <method name="getProcessorCPUIDLeaf">
7868 <desc>
7869 Returns the CPU cpuid information for the specified leaf.
7870 </desc>
7871 <param name="cpuId" type="unsigned long" dir="in">
7872 <desc>
7873 Identifier of the CPU. The CPU most be online.
7874 <note>
7875 The current implementation might not necessarily return the
7876 description for this exact CPU.
7877 </note>
7878 </desc>
7879 </param>
7880 <param name="leaf" type="unsigned long" dir="in">
7881 <desc>
7882 CPUID leaf index (eax).
7883 </desc>
7884 </param>
7885 <param name="subLeaf" type="unsigned long" dir="in">
7886 <desc>
7887 CPUID leaf sub index (ecx). This currently only applies to cache
7888 information on Intel CPUs. Use 0 if retrieving values for
7889 <link to="IMachine::setCPUIDLeaf"/>.
7890 </desc>
7891 </param>
7892 <param name="valEax" type="unsigned long" dir="out">
7893 <desc>
7894 CPUID leaf value for register eax.
7895 </desc>
7896 </param>
7897 <param name="valEbx" type="unsigned long" dir="out">
7898 <desc>
7899 CPUID leaf value for register ebx.
7900 </desc>
7901 </param>
7902 <param name="valEcx" type="unsigned long" dir="out">
7903 <desc>
7904 CPUID leaf value for register ecx.
7905 </desc>
7906 </param>
7907 <param name="valEdx" type="unsigned long" dir="out">
7908 <desc>
7909 CPUID leaf value for register edx.
7910 </desc>
7911 </param>
7912 </method>
7913
7914 <attribute name="memorySize" type="unsigned long" readonly="yes">
7915 <desc>Amount of system memory in megabytes installed in the host system.</desc>
7916 </attribute>
7917
7918 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
7919 <desc>Available system memory in the host system.</desc>
7920 </attribute>
7921
7922 <attribute name="operatingSystem" type="wstring" readonly="yes">
7923 <desc>Name of the host system's operating system.</desc>
7924 </attribute>
7925
7926 <attribute name="OSVersion" type="wstring" readonly="yes">
7927 <desc>Host operating system's version string.</desc>
7928 </attribute>
7929
7930 <attribute name="UTCTime" type="long long" readonly="yes">
7931 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
7932 </attribute>
7933
7934 <attribute name="acceleration3DAvailable" type="boolean" readonly="yes">
7935 <desc>Returns @c true when the host supports 3D hardware acceleration.</desc>
7936 </attribute>
7937
7938 <method name="createHostOnlyNetworkInterface">
7939 <desc>
7940 Creates a new adapter for Host Only Networking.
7941 <result name="E_INVALIDARG">
7942 Host network interface @a name already exists.
7943 </result>
7944 </desc>
7945 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
7946 <desc>
7947 Created host interface object.
7948 </desc>
7949 </param>
7950 <param name="progress" type="IProgress" dir="return">
7951 <desc>
7952 Progress object to track the operation completion.
7953 </desc>
7954 </param>
7955 </method>
7956
7957 <method name="removeHostOnlyNetworkInterface">
7958 <desc>
7959 Removes the given Host Only Networking interface.
7960 <result name="VBOX_E_OBJECT_NOT_FOUND">
7961 No host network interface matching @a id found.
7962 </result>
7963 </desc>
7964 <param name="id" type="uuid" mod="string" dir="in">
7965 <desc>
7966 Adapter GUID.
7967 </desc>
7968 </param>
7969 <param name="progress" type="IProgress" dir="return">
7970 <desc>
7971 Progress object to track the operation completion.
7972 </desc>
7973 </param>
7974 </method>
7975
7976 <method name="createUSBDeviceFilter">
7977 <desc>
7978 Creates a new USB device filter. All attributes except
7979 the filter name are set to empty (any match),
7980 <i>active</i> is @c false (the filter is not active).
7981
7982 The created filter can be added to the list of filters using
7983 <link to="#insertUSBDeviceFilter"/>.
7984
7985 <see><link to="#USBDeviceFilters"/></see>
7986 </desc>
7987 <param name="name" type="wstring" dir="in">
7988 <desc>
7989 Filter name. See <link to="IUSBDeviceFilter::name"/> for more information.
7990 </desc>
7991 </param>
7992 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
7993 <desc>Created filter object.</desc>
7994 </param>
7995 </method>
7996
7997 <method name="insertUSBDeviceFilter">
7998 <desc>
7999 Inserts the given USB device to the specified position
8000 in the list of filters.
8001
8002 Positions are numbered starting from @c 0. If the specified
8003 position is equal to or greater than the number of elements in
8004 the list, the filter is added at the end of the collection.
8005
8006 <note>
8007 Duplicates are not allowed, so an attempt to insert a
8008 filter already in the list is an error.
8009 </note>
8010 <note>
8011 If USB functionality is not available in the given edition of
8012 VirtualBox, this method will set the result code to @c E_NOTIMPL.
8013 </note>
8014
8015 <see><link to="#USBDeviceFilters"/></see>
8016
8017 <result name="VBOX_E_INVALID_OBJECT_STATE">
8018 USB device filter is not created within this VirtualBox instance.
8019 </result>
8020 <result name="E_INVALIDARG">
8021 USB device filter already in list.
8022 </result>
8023
8024 </desc>
8025 <param name="position" type="unsigned long" dir="in">
8026 <desc>Position to insert the filter to.</desc>
8027 </param>
8028 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
8029 <desc>USB device filter to insert.</desc>
8030 </param>
8031 </method>
8032
8033 <method name="removeUSBDeviceFilter">
8034 <desc>
8035 Removes a USB device filter from the specified position in the
8036 list of filters.
8037
8038 Positions are numbered starting from @c 0. Specifying a
8039 position equal to or greater than the number of elements in
8040 the list will produce an error.
8041
8042 <note>
8043 If USB functionality is not available in the given edition of
8044 VirtualBox, this method will set the result code to @c E_NOTIMPL.
8045 </note>
8046
8047 <see><link to="#USBDeviceFilters"/></see>
8048
8049 <result name="E_INVALIDARG">
8050 USB device filter list empty or invalid @a position.
8051 </result>
8052
8053 </desc>
8054 <param name="position" type="unsigned long" dir="in">
8055 <desc>Position to remove the filter from.</desc>
8056 </param>
8057 </method>
8058
8059 <method name="findHostDVDDrive">
8060 <desc>
8061 Searches for a host DVD drive with the given @c name.
8062
8063 <result name="VBOX_E_OBJECT_NOT_FOUND">
8064 Given @c name does not correspond to any host drive.
8065 </result>
8066
8067 </desc>
8068 <param name="name" type="wstring" dir="in">
8069 <desc>Name of the host drive to search for</desc>
8070 </param>
8071 <param name="drive" type="IMedium" dir="return">
8072 <desc>Found host drive object</desc>
8073 </param>
8074 </method>
8075
8076 <method name="findHostFloppyDrive">
8077 <desc>
8078 Searches for a host floppy drive with the given @c name.
8079
8080 <result name="VBOX_E_OBJECT_NOT_FOUND">
8081 Given @c name does not correspond to any host floppy drive.
8082 </result>
8083
8084 </desc>
8085 <param name="name" type="wstring" dir="in">
8086 <desc>Name of the host floppy drive to search for</desc>
8087 </param>
8088 <param name="drive" type="IMedium" dir="return">
8089 <desc>Found host floppy drive object</desc>
8090 </param>
8091 </method>
8092
8093 <method name="findHostNetworkInterfaceByName">
8094 <desc>
8095 Searches through all host network interfaces for an interface with
8096 the given @c name.
8097 <note>
8098 The method returns an error if the given @c name does not
8099 correspond to any host network interface.
8100 </note>
8101 </desc>
8102 <param name="name" type="wstring" dir="in">
8103 <desc>Name of the host network interface to search for.</desc>
8104 </param>
8105 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
8106 <desc>Found host network interface object.</desc>
8107 </param>
8108 </method>
8109 <method name="findHostNetworkInterfaceById">
8110 <desc>
8111 Searches through all host network interfaces for an interface with
8112 the given GUID.
8113 <note>
8114 The method returns an error if the given GUID does not
8115 correspond to any host network interface.
8116 </note>
8117 </desc>
8118 <param name="id" type="uuid" mod="string" dir="in">
8119 <desc>GUID of the host network interface to search for.</desc>
8120 </param>
8121 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
8122 <desc>Found host network interface object.</desc>
8123 </param>
8124 </method>
8125 <method name="findHostNetworkInterfacesOfType">
8126 <desc>
8127 Searches through all host network interfaces and returns a list of interfaces of the specified type
8128 </desc>
8129 <param name="type" type="HostNetworkInterfaceType" dir="in">
8130 <desc>type of the host network interfaces to search for.</desc>
8131 </param>
8132 <param name="networkInterfaces" type="IHostNetworkInterface" safearray="yes" dir="return">
8133 <desc>Found host network interface objects.</desc>
8134 </param>
8135 </method>
8136
8137 <method name="findUSBDeviceById">
8138 <desc>
8139 Searches for a USB device with the given UUID.
8140
8141 <result name="VBOX_E_OBJECT_NOT_FOUND">
8142 Given @c id does not correspond to any USB device.
8143 </result>
8144
8145 <see><link to="IUSBDevice::id"/></see>
8146 </desc>
8147 <param name="id" type="uuid" mod="string" dir="in">
8148 <desc>UUID of the USB device to search for.</desc>
8149 </param>
8150 <param name="device" type="IHostUSBDevice" dir="return">
8151 <desc>Found USB device object.</desc>
8152 </param>
8153 </method>
8154
8155 <method name="findUSBDeviceByAddress">
8156 <desc>
8157 Searches for a USB device with the given host address.
8158
8159 <result name="VBOX_E_OBJECT_NOT_FOUND">
8160 Given @c name does not correspond to any USB device.
8161 </result>
8162
8163 <see><link to="IUSBDevice::address"/></see>
8164 </desc>
8165 <param name="name" type="wstring" dir="in">
8166 <desc>
8167 Address of the USB device (as assigned by the host) to
8168 search for.
8169 </desc>
8170 </param>
8171 <param name="device" type="IHostUSBDevice" dir="return">
8172 <desc>Found USB device object.</desc>
8173 </param>
8174 </method>
8175
8176 <method name="generateMACAddress">
8177 <desc>
8178 Generates a valid Ethernet MAC address, 12 hexadecimal characters.
8179 </desc>
8180 <param name="address" type="wstring" dir="return">
8181 <desc>New Ethernet MAC address.</desc>
8182 </param>
8183 </method>
8184
8185 </interface>
8186
8187 <!--
8188 // ISystemProperties
8189 /////////////////////////////////////////////////////////////////////////
8190 -->
8191
8192 <interface
8193 name="ISystemProperties"
8194 extends="$unknown"
8195 uuid="20fc263c-e1e9-4e86-b9b0-835950790d13"
8196 wsmap="managed"
8197 >
8198 <desc>
8199 The ISystemProperties interface represents global properties of the given
8200 VirtualBox installation.
8201
8202 These properties define limits and default values for various attributes
8203 and parameters. Most of the properties are read-only, but some can be
8204 changed by a user.
8205 </desc>
8206
8207 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
8208 <desc>Minimum guest system memory in Megabytes.</desc>
8209 </attribute>
8210
8211 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
8212 <desc>Maximum guest system memory in Megabytes.</desc>
8213 </attribute>
8214
8215 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
8216 <desc>Minimum guest video memory in Megabytes.</desc>
8217 </attribute>
8218
8219 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
8220 <desc>Maximum guest video memory in Megabytes.</desc>
8221 </attribute>
8222
8223 <attribute name="minGuestCPUCount" type="unsigned long" readonly="yes">
8224 <desc>Minimum CPU count.</desc>
8225 </attribute>
8226
8227 <attribute name="maxGuestCPUCount" type="unsigned long" readonly="yes">
8228 <desc>Maximum CPU count.</desc>
8229 </attribute>
8230
8231 <attribute name="maxGuestMonitors" type="unsigned long" readonly="yes">
8232 <desc>Maximum of monitors which could be connected.</desc>
8233 </attribute>
8234
8235 <attribute name="infoVDSize" type="long long" readonly="yes">
8236 <desc>Maximum size of a virtual disk image in bytes. Informational value,
8237 does not reflect the limits of any virtual disk image format.</desc>
8238 </attribute>
8239
8240 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
8241 <desc>
8242 Maximum number of serial ports associated with every
8243 <link to="IMachine"/> instance.
8244 </desc>
8245 </attribute>
8246
8247 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
8248 <desc>
8249 Maximum number of parallel ports associated with every
8250 <link to="IMachine"/> instance.
8251 </desc>
8252 </attribute>
8253
8254 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
8255 <desc>
8256 Maximum device position in the boot order. This value corresponds
8257 to the total number of devices a machine can boot from, to make it
8258 possible to include all possible devices to the boot list.
8259 <see><link to="IMachine::setBootOrder"/></see>
8260 </desc>
8261 </attribute>
8262
8263 <attribute name="defaultMachineFolder" type="wstring">
8264 <desc>
8265 Full path to the default directory used to create new or open
8266 existing machines when a machine settings file name contains no
8267 path.
8268
8269 Starting with VirtualBox 4.0, by default, this attribute contains
8270 the full path of folder named "VirtualBox VMs" in the user's
8271 home directory, which depends on the host platform.
8272
8273 When setting this attribute, a full path must be specified.
8274 Setting this property to @c null or an empty string or the
8275 special value "Machines" (for compatibility reasons) will restore
8276 that default value.
8277
8278 If the folder specified herein does not exist, it will be created
8279 automatically as needed.
8280
8281 <see>
8282 <link to="IVirtualBox::createMachine"/>,
8283 <link to="IVirtualBox::openMachine"/>
8284 </see>
8285 </desc>
8286 </attribute>
8287
8288 <attribute name="mediumFormats" type="IMediumFormat" safearray="yes" readonly="yes">
8289 <desc>
8290 List of all medium storage formats supported by this VirtualBox
8291 installation.
8292
8293 Keep in mind that the medium format identifier
8294 (<link to="IMediumFormat::id"/>) used in other API calls like
8295 <link to="IVirtualBox::createHardDisk"/> to refer to a particular
8296 medium format is a case-insensitive string. This means that, for
8297 example, all of the following strings:
8298 <pre>
8299 "VDI"
8300 "vdi"
8301 "VdI"</pre>
8302 refer to the same medium format.
8303
8304 Note that the virtual medium framework is backend-based, therefore
8305 the list of supported formats depends on what backends are currently
8306 installed.
8307
8308 <see><link to="IMediumFormat"/></see>
8309 </desc>
8310 </attribute>
8311
8312 <attribute name="defaultHardDiskFormat" type="wstring">
8313 <desc>
8314 Identifier of the default medium format used by VirtualBox.
8315
8316 The medium format set by this attribute is used by VirtualBox
8317 when the medium format was not specified explicitly. One example is
8318 <link to="IVirtualBox::createHardDisk"/> with the empty
8319 format argument. A more complex example is implicit creation of
8320 differencing media when taking a snapshot of a virtual machine:
8321 this operation will try to use a format of the parent medium first
8322 and if this format does not support differencing media the default
8323 format specified by this argument will be used.
8324
8325 The list of supported medium formats may be obtained by the
8326 <link to="#mediumFormats"/> call. Note that the default medium
8327 format must have a capability to create differencing media;
8328 otherwise operations that create media implicitly may fail
8329 unexpectedly.
8330
8331 The initial value of this property is <tt>"VDI"</tt> in the current
8332 version of the VirtualBox product, but may change in the future.
8333
8334 <note>
8335 Setting this property to @c null or empty string will restore the
8336 initial value.
8337 </note>
8338
8339 <see>
8340 <link to="#mediumFormats"/>,
8341 <link to="IMediumFormat::id"/>,
8342 <link to="IVirtualBox::createHardDisk"/>
8343 </see>
8344 </desc>
8345 </attribute>
8346
8347 <attribute name="freeDiskSpaceWarning" type="long long">
8348 <desc>Issue a warning if the free disk space is below (or in some disk
8349 intensive operation is expected to go below) the given size in
8350 bytes.</desc>
8351 </attribute>
8352
8353 <attribute name="freeDiskSpacePercentWarning" type="unsigned long">
8354 <desc>Issue a warning if the free disk space is below (or in some disk
8355 intensive operation is expected to go below) the given percentage.</desc>
8356 </attribute>
8357
8358 <attribute name="freeDiskSpaceError" type="long long">
8359 <desc>Issue an error if the free disk space is below (or in some disk
8360 intensive operation is expected to go below) the given size in
8361 bytes.</desc>
8362 </attribute>
8363
8364 <attribute name="freeDiskSpacePercentError" type="unsigned long">
8365 <desc>Issue an error if the free disk space is below (or in some disk
8366 intensive operation is expected to go below) the given percentage.</desc>
8367 </attribute>
8368
8369 <attribute name="VRDEAuthLibrary" type="wstring">
8370 <desc>
8371 Library that provides authentication for Remote Desktop clients. The library
8372 is used if a virtual machine's authentication type is set to "external"
8373 in the VM RemoteDisplay configuration.
8374
8375 The system library extension (".DLL" or ".so") must be omitted.
8376 A full path can be specified; if not, then the library must reside on the
8377 system's default library path.
8378
8379 The default value of this property is <tt>"VBoxAuth"</tt>. There is a library
8380 of that name in one of the default VirtualBox library directories.
8381
8382 For details about VirtualBox authentication libraries and how to implement
8383 them, please refer to the VirtualBox manual.
8384
8385 <note>
8386 Setting this property to @c null or empty string will restore the
8387 initial value.
8388 </note>
8389 </desc>
8390 </attribute>
8391
8392 <attribute name="webServiceAuthLibrary" type="wstring">
8393 <desc>
8394 Library that provides authentication for webservice clients. The library
8395 is used if a virtual machine's authentication type is set to "external"
8396 in the VM RemoteDisplay configuration and will be called from
8397 within the <link to="IWebsessionManager::logon" /> implementation.
8398
8399 As opposed to <link to="ISystemProperties::VRDEAuthLibrary" />,
8400 there is no per-VM setting for this, as the webservice is a global
8401 resource (if it is running). Only for this setting (for the webservice),
8402 setting this value to a literal <tt>"null"</tt> string disables authentication,
8403 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
8404 no matter what user name and password are supplied.
8405
8406 The initial value of this property is <tt>"VBoxAuth"</tt>,
8407 meaning that the webservice will use the same authentication
8408 library that is used by default for VRDE (again, see
8409 <link to="ISystemProperties::VRDEAuthLibrary" />).
8410 The format and calling convention of authentication libraries
8411 is the same for the webservice as it is for VRDE.
8412
8413 <note>
8414 Setting this property to @c null or empty string will restore the
8415 initial value.
8416 </note>
8417 </desc>
8418 </attribute>
8419
8420 <attribute name="defaultVRDEExtPack" type="wstring">
8421 <desc>
8422 The name of the extension pack providing the default VRDE.
8423
8424 This attribute is for choosing between multiple extension packs
8425 providing VRDE. If only one is installed, it will automatically be the
8426 default one. The attribute value can be empty if no VRDE extension
8427 pack is installed.
8428
8429 For details about VirtualBox Remote Desktop Extension and how to
8430 implement one, please refer to the VirtualBox SDK.
8431 </desc>
8432 </attribute>
8433
8434 <attribute name="logHistoryCount" type="unsigned long">
8435 <desc>
8436 This value specifies how many old release log files are kept.
8437 </desc>
8438 </attribute>
8439
8440 <attribute name="defaultAudioDriver" type="AudioDriverType" readonly="yes">
8441 <desc>This value hold the default audio driver for the current
8442 system.</desc>
8443 </attribute>
8444
8445 <attribute name="autostartDatabasePath" type="wstring">
8446 <desc>
8447 The path to the autostart database. Depending on the host this might
8448 be a filesystem path or something else.
8449 </desc>
8450 </attribute>
8451
8452 <method name="getMaxNetworkAdapters">
8453 <desc>
8454 Maximum total number of network adapters associated with every
8455 <link to="IMachine"/> instance.
8456 </desc>
8457
8458 <param name="chipset" type="ChipsetType" dir="in">
8459 <desc>The chipset type to get the value for.</desc>
8460 </param>
8461
8462
8463 <param name="maxNetworkAdapters" type="unsigned long" dir="return">
8464 <desc>The maximum total number of network adapters allowed.</desc>
8465 </param>
8466
8467 </method>
8468
8469 <method name="getMaxNetworkAdaptersOfType">
8470 <desc>
8471 Maximum number of network adapters of a given attachment type,
8472 associated with every <link to="IMachine"/> instance.
8473 </desc>
8474
8475 <param name="chipset" type="ChipsetType" dir="in">
8476 <desc>The chipset type to get the value for.</desc>
8477 </param>
8478
8479 <param name="type" type="NetworkAttachmentType" dir="in">
8480 <desc>Type of attachment.</desc>
8481 </param>
8482
8483 <param name="maxNetworkAdapters" type="unsigned long" dir="return">
8484 <desc>The maximum number of network adapters allowed for
8485 particular chipset and attachment type.</desc>
8486 </param>
8487
8488 </method>
8489
8490
8491 <method name="getMaxDevicesPerPortForStorageBus">
8492 <desc>Returns the maximum number of devices which can be attached to a port
8493 for the given storage bus.</desc>
8494
8495 <param name="bus" type="StorageBus" dir="in">
8496 <desc>The storage bus type to get the value for.</desc>
8497 </param>
8498
8499 <param name="maxDevicesPerPort" type="unsigned long" dir="return">
8500 <desc>The maximum number of devices which can be attached to the port for the given
8501 storage bus.</desc>
8502 </param>
8503 </method>
8504
8505 <method name="getMinPortCountForStorageBus">
8506 <desc>Returns the minimum number of ports the given storage bus supports.</desc>
8507
8508 <param name="bus" type="StorageBus" dir="in">
8509 <desc>The storage bus type to get the value for.</desc>
8510 </param>
8511
8512 <param name="minPortCount" type="unsigned long" dir="return">
8513 <desc>The minimum number of ports for the given storage bus.</desc>
8514 </param>
8515 </method>
8516
8517 <method name="getMaxPortCountForStorageBus">
8518 <desc>Returns the maximum number of ports the given storage bus supports.</desc>
8519
8520 <param name="bus" type="StorageBus" dir="in">
8521 <desc>The storage bus type to get the value for.</desc>
8522 </param>
8523
8524 <param name="maxPortCount" type="unsigned long" dir="return">
8525 <desc>The maximum number of ports for the given storage bus.</desc>
8526 </param>
8527 </method>
8528
8529 <method name="getMaxInstancesOfStorageBus">
8530 <desc>Returns the maximum number of storage bus instances which
8531 can be configured for each VM. This corresponds to the number of
8532 storage controllers one can have. Value may depend on chipset type
8533 used.</desc>
8534
8535 <param name="chipset" type="ChipsetType" dir="in">
8536 <desc>The chipset type to get the value for.</desc>
8537 </param>
8538
8539 <param name="bus" type="StorageBus" dir="in">
8540 <desc>The storage bus type to get the value for.</desc>
8541 </param>
8542
8543 <param name="maxInstances" type="unsigned long" dir="return">
8544 <desc>The maximum number of instances for the given storage bus.</desc>
8545 </param>
8546 </method>
8547
8548 <method name="getDeviceTypesForStorageBus">
8549 <desc>Returns list of all the supported device types
8550 (<link to="DeviceType"/>) for the given type of storage
8551 bus.</desc>
8552
8553 <param name="bus" type="StorageBus" dir="in">
8554 <desc>The storage bus type to get the value for.</desc>
8555 </param>
8556
8557 <param name="deviceTypes" type="DeviceType" safearray="yes" dir="return">
8558 <desc>The list of all supported device types for the given storage bus.</desc>
8559 </param>
8560 </method>
8561
8562 <method name="getDefaultIoCacheSettingForStorageController">
8563 <desc>Returns the default I/O cache setting for the
8564 given storage controller</desc>
8565
8566 <param name="controllerType" type="StorageControllerType" dir="in">
8567 <desc>The storage controller to the setting for.</desc>
8568 </param>
8569
8570 <param name="enabled" type="boolean" dir="return">
8571 <desc>Returned flag indicating the default value</desc>
8572 </param>
8573 </method>
8574 </interface>
8575
8576 <!--
8577 // IGuest
8578 /////////////////////////////////////////////////////////////////////////
8579 -->
8580
8581 <interface
8582 name="IGuestOSType" extends="$unknown"
8583 uuid="6d968f9a-858b-4c50-bf17-241f069e94c2"
8584 wsmap="struct"
8585 >
8586 <desc>
8587 </desc>
8588
8589 <attribute name="familyId" type="wstring" readonly="yes">
8590 <desc>Guest OS family identifier string.</desc>
8591 </attribute>
8592
8593 <attribute name="familyDescription" type="wstring" readonly="yes">
8594 <desc>Human readable description of the guest OS family.</desc>
8595 </attribute>
8596
8597 <attribute name="id" type="wstring" readonly="yes">
8598 <desc>Guest OS identifier string.</desc>
8599 </attribute>
8600
8601 <attribute name="description" type="wstring" readonly="yes">
8602 <desc>Human readable description of the guest OS.</desc>
8603 </attribute>
8604
8605 <attribute name="is64Bit" type="boolean" readonly="yes">
8606 <desc>Returns @c true if the given OS is 64-bit</desc>
8607 </attribute>
8608
8609 <attribute name="recommendedIOAPIC" type="boolean" readonly="yes">
8610 <desc>Returns @c true if IO APIC recommended for this OS type.</desc>
8611 </attribute>
8612
8613 <attribute name="recommendedVirtEx" type="boolean" readonly="yes">
8614 <desc>Returns @c true if VT-x or AMD-V recommended for this OS type.</desc>
8615 </attribute>
8616
8617 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
8618 <desc>Recommended RAM size in Megabytes.</desc>
8619 </attribute>
8620
8621 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
8622 <desc>Recommended video RAM size in Megabytes.</desc>
8623 </attribute>
8624
8625 <attribute name="recommended2DVideoAcceleration" type="boolean" readonly="yes">
8626 <desc>Returns @c true if 2D video acceleration is recommended for this OS type.</desc>
8627 </attribute>
8628
8629 <attribute name="recommended3DAcceleration" type="boolean" readonly="yes">
8630 <desc>Returns @c true if 3D acceleration is recommended for this OS type.</desc>
8631 </attribute>
8632
8633 <attribute name="recommendedHDD" type="long long" readonly="yes">
8634 <desc>Recommended hard disk size in bytes.</desc>
8635 </attribute>
8636
8637 <attribute name="adapterType" type="NetworkAdapterType" readonly="yes">
8638 <desc>Returns recommended network adapter for this OS type.</desc>
8639 </attribute>
8640
8641 <attribute name="recommendedPAE" type="boolean" readonly="yes">
8642 <desc>Returns @c true if using PAE is recommended for this OS type.</desc>
8643 </attribute>
8644
8645 <attribute name="recommendedDVDStorageController" type="StorageControllerType" readonly="yes">
8646 <desc>Recommended storage controller type for DVD/CD drives.</desc>
8647 </attribute>
8648
8649 <attribute name="recommendedDVDStorageBus" type="StorageBus" readonly="yes">
8650 <desc>Recommended storage bus type for DVD/CD drives.</desc>
8651 </attribute>
8652
8653 <attribute name="recommendedHDStorageController" type="StorageControllerType" readonly="yes">
8654 <desc>Recommended storage controller type for HD drives.</desc>
8655 </attribute>
8656
8657 <attribute name="recommendedHDStorageBus" type="StorageBus" readonly="yes">
8658 <desc>Recommended storage bus type for HD drives.</desc>
8659 </attribute>
8660
8661 <attribute name="recommendedFirmware" type="FirmwareType" readonly="yes">
8662 <desc>Recommended firmware type.</desc>
8663 </attribute>
8664
8665 <attribute name="recommendedUSBHID" type="boolean" readonly="yes">
8666 <desc>Returns @c true if using USB Human Interface Devices, such as keyboard and mouse recommended.</desc>
8667 </attribute>
8668
8669 <attribute name="recommendedHPET" type="boolean" readonly="yes">
8670 <desc>Returns @c true if using HPET is recommended for this OS type.</desc>
8671 </attribute>
8672
8673 <attribute name="recommendedUSBTablet" type="boolean" readonly="yes">
8674 <desc>Returns @c true if using a USB Tablet is recommended.</desc>
8675 </attribute>
8676
8677 <attribute name="recommendedRTCUseUTC" type="boolean" readonly="yes">
8678 <desc>Returns @c true if the RTC of this VM should be set to UTC</desc>
8679 </attribute>
8680
8681 <attribute name="recommendedChipset" type="ChipsetType" readonly="yes">
8682 <desc>Recommended chipset type.</desc>
8683 </attribute>
8684
8685 <attribute name="recommendedAudioController" type="AudioControllerType" readonly="yes">
8686 <desc>Recommended audio type.</desc>
8687 </attribute>
8688
8689 <attribute name="recommendedFloppy" type="boolean" readonly="yes">
8690 <desc>Returns @c true a floppy drive is recommended for this OS type.</desc>
8691 </attribute>
8692
8693 <attribute name="recommendedUSB" type="boolean" readonly="yes">
8694 <desc>Returns @c true a USB controller is recommended for this OS type.</desc>
8695 </attribute>
8696
8697 </interface>
8698
8699 <enum
8700 name="AdditionsFacilityType"
8701 uuid="98f7f957-89fb-49b6-a3b1-31e3285eb1d8"
8702 >
8703 <desc>
8704 Guest Additions facility IDs.
8705 </desc>
8706
8707 <const name="None" value="0">
8708 <desc>No/invalid facility.</desc>
8709 </const>
8710 <const name="VBoxGuestDriver" value="20">
8711 <desc>VirtualBox base driver (VBoxGuest).</desc>
8712 </const>
8713 <const name="AutoLogon" value="90">
8714 <desc>Auto-logon modules (VBoxGINA, VBoxCredProv, pam_vbox).</desc>
8715 </const>
8716 <const name="VBoxService" value="100">
8717 <desc>VirtualBox system service (VBoxService).</desc>
8718 </const>
8719 <const name="VBoxTrayClient" value="101">
8720 <desc>VirtualBox desktop integration (VBoxTray on Windows, VBoxClient on non-Windows).</desc>
8721 </const>
8722 <const name="Seamless" value="1000">
8723 <desc>Seamless guest desktop integration.</desc>
8724 </const>
8725 <const name="Graphics" value="1100">
8726 <desc>Guest graphics mode. If not enabled, seamless rendering will not work, resize hints
8727 are not immediately acted on and guest display resizes are probably not initiated by
8728 the guest additions.
8729 </desc>
8730 </const>
8731 <const name="All" value="2147483646">
8732 <desc>All facilities selected.</desc>
8733 </const>
8734 </enum>
8735
8736 <enum
8737 name="AdditionsFacilityClass"
8738 uuid="446451b2-c88d-4e5d-84c9-91bc7f533f5f"
8739 >
8740 <desc>
8741 Guest Additions facility classes.
8742 </desc>
8743
8744 <const name="None" value="0">
8745 <desc>No/invalid class.</desc>
8746 </const>
8747 <const name="Driver" value="10">
8748 <desc>Driver.</desc>
8749 </const>
8750 <const name="Service" value="30">
8751 <desc>System service.</desc>
8752 </const>
8753 <const name="Program" value="50">
8754 <desc>Program.</desc>
8755 </const>
8756 <const name="Feature" value="100">
8757 <desc>Feature.</desc>
8758 </const>
8759 <const name="ThirdParty" value="999">
8760 <desc>Third party.</desc>
8761 </const>
8762 <const name="All" value="2147483646">
8763 <desc>All facility classes selected.</desc>
8764 </const>
8765 </enum>
8766
8767 <enum
8768 name="AdditionsFacilityStatus"
8769 uuid="ce06f9e1-394e-4fe9-9368-5a88c567dbde"
8770 >
8771 <desc>
8772 Guest Additions facility states.
8773 </desc>
8774
8775 <const name="Inactive" value="0">
8776 <desc>Facility is not active.</desc>
8777 </const>
8778 <const name="Paused" value="1">
8779 <desc>Facility has been paused.</desc>
8780 </const>
8781 <const name="PreInit" value="20">
8782 <desc>Facility is preparing to initialize.</desc>
8783 </const>
8784 <const name="Init" value="30">
8785 <desc>Facility is initializing.</desc>
8786 </const>
8787 <const name="Active" value="50">
8788 <desc>Facility is up and running.</desc>
8789 </const>
8790 <const name="Terminating" value="100">
8791 <desc>Facility is shutting down.</desc>
8792 </const>
8793 <const name="Terminated" value="101">
8794 <desc>Facility successfully shut down.</desc>
8795 </const>
8796 <const name="Failed" value="800">
8797 <desc>Facility failed to start.</desc>
8798 </const>
8799 <const name="Unknown" value="999">
8800 <desc>Facility status is unknown.</desc>
8801 </const>
8802 </enum>
8803
8804 <interface
8805 name="IAdditionsFacility" extends="$unknown"
8806 uuid="54992946-6af1-4e49-98ec-58b558b7291e"
8807 wsmap="struct"
8808 >
8809 <desc>
8810 Structure representing a Guest Additions facility.
8811 </desc>
8812
8813 <attribute name="classType" type="AdditionsFacilityClass" readonly="yes">
8814 <desc>The class this facility is part of.</desc>
8815 </attribute>
8816
8817 <attribute name="lastUpdated" type="long long" readonly="yes">
8818 <desc>
8819 Time stamp of the last status update,
8820 in milliseconds since 1970-01-01 UTC.
8821 </desc>
8822 </attribute>
8823
8824 <attribute name="name" type="wstring" readonly="yes">
8825 <desc>The facility's friendly name.</desc>
8826 </attribute>
8827
8828 <attribute name="status" type="AdditionsFacilityStatus" readonly="yes">
8829 <desc>The current status.</desc>
8830 </attribute>
8831
8832 <attribute name="type" type="AdditionsFacilityType" readonly="yes">
8833 <desc>The facility's type ID.</desc>
8834 </attribute>
8835 </interface>
8836
8837 <enum
8838 name="AdditionsRunLevelType"
8839 uuid="a25417ee-a9dd-4f5b-b0dc-377860087754"
8840 >
8841 <desc>
8842 Guest Additions run level type.
8843 </desc>
8844
8845 <const name="None" value="0">
8846 <desc>Guest Additions are not loaded.</desc>
8847 </const>
8848 <const name="System" value="1">
8849 <desc>Guest drivers are loaded.</desc>
8850 </const>
8851 <const name="Userland" value="2">
8852 <desc>Common components (such as application services) are loaded.</desc>
8853 </const>
8854 <const name="Desktop" value="3">
8855 <desc>Per-user desktop components are loaded.</desc>
8856 </const>
8857 </enum>
8858
8859 <enum
8860 name="AdditionsUpdateFlag"
8861 uuid="726a818d-18d6-4389-94e8-3e9e6826171a"
8862 >
8863 <desc>
8864 Guest Additions update flags.
8865 </desc>
8866
8867 <const name="None" value="0">
8868 <desc>No flag set.</desc>
8869 </const>
8870 <const name="WaitForUpdateStartOnly" value="1">
8871 <desc>Only wait for the update process being started and do not
8872 wait while peforming the actual update.</desc>
8873 </const>
8874 </enum>
8875
8876 <enum
8877 name="ExecuteProcessFlag"
8878 uuid="1c49b831-b2c7-4a30-97dd-999a2e2cbf90"
8879 >
8880 <desc>
8881 Guest process execution flags.
8882 </desc>
8883
8884 <const name="None" value="0">
8885 <desc>No flag set.</desc>
8886 </const>
8887 <const name="WaitForProcessStartOnly" value="1">
8888 <desc>Only use the specified timeout value to wait for starting the guest process - the guest
8889 process itself then uses an infinite timeout.</desc>
8890 </const>
8891 <const name="IgnoreOrphanedProcesses" value="2">
8892 <desc>Do not report an error when executed processes are still alive when VBoxService or the guest OS is shutting down.</desc>
8893 </const>
8894 <const name="Hidden" value="4">
8895 <desc>Do not show the started process according to the guest OS guidelines.</desc>
8896 </const>
8897 <const name="NoProfile" value="8">
8898 <desc>Do not use the user's profile data when exeuting a process. Only available for Windows guests.</desc>
8899 </const>
8900 <const name="WaitForStdOut" value="16">
8901 <desc>The guest process waits until all data from stdout is read out.</desc>
8902 </const>
8903 <const name="WaitForStdErr" value="32">
8904 <desc>The guest process waits until all data from stderr is read out.</desc>
8905 </const>
8906 </enum>
8907
8908 <enum
8909 name="ExecuteProcessStatus"
8910 uuid="153768d9-d971-4098-8b5a-c5cb1ab9ea88"
8911 >
8912 <desc>
8913 Guest process execution status.
8914 </desc>
8915 <const name="Undefined" value="0">
8916 <desc>Process is in an undefined state.</desc>
8917 </const>
8918
8919 <const name="Started" value="1">
8920 <desc>Process has been started.</desc>
8921 </const>
8922 <const name="TerminatedNormally" value="2">
8923 <desc>Process terminated normally.</desc>
8924 </const>
8925 <const name="TerminatedSignal" value="3">
8926 <desc>Process terminated via signal.</desc>
8927 </const>
8928 <const name="TerminatedAbnormally" value="4">
8929 <desc>Process terminated abnormally.</desc>
8930 </const>
8931 <const name="TimedOutKilled" value="5">
8932 <desc>Process timed out and was killed.</desc>
8933 </const>
8934 <const name="TimedOutAbnormally" value="6">
8935 <desc>Process timed out and was not killed successfully.</desc>
8936 </const>
8937 <const name="Down" value="7">
8938 <desc>Service/OS is stopping, process was killed.</desc>
8939 </const>
8940 <const name="Error" value="8">
8941 <desc>Something went wrong (error code in flags).</desc>
8942 </const>
8943 </enum>
8944
8945 <enum
8946 name="FileSeekType"
8947 uuid="1b73f4f3-3515-4073-a506-76878d9e2541"
8948 >
8949 <desc>
8950 TODO
8951 </desc>
8952
8953 <const name="Set" value="0">
8954 <desc>TODO</desc>
8955 </const>
8956 <const name="Current" value="1">
8957 <desc>TODO</desc>
8958 </const>
8959 </enum>
8960
8961 <enum
8962 name="ProcessInputFlag"
8963 uuid="5d38c1dd-2604-4ddf-92e5-0c0cdd3bdbd5"
8964 >
8965 <desc>
8966 Guest process input flags.
8967 </desc>
8968 <const name="None" value="0">
8969 <desc>No flag set.</desc>
8970 </const>
8971 <const name="EndOfFile" value="1">
8972 <desc>End of file (input) reached.</desc>
8973 </const>
8974 </enum>
8975
8976 <enum
8977 name="ProcessOutputFlag"
8978 uuid="9979e85a-52bb-40b7-870c-57115e27e0f1"
8979 >
8980 <desc>
8981 Guest process output flags for specifying which
8982 type of output to retrieve.
8983 </desc>
8984 <const name="None" value="0">
8985 <desc>No flags set. Get output from stdout.</desc>
8986 </const>
8987 <const name="StdErr" value="1">
8988 <desc>Get output from stderr.</desc>
8989 </const>
8990 </enum>
8991
8992 <enum
8993 name="ProcessWaitForFlag"
8994 uuid="23b550c7-78e1-437e-98f0-65fd9757bcd2"
8995 >
8996 <desc>
8997 TODO
8998 </desc>
8999
9000 <const name="None" value="0">
9001 <desc>TODO</desc>
9002 </const>
9003 <const name="Start" value="1">
9004 <desc>TODO</desc>
9005 </const>
9006 <const name="Terminate" value="2">
9007 <desc>TODO</desc>
9008 </const>
9009 <const name="StdIn" value="4">
9010 <desc>TODO</desc>
9011 </const>
9012 <const name="StdOut" value="8">
9013 <desc>TODO</desc>
9014 </const>
9015 <const name="StdErr" value="16">
9016 <desc>TODO</desc>
9017 </const>
9018 </enum>
9019
9020 <enum
9021 name="ProcessWaitResult"
9022 uuid="24a4d49f-a7c1-44b0-b01f-5686a316466b"
9023 >
9024 <desc>
9025 TODO
9026 </desc>
9027
9028 <const name="None" value="0">
9029 <desc>TODO</desc>
9030 </const>
9031 <const name="Start" value="1">
9032 <desc>TODO</desc>
9033 </const>
9034 <const name="Terminate" value="2">
9035 <desc>TODO</desc>
9036 </const>
9037 <const name="Status" value="3">
9038 <desc>TODO</desc>
9039 </const>
9040 <const name="Error" value="4">
9041 <desc>TODO</desc>
9042 </const>
9043 <const name="Timeout" value="5">
9044 <desc>TODO</desc>
9045 </const>
9046 <const name="StdIn" value="6">
9047 <desc>TODO</desc>
9048 </const>
9049 <const name="StdOut" value="7">
9050 <desc>TODO</desc>
9051 </const>
9052 <const name="StdErr" value="8">
9053 <desc>TODO</desc>
9054 </const>
9055 <const name="Any" value="9">
9056 <desc>TODO</desc>
9057 </const>
9058 </enum>
9059
9060 <enum
9061 name="CopyFileFlag"
9062 uuid="23f79fdf-738a-493d-b80b-42d607c9b916"
9063 >
9064 <desc>
9065 Host/Guest copy flags. At the moment none of these flags
9066 are implemented.
9067 </desc>
9068 <const name="None" value="0">
9069 <desc>No flag set.</desc>
9070 </const>
9071 <const name="Recursive" value="1">
9072 <desc>Copy directories recursively.</desc>
9073 </const>
9074 <const name="Update" value="2">
9075 <desc>Only copy when the source file is newer than the destination file or when the destination file is missing.</desc>
9076 </const>
9077 <const name="FollowLinks" value="4">
9078 <desc>Follow symbolic links.</desc>
9079 </const>
9080 </enum>
9081
9082 <enum
9083 name="DirectoryCreateFlag"
9084 uuid="bd721b0e-ced5-4f79-b368-249897c32a36"
9085 >
9086 <desc>
9087 Directory creation flags.
9088 </desc>
9089 <const name="None" value="0">
9090 <desc>No flag set.</desc>
9091 </const>
9092 <const name="Parents" value="1">
9093 <desc>No error if existing, make parent directories as needed.</desc>
9094 </const>
9095 </enum>
9096
9097 <enum
9098 name="DirectoryRemoveRecFlag"
9099 uuid="455aabf0-7692-48f6-9061-f21579b65769"
9100 >
9101 <desc>
9102 TODO
9103 </desc>
9104
9105 <const name="None" value="0">
9106 <desc>No flag set.</desc>
9107 </const>
9108 <const name="ContentAndDir" value="1">
9109 <desc>TODO</desc>
9110 </const>
9111 <const name="ContentOnly" value="2">
9112 <desc>TODO</desc>
9113 </const>
9114 </enum>
9115
9116 <enum
9117 name="PathRenameFlag"
9118 uuid="f3baa09f-c758-453d-b91c-c7787d76351d"
9119 >
9120 <desc>
9121 TODO
9122 </desc>
9123
9124 <const name="None" value="0">
9125 <desc>No flag set.</desc>
9126 </const>
9127 <const name="NoReplace" value="1">
9128 <desc>TODO</desc>
9129 </const>
9130 <const name="Replace" value="2">
9131 <desc>TODO</desc>
9132 </const>
9133 <const name="NoSymlinks" value="4">
9134 <desc>TODO</desc>
9135 </const>
9136 </enum>
9137
9138 <enum
9139 name="ProcessCreateFlag"
9140 uuid="91c8aba8-2e62-4fe5-b744-fcbd607971e2"
9141 >
9142 <desc>
9143 Guest process execution flags.
9144 </desc>
9145
9146 <const name="None" value="0">
9147 <desc>No flag set.</desc>
9148 </const>
9149 <const name="WaitForProcessStartOnly" value="1">
9150 <desc>Only use the specified timeout value to wait for starting the guest process - the guest
9151 process itself then uses an infinite timeout.</desc>
9152 </const>
9153 <const name="IgnoreOrphanedProcesses" value="2">
9154 <desc>Do not report an error when executed processes are still alive when VBoxService or the guest OS is shutting down.</desc>
9155 </const>
9156 <const name="Hidden" value="4">
9157 <desc>Do not show the started process according to the guest OS guidelines.</desc>
9158 </const>
9159 <const name="NoProfile" value="8">
9160 <desc>Do not use the user's profile data when exeuting a process. Only available for Windows guests.</desc>
9161 </const>
9162 <const name="WaitForStdOut" value="16">
9163 <desc>The guest process waits until all data from stdout is read out.</desc>
9164 </const>
9165 <const name="WaitForStdErr" value="32">
9166 <desc>The guest process waits until all data from stderr is read out.</desc>
9167 </const>
9168 </enum>
9169
9170 <enum
9171 name="ProcessPriority"
9172 uuid="ee8cac50-e232-49fe-806b-d1214d9c2e49"
9173 >
9174 <desc>
9175 TODO
9176 </desc>
9177
9178 <const name="Invalid" value="0">
9179 <desc>TODO</desc>
9180 </const>
9181 <const name="Default" value="1">
9182 <desc>TODO</desc>
9183 </const>
9184 </enum>
9185
9186 <enum
9187 name="SymlinkType"
9188 uuid="37794668-f8f1-4714-98a5-6f8fa2ed0118"
9189 >
9190 <desc>
9191 TODO
9192 </desc>
9193
9194 <const name="Unknown" value="0">
9195 <desc>TODO</desc>
9196 </const>
9197 <const name="Directory" value="1">
9198 <desc>TODO</desc>
9199 </const>
9200 <const name="File" value="2">
9201 <desc>TODO</desc>
9202 </const>
9203 </enum>
9204
9205 <enum
9206 name="SymlinkReadFlag"
9207 uuid="b7fe2b9d-790e-4b25-8adf-1ca33026931f"
9208 >
9209 <desc>
9210 TODO
9211 </desc>
9212
9213 <const name="None" value="0">
9214 <desc>TODO.</desc>
9215 </const>
9216 <const name="NoSymlinks" value="1">
9217 <desc>TODO</desc>
9218 </const>
9219 </enum>
9220
9221 <enum
9222 name="ProcessStatus"
9223 uuid="4d52368f-5b48-4bfe-b486-acf89139b52f"
9224 >
9225 <desc>
9226 Guest process execution status.
9227 </desc>
9228 <const name="Undefined" value="0">
9229 <desc>Process is in an undefined state.</desc>
9230 </const>
9231
9232 <const name="Starting" value="10">
9233 <desc>TODO</desc>
9234 </const>
9235 <const name="Started" value="100">
9236 <desc>Process has been started.</desc>
9237 </const>
9238 <const name="Paused" value="110">
9239 <desc>TODO</desc>
9240 </const>
9241 <const name="Terminating" value="480">
9242 <desc>TODO</desc>
9243 </const>
9244 <const name="TerminatedNormally" value="500">
9245 <desc>Process terminated normally.</desc>
9246 </const>
9247 <const name="TerminatedSignal" value="510">
9248 <desc>Process terminated via signal.</desc>
9249 </const>
9250 <const name="TerminatedAbnormally" value="511">
9251 <desc>Process terminated abnormally.</desc>
9252 </const>
9253 <const name="TimedOutKilled" value="512">
9254 <desc>Process timed out and was killed.</desc>
9255 </const>
9256 <const name="TimedOutAbnormally" value="513">
9257 <desc>Process timed out and was not killed successfully.</desc>
9258 </const>
9259 <const name="Down" value="600">
9260 <desc>Service/OS is stopping, process was killed.</desc>
9261 </const>
9262 <const name="Error" value="800">
9263 <desc>Something went wrong (error code in flags).</desc>
9264 </const>
9265 </enum>
9266
9267 <enum
9268 name="FsObjType"
9269 uuid="a1ed437c-b3c3-4ca2-b19c-4239d658d5e8"
9270 >
9271 <desc>
9272 TODO
9273 </desc>
9274
9275 <const name="Undefined" value="0">
9276 <desc>TODO</desc>
9277 </const>
9278 <const name="FIFO" value="1">
9279 <desc>TODO</desc>
9280 </const>
9281 <const name="DevChar" value="10">
9282 <desc>TODO</desc>
9283 </const>
9284 <const name="DevBlock" value="11">
9285 <desc>TODO</desc>
9286 </const>
9287 <const name="Directory" value="50">
9288 <desc>TODO</desc>
9289 </const>
9290 <const name="File" value="80">
9291 <desc>TODO</desc>
9292 </const>
9293 <const name="Symlink" value="100">
9294 <desc>TODO</desc>
9295 </const>
9296 <const name="Socket" value="200">
9297 <desc>TODO</desc>
9298 </const>
9299 <const name="Whiteout" value="400">
9300 <desc>TODO</desc>
9301 </const>
9302 </enum>
9303
9304 <enum
9305 name="DragAndDropAction"
9306 uuid="47f3b162-c107-4fcd-bfa7-54b8135c441e"
9307 >
9308 <desc>
9309 Possible actions within an Drag and Drop operation.
9310 </desc>
9311
9312 <const name="Ignore" value="0">
9313 <desc>Do nothing.</desc>
9314 </const>
9315
9316 <const name="Copy" value="1">
9317 <desc>Copy the item to the target.</desc>
9318 </const>
9319
9320 <const name="Move" value="2">
9321 <desc>Move the item to the target.</desc>
9322 </const>
9323
9324 <const name="Link" value="3">
9325 <desc>Link the item from within the target.</desc>
9326 </const>
9327 </enum>
9328
9329 <enum
9330 name="DirectoryOpenFlag"
9331 uuid="5138837a-8fd2-4194-a1b0-08f7bc3949d0"
9332 >
9333 <desc>
9334 Directory open flags.
9335 </desc>
9336 <const name="None" value="0">
9337 <desc>No flag set.</desc>
9338 </const>
9339 <const name="NoSymlinks" value="1">
9340 <desc>Don't allow symbolic links as part of the path.</desc>
9341 </const>
9342 </enum>
9343
9344 <enum
9345 name="GuestDirEntryType"
9346 uuid="6d19d924-1b77-4fc8-b369-a3b2c85c8241"
9347 >
9348 <desc>
9349 Guest directory entry type.
9350 </desc>
9351 <const name="Unknown" value="0">
9352 <desc>Unknown.</desc>
9353 </const>
9354 <const name="Directory" value="4">
9355 <desc>Regular file.</desc>
9356 </const>
9357 <const name="File" value="10">
9358 <desc>Regular file.</desc>
9359 </const>
9360 <const name="Symlink" value="12">
9361 <desc>Symbolic link.</desc>
9362 </const>
9363 </enum>
9364
9365 <interface
9366 name="IGuestDirEntry" extends="$unknown"
9367 uuid="20a66efc-c2f6-4438-826f-38454c04369e"
9368 wsmap="struct"
9369 >
9370 <desc>
9371 Structure representing a directory entry on the guest OS.
9372 </desc>
9373 <attribute name="nodeId" type="long long" readonly="yes">
9374 <desc>The unique identifier (within the guest's file system) of this file system object.</desc>
9375 </attribute>
9376 <attribute name="name" type="wstring" readonly="yes">
9377 <desc>The filename.</desc>
9378 </attribute>
9379 <attribute name="type" type="GuestDirEntryType" readonly="yes">
9380 <desc>The entry type.</desc>
9381 </attribute>
9382 </interface>
9383
9384 <interface
9385 name="IGuestSession" extends="$unknown"
9386 uuid="45aca317-55d7-4b6c-bbec-d053289118b9"
9387 wsmap="managed"
9388 >
9389
9390 <attribute name="user" type="wstring" readonly="yes">
9391 <desc>
9392 TODO
9393 <note>
9394 TODO
9395 </note>
9396 </desc>
9397 </attribute>
9398
9399 <attribute name="domain" type="wstring" readonly="yes">
9400 <desc>
9401 TODO
9402 <note>
9403 TODO
9404 </note>
9405 </desc>
9406 </attribute>
9407
9408 <attribute name="name" type="wstring" readonly="yes">
9409 <desc>
9410 TODO
9411 <note>
9412 TODO
9413 </note>
9414 </desc>
9415 </attribute>
9416
9417 <attribute name="id" type="unsigned long" readonly="yes">
9418 <desc>
9419 TODO
9420 <note>
9421 TODO
9422 </note>
9423 </desc>
9424 </attribute>
9425
9426 <attribute name="timeout" type="unsigned long" readonly="no">
9427 <desc>
9428 TODO
9429 <note>
9430 TODO
9431 </note>
9432 </desc>
9433 </attribute>
9434
9435 <attribute name="environment" type="wstring" safearray="yes">
9436 <desc>
9437 TODO
9438 </desc>
9439 </attribute>
9440
9441 <attribute name="processes" type="IGuestProcess" readonly="yes" safearray="yes">
9442 <desc>
9443 TODO
9444 </desc>
9445 </attribute>
9446
9447 <attribute name="directories" type="IGuestDirectory" readonly="yes" safearray="yes">
9448 <desc>
9449 TODO
9450 </desc>
9451 </attribute>
9452
9453 <attribute name="files" type="IGuestFile" readonly="yes" safearray="yes">
9454 <desc>
9455 TODO
9456 </desc>
9457 </attribute>
9458
9459 <method name="close">
9460 <desc>
9461 TODO
9462
9463 <result name="VBOX_E_NOT_SUPPORTED">
9464 TODO
9465 </result>
9466 </desc>
9467 </method>
9468
9469 <method name="copyFrom">
9470 <desc>
9471 TODO
9472
9473 <result name="VBOX_E_NOT_SUPPORTED">
9474 TODO
9475 </result>
9476 </desc>
9477 <param name="source" type="wstring" dir="in">
9478 <desc>TODO</desc>
9479 </param>
9480 <param name="dest" type="wstring" dir="in">
9481 <desc>TODO</desc>
9482 </param>
9483 <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
9484 <desc>TODO</desc>
9485 </param>
9486 <param name="progress" type="IProgress" dir="return">
9487 <desc>Progress object to track the operation completion.</desc>
9488 </param>
9489 </method>
9490
9491 <method name="copyTo">
9492 <desc>
9493 TODO
9494
9495 <result name="VBOX_E_NOT_SUPPORTED">
9496 TODO
9497 </result>
9498 </desc>
9499 <param name="source" type="wstring" dir="in">
9500 <desc>TODO</desc>
9501 </param>
9502 <param name="dest" type="wstring" dir="in">
9503 <desc>TODO</desc>
9504 </param>
9505 <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
9506 <desc>TODO</desc>
9507 </param>
9508 <param name="progress" type="IProgress" dir="return">
9509 <desc>Progress object to track the operation completion.</desc>
9510 </param>
9511 </method>
9512
9513 <method name="directoryCreate">
9514 <desc>
9515 TODO
9516
9517 <result name="VBOX_E_NOT_SUPPORTED">
9518 TODO
9519 </result>
9520 </desc>
9521 <param name="path" type="wstring" dir="in">
9522 <desc>TODO</desc>
9523 </param>
9524 <param name="mode" type="unsigned long" dir="in">
9525 <desc>TODO</desc>
9526 </param>
9527 <param name="flags" type="DirectoryCreateFlag" dir="in" safearray="yes">
9528 <desc>TODO</desc>
9529 </param>
9530 <param name="directory" type="IGuestDirectory" dir="return">
9531 <desc>Optional.</desc>
9532 </param>
9533 </method>
9534
9535 <method name="directoryCreateTemp">
9536 <desc>
9537 TODO
9538
9539 <result name="VBOX_E_NOT_SUPPORTED">
9540 TODO
9541 </result>
9542 </desc>
9543 <param name="templateName" type="wstring" dir="in">
9544 <desc>TODO</desc>
9545 </param>
9546 <param name="mode" type="unsigned long" dir="in">
9547 <desc>TODO</desc>
9548 </param>
9549 <param name="path" type="wstring" dir="in">
9550 <desc>TODO</desc>
9551 </param>
9552 <param name="directory" type="IGuestDirectory" dir="return">
9553 <desc>TODO</desc>
9554 </param>
9555 </method>
9556
9557 <method name="directoryExists">
9558 <desc>
9559 TODO
9560
9561 <result name="VBOX_E_NOT_SUPPORTED">
9562 TODO
9563 </result>
9564 </desc>
9565 <param name="path" type="wstring" dir="in">
9566 <desc>TODO</desc>
9567 </param>
9568 <param name="exists" type="boolean" dir="return">
9569 <desc>TODO</desc>
9570 </param>
9571 </method>
9572
9573 <method name="directoryOpen">
9574 <desc>
9575 TODO
9576
9577 <result name="VBOX_E_NOT_SUPPORTED">
9578 TODO
9579 </result>
9580 </desc>
9581 <param name="path" type="wstring" dir="in">
9582 <desc>TODO</desc>
9583 </param>
9584 <param name="filter" type="wstring" dir="in">
9585 <desc>TODO</desc>
9586 </param>
9587 <param name="flags" type="DirectoryOpenFlag" dir="in" safearray="yes">
9588 <desc>TODO</desc>
9589 </param>
9590 <param name="directory" type="IGuestDirectory" dir="return">
9591 <desc>TODO</desc>
9592 </param>
9593 </method>
9594
9595 <method name="directoryQueryInfo">
9596 <desc>
9597 TODO
9598
9599 <result name="VBOX_E_NOT_SUPPORTED">
9600 TODO
9601 </result>
9602 </desc>
9603 <param name="path" type="wstring" dir="in">
9604 <desc>TODO</desc>
9605 </param>
9606 <param name="info" type="IGuestFsObjInfo" dir="return">
9607 <desc>TODO</desc>
9608 </param>
9609 </method>
9610
9611 <method name="directoryRemove">
9612 <desc>
9613 TODO
9614
9615 <result name="VBOX_E_NOT_SUPPORTED">
9616 TODO
9617 </result>
9618 </desc>
9619 <param name="path" type="wstring" dir="in">
9620 <desc>TODO</desc>
9621 </param>
9622 </method>
9623
9624 <method name="directoryRemoveRecursive">
9625 <desc>
9626 TODO
9627
9628 <result name="VBOX_E_NOT_SUPPORTED">
9629 TODO
9630 </result>
9631 </desc>
9632 <param name="path" type="wstring" dir="in">
9633 <desc>TODO</desc>
9634 </param>
9635 <param name="flags" type="DirectoryRemoveRecFlag" dir="in" safearray="yes">
9636 <desc>TODO</desc>
9637 </param>
9638 <param name="progress" type="IProgress" dir="return">
9639 <desc>TODO</desc>
9640 </param>
9641 </method>
9642
9643 <method name="directoryRename">
9644 <desc>
9645 TODO
9646
9647 <result name="VBOX_E_NOT_SUPPORTED">
9648 TODO
9649 </result>
9650 </desc>
9651 <param name="source" type="wstring" dir="in">
9652 <desc>TODO</desc>
9653 </param>
9654 <param name="dest" type="wstring" dir="in">
9655 <desc>TODO</desc>
9656 </param>
9657 <param name="flags" type="PathRenameFlag" dir="in" safearray="yes">
9658 <desc>TODO</desc>
9659 </param>
9660 </method>
9661
9662 <method name="directorySetACL">
9663 <desc>
9664 TODO
9665
9666 <result name="VBOX_E_NOT_SUPPORTED">
9667 TODO
9668 </result>
9669 </desc>
9670 <param name="path" type="wstring" dir="in">
9671 <desc>TODO</desc>
9672 </param>
9673 <param name="acl" type="wstring" dir="in">
9674 <desc>TODO</desc>
9675 </param>
9676 </method>
9677
9678 <method name="environmentClear">
9679 <desc>
9680 TODO
9681
9682 <result name="VBOX_E_NOT_SUPPORTED">
9683 TODO
9684 </result>
9685 </desc>
9686 </method>
9687
9688 <method name="environmentGet">
9689 <desc>
9690 TODO
9691
9692 <result name="VBOX_E_NOT_SUPPORTED">
9693 TODO
9694 </result>
9695 </desc>
9696 <param name="name" type="wstring" dir="in">
9697 <desc>TODO</desc>
9698 </param>
9699 <param name="value" type="wstring" dir="return">
9700 <desc>TODO</desc>
9701 </param>
9702 </method>
9703
9704 <method name="environmentSet">
9705 <desc>
9706 TODO
9707
9708 <result name="VBOX_E_NOT_SUPPORTED">
9709 TODO
9710 </result>
9711 </desc>
9712 <param name="name" type="wstring" dir="in">
9713 <desc>TODO</desc>
9714 </param>
9715 <param name="value" type="wstring" dir="in">
9716 <desc>TODO</desc>
9717 </param>
9718 </method>
9719
9720 <method name="environmentUnset">
9721 <desc>
9722 TODO
9723
9724 <result name="VBOX_E_NOT_SUPPORTED">
9725 TODO
9726 </result>
9727 </desc>
9728 <param name="name" type="wstring" dir="in">
9729 <desc>TODO</desc>
9730 </param>
9731 </method>
9732
9733 <method name="fileCreateTemp">
9734 <desc>
9735 TODO
9736
9737 <result name="VBOX_E_NOT_SUPPORTED">
9738 TODO
9739 </result>
9740 </desc>
9741 <param name="templateName" type="wstring" dir="in">
9742 <desc>TODO</desc>
9743 </param>
9744 <param name="mode" type="unsigned long" dir="in">
9745 <desc>TODO</desc>
9746 </param>
9747 <param name="path" type="wstring" dir="in">
9748 <desc>TODO</desc>
9749 </param>
9750 <param name="file" type="IGuestFile" dir="return">
9751 <desc>Optional.</desc>
9752 </param>
9753 </method>
9754
9755 <method name="fileExists">
9756 <desc>
9757 TODO
9758
9759 <result name="VBOX_E_NOT_SUPPORTED">
9760 TODO
9761 </result>
9762 </desc>
9763 <param name="path" type="wstring" dir="in">
9764 <desc>TODO</desc>
9765 </param>
9766 <param name="exists" type="boolean" dir="return">
9767 <desc>TODO</desc>
9768 </param>
9769 </method>
9770
9771 <method name="fileRemove">
9772 <desc>
9773 Remove a single file on the guest.
9774
9775 </desc>
9776 <param name="path" type="wstring" dir="in">
9777 <desc>Path to the file to remove.</desc>
9778 </param>
9779 </method>
9780
9781 <method name="fileOpen">
9782 <desc>
9783 TODO
9784
9785 <result name="VBOX_E_NOT_SUPPORTED">
9786 TODO
9787 </result>
9788 </desc>
9789 <param name="path" type="wstring" dir="in">
9790 <desc>TODO</desc>
9791 </param>
9792 <param name="openMode" type="wstring" dir="in">
9793 <desc>TODO</desc>
9794 </param>
9795 <param name="disposition" type="wstring" dir="in">
9796 <desc>TODO</desc>
9797 </param>
9798 <param name="creationMode" type="unsigned long" dir="in">
9799 <desc>TODO</desc>
9800 </param>
9801 <param name="offset" type="long long" dir="in">
9802 <desc>TODO</desc>
9803 </param>
9804 <param name="file" type="IGuestFile" dir="return">
9805 <desc>TODO</desc>
9806 </param>
9807 </method>
9808
9809 <method name="fileQueryInfo">
9810 <desc>
9811 TODO
9812
9813 <result name="VBOX_E_NOT_SUPPORTED">
9814 TODO
9815 </result>
9816 </desc>
9817 <param name="path" type="wstring" dir="in">
9818 <desc>TODO</desc>
9819 </param>
9820 <param name="info" type="IGuestFsObjInfo" dir="return">
9821 <desc>TODO</desc>
9822 </param>
9823 </method>
9824
9825 <method name="fileQuerySize">
9826 <desc>
9827 TODO
9828
9829 <result name="VBOX_E_NOT_SUPPORTED">
9830 TODO
9831 </result>
9832 </desc>
9833 <param name="path" type="wstring" dir="in">
9834 <desc>TODO</desc>
9835 </param>
9836 <param name="size" type="long long" dir="return">
9837 <desc>TODO</desc>
9838 </param>
9839 </method>
9840
9841 <method name="fileRename">
9842 <desc>
9843 TODO
9844
9845 <result name="VBOX_E_NOT_SUPPORTED">
9846 TODO
9847 </result>
9848 </desc>
9849 <param name="source" type="wstring" dir="in">
9850 <desc>TODO</desc>
9851 </param>
9852 <param name="dest" type="wstring" dir="in">
9853 <desc>TODO</desc>
9854 </param>
9855 <param name="flags" type="PathRenameFlag" dir="in" safearray="yes">
9856 <desc>TODO</desc>
9857 </param>
9858 </method>
9859
9860 <method name="fileSetACL">
9861 <desc>
9862 TODO
9863
9864 <result name="VBOX_E_NOT_SUPPORTED">
9865 TODO
9866 </result>
9867 </desc>
9868 <param name="file" type="wstring" dir="in">
9869 <desc>TODO</desc>
9870 </param>
9871 <param name="acl" type="wstring" dir="in">
9872 <desc>TODO</desc>
9873 </param>
9874 </method>
9875
9876 <method name="processCreate">
9877 <desc>
9878 TODO
9879
9880 <result name="VBOX_E_NOT_SUPPORTED">
9881 TODO
9882 </result>
9883 </desc>
9884 <param name="command" type="wstring" dir="in">
9885 <desc>TODO</desc>
9886 </param>
9887 <param name="arguments" type="wstring" dir="in" safearray="yes">
9888 <desc>TODO</desc>
9889 </param>
9890 <param name="environment" type="wstring" dir="in" safearray="yes">
9891 <desc>TODO</desc>
9892 </param>
9893 <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
9894 <desc>TODO</desc>
9895 </param>
9896 <param name="timeoutMS" type="unsigned long" dir="in">
9897 <desc>TODO</desc>
9898 </param>
9899 <param name="guestProcess" type="IGuestProcess" dir="return">
9900 <desc>TODO</desc>
9901 </param>
9902 </method>
9903
9904 <method name="processCreateEx">
9905 <desc>
9906 TODO
9907
9908 <result name="VBOX_E_NOT_SUPPORTED">
9909 TODO
9910 </result>
9911 </desc>
9912 <param name="command" type="wstring" dir="in">
9913 <desc>TODO</desc>
9914 </param>
9915 <param name="arguments" type="wstring" dir="in" safearray="yes">
9916 <desc>TODO</desc>
9917 </param>
9918 <param name="environment" type="wstring" dir="in" safearray="yes">
9919 <desc>TODO</desc>
9920 </param>
9921 <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
9922 <desc>TODO</desc>
9923 </param>
9924 <param name="timeoutMS" type="unsigned long" dir="in">
9925 <desc>TODO</desc>
9926 </param>
9927 <param name="priority" type="ProcessPriority" dir="in">
9928 <desc>TODO</desc>
9929 </param>
9930 <param name="affinity" type="long" dir="in" safearray="yes">
9931 <desc>TODO</desc>
9932 </param>
9933 <param name="guestProcess" type="IGuestProcess" dir="return">
9934 <desc>TODO</desc>
9935 </param>
9936 </method>
9937
9938 <method name="processGet">
9939 <desc>
9940 TODO
9941
9942 <result name="VBOX_E_NOT_SUPPORTED">
9943 TODO
9944 </result>
9945 </desc>
9946 <param name="pid" type="unsigned long" dir="in">
9947 <desc>TODO</desc>
9948 </param>
9949 <param name="guestProcess" type="IGuestProcess" dir="return">
9950 <desc>TODO</desc>
9951 </param>
9952 </method>
9953
9954 <method name="symlinkCreate">
9955 <desc>
9956 TODO
9957
9958 <result name="VBOX_E_NOT_SUPPORTED">
9959 TODO
9960 </result>
9961 </desc>
9962 <param name="source" type="wstring" dir="in">
9963 <desc>TODO</desc>
9964 </param>
9965 <param name="target" type="wstring" dir="in">
9966 <desc>TODO</desc>
9967 </param>
9968 <param name="type" type="SymlinkType" dir="in">
9969 <desc>TODO</desc>
9970 </param>
9971 </method>
9972
9973 <method name="symlinkExists">
9974 <desc>
9975 TODO
9976
9977 <result name="VBOX_E_NOT_SUPPORTED">
9978 TODO
9979 </result>
9980 </desc>
9981 <param name="symlink" type="wstring" dir="in">
9982 <desc>TODO</desc>
9983 </param>
9984 <param name="exists" type="boolean" dir="return">
9985 <desc>TODO</desc>
9986 </param>
9987 </method>
9988
9989 <method name="symlinkRead">
9990 <desc>
9991 TODO
9992
9993 <result name="VBOX_E_NOT_SUPPORTED">
9994 TODO
9995 </result>
9996 </desc>
9997 <param name="symlink" type="wstring" dir="in">
9998 <desc>TODO</desc>
9999 </param>
10000 <param name="flags" type="SymlinkReadFlag" dir="in" safearray="yes">
10001 <desc>TODO</desc>
10002 </param>
10003 <param name="target" type="wstring" dir="return">
10004 <desc>TODO</desc>
10005 </param>
10006 </method>
10007
10008 <method name="symlinkRemoveDirectory">
10009 <desc>
10010 TODO
10011
10012 <result name="VBOX_E_NOT_SUPPORTED">
10013 TODO
10014 </result>
10015 </desc>
10016 <param name="path" type="wstring" dir="in">
10017 <desc>TODO</desc>
10018 </param>
10019 </method>
10020
10021 <method name="symlinkRemoveFile">
10022 <desc>
10023 TODO
10024
10025 <result name="VBOX_E_NOT_SUPPORTED">
10026 TODO
10027 </result>
10028 </desc>
10029 <param name="file" type="wstring" dir="in">
10030 <desc>TODO</desc>
10031 </param>
10032 </method>
10033
10034 </interface>
10035
10036 <interface
10037 name="IProcess" extends="$unknown"
10038 uuid="896df50a-c5d1-4892-8bc6-b78d0c1f4e33"
10039 wsmap="managed"
10040 >
10041 <desc>
10042 TODO
10043 </desc>
10044 <attribute name="PID" type="unsigned long" readonly="yes">
10045 <desc>
10046 TODO
10047 <note>
10048 TODO
10049 </note>
10050 </desc>
10051 </attribute>
10052 <attribute name="status" type="ProcessStatus" readonly="yes">
10053 <desc>
10054 TODO
10055 <note>
10056 TODO
10057 </note>
10058 </desc>
10059 </attribute>
10060 <attribute name="exitCode" type="long" readonly="yes">
10061 <desc>
10062 TODO
10063 <note>
10064 TODO
10065 </note>
10066 </desc>
10067 </attribute>
10068 <attribute name="environment" type="wstring" readonly="yes" safearray="yes">
10069 <desc>
10070 TODO
10071 <note>
10072 TODO
10073 </note>
10074 </desc>
10075 </attribute>
10076 <attribute name="arguments" type="wstring" readonly="yes" safearray="yes">
10077 <desc>
10078 TODO
10079 <note>
10080 TODO
10081 </note>
10082 </desc>
10083 </attribute>
10084 <attribute name="executablePath" type="wstring" readonly="yes">
10085 <desc>
10086 TODO
10087 <note>
10088 TODO
10089 </note>
10090 </desc>
10091 </attribute>
10092 <attribute name="name" type="wstring" readonly="yes">
10093 <desc>
10094 TODO
10095 <note>
10096 TODO
10097 </note>
10098 </desc>
10099 </attribute>
10100
10101 <method name="waitFor">
10102 <desc>
10103 TODO
10104
10105 <result name="VBOX_E_NOT_SUPPORTED">
10106 TODO
10107 </result>
10108 </desc>
10109 <param name="waitFor" type="unsigned long" dir="in">
10110 <desc>TODO</desc>
10111 </param>
10112 <param name="timeoutMS" type="unsigned long" dir="in">
10113 <desc>TODO</desc>
10114 </param>
10115 <param name="reason" type="ProcessWaitResult" dir="return">
10116 <desc>TODO</desc>
10117 </param>
10118 </method>
10119
10120 <method name="waitForArray">
10121 <desc>
10122 Scriptable version of <link to="#waitFor" />.
10123
10124 <result name="VBOX_E_NOT_SUPPORTED">
10125 TODO
10126 </result>
10127 </desc>
10128 <param name="waitFor" type="ProcessWaitForFlag" dir="in" safearray="yes">
10129 <desc>TODO</desc>
10130 </param>
10131 <param name="timeoutMS" type="unsigned long" dir="in">
10132 <desc>TODO</desc>
10133 </param>
10134 <param name="reason" type="ProcessWaitResult" dir="return">
10135 <desc>TODO</desc>
10136 </param>
10137 </method>
10138
10139 <method name="read">
10140 <desc>
10141 TODO
10142
10143 <result name="VBOX_E_NOT_SUPPORTED">
10144 TODO
10145 </result>
10146 </desc>
10147 <param name="handle" type="unsigned long" dir="in">
10148 <desc>TODO</desc>
10149 </param>
10150 <param name="size" type="unsigned long" dir="in">
10151 <desc>TODO</desc>
10152 </param>
10153 <param name="timeoutMS" type="unsigned long" dir="in">
10154 <desc>TODO</desc>
10155 </param>
10156 <param name="data" type="octet" dir="return" safearray="yes">
10157 <desc>TODO</desc>
10158 </param>
10159 </method>
10160
10161 <method name="write">
10162 <desc>
10163 TODO
10164
10165 <result name="VBOX_E_NOT_SUPPORTED">
10166 TODO
10167 </result>
10168 </desc>
10169 <param name="handle" type="unsigned long" dir="in">
10170 <desc>TODO</desc>
10171 </param>
10172 <param name="flags" type="unsigned long" dir="in">
10173 <desc>
10174 <link to="ProcessInputFlag"/> flags.
10175 </desc>
10176 </param>
10177 <param name="data" type="octet" dir="in" safearray="yes">
10178 <desc>TODO</desc>
10179 </param>
10180 <param name="timeoutMS" type="unsigned long" dir="in">
10181 <desc>TODO</desc>
10182 </param>
10183 <param name="written" type="unsigned long" dir="return">
10184 <desc>TODO</desc>
10185 </param>
10186 </method>
10187
10188 <method name="WriteArray">
10189 <desc>
10190 TODO
10191
10192 <result name="VBOX_E_NOT_SUPPORTED">
10193 TODO
10194 </result>
10195 </desc>
10196 <param name="handle" type="unsigned long" dir="in">
10197 <desc>TODO</desc>
10198 </param>
10199 <param name="flags" type="ProcessInputFlag" dir="in" safearray="yes">
10200 <desc>
10201 <link to="ProcessInputFlag"/> flags.
10202 </desc>
10203 </param>
10204 <param name="data" type="octet" dir="in" safearray="yes">
10205 <desc>TODO</desc>
10206 </param>
10207 <param name="timeoutMS" type="unsigned long" dir="in">
10208 <desc>TODO</desc>
10209 </param>
10210 <param name="written" type="unsigned long" dir="return">
10211 <desc>TODO</desc>
10212 </param>
10213 </method>
10214
10215 <method name="terminate">
10216 <desc>
10217 TODO
10218
10219 <result name="VBOX_E_NOT_SUPPORTED">
10220 TODO
10221 </result>
10222 </desc>
10223 </method>
10224 </interface>
10225
10226 <interface
10227 name="IGuestProcess" extends="IProcess"
10228 uuid="dfa39a36-5d43-4840-a025-67ea956b3111"
10229 wsmap="managed"
10230 >
10231 <desc>
10232 TODO
10233 </desc>
10234 </interface>
10235
10236 <interface
10237 name="IDirectory" extends="$unknown"
10238 uuid="1b70dd03-26d7-483a-8877-89bbb0f87b70"
10239 wsmap="managed"
10240 >
10241 <desc>
10242 TODO
10243 </desc>
10244
10245 <attribute name="directoryName" type="wstring" readonly="yes">
10246 <desc>
10247 Full path of directory.
10248 <note>
10249 TODO
10250 </note>
10251 </desc>
10252 </attribute>
10253
10254 <attribute name="filter" type="wstring" readonly="yes">
10255 <desc>
10256 The open filter.
10257 <note>
10258 TODO
10259 </note>
10260 </desc>
10261 </attribute>
10262
10263 <method name="close">
10264 <desc>
10265 TODO
10266
10267 <result name="VBOX_E_NOT_SUPPORTED">
10268 TODO
10269 </result>
10270 </desc>
10271 </method>
10272
10273 <method name="read">
10274 <desc>
10275 TODO
10276
10277 <result name="VBOX_E_OBJECT_NOT_FOUND">
10278 End of directory listing reached.
10279 </result>
10280 </desc>
10281 <param name="objInfo" type="IFsObjInfo" dir="return">
10282 <desc>TODO</desc>
10283 </param>
10284 </method>
10285 </interface>
10286
10287 <interface
10288 name="IGuestDirectory" extends="IDirectory"
10289 uuid="af4a8ce0-0725-42b7-8826-46e3c7ba7357"
10290 wsmap="managed"
10291 >
10292 <desc>
10293 TODO
10294 </desc>
10295 </interface>
10296
10297 <interface
10298 name="IFile" extends="$unknown"
10299 uuid="b3484293-b98b-4952-ae23-f18eca6a5ff9"
10300 wsmap="managed"
10301 >
10302 <desc>
10303 TODO
10304 </desc>
10305 <attribute name="creationMode" type="unsigned long" readonly="yes">
10306 <desc>
10307 TODO
10308 <note>
10309 TODO
10310 </note>
10311 </desc>
10312 </attribute>
10313 <attribute name="disposition" type="unsigned long" readonly="yes">
10314 <desc>
10315 TODO
10316 <note>
10317 TODO
10318 </note>
10319 </desc>
10320 </attribute>
10321 <attribute name="fileName" type="wstring" readonly="yes">
10322 <desc>
10323 TODO
10324 <note>
10325 TODO
10326 </note>
10327 </desc>
10328 </attribute>
10329 <attribute name="initialSize" type="long long" readonly="yes">
10330 <desc>
10331 TODO
10332 <note>
10333 TODO
10334 </note>
10335 </desc>
10336 </attribute>
10337 <attribute name="openMode" type="unsigned long" readonly="yes">
10338 <desc>
10339 TODO
10340 <note>
10341 TODO
10342 </note>
10343 </desc>
10344 </attribute>
10345 <attribute name="offset" type="long long" readonly="yes">
10346 <desc>
10347 TODO
10348 <note>
10349 TODO
10350 </note>
10351 </desc>
10352 </attribute>
10353
10354 <method name="close">
10355 <desc>
10356 TODO
10357
10358 <result name="VBOX_E_NOT_SUPPORTED">
10359 TODO
10360 </result>
10361 </desc>
10362 </method>
10363
10364 <method name="queryInfo">
10365 <desc>
10366 TODO
10367
10368 <result name="VBOX_E_NOT_SUPPORTED">
10369 TODO
10370 </result>
10371 </desc>
10372 <param name="objInfo" type="IFsObjInfo" dir="return">
10373 <desc>TODO</desc>
10374 </param>
10375 </method>
10376
10377 <method name="read">
10378 <desc>
10379 TODO
10380
10381 <result name="VBOX_E_NOT_SUPPORTED">
10382 TODO
10383 </result>
10384 </desc>
10385 <param name="toRead" type="unsigned long" dir="in">
10386 <desc>TODO</desc>
10387 </param>
10388 <param name="read" type="unsigned long" dir="out">
10389 <desc>TODO</desc>
10390 </param>
10391 <param name="data" type="octet" dir="return" safearray="yes">
10392 <desc>TODO</desc>
10393 </param>
10394 </method>
10395
10396 <method name="readAt">
10397 <desc>
10398 TODO
10399
10400 <result name="VBOX_E_NOT_SUPPORTED">
10401 TODO
10402 </result>
10403 </desc>
10404 <param name="offset" type="long long" dir="in">
10405 <desc>TODO</desc>
10406 </param>
10407 <param name="toRead" type="unsigned long" dir="in">
10408 <desc>TODO</desc>
10409 </param>
10410 <param name="read" type="unsigned long" dir="out">
10411 <desc>TODO</desc>
10412 </param>
10413 <param name="data" type="octet" dir="return" safearray="yes">
10414 <desc>TODO</desc>
10415 </param>
10416 </method>
10417
10418 <method name="seek">
10419 <desc>
10420 TODO
10421
10422 <result name="VBOX_E_NOT_SUPPORTED">
10423 TODO
10424 </result>
10425 </desc>
10426 <param name="offset" type="long long" dir="in">
10427 <desc>TODO</desc>
10428 </param>
10429 <param name="whence" type="FileSeekType" dir="in">
10430 <desc>TODO</desc>
10431 </param>
10432 </method>
10433
10434 <method name="setACL">
10435 <desc>
10436 TODO
10437
10438 <result name="VBOX_E_NOT_SUPPORTED">
10439 TODO
10440 </result>
10441 </desc>
10442 <param name="acl" type="wstring" dir="in">
10443 <desc>TODO</desc>
10444 </param>
10445 </method>
10446
10447 <method name="write">
10448 <desc>
10449 TODO
10450
10451 <result name="VBOX_E_NOT_SUPPORTED">
10452 TODO
10453 </result>
10454 </desc>
10455 <param name="data" type="octet" dir="in" safearray="yes">
10456 <desc>TODO</desc>
10457 </param>
10458 <param name="written" type="unsigned long" dir="return">
10459 <desc>TODO</desc>
10460 </param>
10461 </method>
10462
10463 <method name="writeAt">
10464 <desc>
10465 TODO
10466
10467 <result name="VBOX_E_NOT_SUPPORTED">
10468 TODO
10469 </result>
10470 </desc>
10471 <param name="offset" type="long long" dir="in">
10472 <desc>TODO</desc>
10473 </param>
10474 <param name="data" type="octet" dir="in" safearray="yes">
10475 <desc>TODO</desc>
10476 </param>
10477 <param name="written" type="unsigned long" dir="return">
10478 <desc>TODO</desc>
10479 </param>
10480 </method>
10481
10482 </interface>
10483
10484 <interface
10485 name="IGuestFile" extends="IFile"
10486 uuid="60661aec-145f-4d11-b80e-8ea151598093"
10487 wsmap="managed"
10488 >
10489 <desc>
10490 TODO
10491 </desc>
10492 </interface>
10493
10494 <interface
10495 name="IFsObjInfo" extends="$unknown"
10496 uuid="4047ba30-7006-4966-ae86-94164e5e20eb"
10497 wsmap="managed"
10498 >
10499 <desc>
10500 TODO
10501 </desc>
10502
10503 <attribute name="accessTime" type="long long" readonly="yes">
10504 <desc>
10505 TODO
10506 <note>
10507 TODO
10508 </note>
10509 </desc>
10510 </attribute>
10511 <attribute name="allocatedSize" type="long long" readonly="yes">
10512 <desc>
10513 TODO
10514 <note>
10515 TODO
10516 </note>
10517 </desc>
10518 </attribute>
10519 <attribute name="birthTime" type="long long" readonly="yes">
10520 <desc>
10521 TODO
10522 <note>
10523 TODO
10524 </note>
10525 </desc>
10526 </attribute>
10527 <attribute name="changeTime" type="long long" readonly="yes">
10528 <desc>
10529 TODO
10530 <note>
10531 TODO
10532 </note>
10533 </desc>
10534 </attribute>
10535 <attribute name="deviceNumber" type="unsigned long" readonly="yes">
10536 <desc>
10537 TODO
10538 <note>
10539 TODO
10540 </note>
10541 </desc>
10542 </attribute>
10543 <attribute name="fileAttributes" type="wstring" readonly="yes">
10544 <desc>
10545 TODO
10546 <note>
10547 TODO
10548 </note>
10549 </desc>
10550 </attribute>
10551 <attribute name="generationId" type="unsigned long" readonly="yes">
10552 <desc>
10553 TODO
10554 <note>
10555 TODO
10556 </note>
10557 </desc>
10558 </attribute>
10559 <attribute name="GID" type="unsigned long" readonly="yes">
10560 <desc>
10561 TODO
10562 <note>
10563 TODO
10564 </note>
10565 </desc>
10566 </attribute>
10567 <attribute name="groupName" type="wstring" readonly="yes">
10568 <desc>
10569 TODO
10570 <note>
10571 TODO
10572 </note>
10573 </desc>
10574 </attribute>
10575 <attribute name="hardLinks" type="unsigned long" readonly="yes">
10576 <desc>
10577 TODO
10578 <note>
10579 TODO
10580 </note>
10581 </desc>
10582 </attribute>
10583 <attribute name="modificationTime" type="long long" readonly="yes">
10584 <desc>
10585 TODO
10586 <note>
10587 TODO
10588 </note>
10589 </desc>
10590 </attribute>
10591 <attribute name="name" type="wstring" readonly="yes">
10592 <desc>
10593 TODO
10594 <note>
10595 TODO
10596 </note>
10597 </desc>
10598 </attribute>
10599 <attribute name="nodeId" type="long long" readonly="yes">
10600 <desc>
10601 TODO
10602 <note>
10603 TODO
10604 </note>
10605 </desc>
10606 </attribute>
10607 <attribute name="nodeIdDevice" type="unsigned long" readonly="yes">
10608 <desc>
10609 TODO
10610 <note>
10611 TODO
10612 </note>
10613 </desc>
10614 </attribute>
10615 <attribute name="objectSize" type="long long" readonly="yes">
10616 <desc>
10617 TODO
10618 <note>
10619 TODO
10620 </note>
10621 </desc>
10622 </attribute>
10623 <attribute name="type" type="FsObjType" readonly="yes">
10624 <desc>
10625 TODO
10626 <note>
10627 TODO
10628 </note>
10629 </desc>
10630 </attribute>
10631 <attribute name="UID" type="unsigned long" readonly="yes">
10632 <desc>
10633 TODO
10634 <note>
10635 TODO
10636 </note>
10637 </desc>
10638 </attribute>
10639 <attribute name="userFlags" type="unsigned long" readonly="yes">
10640 <desc>
10641 TODO
10642 <note>
10643 TODO
10644 </note>
10645 </desc>
10646 </attribute>
10647 <attribute name="userName" type="wstring" readonly="yes">
10648 <desc>
10649 TODO
10650 <note>
10651 TODO
10652 </note>
10653 </desc>
10654 </attribute>
10655
10656 </interface>
10657
10658 <interface
10659 name="IGuestFsObjInfo" extends="IFsObjInfo"
10660 uuid="d5cf678e-3484-4e4a-ac55-329e15462e18"
10661 wsmap="managed"
10662 >
10663 <desc>
10664 TODO
10665 </desc>
10666 </interface>
10667
10668 <interface
10669 name="IGuest" extends="$unknown"
10670 uuid="19c32350-0618-4ede-b0c3-2b4311bf0d9b"
10671 wsmap="managed"
10672 >
10673 <desc>
10674 The IGuest interface represents information about the operating system
10675 running inside the virtual machine. Used in
10676 <link to="IConsole::guest"/>.
10677
10678 IGuest provides information about the guest operating system, whether
10679 Guest Additions are installed and other OS-specific virtual machine
10680 properties.
10681 </desc>
10682
10683 <attribute name="OSTypeId" type="wstring" readonly="yes">
10684 <desc>
10685 Identifier of the Guest OS type as reported by the Guest
10686 Additions.
10687 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
10688 an IGuestOSType object representing details about the given
10689 Guest OS type.
10690 <note>
10691 If Guest Additions are not installed, this value will be
10692 the same as <link to="IMachine::OSTypeId"/>.
10693 </note>
10694 </desc>
10695 </attribute>
10696
10697 <attribute name="additionsRunLevel" type="AdditionsRunLevelType" readonly="yes">
10698 <desc>
10699 Current run level of the Guest Additions.
10700 </desc>
10701 </attribute>
10702
10703 <attribute name="additionsVersion" type="wstring" readonly="yes">
10704 <desc>
10705 Version of the Guest Additions in the same format as
10706 <link to="IVirtualBox::version"/>.
10707 </desc>
10708 </attribute>
10709
10710 <attribute name="additionsRevision" type="unsigned long" readonly="yes">
10711 <desc>
10712 The internal build revision number of the additions.
10713
10714 See also <link to="IVirtualBox::revision"/>.
10715 </desc>
10716 </attribute>
10717
10718 <attribute name="facilities" type="IAdditionsFacility" readonly="yes" safearray="yes">
10719 <desc>
10720 Array of current known facilities. Only returns facilities where a status is known,
10721 e.g. facilities with an unknown status will not be returned.
10722 </desc>
10723 </attribute>
10724
10725 <attribute name="sessions" type="IGuestSession" readonly="yes" safearray="yes">
10726 <desc>TODO</desc>
10727 </attribute>
10728
10729 <attribute name="memoryBalloonSize" type="unsigned long">
10730 <desc>Guest system memory balloon size in megabytes (transient property).</desc>
10731 </attribute>
10732
10733 <attribute name="statisticsUpdateInterval" type="unsigned long">
10734 <desc>Interval to update guest statistics in seconds.</desc>
10735 </attribute>
10736
10737 <method name="internalGetStatistics">
10738 <desc>
10739 Internal method; do not use as it might change at any time.
10740 </desc>
10741 <param name="cpuUser" type="unsigned long" dir="out">
10742 <desc>Percentage of processor time spent in user mode as seen by the guest.</desc>
10743 </param>
10744 <param name="cpuKernel" type="unsigned long" dir="out">
10745 <desc>Percentage of processor time spent in kernel mode as seen by the guest.</desc>
10746 </param>
10747 <param name="cpuIdle" type="unsigned long" dir="out">
10748 <desc>Percentage of processor time spent idling as seen by the guest.</desc>
10749 </param>
10750 <param name="memTotal" type="unsigned long" dir="out">
10751 <desc>Total amount of physical guest RAM.</desc>
10752 </param>
10753 <param name="memFree" type="unsigned long" dir="out">
10754 <desc>Free amount of physical guest RAM.</desc>
10755 </param>
10756 <param name="memBalloon" type="unsigned long" dir="out">
10757 <desc>Amount of ballooned physical guest RAM.</desc>
10758 </param>
10759 <param name="memShared" type="unsigned long" dir="out">
10760 <desc>Amount of shared physical guest RAM.</desc>
10761 </param>
10762 <param name="memCache" type="unsigned long" dir="out">
10763 <desc>Total amount of guest (disk) cache memory.</desc>
10764 </param>
10765 <param name="pagedTotal" type="unsigned long" dir="out">
10766 <desc>Total amount of space in the page file.</desc>
10767 </param>
10768 <param name="memAllocTotal" type="unsigned long" dir="out">
10769 <desc>Total amount of memory allocated by the hypervisor.</desc>
10770 </param>
10771 <param name="memFreeTotal" type="unsigned long" dir="out">
10772 <desc>Total amount of free memory available in the hypervisor.</desc>
10773 </param>
10774 <param name="memBalloonTotal" type="unsigned long" dir="out">
10775 <desc>Total amount of memory ballooned by the hypervisor.</desc>
10776 </param>
10777 <param name="memSharedTotal" type="unsigned long" dir="out">
10778 <desc>Total amount of shared memory in the hypervisor.</desc>
10779 </param>
10780 </method>
10781
10782 <method name="getFacilityStatus">
10783 <desc>
10784 Get the current status of a Guest Additions facility.
10785 </desc>
10786 <param name="facility" type="AdditionsFacilityType" dir="in">
10787 <desc>Facility to check status for.</desc>
10788 </param>
10789 <param name="timestamp" type="long long" dir="out">
10790 <desc>Timestamp (in ms) of last status update seen by the host.</desc>
10791 </param>
10792 <param name="status" type="AdditionsFacilityStatus" dir="return">
10793 <desc>The current (latest) facility status.</desc>
10794 </param>
10795 </method>
10796
10797 <method name="getAdditionsStatus">
10798 <desc>
10799 Retrieve the current status of a certain Guest Additions run level.
10800
10801 <result name="VBOX_E_NOT_SUPPORTED">
10802 Wrong status level specified.
10803 </result>
10804
10805 </desc>
10806 <param name="level" type="AdditionsRunLevelType" dir="in">
10807 <desc>Status level to check</desc>
10808 </param>
10809 <param name="active" type="boolean" dir="return">
10810 <desc>Flag whether the status level has been reached or not</desc>
10811 </param>
10812 </method>
10813
10814 <method name="setCredentials">
10815 <desc>
10816 Store login credentials that can be queried by guest operating
10817 systems with Additions installed. The credentials are transient
10818 to the session and the guest may also choose to erase them. Note
10819 that the caller cannot determine whether the guest operating system
10820 has queried or made use of the credentials.
10821
10822 <result name="VBOX_E_VM_ERROR">
10823 VMM device is not available.
10824 </result>
10825
10826 </desc>
10827 <param name="userName" type="wstring" dir="in">
10828 <desc>User name string, can be empty</desc>
10829 </param>
10830 <param name="password" type="wstring" dir="in">
10831 <desc>Password string, can be empty</desc>
10832 </param>
10833 <param name="domain" type="wstring" dir="in">
10834 <desc>Domain name (guest logon scheme specific), can be empty</desc>
10835 </param>
10836 <param name="allowInteractiveLogon" type="boolean" dir="in">
10837 <desc>
10838 Flag whether the guest should alternatively allow the user to
10839 interactively specify different credentials. This flag might
10840 not be supported by all versions of the Additions.
10841 </desc>
10842 </param>
10843 </method>
10844
10845 <method name="dragHGEnter">
10846 <desc>
10847 Informs the guest about a Drag and Drop enter event.
10848
10849 This is used in Host - Guest direction.
10850
10851 <result name="VBOX_E_VM_ERROR">
10852 VMM device is not available.
10853 </result>
10854
10855 </desc>
10856 <param name="screenId" type="unsigned long" dir="in">
10857 <desc>The screen id where the Drag and Drop event occured.</desc>
10858 </param>
10859 <param name="y" type="unsigned long" dir="in">
10860 <desc>y-position of the event.</desc>
10861 </param>
10862 <param name="x" type="unsigned long" dir="in">
10863 <desc>x-position of the event.</desc>
10864 </param>
10865 <param name="defaultAction" type="DragAndDropAction" dir="in">
10866 <desc>The default action to use.</desc>
10867 </param>
10868 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10869 <desc>The actions which are allowed.</desc>
10870 </param>
10871 <param name="formats" type="wstring" dir="in" safearray="yes">
10872 <desc>The supported mime types.</desc>
10873 </param>
10874 <param name="resultAction" type="DragAndDropAction" dir="return">
10875 <desc>The resulting action of this event.</desc>
10876 </param>
10877 </method>
10878
10879 <method name="dragHGMove">
10880 <desc>
10881 Informs the guest about a Drag and Drop move event.
10882
10883 This is used in Host - Guest direction.
10884
10885 <result name="VBOX_E_VM_ERROR">
10886 VMM device is not available.
10887 </result>
10888
10889 </desc>
10890 <param name="screenId" type="unsigned long" dir="in">
10891 <desc>The screen id where the Drag and Drop event occured.</desc>
10892 </param>
10893 <param name="x" type="unsigned long" dir="in">
10894 <desc>x-position of the event.</desc>
10895 </param>
10896 <param name="y" type="unsigned long" dir="in">
10897 <desc>y-position of the event.</desc>
10898 </param>
10899 <param name="defaultAction" type="DragAndDropAction" dir="in">
10900 <desc>The default action to use.</desc>
10901 </param>
10902 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10903 <desc>The actions which are allowed.</desc>
10904 </param>
10905 <param name="formats" type="wstring" dir="in" safearray="yes">
10906 <desc>The supported mime types.</desc>
10907 </param>
10908 <param name="resultAction" type="DragAndDropAction" dir="return">
10909 <desc>The resulting action of this event.</desc>
10910 </param>
10911 </method>
10912
10913 <method name="dragHGLeave">
10914 <desc>
10915 Informs the guest about a Drag and Drop leave event.
10916
10917 This is used in Host - Guest direction.
10918
10919 <result name="VBOX_E_VM_ERROR">
10920 VMM device is not available.
10921 </result>
10922
10923 </desc>
10924 <param name="screenId" type="unsigned long" dir="in">
10925 <desc>The screen id where the Drag and Drop event occured.</desc>
10926 </param>
10927 </method>
10928
10929 <method name="dragHGDrop">
10930 <desc>
10931 Informs the guest about a drop event.
10932
10933 This is used in Host - Guest direction.
10934
10935 <result name="VBOX_E_VM_ERROR">
10936 VMM device is not available.
10937 </result>
10938
10939 </desc>
10940 <param name="screenId" type="unsigned long" dir="in">
10941 <desc>The screen id where the Drag and Drop event occured.</desc>
10942 </param>
10943 <param name="x" type="unsigned long" dir="in">
10944 <desc>x-position of the event.</desc>
10945 </param>
10946 <param name="y" type="unsigned long" dir="in">
10947 <desc>y-position of the event.</desc>
10948 </param>
10949 <param name="defaultAction" type="DragAndDropAction" dir="in">
10950 <desc>The default action to use.</desc>
10951 </param>
10952 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10953 <desc>The actions which are allowed.</desc>
10954 </param>
10955 <param name="formats" type="wstring" dir="in" safearray="yes">
10956 <desc>The supported mime types.</desc>
10957 </param>
10958 <param name="format" type="wstring" dir="out">
10959 <desc>The resulting format of this event.</desc>
10960 </param>
10961 <param name="resultAction" type="DragAndDropAction" dir="return">
10962 <desc>The resulting action of this event.</desc>
10963 </param>
10964 </method>
10965
10966 <method name="dragHGPutData">
10967 <desc>
10968 Informs the guest about a drop data event.
10969
10970 This is used in Host - Guest direction.
10971
10972 <result name="VBOX_E_VM_ERROR">
10973 VMM device is not available.
10974 </result>
10975
10976 </desc>
10977 <param name="screenId" type="unsigned long" dir="in">
10978 <desc>The screen id where the Drag and Drop event occured.</desc>
10979 </param>
10980 <param name="format" type="wstring" dir="in">
10981 <desc>The mime type the data is in.</desc>
10982 </param>
10983 <param name="data" type="octet" dir="in" safearray="yes">
10984 <desc>The actual data.</desc>
10985 </param>
10986 <param name="progress" type="IProgress" dir="return">
10987 <desc>Progress object to track the operation completion.</desc>
10988 </param>
10989 </method>
10990
10991 <method name="dragGHPending">
10992 <desc>
10993 Ask the guest if there is any Drag and Drop operation pending in the guest.
10994
10995 If no Drag and Drop operation is pending currently, Ignore is returned.
10996
10997 This is used in Guest - Host direction.
10998
10999 <result name="VBOX_E_VM_ERROR">
11000 VMM device is not available.
11001 </result>
11002
11003 </desc>
11004 <param name="screenId" type="unsigned long" dir="in">
11005 <desc>The screen id where the Drag and Drop event occured.</desc>
11006 </param>
11007 <param name="format" type="wstring" dir="out" safearray="yes">
11008 <desc>On return the supported mime types.</desc>
11009 </param>
11010 <param name="allowedActions" type="DragAndDropAction" dir="out" safearray="yes">
11011 <desc>On return the actions which are allowed.</desc>
11012 </param>
11013 <param name="defaultAction" type="DragAndDropAction" dir="return">
11014 <desc>On return the default action to use.</desc>
11015 </param>
11016 </method>
11017
11018 <method name="dragGHDropped">
11019 <desc>
11020 Informs the guest that a drop event occured for a pending Drag and Drop event.
11021
11022 This is used in Guest - Host direction.
11023
11024 <result name="VBOX_E_VM_ERROR">
11025 VMM device is not available.
11026 </result>
11027
11028 </desc>
11029
11030 <param name="format" type="wstring" dir="in">
11031 <desc>The mime type the data must be in.</desc>
11032 </param>
11033 <param name="action" type="DragAndDropAction" dir="in">
11034 <desc>The action to use.</desc>
11035 </param>
11036 <param name="progress" type="IProgress" dir="return">
11037 <desc>Progress object to track the operation completion.</desc>
11038 </param>
11039 </method>
11040
11041 <method name="dragGHGetData">
11042 <desc>
11043 Fetch the data of a previously Drag and Drop event from the guest.
11044
11045 This is used in Guest - Host direction.
11046
11047 <result name="VBOX_E_VM_ERROR">
11048 VMM device is not available.
11049 </result>
11050
11051 </desc>
11052
11053 <param name="data" type="octet" safearray="yes" dir="return">
11054 <desc>The actual data.</desc>
11055 </param>
11056 </method>
11057
11058 <method name="createSession">
11059 <desc>
11060 TODO
11061 </desc>
11062 <param name="user" type="wstring" dir="in">
11063 <desc>
11064 TODO
11065 </desc>
11066 </param>
11067 <param name="password" type="wstring" dir="in">
11068 <desc>
11069 TODO
11070 </desc>
11071 </param>
11072 <param name="domain" type="wstring" dir="in">
11073 <desc>
11074 TODO
11075 </desc>
11076 </param>
11077 <param name="sessionName" type="wstring" dir="in">
11078 <desc>
11079 TODO
11080 </desc>
11081 </param>
11082 <param name="guestSession" type="IGuestSession" dir="return">
11083 <desc>
11084 TODO
11085 </desc>
11086 </param>
11087 </method>
11088
11089 <method name="findSession">
11090 <desc>
11091 TODO
11092 </desc>
11093 <param name="sessionName" type="wstring" dir="in">
11094 <desc>
11095 TODO
11096 </desc>
11097 </param>
11098 <param name="sessions" type="IGuestSession" safearray="yes" dir="return">
11099 <desc>
11100 TODO
11101 </desc>
11102 </param>
11103 </method>
11104
11105 <method name="executeProcess">
11106 <desc>
11107 Executes an existing program inside the guest VM.
11108
11109 <note>
11110 Starting at VirtualBox 4.1.8 guest process execution by default is limited
11111 to serve up to 25 guest processes at a time. If all 25 guest processes
11112 are still active and running, starting a new guest process will result in an
11113 appropriate error message.
11114
11115 If ExecuteProcessFlag_WaitForStdOut and/or respectively
11116 ExecuteProcessFlag_WaitForStdErr of <link to="ExecuteProcessFlag"/> is
11117 set, the guest process will not exit until all data from the specified
11118 stream(s) is/are read out.
11119
11120 To raise or lower the guest process execution limit, either the guest property
11121 "/VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept" or VBoxService'
11122 command line by specifying "--control-procs-max-kept" needs to be modified.
11123 A restart of the guest OS is required afterwards. To serve unlimited guest
11124 processes, a value of "0" needs to be set (not recommended).
11125 </note>
11126
11127 <result name="VBOX_E_IPRT_ERROR">
11128 Could not execute process.
11129 </result>
11130
11131 </desc>
11132 <param name="execName" type="wstring" dir="in">
11133 <desc>
11134 Full path name of the command to execute on the guest; the
11135 commands has to exists in the guest VM in order to be executed.
11136 </desc>
11137 </param>
11138 <param name="flags" type="unsigned long" dir="in">
11139 <desc>
11140 <link to="ExecuteProcessFlag"/> flags.
11141 </desc>
11142 </param>
11143 <param name="arguments" type="wstring" safearray="yes" dir="in">
11144 <desc>
11145 Array of arguments passed to the execution command.
11146 </desc>
11147 </param>
11148 <param name="environment" type="wstring" safearray="yes" dir="in">
11149 <desc>
11150 Environment variables that can be set while the command is being
11151 executed, in form of "NAME=VALUE"; one pair per entry. To unset a
11152 variable just set its name ("NAME") without a value.
11153 </desc>
11154 </param>
11155 <param name="userName" type="wstring" dir="in">
11156 <desc>
11157 User name under which the command will be executed; has to exist
11158 and have the appropriate rights to execute programs in the VM.
11159 </desc>
11160 </param>
11161 <param name="password" type="wstring" dir="in">
11162 <desc>
11163 Password of the user account specified.
11164 </desc>
11165 </param>
11166 <param name="timeoutMS" type="unsigned long" dir="in">
11167 <desc>
11168 The maximum timeout value (in msec) to wait for finished program
11169 execution. Pass 0 for an infinite timeout.
11170 </desc>
11171 </param>
11172 <param name="pid" type="unsigned long" dir="out">
11173 <desc>
11174 The PID (process ID) of the started command for later reference.
11175 </desc>
11176 </param>
11177 <param name="progress" type="IProgress" dir="return">
11178 <desc>Progress object to track the operation completion.</desc>
11179 </param>
11180 </method>
11181
11182 <method name="getProcessOutput">
11183 <desc>
11184 Retrieves output of a formerly started and running guest process.
11185
11186 <note>
11187 Starting with VirtualBox 4.1.8 this only will return output data
11188 from stdout or stderr if flag ExecuteProcessFlag_WaitForStdOut
11189 and/or respectively ExecuteProcessFlag_WaitForStdErr of
11190 <link to="ExecuteProcessFlag"/> is set in the
11191 former <link to="#executeProcess"/> call for this guest process.
11192 </note>
11193
11194 <result name="VBOX_E_IPRT_ERROR">
11195 Could not retrieve output.
11196 </result>
11197
11198 </desc>
11199 <param name="pid" type="unsigned long" dir="in">
11200 <desc>
11201 Process id returned by earlier <link to="#executeProcess"/> call.
11202 </desc>
11203 </param>
11204 <param name="flags" type="unsigned long" dir="in">
11205 <desc>
11206 <link to="ProcessOutputFlag"/> flags.
11207 </desc>
11208 </param>
11209 <param name="timeoutMS" type="unsigned long" dir="in">
11210 <desc>
11211 The maximum timeout value (in msec) to wait for output
11212 data. Pass 0 for an infinite timeout.
11213 </desc>
11214 </param>
11215 <param name="size" type="long long" dir="in">
11216 <desc>
11217 Size in bytes to read in the buffer.
11218 </desc>
11219 </param>
11220 <param name="data" type="octet" safearray="yes" dir="return">
11221 <desc>
11222 Buffer for retrieving the actual output. A data size of 0 means end of file
11223 if the requested size was not 0. This is the unprocessed
11224 output data, i.e. the line ending style depends on the platform of
11225 the system the server is running on.
11226 </desc>
11227 </param>
11228 </method>
11229
11230 <method name="getProcessStatus">
11231 <desc>
11232 Retrieves status, exit code and the exit reason of a formerly started
11233 guest process. If a guest process exited or got terminated this function
11234 returns its final status and removes this process from the list of
11235 known guest processes for further retrieval.
11236
11237 <result name="VBOX_E_IPRT_ERROR">
11238 Process with specified PID was not found.
11239 </result>
11240
11241 </desc>
11242 <param name="pid" type="unsigned long" dir="in">
11243 <desc>
11244 Process id returned by earlier <link to="#executeProcess"/> call.
11245 </desc>
11246 </param>
11247 <param name="exitcode" type="unsigned long" dir="out">
11248 <desc>
11249 The exit code (if available).
11250 </desc>
11251 </param>
11252 <param name="flags" type="unsigned long" dir="out">
11253 <desc>
11254 Additional flags of process status. Not used at the moment and
11255 must be set to 0.
11256 </desc>
11257 </param>
11258 <param name="reason" type="ExecuteProcessStatus" dir="return">
11259 <desc>
11260 The current process status.
11261 </desc>
11262 </param>
11263 </method>
11264
11265 <method name="copyFromGuest">
11266 <desc>
11267 Copies files/directories from guest to the host.
11268
11269 <result name="VBOX_E_IPRT_ERROR">
11270 Error while copying.
11271 </result>
11272
11273 </desc>
11274 <param name="source" type="wstring" dir="in">
11275 <desc>
11276 Source file on the guest to copy.
11277 </desc>
11278 </param>
11279 <param name="dest" type="wstring" dir="in">
11280 <desc>
11281 Destination path on the host.
11282 </desc>
11283 </param>
11284 <param name="userName" type="wstring" dir="in">
11285 <desc>
11286 User name under which the copy command will be executed; the
11287 user has to exist and have the appropriate rights to read from
11288 the source path.
11289 </desc>
11290 </param>
11291 <param name="password" type="wstring" dir="in">
11292 <desc>
11293 Password of the user account specified.
11294 </desc>
11295 </param>
11296 <param name="flags" type="unsigned long" dir="in">
11297 <desc>
11298 <link to="CopyFileFlag"/> flags. Not used at the moment and should be set to 0.
11299 </desc>
11300 </param>
11301 <param name="progress" type="IProgress" dir="return">
11302 <desc>Progress object to track the operation completion.</desc>
11303 </param>
11304 </method>
11305
11306 <method name="copyToGuest">
11307 <desc>
11308 Copies files/directories from host to the guest.
11309
11310 <result name="VBOX_E_IPRT_ERROR">
11311 Error while copying.
11312 </result>
11313
11314 </desc>
11315 <param name="source" type="wstring" dir="in">
11316 <desc>
11317 Source file on the host to copy.
11318 </desc>
11319 </param>
11320 <param name="dest" type="wstring" dir="in">
11321 <desc>
11322 Destination path on the guest.
11323 </desc>
11324 </param>
11325 <param name="userName" type="wstring" dir="in">
11326 <desc>
11327 User name under which the copy command will be executed; the
11328 user has to exist and have the appropriate rights to write to
11329 the destination path.
11330 </desc>
11331 </param>
11332 <param name="password" type="wstring" dir="in">
11333 <desc>
11334 Password of the user account specified.
11335 </desc>
11336 </param>
11337 <param name="flags" type="unsigned long" dir="in">
11338 <desc>
11339 <link to="CopyFileFlag"/> flags. Not used at the moment and should be set to 0.
11340 </desc>
11341 </param>
11342 <param name="progress" type="IProgress" dir="return">
11343 <desc>Progress object to track the operation completion.</desc>
11344 </param>
11345 </method>
11346
11347 <method name="directoryClose">
11348 <desc>
11349 Closes a formerly opened guest directory.
11350
11351 <result name="VBOX_E_IPRT_ERROR">
11352 Error while closing directory.
11353 </result>
11354
11355 </desc>
11356 <param name="handle" type="unsigned long" dir="in">
11357 <desc>
11358 Handle of opened directory to close.
11359 </desc>
11360 </param>
11361 </method>
11362
11363 <method name="directoryCreate">
11364 <desc>
11365 Creates a directory on the guest.
11366
11367 <result name="VBOX_E_IPRT_ERROR">
11368 Error while creating directory.
11369 </result>
11370
11371 </desc>
11372 <param name="directory" type="wstring" dir="in">
11373 <desc>
11374 Directory to create.
11375 </desc>
11376 </param>
11377 <param name="userName" type="wstring" dir="in">
11378 <desc>
11379 User name under which the directory creation will be executed; the
11380 user has to exist and have the appropriate rights to create the
11381 desired directory.
11382 </desc>
11383 </param>
11384 <param name="password" type="wstring" dir="in">
11385 <desc>
11386 Password of the user account specified.
11387 </desc>
11388 </param>
11389 <param name="mode" type="unsigned long" dir="in">
11390 <desc>
11391 File mode.
11392 </desc>
11393 </param>
11394 <param name="flags" type="unsigned long" dir="in">
11395 <desc>
11396 <link to="DirectoryCreateFlag"/> flags.
11397 </desc>
11398 </param>
11399 </method>
11400
11401 <method name="directoryOpen">
11402 <desc>
11403 Opens a directory on the guest.
11404
11405 <result name="VBOX_E_IPRT_ERROR">
11406 Error while opening / reading directory.
11407 </result>
11408
11409 </desc>
11410 <param name="directory" type="wstring" dir="in">
11411 <desc>
11412 Directory to read.
11413 </desc>
11414 </param>
11415 <param name="filter" type="wstring" dir="in">
11416 <desc>
11417 Directory filter (DOS style wildcards). Set to empty
11418 string if no filter required.
11419 </desc>
11420 </param>
11421 <param name="flags" type="unsigned long" dir="in">
11422 <desc>
11423 <link to="DirectoryOpenFlag"/> flags.
11424 </desc>
11425 </param>
11426 <param name="userName" type="wstring" dir="in">
11427 <desc>
11428 User name under which the directory reading will be performed; the
11429 user has to exist and have the appropriate rights to access / read the
11430 desired directory.
11431 </desc>
11432 </param>
11433 <param name="password" type="wstring" dir="in">
11434 <desc>
11435 Password of the user account specified.
11436 </desc>
11437 </param>
11438 <param name="handle" type="unsigned long" dir="return">
11439 <desc>
11440 Handle of opened directory returned by openDirectory.
11441 </desc>
11442 </param>
11443 </method>
11444
11445 <method name="directoryRead">
11446 <desc>
11447 Reads the next directory entry of an opened guest directory.
11448
11449 <result name="E_ABORT">
11450 When the end of the directory has been reached.
11451 </result>
11452
11453 <result name="VBOX_E_IPRT_ERROR">
11454 Error while opening / reading directory.
11455 </result>
11456
11457 </desc>
11458 <param name="handle" type="unsigned long" dir="in">
11459 <desc>
11460 Handle of opened directory returned by openDirectory.
11461 </desc>
11462 </param>
11463 <param name="entry" type="IGuestDirEntry" dir="return">
11464 <desc>
11465 Information about next directory entry on success.
11466 </desc>
11467 </param>
11468 </method>
11469
11470 <method name="fileExists">
11471 <desc>
11472 Checks if the specified file name exists and is a regular file.
11473
11474 If the file name ends with a slash or backslash, the function assumes
11475 it's a directory and will check if the specified directory exists and
11476 is a regular directory.
11477
11478 <result name="VBOX_E_IPRT_ERROR">
11479 Error while looking up information.
11480 </result>
11481
11482 </desc>
11483 <param name="file" type="wstring" dir="in">
11484 <desc>
11485 Full path of file to check.
11486 </desc>
11487 </param>
11488 <param name="userName" type="wstring" dir="in">
11489 <desc>
11490 User name under which the lookup will be performed; the
11491 user has to exist and have the appropriate rights to access / read the
11492 desired directory.
11493 </desc>
11494 </param>
11495 <param name="password" type="wstring" dir="in">
11496 <desc>
11497 Password of the user account specified.
11498 </desc>
11499 </param>
11500 <param name="exists" type="boolean" dir="return">
11501 <desc>
11502 True if it's a regular file, false if it isn't (or doesn't exist).
11503 </desc>
11504 </param>
11505 </method>
11506
11507 <method name="fileQuerySize">
11508 <desc>
11509 Queries the size of a file, given the path to it.
11510
11511 <result name="VBOX_E_IPRT_ERROR">
11512 Error while looking up information.
11513 </result>
11514
11515 </desc>
11516 <param name="file" type="wstring" dir="in">
11517 <desc>
11518 Full path of file to query file size for.
11519 </desc>
11520 </param>
11521 <param name="userName" type="wstring" dir="in">
11522 <desc>
11523 User name under which the lookup will be performed; the
11524 user has to exist and have the appropriate rights to access / read the
11525 desired directory.
11526 </desc>
11527 </param>
11528 <param name="password" type="wstring" dir="in">
11529 <desc>
11530 Password of the user account specified.
11531 </desc>
11532 </param>
11533 <param name="size" type="long long" dir="return">
11534 <desc>
11535 Size (in bytes) of file specified.
11536 </desc>
11537 </param>
11538 </method>
11539
11540 <method name="setProcessInput">
11541 <desc>
11542 Sends input into a formerly started process.
11543
11544 <result name="VBOX_E_IPRT_ERROR">
11545 Could not send input.
11546 </result>
11547
11548 </desc>
11549 <param name="pid" type="unsigned long" dir="in">
11550 <desc>
11551 Process id returned by earlier <link to="#executeProcess"/> call.
11552 </desc>
11553 </param>
11554 <param name="flags" type="unsigned long" dir="in">
11555 <desc>
11556 <link to="ProcessInputFlag"/> flags.
11557 </desc>
11558 </param>
11559 <param name="timeoutMS" type="unsigned long" dir="in">
11560 <desc>
11561 The maximum timeout value (in msec) to wait for getting the
11562 data transfered to the guest. Pass 0 for an infinite timeout.
11563 </desc>
11564 </param>
11565 <param name="data" type="octet" dir="in" safearray="yes">
11566 <desc>
11567 Buffer of input data to send to the started process to.
11568 </desc>
11569 </param>
11570 <param name="written" type="unsigned long" dir="return">
11571 <desc>
11572 Number of bytes written.
11573 </desc>
11574 </param>
11575 </method>
11576
11577 <method name="updateGuestAdditions">
11578 <desc>
11579 Updates already installed Guest Additions in a VM
11580 (Windows guests only).
11581
11582 <result name="VBOX_E_IPRT_ERROR">
11583 Error while updating.
11584 </result>
11585
11586 </desc>
11587 <param name="source" type="wstring" dir="in">
11588 <desc>
11589 Path to the Guest Additions .ISO file to use for the upate.
11590 </desc>
11591 </param>
11592 <param name="flags" type="AdditionsUpdateFlag" dir="in" safearray="yes">
11593 <desc>
11594 <link to="AdditionsUpdateFlag"/> flags.
11595 </desc>
11596 </param>
11597 <param name="progress" type="IProgress" dir="return">
11598 <desc>Progress object to track the operation completion.</desc>
11599 </param>
11600 </method>
11601
11602 </interface>
11603
11604
11605 <!--
11606 // IProgress
11607 /////////////////////////////////////////////////////////////////////////
11608 -->
11609
11610 <interface
11611 name="IProgress" extends="$unknown"
11612 uuid="c20238e4-3221-4d3f-8891-81ce92d9f913"
11613 wsmap="managed"
11614 >
11615 <desc>
11616 The IProgress interface is used to track and control
11617 asynchronous tasks within VirtualBox.
11618
11619 An instance of this is returned every time VirtualBox starts
11620 an asynchronous task (in other words, a separate thread) which
11621 continues to run after a method call returns. For example,
11622 <link to="IConsole::saveState" />, which saves the state of
11623 a running virtual machine, can take a long time to complete.
11624 To be able to display a progress bar, a user interface such as
11625 the VirtualBox graphical user interface can use the IProgress
11626 object returned by that method.
11627
11628 Note that IProgress is a "read-only" interface in the sense
11629 that only the VirtualBox internals behind the Main API can
11630 create and manipulate progress objects, whereas client code
11631 can only use the IProgress object to monitor a task's
11632 progress and, if <link to="#cancelable" /> is @c true,
11633 cancel the task by calling <link to="#cancel" />.
11634
11635 A task represented by IProgress consists of either one or
11636 several sub-operations that run sequentially, one by one (see
11637 <link to="#operation" /> and <link to="#operationCount" />).
11638 Every operation is identified by a number (starting from 0)
11639 and has a separate description.
11640
11641 You can find the individual percentage of completion of the current
11642 operation in <link to="#operationPercent" /> and the
11643 percentage of completion of the task as a whole
11644 in <link to="#percent" />.
11645
11646 Similarly, you can wait for the completion of a particular
11647 operation via <link to="#waitForOperationCompletion" /> or
11648 for the completion of the whole task via
11649 <link to="#waitForCompletion" />.
11650 </desc>
11651
11652 <attribute name="id" type="uuid" mod="string" readonly="yes">
11653 <desc>ID of the task.</desc>
11654 </attribute>
11655
11656 <attribute name="description" type="wstring" readonly="yes">
11657 <desc>Description of the task.</desc>
11658 </attribute>
11659
11660 <attribute name="initiator" type="$unknown" readonly="yes">
11661 <desc>Initiator of the task.</desc>
11662 </attribute>
11663
11664 <attribute name="cancelable" type="boolean" readonly="yes">
11665 <desc>Whether the task can be interrupted.</desc>
11666 </attribute>
11667
11668 <attribute name="percent" type="unsigned long" readonly="yes">
11669 <desc>
11670 Current progress value of the task as a whole, in percent.
11671 This value depends on how many operations are already complete.
11672 Returns 100 if <link to="#completed" /> is @c true.
11673 </desc>
11674 </attribute>
11675
11676 <attribute name="timeRemaining" type="long" readonly="yes">
11677 <desc>
11678 Estimated remaining time until the task completes, in
11679 seconds. Returns 0 once the task has completed; returns -1
11680 if the remaining time cannot be computed, in particular if
11681 the current progress is 0.
11682
11683 Even if a value is returned, the estimate will be unreliable
11684 for low progress values. It will become more reliable as the
11685 task progresses; it is not recommended to display an ETA
11686 before at least 20% of a task have completed.
11687 </desc>
11688 </attribute>
11689
11690 <attribute name="completed" type="boolean" readonly="yes">
11691 <desc>Whether the task has been completed.</desc>
11692 </attribute>
11693
11694 <attribute name="canceled" type="boolean" readonly="yes">
11695 <desc>Whether the task has been canceled.</desc>
11696 </attribute>
11697
11698 <attribute name="resultCode" type="long" readonly="yes">
11699 <desc>
11700 Result code of the progress task.
11701 Valid only if <link to="#completed"/> is @c true.
11702 </desc>
11703 </attribute>
11704
11705 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
11706 <desc>
11707 Extended information about the unsuccessful result of the
11708 progress operation. May be @c null if no extended information
11709 is available.
11710 Valid only if <link to="#completed"/> is @c true and
11711 <link to="#resultCode"/> indicates a failure.
11712 </desc>
11713 </attribute>
11714
11715 <attribute name="operationCount" type="unsigned long" readonly="yes">
11716 <desc>
11717 Number of sub-operations this task is divided into.
11718 Every task consists of at least one suboperation.
11719 </desc>
11720 </attribute>
11721
11722 <attribute name="operation" type="unsigned long" readonly="yes">
11723 <desc>Number of the sub-operation being currently executed.</desc>
11724 </attribute>
11725
11726 <attribute name="operationDescription" type="wstring" readonly="yes">
11727 <desc>
11728 Description of the sub-operation being currently executed.
11729 </desc>
11730 </attribute>
11731
11732 <attribute name="operationPercent" type="unsigned long" readonly="yes">
11733 <desc>Progress value of the current sub-operation only, in percent.</desc>
11734 </attribute>
11735
11736 <attribute name="operationWeight" type="unsigned long" readonly="yes">
11737 <desc>Weight value of the current sub-operation only.</desc>
11738 </attribute>
11739
11740 <attribute name="timeout" type="unsigned long">
11741 <desc>
11742 When non-zero, this specifies the number of milliseconds after which
11743 the operation will automatically be canceled. This can only be set on
11744 cancelable objects.
11745 </desc>
11746 </attribute>
11747
11748 <method name="setCurrentOperationProgress">
11749 <desc>Internal method, not to be called externally.</desc>
11750 <param name="percent" type="unsigned long" dir="in" />
11751 </method>
11752 <method name="setNextOperation">
11753 <desc>Internal method, not to be called externally.</desc>
11754 <param name="nextOperationDescription" type="wstring" dir="in" />
11755 <param name="nextOperationsWeight" type="unsigned long" dir="in" />
11756 </method>
11757
11758 <method name="waitForCompletion">
11759 <desc>
11760 Waits until the task is done (including all sub-operations)
11761 with a given timeout in milliseconds; specify -1 for an indefinite wait.
11762
11763 Note that the VirtualBox/XPCOM/COM/native event queues of the calling
11764 thread are not processed while waiting. Neglecting event queues may
11765 have dire consequences (degrade performance, resource hogs,
11766 deadlocks, etc.), this is specially so for the main thread on
11767 platforms using XPCOM. Callers are adviced wait for short periods
11768 and service their event queues between calls, or to create a worker
11769 thread to do the waiting.
11770
11771 <result name="VBOX_E_IPRT_ERROR">
11772 Failed to wait for task completion.
11773 </result>
11774 </desc>
11775
11776 <param name="timeout" type="long" dir="in">
11777 <desc>
11778 Maximum time in milliseconds to wait or -1 to wait indefinitely.
11779 </desc>
11780 </param>
11781 </method>
11782
11783 <method name="waitForOperationCompletion">
11784 <desc>
11785 Waits until the given operation is done with a given timeout in
11786 milliseconds; specify -1 for an indefinite wait.
11787
11788 See <link to="#waitForCompletion"> for event queue considerations.</link>
11789
11790 <result name="VBOX_E_IPRT_ERROR">
11791 Failed to wait for operation completion.
11792 </result>
11793
11794 </desc>
11795 <param name="operation" type="unsigned long" dir="in">
11796 <desc>
11797 Number of the operation to wait for.
11798 Must be less than <link to="#operationCount"/>.
11799 </desc>
11800 </param>
11801 <param name="timeout" type="long" dir="in">
11802 <desc>
11803 Maximum time in milliseconds to wait or -1 to wait indefinitely.
11804 </desc>
11805 </param>
11806 </method>
11807
11808 <method name="waitForAsyncProgressCompletion">
11809 <desc>
11810 Waits until the other task is completed (including all
11811 sub-operations) and forward all changes from the other progress to
11812 this progress. This means sub-operation number, description, percent
11813 and so on.
11814
11815 You have to take care on setting up at least the same count on
11816 sub-operations in this progress object like there are in the other
11817 progress object.
11818
11819 If the other progress object supports cancel and this object gets any
11820 cancel request (when here enabled as well), it will be forwarded to
11821 the other progress object.
11822
11823 If there is an error in the other progress, this error isn't
11824 automatically transfered to this progress object. So you have to
11825 check any operation error within the other progress object, after
11826 this method returns.
11827 </desc>
11828
11829 <param name="pProgressAsync" type="IProgress" dir="in">
11830 <desc>
11831 The progress object of the asynchrony process.
11832 </desc>
11833 </param>
11834 </method>
11835
11836 <method name="cancel">
11837 <desc>
11838 Cancels the task.
11839 <note>
11840 If <link to="#cancelable"/> is @c false, then this method will fail.
11841 </note>
11842
11843 <result name="VBOX_E_INVALID_OBJECT_STATE">
11844 Operation cannot be canceled.
11845 </result>
11846
11847 </desc>
11848 </method>
11849
11850 </interface>
11851
11852 <!--
11853 // ISnapshot
11854 /////////////////////////////////////////////////////////////////////////
11855 -->
11856
11857 <interface
11858 name="ISnapshot" extends="$unknown"
11859 uuid="0472823b-c6e7-472a-8e9f-d732e86b8463"
11860 wsmap="managed"
11861 >
11862 <desc>
11863 The ISnapshot interface represents a snapshot of the virtual
11864 machine.
11865
11866 Together with the differencing media that are created
11867 when a snapshot is taken, a machine can be brought back to
11868 the exact state it was in when the snapshot was taken.
11869
11870 The ISnapshot interface has no methods, only attributes; snapshots
11871 are controlled through methods of the <link to="IConsole" /> interface
11872 which also manage the media associated with the snapshot.
11873 The following operations exist:
11874
11875 <ul>
11876 <li><link to="IConsole::takeSnapshot"/> creates a new snapshot
11877 by creating new, empty differencing images for the machine's
11878 media and saving the VM settings and (if the VM is running)
11879 the current VM state in the snapshot.
11880
11881 The differencing images will then receive all data written to
11882 the machine's media, while their parent (base) images
11883 remain unmodified after the snapshot has been taken (see
11884 <link to="IMedium" /> for details about differencing images).
11885 This simplifies restoring a machine to the state of a snapshot:
11886 only the differencing images need to be deleted.
11887
11888 The current machine state is not changed by taking a snapshot
11889 except that <link to="IMachine::currentSnapshot" /> is set to
11890 the newly created snapshot, which is also added to the machine's
11891 snapshots tree.
11892 </li>
11893
11894 <li><link to="IConsole::restoreSnapshot"/> resets a machine to
11895 the state of a previous snapshot by deleting the differencing
11896 image of each of the machine's media and setting the machine's
11897 settings and state to the state that was saved in the snapshot (if any).
11898
11899 This destroys the machine's current state. After calling this,
11900 <link to="IMachine::currentSnapshot" /> points to the snapshot
11901 that was restored.
11902 </li>
11903
11904 <li><link to="IConsole::deleteSnapshot"/> deletes a snapshot
11905 without affecting the current machine state.
11906
11907 This does not change the current machine state, but instead frees the
11908 resources allocated when the snapshot was taken: the settings and machine
11909 state file are deleted (if any), and the snapshot's differencing image for
11910 each of the machine's media gets merged with its parent image.
11911
11912 Neither the current machine state nor other snapshots are affected
11913 by this operation, except that parent media will be modified
11914 to contain the disk data associated with the snapshot being deleted.
11915
11916 When deleting the current snapshot, the <link to="IMachine::currentSnapshot" />
11917 attribute is set to the current snapshot's parent or @c null if it
11918 has no parent. Otherwise the attribute is unchanged.
11919 </li>
11920 </ul>
11921
11922 Each snapshot contains a copy of virtual machine's settings (hardware
11923 configuration etc.). This copy is contained in an immutable (read-only)
11924 instance of <link to="IMachine" /> which is available from the snapshot's
11925 <link to="#machine" /> attribute. When restoring the snapshot, these
11926 settings are copied back to the original machine.
11927
11928 In addition, if the machine was running when the
11929 snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>),
11930 the current VM state is saved in the snapshot (similarly to what happens
11931 when a VM's state is saved). The snapshot is then said to be <i>online</i>
11932 because when restoring it, the VM will be running.
11933
11934 If the machine was in <link to="MachineState_Saved">saved</link> saved,
11935 the snapshot receives a copy of the execution state file
11936 (<link to="IMachine::stateFilePath"/>).
11937
11938 Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/>
11939 or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>;
11940 it then contains a so-called "zero execution state", representing a
11941 machine that is powered off.
11942 </desc>
11943
11944 <attribute name="id" type="uuid" mod="string" readonly="yes">
11945 <desc>UUID of the snapshot.</desc>
11946 </attribute>
11947
11948 <attribute name="name" type="wstring">
11949 <desc>Short name of the snapshot.
11950 <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to
11951 be called implicitly.</note>
11952 </desc>
11953 </attribute>
11954
11955 <attribute name="description" type="wstring">
11956 <desc>Optional description of the snapshot.
11957 <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to
11958 be called implicitly.</note>
11959 </desc>
11960 </attribute>
11961
11962 <attribute name="timeStamp" type="long long" readonly="yes">
11963 <desc>
11964 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
11965 </desc>
11966 </attribute>
11967
11968 <attribute name="online" type="boolean" readonly="yes">
11969 <desc>
11970 @c true if this snapshot is an online snapshot and @c false otherwise.
11971
11972 When this attribute is @c true, the
11973 <link to="IMachine::stateFilePath"/> attribute of the
11974 <link to="#machine"/> object associated with this snapshot
11975 will point to the saved state file. Otherwise, it will be
11976 an empty string.
11977 </desc>
11978 </attribute>
11979
11980 <attribute name="machine" type="IMachine" readonly="yes">
11981 <desc>
11982 Virtual machine this snapshot is taken on. This object
11983 stores all settings the machine had when taking this snapshot.
11984 <note>
11985 The returned machine object is immutable, i.e. no
11986 any settings can be changed.
11987 </note>
11988 </desc>
11989 </attribute>
11990
11991 <attribute name="parent" type="ISnapshot" readonly="yes">
11992 <desc>
11993 Parent snapshot (a snapshot this one is based on), or
11994 @c null if the snapshot has no parent (i.e. is the first snapshot).
11995 </desc>
11996 </attribute>
11997
11998 <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes">
11999 <desc>
12000 Child snapshots (all snapshots having this one as a parent).
12001 By inspecting this attribute starting with a machine's root snapshot
12002 (which can be obtained by calling <link to="IMachine::findSnapshot" />
12003 with a @c null UUID), a machine's snapshots tree can be iterated over.
12004 </desc>
12005 </attribute>
12006
12007 <method name="getChildrenCount" const="yes">
12008 <desc>
12009 Returns the number of direct childrens of this snapshot.
12010 </desc>
12011 <param name="childrenCount" type="unsigned long" dir="return">
12012 <desc>
12013 </desc>
12014 </param>
12015 </method>
12016
12017 </interface>
12018
12019
12020 <!--
12021 // IMedium
12022 /////////////////////////////////////////////////////////////////////////
12023 -->
12024
12025 <enum
12026 name="MediumState"
12027 uuid="ef41e980-e012-43cd-9dea-479d4ef14d13"
12028 >
12029 <desc>
12030 Virtual medium state.
12031 <see><link to="IMedium"/></see>
12032 </desc>
12033
12034 <const name="NotCreated" value="0">
12035 <desc>
12036 Associated medium storage does not exist (either was not created yet or
12037 was deleted).
12038 </desc>
12039 </const>
12040 <const name="Created" value="1">
12041 <desc>
12042 Associated storage exists and accessible; this gets set if the
12043 accessibility check performed by <link to="IMedium::refreshState" />
12044 was successful.
12045 </desc>
12046 </const>
12047 <const name="LockedRead" value="2">
12048 <desc>
12049 Medium is locked for reading (see <link to="IMedium::lockRead"/>),
12050 no data modification is possible.
12051 </desc>
12052 </const>
12053 <const name="LockedWrite" value="3">
12054 <desc>
12055 Medium is locked for writing (see <link to="IMedium::lockWrite"/>),
12056 no concurrent data reading or modification is possible.
12057 </desc>
12058 </const>
12059 <const name="Inaccessible" value="4">
12060 <desc>
12061 Medium accessibility check (see <link to="IMedium::refreshState" />) has
12062 not yet been performed, or else, associated medium storage is not
12063 accessible. In the first case, <link to="IMedium::lastAccessError"/>
12064 is empty, in the second case, it describes the error that occurred.
12065 </desc>
12066 </const>
12067 <const name="Creating" value="5">
12068 <desc>
12069 Associated medium storage is being created.
12070 </desc>
12071 </const>
12072 <const name="Deleting" value="6">
12073 <desc>
12074 Associated medium storage is being deleted.
12075 </desc>
12076 </const>
12077 </enum>
12078
12079 <enum
12080 name="MediumType"
12081 uuid="fe663fb5-c244-4e1b-9d81-c628b417dd04"
12082 >
12083 <desc>
12084 Virtual medium type. For each <link to="IMedium" />, this defines how the medium is
12085 attached to a virtual machine (see <link to="IMediumAttachment" />) and what happens
12086 when a snapshot (see <link to="ISnapshot" />) is taken of a virtual machine which has
12087 the medium attached. At the moment DVD and floppy media are always of type "writethrough".
12088 </desc>
12089
12090 <const name="Normal" value="0">
12091 <desc>
12092 Normal medium (attached directly or indirectly, preserved
12093 when taking snapshots).
12094 </desc>
12095 </const>
12096 <const name="Immutable" value="1">
12097 <desc>
12098 Immutable medium (attached indirectly, changes are wiped out
12099 the next time the virtual machine is started).
12100 </desc>
12101 </const>
12102 <const name="Writethrough" value="2">
12103 <desc>
12104 Write through medium (attached directly, ignored when
12105 taking snapshots).
12106 </desc>
12107 </const>
12108 <const name="Shareable" value="3">
12109 <desc>
12110 Allow using this medium concurrently by several machines.
12111 <note>Present since VirtualBox 3.2.0, and accepted since 3.2.8.</note>
12112 </desc>
12113 </const>
12114 <const name="Readonly" value="4">
12115 <desc>
12116 A readonly medium, which can of course be used by several machines.
12117 <note>Present and accepted since VirtualBox 4.0.</note>
12118 </desc>
12119 </const>
12120 <const name="MultiAttach" value="5">
12121 <desc>
12122 A medium which is indirectly attached, so that one base medium can
12123 be used for several VMs which have their own differencing medium to
12124 store their modifications. In some sense a variant of Immutable
12125 with unset AutoReset flag in each differencing medium.
12126 <note>Present and accepted since VirtualBox 4.0.</note>
12127 </desc>
12128 </const>
12129 </enum>
12130
12131 <enum
12132 name="MediumVariant"
12133 uuid="80685b6b-e42f-497d-8271-e77bf3c61ada"
12134 >
12135 <desc>
12136 Virtual medium image variant. More than one flag may be set.
12137 <see><link to="IMedium"/></see>
12138 </desc>
12139
12140 <const name="Standard" value="0">
12141 <desc>
12142 No particular variant requested, results in using the backend default.
12143 </desc>
12144 </const>
12145 <const name="VmdkSplit2G" value="0x01">
12146 <desc>
12147 VMDK image split in chunks of less than 2GByte.
12148 </desc>
12149 </const>
12150 <const name="VmdkRawDisk" value="0x02">
12151 <desc>
12152 VMDK image representing a raw disk.
12153 </desc>
12154 </const>
12155 <const name="VmdkStreamOptimized" value="0x04">
12156 <desc>
12157 VMDK streamOptimized image. Special import/export format which is
12158 read-only/append-only.
12159 </desc>
12160 </const>
12161 <const name="VmdkESX" value="0x08">
12162 <desc>
12163 VMDK format variant used on ESX products.
12164 </desc>
12165 </const>
12166 <const name="Fixed" value="0x10000">
12167 <desc>
12168 Fixed image. Only allowed for base images.
12169 </desc>
12170 </const>
12171 <const name="Diff" value="0x20000">
12172 <desc>
12173 Differencing image. Only allowed for child images.
12174 </desc>
12175 </const>
12176 <const name="NoCreateDir" value="0x40000000">
12177 <desc>
12178 Special flag which suppresses automatic creation of the subdirectory.
12179 Only used when passing the medium variant as an input parameter.
12180 </desc>
12181 </const>
12182 </enum>
12183
12184 <interface
12185 name="IMediumAttachment" extends="$unknown"
12186 uuid="5ee464d6-0613-4331-b154-7ce12170ef9f"
12187 wsmap="struct"
12188 >
12189 <desc>
12190 The IMediumAttachment interface links storage media to virtual machines.
12191 For each medium (<link to="IMedium"/>) which has been attached to a
12192 storage controller (<link to="IStorageController"/>) of a machine
12193 (<link to="IMachine"/>) via the <link to="IMachine::attachDevice" />
12194 method, one instance of IMediumAttachment is added to the machine's
12195 <link to="IMachine::mediumAttachments"/> array attribute.
12196
12197 Each medium attachment specifies the storage controller as well as a
12198 port and device number and the IMedium instance representing a virtual
12199 hard disk or floppy or DVD image.
12200
12201 For removable media (DVDs or floppies), there are two additional
12202 options. For one, the IMedium instance can be @c null to represent
12203 an empty drive with no media inserted (see <link to="IMachine::mountMedium" />);
12204 secondly, the medium can be one of the pseudo-media for host drives
12205 listed in <link to="IHost::DVDDrives"/> or <link to="IHost::floppyDrives"/>.
12206
12207 <h3>Attaching Hard Disks</h3>
12208
12209 Hard disks are attached to virtual machines using the
12210 <link to="IMachine::attachDevice"/> method and detached using the
12211 <link to="IMachine::detachDevice"/> method. Depending on a medium's
12212 type (see <link to="IMedium::type" />), hard disks are attached either
12213 <i>directly</i> or <i>indirectly</i>.
12214
12215 When a hard disk is being attached directly, it is associated with the
12216 virtual machine and used for hard disk operations when the machine is
12217 running. When a hard disk is being attached indirectly, a new differencing
12218 hard disk linked to it is implicitly created and this differencing hard
12219 disk is associated with the machine and used for hard disk operations.
12220 This also means that if <link to="IMachine::attachDevice"/> performs
12221 a direct attachment then the same hard disk will be returned in response
12222 to the subsequent <link to="IMachine::getMedium"/> call; however if
12223 an indirect attachment is performed then
12224 <link to="IMachine::getMedium"/> will return the implicitly created
12225 differencing hard disk, not the original one passed to <link
12226 to="IMachine::attachDevice"/>. In detail:
12227
12228 <ul>
12229 <li><b>Normal base</b> hard disks that do not have children (i.e.
12230 differencing hard disks linked to them) and that are not already
12231 attached to virtual machines in snapshots are attached <b>directly</b>.
12232 Otherwise, they are attached <b>indirectly</b> because having
12233 dependent children or being part of the snapshot makes it impossible
12234 to modify hard disk contents without breaking the integrity of the
12235 dependent party. The <link to="IMedium::readOnly"/> attribute allows to
12236 quickly determine the kind of the attachment for the given hard
12237 disk. Note that if a normal base hard disk is to be indirectly
12238 attached to a virtual machine with snapshots then a special
12239 procedure called <i>smart attachment</i> is performed (see below).</li>
12240 <li><b>Normal differencing</b> hard disks are like normal base hard disks:
12241 they are attached <b>directly</b> if they do not have children and are
12242 not attached to virtual machines in snapshots, and <b>indirectly</b>
12243 otherwise. Note that the smart attachment procedure is never performed
12244 for differencing hard disks.</li>
12245 <li><b>Immutable</b> hard disks are always attached <b>indirectly</b> because
12246 they are designed to be non-writable. If an immutable hard disk is
12247 attached to a virtual machine with snapshots then a special
12248 procedure called smart attachment is performed (see below).</li>
12249 <li><b>Writethrough</b> hard disks are always attached <b>directly</b>,
12250 also as designed. This also means that writethrough hard disks cannot
12251 have other hard disks linked to them at all.</li>
12252 <li><b>Shareable</b> hard disks are always attached <b>directly</b>,
12253 also as designed. This also means that shareable hard disks cannot
12254 have other hard disks linked to them at all. They behave almost
12255 like writethrough hard disks, except that shareable hard disks can
12256 be attached to several virtual machines which are running, allowing
12257 concurrent accesses. You need special cluster software running in
12258 the virtual machines to make use of such disks.</li>
12259 </ul>
12260
12261 Note that the same hard disk, regardless of its type, may be attached to
12262 more than one virtual machine at a time. In this case, the machine that is
12263 started first gains exclusive access to the hard disk and attempts to
12264 start other machines having this hard disk attached will fail until the
12265 first machine is powered down.
12266
12267 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
12268 that the given hard disk remains associated with the given machine after a
12269 successful <link to="IMachine::detachDevice"/> call until
12270 <link to="IMachine::saveSettings"/> is called to save all changes to
12271 machine settings to disk. This deferring is necessary to guarantee that
12272 the hard disk configuration may be restored at any time by a call to
12273 <link to="IMachine::discardSettings"/> before the settings
12274 are saved (committed).
12275
12276 Note that if <link to="IMachine::discardSettings"/> is called after
12277 indirectly attaching some hard disks to the machine but before a call to
12278 <link to="IMachine::saveSettings"/> is made, it will implicitly delete
12279 all differencing hard disks implicitly created by
12280 <link to="IMachine::attachDevice"/> for these indirect attachments.
12281 Such implicitly created hard disks will also be immediately deleted when
12282 detached explicitly using the <link to="IMachine::detachDevice"/>
12283 call if it is made before <link to="IMachine::saveSettings"/>. This
12284 implicit deletion is safe because newly created differencing hard
12285 disks do not contain any user data.
12286
12287 However, keep in mind that detaching differencing hard disks that were
12288 implicitly created by <link to="IMachine::attachDevice"/>
12289 before the last <link to="IMachine::saveSettings"/> call will
12290 <b>not</b> implicitly delete them as they may already contain some data
12291 (for example, as a result of virtual machine execution). If these hard
12292 disks are no more necessary, the caller can always delete them explicitly
12293 using <link to="IMedium::deleteStorage"/> after they are actually de-associated
12294 from this machine by the <link to="IMachine::saveSettings"/> call.
12295
12296 <h3>Smart Attachment</h3>
12297
12298 When normal base or immutable hard disks are indirectly attached to a
12299 virtual machine then some additional steps are performed to make sure the
12300 virtual machine will have the most recent "view" of the hard disk being
12301 attached. These steps include walking through the machine's snapshots
12302 starting from the current one and going through ancestors up to the first
12303 snapshot. Hard disks attached to the virtual machine in all
12304 of the encountered snapshots are checked whether they are descendants of
12305 the given normal base or immutable hard disk. The first found child (which
12306 is the differencing hard disk) will be used instead of the normal base or
12307 immutable hard disk as a parent for creating a new differencing hard disk
12308 that will be actually attached to the machine. And only if no descendants
12309 are found or if the virtual machine does not have any snapshots then the
12310 normal base or immutable hard disk will be used itself as a parent for
12311 this differencing hard disk.
12312
12313 It is easier to explain what smart attachment does using the
12314 following example:
12315 <pre>
12316BEFORE attaching B.vdi: AFTER attaching B.vdi:
12317
12318Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
12319 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
12320 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
12321 Snapshot 4 (none) Snapshot 4 (none)
12322 CurState (none) CurState (D3->D2.vdi)
12323
12324 NOT
12325 ...
12326 CurState (D3->B.vdi)
12327 </pre>
12328 The first column is the virtual machine configuration before the base hard
12329 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
12330 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
12331 mean that the hard disk that is actually attached to the machine is a
12332 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
12333 another hard disk, <tt>B.vdi</tt>.
12334
12335 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
12336 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
12337 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
12338 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
12339 it cannot be attached directly and needs an indirect attachment (i.e.
12340 implicit creation of a new differencing hard disk). Due to the smart
12341 attachment procedure, the new differencing hard disk
12342 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
12343 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
12344 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
12345 machine.
12346
12347 Note that if there is more than one descendant hard disk of the given base
12348 hard disk found in a snapshot, and there is an exact device, channel and
12349 bus match, then this exact match will be used. Otherwise, the youngest
12350 descendant will be picked up.
12351
12352 There is one more important aspect of the smart attachment procedure which
12353 is not related to snapshots at all. Before walking through the snapshots
12354 as described above, the backup copy of the current list of hard disk
12355 attachment is searched for descendants. This backup copy is created when
12356 the hard disk configuration is changed for the first time after the last
12357 <link to="IMachine::saveSettings"/> call and used by
12358 <link to="IMachine::discardSettings"/> to undo the recent hard disk
12359 changes. When such a descendant is found in this backup copy, it will be
12360 simply re-attached back, without creating a new differencing hard disk for
12361 it. This optimization is necessary to make it possible to re-attach the
12362 base or immutable hard disk to a different bus, channel or device slot
12363 without losing the contents of the differencing hard disk actually
12364 attached to the machine in place of it.
12365
12366 </desc>
12367
12368 <attribute name="medium" type="IMedium" readonly="yes">
12369 <desc>Medium object associated with this attachment; it
12370 can be @c null for removable devices.</desc>
12371 </attribute>
12372
12373 <attribute name="controller" type="wstring" readonly="yes">
12374 <desc>Name of the storage controller of this attachment; this
12375 refers to one of the controllers in <link to="IMachine::storageControllers" />
12376 by name.</desc>
12377 </attribute>
12378
12379 <attribute name="port" type="long" readonly="yes">
12380 <desc>Port number of this attachment.
12381 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
12382 </desc>
12383 </attribute>
12384
12385 <attribute name="device" type="long" readonly="yes">
12386 <desc>Device slot number of this attachment.
12387 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
12388 </desc>
12389 </attribute>
12390
12391 <attribute name="type" type="DeviceType" readonly="yes">
12392 <desc>Device type of this attachment.</desc>
12393 </attribute>
12394
12395 <attribute name="passthrough" type="boolean" readonly="yes">
12396 <desc>Pass I/O requests through to a device on the host.</desc>
12397 </attribute>
12398
12399 <attribute name="temporaryEject" type="boolean" readonly="yes">
12400 <desc>Whether guest-triggered eject results in unmounting the medium.</desc>
12401 </attribute>
12402
12403 <attribute name="isEjected" type="boolean" readonly="yes">
12404 <desc>Signals that the removable medium has been ejected. This is not
12405 necessarily equivalent to having a @c null medium association.</desc>
12406 </attribute>
12407
12408 <attribute name="nonRotational" type="boolean" readonly="yes">
12409 <desc>Whether the associated medium is non-rotational.</desc>
12410 </attribute>
12411
12412 <attribute name="discard" type="boolean" readonly="yes">
12413 <desc>Whether the associated medium supports discarding unused blocks.</desc>
12414 </attribute>
12415
12416 <attribute name="bandwidthGroup" type="IBandwidthGroup" readonly="yes">
12417 <desc>The bandwidth group this medium attachment is assigned to.</desc>
12418 </attribute>
12419
12420 </interface>
12421
12422 <interface
12423 name="IMedium" extends="$unknown"
12424 uuid="29989373-b111-4654-8493-2e1176cba890"
12425 wsmap="managed"
12426 >
12427 <desc>
12428 The IMedium interface represents virtual storage for a machine's
12429 hard disks, CD/DVD or floppy drives. It will typically represent
12430 a disk image on the host, for example a VDI or VMDK file representing
12431 a virtual hard disk, or an ISO or RAW file representing virtual
12432 removable media, but can also point to a network location (e.g.
12433 for iSCSI targets).
12434
12435 Instances of IMedium are connected to virtual machines by way of medium
12436 attachments, which link the storage medium to a particular device slot
12437 of a storage controller of the virtual machine.
12438 In the VirtualBox API, virtual storage is therefore always represented
12439 by the following chain of object links:
12440
12441 <ul>
12442 <li><link to="IMachine::storageControllers"/> contains an array of
12443 storage controllers (IDE, SATA, SCSI, SAS or a floppy controller;
12444 these are instances of <link to="IStorageController"/>).</li>
12445 <li><link to="IMachine::mediumAttachments"/> contains an array of
12446 medium attachments (instances of <link to="IMediumAttachment"/>
12447 created by <link to="IMachine::attachDevice" />),
12448 each containing a storage controller from the above array, a
12449 port/device specification, and an instance of IMedium representing
12450 the medium storage (image file).
12451
12452 For removable media, the storage medium is optional; a medium
12453 attachment with no medium represents a CD/DVD or floppy drive
12454 with no medium inserted. By contrast, hard disk attachments
12455 will always have an IMedium object attached.</li>
12456 <li>Each IMedium in turn points to a storage unit (such as a file
12457 on the host computer or a network resource) that holds actual
12458 data. This location is represented by the <link to="#location"/>
12459 attribute.</li>
12460 </ul>
12461
12462 Existing media are opened using <link to="IVirtualBox::openMedium"/>;
12463 new hard disk media can be created with the VirtualBox API using the
12464 <link to="IVirtualBox::createHardDisk"/> method. Differencing hard
12465 disks (see below) are usually implicitly created by VirtualBox as
12466 needed, but may also be created explicitly using <link to="#createDiffStorage"/>.
12467 VirtualBox cannot create CD/DVD or floppy images (ISO and RAW files); these
12468 should be created with external tools and then opened from within VirtualBox.
12469
12470 Only for CD/DVDs and floppies, an IMedium instance can also represent a host
12471 drive. In that case the <link to="#id" /> attribute contains the UUID of
12472 one of the drives in <link to="IHost::DVDDrives" /> or <link to="IHost::floppyDrives" />.
12473
12474 <h3>Media registries</h3>
12475
12476 When a medium has been opened or created using one of the aforementioned
12477 APIs, it becomes "known" to VirtualBox. Known media can be attached
12478 to virtual machines and re-found through <link to="IVirtualBox::openMedium"/>.
12479 They also appear in the global
12480 <link to="IVirtualBox::hardDisks" />,
12481 <link to="IVirtualBox::DVDImages" /> and
12482 <link to="IVirtualBox::floppyImages" /> arrays.
12483
12484 Prior to VirtualBox 4.0, opening a medium added it to a global media registry
12485 in the VirtualBox.xml file, which was shared between all machines and made
12486 transporting machines and their media from one host to another difficult.
12487
12488 Starting with VirtualBox 4.0, media are only added to a registry when they are
12489 <i>attached</i> to a machine using <link to="IMachine::attachDevice" />. For
12490 backwards compatibility, which registry a medium is added to depends on which
12491 VirtualBox version created a machine:
12492
12493 <ul>
12494 <li>If the medium has first been attached to a machine which was created by
12495 VirtualBox 4.0 or later, it is added to that machine's media registry in
12496 the machine XML settings file. This way all information about a machine's
12497 media attachments is contained in a single file and can be transported
12498 easily.</li>
12499 <li>For older media attachments (i.e. if the medium was first attached to a
12500 machine which was created with a VirtualBox version before 4.0), media
12501 continue to be registered in the global VirtualBox settings file, for
12502 backwards compatibility.</li>
12503 </ul>
12504
12505 See <link to="IVirtualBox::openMedium" /> for more information.
12506
12507 Media are removed from media registries by the <link to="IMedium::close"/>,
12508 <link to="#deleteStorage"/> and <link to="#mergeTo"/> methods.
12509
12510 <h3>Accessibility checks</h3>
12511
12512 VirtualBox defers media accessibility checks until the <link to="#refreshState" />
12513 method is called explicitly on a medium. This is done to make the VirtualBox object
12514 ready for serving requests as fast as possible and let the end-user
12515 application decide if it needs to check media accessibility right away or not.
12516
12517 As a result, when VirtualBox starts up (e.g. the VirtualBox
12518 object gets created for the first time), all known media are in the
12519 "Inaccessible" state, but the value of the <link to="#lastAccessError"/>
12520 attribute is an empty string because no actual accessibility check has
12521 been made yet.
12522
12523 After calling <link to="#refreshState" />, a medium is considered
12524 <i>accessible</i> if its storage unit can be read. In that case, the
12525 <link to="#state"/> attribute has a value of "Created". If the storage
12526 unit cannot be read (for example, because it is located on a disconnected
12527 network resource, or was accidentally deleted outside VirtualBox),
12528 the medium is considered <i>inaccessible</i>, which is indicated by the
12529 "Inaccessible" state. The exact reason why the medium is inaccessible can be
12530 obtained by reading the <link to="#lastAccessError"/> attribute.
12531
12532 <h3>Medium types</h3>
12533
12534 There are five types of medium behavior which are stored in the
12535 <link to="#type"/> attribute (see <link to="MediumType" />) and
12536 which define the medium's behavior with attachments and snapshots.
12537
12538 All media can be also divided in two groups: <i>base</i> media and
12539 <i>differencing</i> media. A base medium contains all sectors of the
12540 medium data in its own storage and therefore can be used independently.
12541 In contrast, a differencing medium is a "delta" to some other medium and
12542 contains only those sectors which differ from that other medium, which is
12543 then called a <i>parent</i>. The differencing medium is said to be
12544 <i>linked to</i> that parent. The parent may be itself a differencing
12545 medium, thus forming a chain of linked media. The last element in that
12546 chain must always be a base medium. Note that several differencing
12547 media may be linked to the same parent medium.
12548
12549 Differencing media can be distinguished from base media by querying the
12550 <link to="#parent"/> attribute: base media do not have parents they would
12551 depend on, so the value of this attribute is always @c null for them.
12552 Using this attribute, it is possible to walk up the medium tree (from the
12553 child medium to its parent). It is also possible to walk down the tree
12554 using the <link to="#children"/> attribute.
12555
12556 Note that the type of all differencing media is "normal"; all other
12557 values are meaningless for them. Base media may be of any type.
12558
12559 <h3>Automatic composition of the file name part</h3>
12560
12561 Another extension to the <link to="IMedium::location"/> attribute is that
12562 there is a possibility to cause VirtualBox to compose a unique value for
12563 the file name part of the location using the UUID of the hard disk. This
12564 applies only to hard disks in <link to="MediumState_NotCreated"/> state,
12565 e.g. before the storage unit is created, and works as follows. You set the
12566 value of the <link to="IMedium::location"/> attribute to a location
12567 specification which only contains the path specification but not the file
12568 name part and ends with either a forward slash or a backslash character.
12569 In response, VirtualBox will generate a new UUID for the hard disk and
12570 compose the file name using the following pattern:
12571 <pre>
12572 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
12573 </pre>
12574 where <tt>&lt;path&gt;</tt> is the supplied path specification,
12575 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
12576 is the default extension for the storage format of this hard disk. After
12577 that, you may call any of the methods that create a new hard disk storage
12578 unit and they will use the generated UUID and file name.
12579 </desc>
12580
12581 <attribute name="id" type="uuid" mod="string" readonly="yes">
12582 <desc>
12583 UUID of the medium. For a newly created medium, this value is a randomly
12584 generated UUID.
12585
12586 <note>
12587 For media in one of MediumState_NotCreated, MediumState_Creating or
12588 MediumState_Deleting states, the value of this property is undefined
12589 and will most likely be an empty UUID.
12590 </note>
12591 </desc>
12592 </attribute>
12593
12594 <attribute name="description" type="wstring">
12595 <desc>
12596 Optional description of the medium. For a newly created medium the value
12597 of this attribute is an empty string.
12598
12599 Medium types that don't support this attribute will return E_NOTIMPL in
12600 attempt to get or set this attribute's value.
12601
12602 <note>
12603 For some storage types, reading this attribute may return an outdated
12604 (last known) value when <link to="#state"/> is <link
12605 to="MediumState_Inaccessible"/> or <link
12606 to="MediumState_LockedWrite"/> because the value of this attribute is
12607 stored within the storage unit itself. Also note that changing the
12608 attribute value is not possible in such case, as well as when the
12609 medium is the <link to="MediumState_LockedRead"/> state.
12610 </note>
12611 </desc>
12612 </attribute>
12613
12614 <attribute name="state" type="MediumState" readonly="yes">
12615 <desc>
12616 Returns the current medium state, which is the last state set by
12617 the accessibility check performed by <link to="#refreshState"/>.
12618 If that method has not yet been called on the medium, the state
12619 is "Inaccessible"; as opposed to truly inaccessible media, the
12620 value of <link to="#lastAccessError"/> will be an empty string in
12621 that case.
12622
12623 <note>As of version 3.1, this no longer performs an accessibility check
12624 automatically; call <link to="#refreshState"/> for that.
12625 </note>
12626 </desc>
12627 </attribute>
12628
12629 <attribute name="variant" type="unsigned long" readonly="yes">
12630 <desc>
12631 Returns the storage format variant information for this medium
12632 as a combination of the flags described at <link to="MediumVariant" />.
12633 Before <link to="#refreshState"/> is called this method returns
12634 an undefined value.
12635 </desc>
12636 </attribute>
12637
12638 <attribute name="location" type="wstring">
12639 <desc>
12640 Location of the storage unit holding medium data.
12641
12642 The format of the location string is medium type specific. For medium
12643 types using regular files in a host's file system, the location
12644 string is the full file name.
12645
12646 Some medium types may support changing the storage unit location by
12647 simply changing the value of this property. If this operation is not
12648 supported, the implementation will return E_NOTIMPL in attempt to set
12649 this attribute's value.
12650
12651 When setting a value of the location attribute which is a regular file
12652 in the host's file system, the given file name may be either relative to
12653 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
12654 absolute. Note that if the given location specification does not contain
12655 the file extension part then a proper default extension will be
12656 automatically appended by the implementation depending on the medium type.
12657 </desc>
12658 </attribute>
12659
12660 <attribute name="name" type="wstring" readonly="yes">
12661 <desc>
12662 Name of the storage unit holding medium data.
12663
12664 The returned string is a short version of the <link to="#location"/>
12665 attribute that is suitable for representing the medium in situations
12666 where the full location specification is too long (such as lists
12667 and comboboxes in GUI frontends). This string is also used by frontends
12668 to sort the media list alphabetically when needed.
12669
12670 For example, for locations that are regular files in the host's file
12671 system, the value of this attribute is just the file name (+ extension),
12672 without the path specification.
12673
12674 Note that as opposed to the <link to="#location"/> attribute, the name
12675 attribute will not necessary be unique for a list of media of the
12676 given type and format.
12677 </desc>
12678 </attribute>
12679
12680 <attribute name="deviceType" type="DeviceType" readonly="yes">
12681 <desc>Kind of device (DVD/Floppy/HardDisk) which is applicable to this
12682 medium.</desc>
12683 </attribute>
12684
12685 <attribute name="hostDrive" type="boolean" readonly="yes">
12686 <desc>True if this corresponds to a drive on the host.</desc>
12687 </attribute>
12688
12689 <attribute name="size" type="long long" readonly="yes">
12690 <desc>
12691 Physical size of the storage unit used to hold medium data (in bytes).
12692
12693 <note>
12694 For media whose <link to="#state"/> is <link
12695 to="MediumState_Inaccessible"/>, the value of this property is the
12696 last known size. For <link to="MediumState_NotCreated"/> media,
12697 the returned value is zero.
12698 </note>
12699 </desc>
12700 </attribute>
12701
12702 <attribute name="format" type="wstring" readonly="yes">
12703 <desc>
12704 Storage format of this medium.
12705
12706 The value of this attribute is a string that specifies a backend used
12707 to store medium data. The storage format is defined when you create a
12708 new medium or automatically detected when you open an existing medium,
12709 and cannot be changed later.
12710
12711 The list of all storage formats supported by this VirtualBox
12712 installation can be obtained using
12713 <link to="ISystemProperties::mediumFormats"/>.
12714 </desc>
12715 </attribute>
12716
12717 <attribute name="mediumFormat" type="IMediumFormat" readonly="yes">
12718 <desc>
12719 Storage medium format object corresponding to this medium.
12720
12721 The value of this attribute is a reference to the medium format object
12722 that specifies the backend properties used to store medium data. The
12723 storage format is defined when you create a new medium or automatically
12724 detected when you open an existing medium, and cannot be changed later.
12725
12726 <note>@c null is returned if there is no associated medium format
12727 object. This can e.g. happen for medium objects representing host
12728 drives and other special medium objects.</note>
12729 </desc>
12730 </attribute>
12731
12732 <attribute name="type" type="MediumType">
12733 <desc>
12734 Type (role) of this medium.
12735
12736 The following constraints apply when changing the value of this
12737 attribute:
12738 <ul>
12739 <li>If a medium is attached to a virtual machine (either in the
12740 current state or in one of the snapshots), its type cannot be
12741 changed.
12742 </li>
12743 <li>As long as the medium has children, its type cannot be set
12744 to <link to="MediumType_Writethrough"/>.
12745 </li>
12746 <li>The type of all differencing media is
12747 <link to="MediumType_Normal"/> and cannot be changed.
12748 </li>
12749 </ul>
12750
12751 The type of a newly created or opened medium is set to
12752 <link to="MediumType_Normal"/>, except for DVD and floppy media,
12753 which have a type of <link to="MediumType_Writethrough"/>.
12754 </desc>
12755 </attribute>
12756
12757 <attribute name="allowedTypes" type="MediumType" safearray="yes" readonly="yes">
12758 <desc>
12759 Returns which medium types can selected for this medium.
12760
12761 <result name="E_NOTIMPL">
12762 This attribute is not implemented at the moment.
12763 </result>
12764 </desc>
12765 </attribute>
12766
12767 <attribute name="parent" type="IMedium" readonly="yes">
12768 <desc>
12769 Parent of this medium (the medium this medium is directly based
12770 on).
12771
12772 Only differencing media have parents. For base (non-differencing)
12773 media, @c null is returned.
12774 </desc>
12775 </attribute>
12776
12777 <attribute name="children" type="IMedium" safearray="yes" readonly="yes">
12778 <desc>
12779 Children of this medium (all differencing media directly based
12780 on this medium). A @c null array is returned if this medium
12781 does not have any children.
12782 </desc>
12783 </attribute>
12784
12785 <attribute name="base" type="IMedium" readonly="yes">
12786 <desc>
12787 Base medium of this medium.
12788
12789 If this is a differencing medium, its base medium is the medium
12790 the given medium branch starts from. For all other types of media, this
12791 property returns the medium object itself (i.e. the same object this
12792 property is read on).
12793 </desc>
12794 </attribute>
12795
12796 <attribute name="readOnly" type="boolean" readonly="yes">
12797 <desc>
12798 Returns @c true if this medium is read-only and @c false otherwise.
12799
12800 A medium is considered to be read-only when its contents cannot be
12801 modified without breaking the integrity of other parties that depend on
12802 this medium such as its child media or snapshots of virtual machines
12803 where this medium is attached to these machines. If there are no
12804 children and no such snapshots then there is no dependency and the
12805 medium is not read-only.
12806
12807 The value of this attribute can be used to determine the kind of the
12808 attachment that will take place when attaching this medium to a
12809 virtual machine. If the value is @c false then the medium will
12810 be attached directly. If the value is @c true then the medium
12811 will be attached indirectly by creating a new differencing child
12812 medium for that. See the interface description for more information.
12813
12814 Note that all <link to="MediumType_Immutable">Immutable</link> media
12815 are always read-only while all
12816 <link to="MediumType_Writethrough">Writethrough</link> media are
12817 always not.
12818
12819 <note>
12820 The read-only condition represented by this attribute is related to
12821 the medium type and usage, not to the current
12822 <link to="IMedium::state">medium state</link> and not to the read-only
12823 state of the storage unit.
12824 </note>
12825 </desc>
12826 </attribute>
12827
12828 <attribute name="logicalSize" type="long long" readonly="yes">
12829 <desc>
12830 Logical size of this medium (in bytes), as reported to the
12831 guest OS running inside the virtual machine this medium is
12832 attached to. The logical size is defined when the medium is created
12833 and cannot be changed later.
12834
12835 <note>
12836 Reading this property on a differencing medium will return the size
12837 of its <link to="#base"/> medium.
12838 </note>
12839 <note>
12840 For media whose state is <link to="#state"/> is <link
12841 to="MediumState_Inaccessible"/>, the value of this property is the
12842 last known logical size. For <link to="MediumState_NotCreated"/>
12843 media, the returned value is zero.
12844 </note>
12845 </desc>
12846 </attribute>
12847
12848 <attribute name="autoReset" type="boolean">
12849 <desc>
12850 Whether this differencing medium will be automatically reset each
12851 time a virtual machine it is attached to is powered up. This
12852 attribute is automatically set to @c true for the last
12853 differencing image of an "immutable" medium (see
12854 <link to="MediumType" />).
12855
12856 See <link to="#reset"/> for more information about resetting
12857 differencing media.
12858
12859 <note>
12860 Reading this property on a base (non-differencing) medium will
12861 always @c false. Changing the value of this property in this
12862 case is not supported.
12863 </note>
12864
12865 <result name="VBOX_E_NOT_SUPPORTED">
12866 This is not a differencing medium (when changing the attribute
12867 value).
12868 </result>
12869 </desc>
12870 </attribute>
12871
12872 <attribute name="lastAccessError" type="wstring" readonly="yes">
12873 <desc>
12874 Text message that represents the result of the last accessibility
12875 check performed by <link to="#refreshState"/>.
12876
12877 An empty string is returned if the last accessibility check
12878 was successful or has not yet been called. As a result, if
12879 <link to="#state" /> is "Inaccessible" and this attribute is empty,
12880 then <link to="#refreshState"/> has yet to be called; this is the
12881 default value of media after VirtualBox initialization.
12882 A non-empty string indicates a failure and should normally describe
12883 a reason of the failure (for example, a file read error).
12884 </desc>
12885 </attribute>
12886
12887 <attribute name="machineIds" type="uuid" mod="string" safearray="yes" readonly="yes">
12888 <desc>
12889 Array of UUIDs of all machines this medium is attached to.
12890
12891 A @c null array is returned if this medium is not attached to any
12892 machine or to any machine's snapshot.
12893
12894 <note>
12895 The returned array will include a machine even if this medium is not
12896 attached to that machine in the current state but attached to it in
12897 one of the machine's snapshots. See <link to="#getSnapshotIds"/> for
12898 details.
12899 </note>
12900 </desc>
12901 </attribute>
12902
12903 <method name="setIds">
12904 <desc>
12905 Changes the UUID and parent UUID for a hard disk medium.
12906 </desc>
12907 <param name="setImageId" type="boolean" dir="in">
12908 <desc>
12909 Select whether a new image UUID is set or not.
12910 </desc>
12911 </param>
12912 <param name="imageId" type="uuid" mod="string" dir="in">
12913 <desc>
12914 New UUID for the image. If an empty string is passed, then a new
12915 UUID is automatically created, provided that @a setImageId is @c true.
12916 Specifying a zero UUID is not allowed.
12917 </desc>
12918 </param>
12919 <param name="setParentId" type="boolean" dir="in">
12920 <desc>
12921 Select whether a new parent UUID is set or not.
12922 </desc>
12923 </param>
12924 <param name="parentId" type="uuid" mod="string" dir="in">
12925 <desc>
12926 New parent UUID for the image. If an empty string is passed, then a
12927 new UUID is automatically created, provided @a setParentId is
12928 @c true. A zero UUID is valid.
12929 </desc>
12930 </param>
12931 <result name="E_INVALIDARG">
12932 Invalid parameter combination.
12933 </result>
12934 <result name="VBOX_E_NOT_SUPPORTED">
12935 Medium is not a hard disk medium.
12936 </result>
12937 </method>
12938
12939 <method name="refreshState">
12940 <desc>
12941 If the current medium state (see <link to="MediumState"/>) is one of
12942 "Created", "Inaccessible" or "LockedRead", then this performs an
12943 accessibility check on the medium and sets the value of the <link to="#state"/>
12944 attribute accordingly; that value is also returned for convenience.
12945
12946 For all other state values, this does not perform a refresh but returns
12947 the state only.
12948
12949 The refresh, if performed, may take a long time (several seconds or even
12950 minutes, depending on the storage unit location and format) because it performs an
12951 accessibility check of the storage unit. This check may cause a significant
12952 delay if the storage unit of the given medium is, for example, a file located
12953 on a network share which is not currently accessible due to connectivity
12954 problems. In that case, the call will not return until a timeout
12955 interval defined by the host OS for this operation expires. For this reason,
12956 it is recommended to never read this attribute on the main UI thread to avoid
12957 making the UI unresponsive.
12958
12959 If the last known state of the medium is "Created" and the accessibility
12960 check fails, then the state would be set to "Inaccessible", and
12961 <link to="#lastAccessError"/> may be used to get more details about the
12962 failure. If the state of the medium is "LockedRead", then it remains the
12963 same, and a non-empty value of <link to="#lastAccessError"/> will
12964 indicate a failed accessibility check in this case.
12965
12966 Note that not all medium states are applicable to all medium types.
12967 </desc>
12968 <param name="state" type="MediumState" dir="return">
12969 <desc>
12970 New medium state.
12971 </desc>
12972 </param>
12973 </method>
12974
12975 <method name="getSnapshotIds">
12976 <desc>
12977 Returns an array of UUIDs of all snapshots of the given machine where
12978 this medium is attached to.
12979
12980 If the medium is attached to the machine in the current state, then the
12981 first element in the array will always be the ID of the queried machine
12982 (i.e. the value equal to the @c machineId argument), followed by
12983 snapshot IDs (if any).
12984
12985 If the medium is not attached to the machine in the current state, then
12986 the array will contain only snapshot IDs.
12987
12988 The returned array may be @c null if this medium is not attached
12989 to the given machine at all, neither in the current state nor in one of
12990 the snapshots.
12991 </desc>
12992 <param name="machineId" type="uuid" mod="string" dir="in">
12993 <desc>
12994 UUID of the machine to query.
12995 </desc>
12996 </param>
12997 <param name="snapshotIds" type="uuid" mod="string" safearray="yes" dir="return">
12998 <desc>
12999 Array of snapshot UUIDs of the given machine using this medium.
13000 </desc>
13001 </param>
13002 </method>
13003
13004 <method name="lockRead">
13005 <desc>
13006 Locks this medium for reading.
13007
13008 A read lock is shared: many clients can simultaneously lock the
13009 same medium for reading unless it is already locked for writing (see
13010 <link to="#lockWrite"/>) in which case an error is returned.
13011
13012 When the medium is locked for reading, it cannot be modified
13013 from within VirtualBox. This means that any method that changes
13014 the properties of this medium or contents of the storage unit
13015 will return an error (unless explicitly stated otherwise). That
13016 includes an attempt to start a virtual machine that wants to
13017 write to the the medium.
13018
13019 When the virtual machine is started up, it locks for reading all
13020 media it uses in read-only mode. If some medium cannot be locked
13021 for reading, the startup procedure will fail.
13022 A medium is typically locked for reading while it is used by a running
13023 virtual machine but has a depending differencing image that receives
13024 the actual write operations. This way one base medium can have
13025 multiple child differencing images which can be written to
13026 simultaneously. Read-only media such as DVD and floppy images are
13027 also locked for reading only (so they can be in use by multiple
13028 machines simultaneously).
13029
13030 A medium is also locked for reading when it is the source of a
13031 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
13032
13033 The medium locked for reading must be unlocked using the <link
13034 to="#unlockRead"/> method. Calls to <link to="#lockRead"/>
13035 can be nested and must be followed by the same number of paired
13036 <link to="#unlockRead"/> calls.
13037
13038 This method sets the medium state (see <link to="#state"/>) to
13039 "LockedRead" on success. The medium's previous state must be
13040 one of "Created", "Inaccessible" or "LockedRead".
13041
13042 Locking an inaccessible medium is not an error; this method performs
13043 a logical lock that prevents modifications of this medium through
13044 the VirtualBox API, not a physical file-system lock of the underlying
13045 storage unit.
13046
13047 This method returns the current state of the medium
13048 <i>before</i> the operation.
13049
13050 <result name="VBOX_E_INVALID_OBJECT_STATE">
13051 Invalid medium state (e.g. not created, locked, inaccessible,
13052 creating, deleting).
13053 </result>
13054
13055 </desc>
13056 <param name="state" type="MediumState" dir="return">
13057 <desc>
13058 State of the medium after the operation.
13059 </desc>
13060 </param>
13061 </method>
13062
13063 <method name="unlockRead">
13064 <desc>
13065 Cancels the read lock previously set by <link to="#lockRead"/>.
13066
13067 For both success and failure, this method returns the current state
13068 of the medium <i>after</i> the operation.
13069
13070 See <link to="#lockRead"/> for more details.
13071
13072 <result name="VBOX_E_INVALID_OBJECT_STATE">
13073 Medium not locked for reading.
13074 </result>
13075
13076 </desc>
13077 <param name="state" type="MediumState" dir="return">
13078 <desc>
13079 State of the medium after the operation.
13080 </desc>
13081 </param>
13082 </method>
13083
13084 <method name="lockWrite">
13085 <desc>
13086 Locks this medium for writing.
13087
13088 A write lock, as opposed to <link to="#lockRead"/>, is
13089 exclusive: there may be only one client holding a write lock,
13090 and there may be no read locks while the write lock is held.
13091 As a result, read-locking fails if a write lock is held, and
13092 write-locking fails if either a read or another write lock is held.
13093
13094 When a medium is locked for writing, it cannot be modified
13095 from within VirtualBox, and it is not guaranteed that the values
13096 of its properties are up-to-date. Any method that changes the
13097 properties of this medium or contents of the storage unit will
13098 return an error (unless explicitly stated otherwise).
13099
13100 When a virtual machine is started up, it locks for writing all
13101 media it uses to write data to. If any medium could not be locked
13102 for writing, the startup procedure will fail. If a medium has
13103 differencing images, then while the machine is running, only
13104 the last ("leaf") differencing image is locked for writing,
13105 whereas its parents are locked for reading only.
13106
13107 A medium is also locked for writing when it is the target of a
13108 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
13109
13110 The medium locked for writing must be unlocked using the <link
13111 to="#unlockWrite"/> method. Write locks <i>cannot</i> be nested.
13112
13113 This method sets the medium state (see <link to="#state"/>) to
13114 "LockedWrite" on success. The medium's previous state must be
13115 either "Created" or "Inaccessible".
13116
13117 Locking an inaccessible medium is not an error; this method performs
13118 a logical lock that prevents modifications of this medium through
13119 the VirtualBox API, not a physical file-system lock of the underlying
13120 storage unit.
13121
13122 For both, success and failure, this method returns the current
13123 state of the medium <i>before</i> the operation.
13124
13125 <result name="VBOX_E_INVALID_OBJECT_STATE">
13126 Invalid medium state (e.g. not created, locked, inaccessible,
13127 creating, deleting).
13128 </result>
13129
13130 </desc>
13131 <param name="state" type="MediumState" dir="return">
13132 <desc>
13133 State of the medium after the operation.
13134 </desc>
13135 </param>
13136 </method>
13137
13138 <method name="unlockWrite">
13139 <desc>
13140 Cancels the write lock previously set by <link to="#lockWrite"/>.
13141
13142 For both success and failure, this method returns the current
13143 state of the medium <i>after</i> the operation.
13144
13145 See <link to="#lockWrite"/> for more details.
13146
13147 <result name="VBOX_E_INVALID_OBJECT_STATE">
13148 Medium not locked for writing.
13149 </result>
13150
13151 </desc>
13152 <param name="state" type="MediumState" dir="return">
13153 <desc>
13154 State of the medium after the operation.
13155 </desc>
13156 </param>
13157 </method>
13158
13159 <method name="close">
13160 <desc>
13161 Closes this medium.
13162
13163 The medium must not be attached to any known virtual machine
13164 and must not have any known child media, otherwise the
13165 operation will fail.
13166
13167 When the medium is successfully closed, it is removed from
13168 the list of registered media, but its storage unit is not
13169 deleted. In particular, this means that this medium can
13170 later be opened again using the <link to="IVirtualBox::openMedium"/>
13171 call.
13172
13173 Note that after this method successfully returns, the given medium
13174 object becomes uninitialized. This means that any attempt
13175 to call any of its methods or attributes will fail with the
13176 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
13177
13178 <result name="VBOX_E_INVALID_OBJECT_STATE">
13179 Invalid medium state (other than not created, created or
13180 inaccessible).
13181 </result>
13182 <result name="VBOX_E_OBJECT_IN_USE">
13183 Medium attached to virtual machine.
13184 </result>
13185 <result name="VBOX_E_FILE_ERROR">
13186 Settings file not accessible.
13187 </result>
13188 <result name="VBOX_E_XML_ERROR">
13189 Could not parse the settings file.
13190 </result>
13191
13192 </desc>
13193 </method>
13194
13195 <!-- property methods -->
13196
13197 <method name="getProperty" const="yes">
13198 <desc>
13199 Returns the value of the custom medium property with the given name.
13200
13201 The list of all properties supported by the given medium format can
13202 be obtained with <link to="IMediumFormat::describeProperties"/>.
13203
13204 <note>If this method returns an empty string in @a value, the requested
13205 property is supported but currently not assigned any value.</note>
13206
13207 <result name="VBOX_E_OBJECT_NOT_FOUND">
13208 Requested property does not exist (not supported by the format).
13209 </result>
13210 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
13211 </desc>
13212 <param name="name" type="wstring" dir="in">
13213 <desc>Name of the property to get.</desc>
13214 </param>
13215 <param name="value" type="wstring" dir="return">
13216 <desc>Current property value.</desc>
13217 </param>
13218 </method>
13219
13220 <method name="setProperty">
13221 <desc>
13222 Sets the value of the custom medium property with the given name.
13223
13224 The list of all properties supported by the given medium format can
13225 be obtained with <link to="IMediumFormat::describeProperties"/>.
13226
13227 <note>Setting the property value to @c null or an empty string is
13228 equivalent to deleting the existing value. A default value (if it is
13229 defined for this property) will be used by the format backend in this
13230 case.</note>
13231
13232 <result name="VBOX_E_OBJECT_NOT_FOUND">
13233 Requested property does not exist (not supported by the format).
13234 </result>
13235 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
13236 </desc>
13237 <param name="name" type="wstring" dir="in">
13238 <desc>Name of the property to set.</desc>
13239 </param>
13240 <param name="value" type="wstring" dir="in">
13241 <desc>Property value to set.</desc>
13242 </param>
13243 </method>
13244
13245 <method name="getProperties" const="yes">
13246 <desc>
13247 Returns values for a group of properties in one call.
13248
13249 The names of the properties to get are specified using the @a names
13250 argument which is a list of comma-separated property names or
13251 an empty string if all properties are to be returned.
13252 <note>Currently the value of this argument is ignored and the method
13253 always returns all existing properties.</note>
13254
13255 The list of all properties supported by the given medium format can
13256 be obtained with <link to="IMediumFormat::describeProperties"/>.
13257
13258 The method returns two arrays, the array of property names corresponding
13259 to the @a names argument and the current values of these properties.
13260 Both arrays have the same number of elements with each element at the
13261 given index in the first array corresponds to an element at the same
13262 index in the second array.
13263
13264 For properties that do not have assigned values, an empty string is
13265 returned at the appropriate index in the @a returnValues array.
13266
13267 </desc>
13268 <param name="names" type="wstring" dir="in">
13269 <desc>
13270 Names of properties to get.
13271 </desc>
13272 </param>
13273 <param name="returnNames" type="wstring" safearray="yes" dir="out">
13274 <desc>Names of returned properties.</desc>
13275 </param>
13276 <param name="returnValues" type="wstring" safearray="yes" dir="return">
13277 <desc>Values of returned properties.</desc>
13278 </param>
13279 </method>
13280
13281 <method name="setProperties">
13282 <desc>
13283 Sets values for a group of properties in one call.
13284
13285 The names of the properties to set are passed in the @a names
13286 array along with the new values for them in the @a values array. Both
13287 arrays have the same number of elements with each element at the given
13288 index in the first array corresponding to an element at the same index
13289 in the second array.
13290
13291 If there is at least one property name in @a names that is not valid,
13292 the method will fail before changing the values of any other properties
13293 from the @a names array.
13294
13295 Using this method over <link to="#setProperty"/> is preferred if you
13296 need to set several properties at once since it is more efficient.
13297
13298 The list of all properties supported by the given medium format can
13299 be obtained with <link to="IMediumFormat::describeProperties"/>.
13300
13301 Setting the property value to @c null or an empty string is equivalent
13302 to deleting the existing value. A default value (if it is defined for
13303 this property) will be used by the format backend in this case.
13304 </desc>
13305 <param name="names" type="wstring" safearray="yes" dir="in">
13306 <desc>Names of properties to set.</desc>
13307 </param>
13308 <param name="values" type="wstring" safearray="yes" dir="in">
13309 <desc>Values of properties to set.</desc>
13310 </param>
13311 </method>
13312
13313 <!-- storage methods -->
13314
13315 <method name="createBaseStorage">
13316 <desc>
13317 Starts creating a hard disk storage unit (fixed/dynamic, according
13318 to the variant flags) in in the background. The previous storage unit
13319 created for this object, if any, must first be deleted using
13320 <link to="#deleteStorage"/>, otherwise the operation will fail.
13321
13322 Before the operation starts, the medium is placed in
13323 <link to="MediumState_Creating"/> state. If the create operation
13324 fails, the medium will be placed back in <link to="MediumState_NotCreated"/>
13325 state.
13326
13327 After the returned progress object reports that the operation has
13328 successfully completed, the medium state will be set to <link
13329 to="MediumState_Created"/>, the medium will be remembered by this
13330 VirtualBox installation and may be attached to virtual machines.
13331
13332 <result name="VBOX_E_NOT_SUPPORTED">
13333 The variant of storage creation operation is not supported. See <link
13334 to="IMediumFormat::capabilities"/>.
13335 </result>
13336 </desc>
13337 <param name="logicalSize" type="long long" dir="in">
13338 <desc>Maximum logical size of the medium in bytes.</desc>
13339 </param>
13340 <param name="variant" type="unsigned long" dir="in">
13341 <desc>Exact image variant which should be created (as a combination of
13342 <link to="MediumVariant" /> flags).</desc>
13343 </param>
13344 <param name="progress" type="IProgress" dir="return">
13345 <desc>Progress object to track the operation completion.</desc>
13346 </param>
13347 </method>
13348
13349 <method name="deleteStorage">
13350 <desc>
13351 Starts deleting the storage unit of this medium.
13352
13353 The medium must not be attached to any known virtual machine and must
13354 not have any known child media, otherwise the operation will fail.
13355 It will also fail if there is no storage unit to delete or if deletion
13356 is already in progress, or if the medium is being in use (locked for
13357 read or for write) or inaccessible. Therefore, the only valid state for
13358 this operation to succeed is <link to="MediumState_Created"/>.
13359
13360 Before the operation starts, the medium is placed in
13361 <link to="MediumState_Deleting"/> state and gets removed from the list
13362 of remembered hard disks (media registry). If the delete operation
13363 fails, the medium will be remembered again and placed back to
13364 <link to="MediumState_Created"/> state.
13365
13366 After the returned progress object reports that the operation is
13367 complete, the medium state will be set to
13368 <link to="MediumState_NotCreated"/> and you will be able to use one of
13369 the storage creation methods to create it again.
13370
13371 <see><link to="#close"/></see>
13372
13373 <result name="VBOX_E_OBJECT_IN_USE">
13374 Medium is attached to a virtual machine.
13375 </result>
13376 <result name="VBOX_E_NOT_SUPPORTED">
13377 Storage deletion is not allowed because neither of storage creation
13378 operations are supported. See
13379 <link to="IMediumFormat::capabilities"/>.
13380 </result>
13381
13382 <note>
13383 If the deletion operation fails, it is not guaranteed that the storage
13384 unit still exists. You may check the <link to="IMedium::state"/> value
13385 to answer this question.
13386 </note>
13387 </desc>
13388 <param name="progress" type="IProgress" dir="return">
13389 <desc>Progress object to track the operation completion.</desc>
13390 </param>
13391 </method>
13392
13393 <!-- diff methods -->
13394
13395 <method name="createDiffStorage">
13396 <desc>
13397 Starts creating an empty differencing storage unit based on this
13398 medium in the format and at the location defined by the @a target
13399 argument.
13400
13401 The target medium must be in <link to="MediumState_NotCreated"/>
13402 state (i.e. must not have an existing storage unit). Upon successful
13403 completion, this operation will set the type of the target medium to
13404 <link to="MediumType_Normal"/> and create a storage unit necessary to
13405 represent the differencing medium data in the given format (according
13406 to the storage format of the target object).
13407
13408 After the returned progress object reports that the operation is
13409 successfully complete, the target medium gets remembered by this
13410 VirtualBox installation and may be attached to virtual machines.
13411
13412 <note>
13413 The medium will be set to <link to="MediumState_LockedRead"/>
13414 state for the duration of this operation.
13415 </note>
13416 <result name="VBOX_E_OBJECT_IN_USE">
13417 Medium not in @c NotCreated state.
13418 </result>
13419 </desc>
13420 <param name="target" type="IMedium" dir="in">
13421 <desc>Target medium.</desc>
13422 </param>
13423 <param name="variant" type="unsigned long" dir="in">
13424 <desc>Exact image variant which should be created (as a combination of
13425 <link to="MediumVariant" /> flags).</desc>
13426 </param>
13427 <param name="progress" type="IProgress" dir="return">
13428 <desc>Progress object to track the operation completion.</desc>
13429 </param>
13430 </method>
13431
13432 <method name="mergeTo">
13433 <desc>
13434 Starts merging the contents of this medium and all intermediate
13435 differencing media in the chain to the given target medium.
13436
13437 The target medium must be either a descendant of this medium or
13438 its ancestor (otherwise this method will immediately return a failure).
13439 It follows that there are two logical directions of the merge operation:
13440 from ancestor to descendant (<i>forward merge</i>) and from descendant to
13441 ancestor (<i>backward merge</i>). Let us consider the following medium
13442 chain:
13443
13444 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
13445
13446 Here, calling this method on the <tt>Base</tt> medium object with
13447 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
13448 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
13449 merge. Note that in both cases the contents of the resulting medium
13450 will be the same, the only difference is the medium object that takes
13451 the result of the merge operation. In case of the forward merge in the
13452 above example, the result will be written to <tt>Diff_2</tt>; in case of
13453 the backward merge, the result will be written to <tt>Base</tt>. In
13454 other words, the result of the operation is always stored in the target
13455 medium.
13456
13457 Upon successful operation completion, the storage units of all media in
13458 the chain between this (source) medium and the target medium, including
13459 the source medium itself, will be automatically deleted and the
13460 relevant medium objects (including this medium) will become
13461 uninitialized. This means that any attempt to call any of
13462 their methods or attributes will fail with the
13463 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
13464 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
13465 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> media.
13466 Note that <tt>Diff_2</tt> in this case will become a base medium
13467 itself since it will no longer be based on any other medium.
13468
13469 Considering the above, all of the following conditions must be met in
13470 order for the merge operation to succeed:
13471 <ul>
13472 <li>
13473 Neither this (source) medium nor any intermediate
13474 differencing medium in the chain between it and the target
13475 medium is attached to any virtual machine.
13476 </li>
13477 <li>
13478 Neither the source medium nor the target medium is an
13479 <link to="MediumType_Immutable"/> medium.
13480 </li>
13481 <li>
13482 The part of the medium tree from the source medium to the
13483 target medium is a linear chain, i.e. all medium in this
13484 chain have exactly one child which is the next medium in this
13485 chain. The only exception from this rule is the target medium in
13486 the forward merge operation; it is allowed to have any number of
13487 child media because the merge operation will not change its
13488 logical contents (as it is seen by the guest OS or by children).
13489 </li>
13490 <li>
13491 None of the involved media are in
13492 <link to="MediumState_LockedRead"/> or
13493 <link to="MediumState_LockedWrite"/> state.
13494 </li>
13495 </ul>
13496
13497 <note>
13498 This (source) medium and all intermediates will be placed to <link
13499 to="MediumState_Deleting"/> state and the target medium will be
13500 placed to <link to="MediumState_LockedWrite"/> state and for the
13501 duration of this operation.
13502 </note>
13503 </desc>
13504 <param name="target" type="IMedium" dir="in">
13505 <desc>Target medium.</desc>
13506 </param>
13507 <param name="progress" type="IProgress" dir="return">
13508 <desc>Progress object to track the operation completion.</desc>
13509 </param>
13510 </method>
13511
13512 <!-- clone method -->
13513
13514 <method name="cloneTo">
13515 <desc>
13516 Starts creating a clone of this medium in the format and at the
13517 location defined by the @a target argument.
13518
13519 The target medium must be either in <link to="MediumState_NotCreated"/>
13520 state (i.e. must not have an existing storage unit) or in
13521 <link to="MediumState_Created"/> state (i.e. created and not locked, and
13522 big enough to hold the data or else the copy will be partial). Upon
13523 successful completion, the cloned medium will contain exactly the
13524 same sector data as the medium being cloned, except that in the
13525 first case a new UUID for the clone will be randomly generated, and in
13526 the second case the UUID will remain unchanged.
13527
13528 The @a parent argument defines which medium will be the parent
13529 of the clone. Passing a @c null reference indicates that the clone will
13530 be a base image, i.e. completely independent. It is possible to specify
13531 an arbitrary medium for this parameter, including the parent of the
13532 medium which is being cloned. Even cloning to a child of the source
13533 medium is possible. Note that when cloning to an existing image, the
13534 @a parent argument is ignored.
13535
13536 After the returned progress object reports that the operation is
13537 successfully complete, the target medium gets remembered by this
13538 VirtualBox installation and may be attached to virtual machines.
13539
13540 <note>
13541 This medium will be placed to <link to="MediumState_LockedRead"/>
13542 state for the duration of this operation.
13543 </note>
13544 <result name="E_NOTIMPL">
13545 The specified cloning variant is not supported at the moment.
13546 </result>
13547 </desc>
13548 <param name="target" type="IMedium" dir="in">
13549 <desc>Target medium.</desc>
13550 </param>
13551 <param name="variant" type="unsigned long" dir="in">
13552 <desc>Exact image variant which should be created (as a combination of
13553 <link to="MediumVariant" /> flags).</desc>
13554 </param>
13555 <param name="parent" type="IMedium" dir="in">
13556 <desc>Parent of the cloned medium.</desc>
13557 </param>
13558 <param name="progress" type="IProgress" dir="return">
13559 <desc>Progress object to track the operation completion.</desc>
13560 </param>
13561 </method>
13562
13563 <method name="cloneToBase">
13564 <desc>
13565 Starts creating a clone of this medium in the format and at the
13566 location defined by the @a target argument.
13567
13568 The target medium must be either in <link to="MediumState_NotCreated"/>
13569 state (i.e. must not have an existing storage unit) or in
13570 <link to="MediumState_Created"/> state (i.e. created and not locked, and
13571 big enough to hold the data or else the copy will be partial). Upon
13572 successful completion, the cloned medium will contain exactly the
13573 same sector data as the medium being cloned, except that in the
13574 first case a new UUID for the clone will be randomly generated, and in
13575 the second case the UUID will remain unchanged.
13576
13577 The @a parent argument defines which medium will be the parent
13578 of the clone. In this case the clone will be a base image, i.e.
13579 completely independent. It is possible to specify an arbitrary
13580 medium for this parameter, including the parent of the
13581 medium which is being cloned. Even cloning to a child of the source
13582 medium is possible. Note that when cloning to an existing image, the
13583 @a parent argument is ignored.
13584
13585 After the returned progress object reports that the operation is
13586 successfully complete, the target medium gets remembered by this
13587 VirtualBox installation and may be attached to virtual machines.
13588
13589 <note>
13590 This medium will be placed to <link to="MediumState_LockedRead"/>
13591 state for the duration of this operation.
13592 </note>
13593 <result name="E_NOTIMPL">
13594 The specified cloning variant is not supported at the moment.
13595 </result>
13596 </desc>
13597 <param name="target" type="IMedium" dir="in">
13598 <desc>Target medium.</desc>
13599 </param>
13600 <param name="variant" type="unsigned long" dir="in">
13601 <desc>Exact image variant which should be created (as a combination of
13602 <link to="MediumVariant" /> flags).</desc>
13603 </param>
13604 <param name="progress" type="IProgress" dir="return">
13605 <desc>Progress object to track the operation completion.</desc>
13606 </param>
13607 </method>
13608
13609 <!-- other methods -->
13610
13611 <method name="compact">
13612 <desc>
13613 Starts compacting of this medium. This means that the medium is
13614 transformed into a possibly more compact storage representation.
13615 This potentially creates temporary images, which can require a
13616 substantial amount of additional disk space.
13617
13618 This medium will be placed to <link to="MediumState_LockedWrite"/>
13619 state and all its parent media (if any) will be placed to
13620 <link to="MediumState_LockedRead"/> state for the duration of this
13621 operation.
13622
13623 Please note that the results can be either returned straight away,
13624 or later as the result of the background operation via the object
13625 returned via the @a progress parameter.
13626
13627 <result name="VBOX_E_NOT_SUPPORTED">
13628 Medium format does not support compacting (but potentially
13629 needs it).
13630 </result>
13631 </desc>
13632 <param name="progress" type="IProgress" dir="return">
13633 <desc>Progress object to track the operation completion.</desc>
13634 </param>
13635 </method>
13636
13637 <method name="resize">
13638 <desc>
13639 Starts resizing this medium. This means that the nominal size of the
13640 medium is set to the new value. Both increasing and decreasing the
13641 size is possible, and there are no safety checks, since VirtualBox
13642 does not make any assumptions about the medium contents.
13643
13644 Resizing usually needs additional disk space, and possibly also
13645 some temporary disk space. Note that resize does not create a full
13646 temporary copy of the medium, so the additional disk space requirement
13647 is usually much lower than using the clone operation.
13648
13649 This medium will be placed to <link to="MediumState_LockedWrite"/>
13650 state for the duration of this operation.
13651
13652 Please note that the results can be either returned straight away,
13653 or later as the result of the background operation via the object
13654 returned via the @a progress parameter.
13655
13656 <result name="VBOX_E_NOT_SUPPORTED">
13657 Medium format does not support resizing.
13658 </result>
13659 </desc>
13660 <param name="logicalSize" type="long long" dir="in">
13661 <desc>New nominal capacity of the medium in bytes.</desc>
13662 </param>
13663 <param name="progress" type="IProgress" dir="return">
13664 <desc>Progress object to track the operation completion.</desc>
13665 </param>
13666 </method>
13667
13668 <method name="reset">
13669 <desc>
13670 Starts erasing the contents of this differencing medium.
13671
13672 This operation will reset the differencing medium to its initial
13673 state when it does not contain any sector data and any read operation is
13674 redirected to its parent medium. This automatically gets called
13675 during VM power-up for every medium whose <link to="#autoReset" />
13676 attribute is @c true.
13677
13678 The medium will be write-locked for the duration of this operation (see
13679 <link to="#lockWrite" />).
13680
13681 <result name="VBOX_E_NOT_SUPPORTED">
13682 This is not a differencing medium.
13683 </result>
13684 <result name="VBOX_E_INVALID_OBJECT_STATE">
13685 Medium is not in <link to="MediumState_Created"/> or
13686 <link to="MediumState_Inaccessible"/> state.
13687 </result>
13688 </desc>
13689 <param name="progress" type="IProgress" dir="return">
13690 <desc>Progress object to track the operation completion.</desc>
13691 </param>
13692 </method>
13693
13694 </interface>
13695
13696
13697 <!--
13698 // IMediumFormat
13699 /////////////////////////////////////////////////////////////////////////
13700 -->
13701
13702 <enum
13703 name="DataType"
13704 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
13705 >
13706 <const name="Int32" value="0"/>
13707 <const name="Int8" value="1"/>
13708 <const name="String" value="2"/>
13709 </enum>
13710
13711 <enum
13712 name="DataFlags"
13713 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
13714 >
13715 <const name="None" value="0x00"/>
13716 <const name="Mandatory" value="0x01"/>
13717 <const name="Expert" value="0x02"/>
13718 <const name="Array" value="0x04"/>
13719 <const name="FlagMask" value="0x07"/>
13720 </enum>
13721
13722 <enum
13723 name="MediumFormatCapabilities"
13724 uuid="7342ba79-7ce0-4d94-8f86-5ed5a185d9bd"
13725 >
13726 <desc>
13727 Medium format capability flags.
13728 </desc>
13729
13730 <const name="Uuid" value="0x01">
13731 <desc>
13732 Supports UUIDs as expected by VirtualBox code.
13733 </desc>
13734 </const>
13735
13736 <const name="CreateFixed" value="0x02">
13737 <desc>
13738 Supports creating fixed size images, allocating all space instantly.
13739 </desc>
13740 </const>
13741
13742 <const name="CreateDynamic" value="0x04">
13743 <desc>
13744 Supports creating dynamically growing images, allocating space on
13745 demand.
13746 </desc>
13747 </const>
13748
13749 <const name="CreateSplit2G" value="0x08">
13750 <desc>
13751 Supports creating images split in chunks of a bit less than 2 GBytes.
13752 </desc>
13753 </const>
13754
13755 <const name="Differencing" value="0x10">
13756 <desc>
13757 Supports being used as a format for differencing media (see <link
13758 to="IMedium::createDiffStorage"/>).
13759 </desc>
13760 </const>
13761
13762 <const name="Asynchronous" value="0x20">
13763 <desc>
13764 Supports asynchronous I/O operations for at least some configurations.
13765 </desc>
13766 </const>
13767
13768 <const name="File" value="0x40">
13769 <desc>
13770 The format backend operates on files (the <link to="IMedium::location"/>
13771 attribute of the medium specifies a file used to store medium
13772 data; for a list of supported file extensions see
13773 <link to="IMediumFormat::describeFileExtensions"/>).
13774 </desc>
13775 </const>
13776
13777 <const name="Properties" value="0x80">
13778 <desc>
13779 The format backend uses the property interface to configure the storage
13780 location and properties (the <link to="IMediumFormat::describeProperties"/>
13781 method is used to get access to properties supported by the given medium format).
13782 </desc>
13783 </const>
13784
13785 <const name="TcpNetworking" value="0x100">
13786 <desc>
13787 The format backend uses the TCP networking interface for network access.
13788 </desc>
13789 </const>
13790
13791 <const name="VFS" value="0x200">
13792 <desc>
13793 The format backend supports virtual filesystem functionality.
13794 </desc>
13795 </const>
13796
13797 <const name="CapabilityMask" value="0x3FF"/>
13798 </enum>
13799
13800 <interface
13801 name="IMediumFormat" extends="$unknown"
13802 uuid="9bd5b655-ea47-4637-99f3-aad0948be35b"
13803 wsmap="managed"
13804 >
13805 <desc>
13806 The IMediumFormat interface represents a medium format.
13807
13808 Each medium format has an associated backend which is used to handle
13809 media stored in this format. This interface provides information
13810 about the properties of the associated backend.
13811
13812 Each medium format is identified by a string represented by the
13813 <link to="#id"/> attribute. This string is used in calls like
13814 <link to="IVirtualBox::createHardDisk"/> to specify the desired
13815 format.
13816
13817 The list of all supported medium formats can be obtained using
13818 <link to="ISystemProperties::mediumFormats"/>.
13819
13820 <see><link to="IMedium"/></see>
13821 </desc>
13822
13823 <attribute name="id" type="wstring" readonly="yes">
13824 <desc>
13825 Identifier of this format.
13826
13827 The format identifier is a non-@c null non-empty ASCII string. Note that
13828 this string is case-insensitive. This means that, for example, all of
13829 the following strings:
13830 <pre>
13831 "VDI"
13832 "vdi"
13833 "VdI"</pre>
13834 refer to the same medium format.
13835
13836 This string is used in methods of other interfaces where it is necessary
13837 to specify a medium format, such as
13838 <link to="IVirtualBox::createHardDisk"/>.
13839 </desc>
13840 </attribute>
13841
13842 <attribute name="name" type="wstring" readonly="yes">
13843 <desc>
13844 Human readable description of this format.
13845
13846 Mainly for use in file open dialogs.
13847 </desc>
13848 </attribute>
13849
13850 <attribute name="capabilities" type="unsigned long" readonly="yes">
13851 <desc>
13852 Capabilities of the format as a set of bit flags.
13853
13854 For the meaning of individual capability flags see
13855 <link to="MediumFormatCapabilities"/>.
13856 </desc>
13857 </attribute>
13858
13859 <method name="describeFileExtensions">
13860 <desc>
13861 Returns two arrays describing the supported file extensions.
13862
13863 The first array contains the supported extensions and the seconds one
13864 the type each extension supports. Both have the same size.
13865
13866 Note that some backends do not work on files, so this array may be
13867 empty.
13868
13869 <see><link to="IMediumFormat::capabilities"/></see>
13870 </desc>
13871 <param name="extensions" type="wstring" safearray="yes" dir="out">
13872 <desc>The array of supported extensions.</desc>
13873 </param>
13874 <param name="type" type="DeviceType" safearray="yes" dir="out">
13875 <desc>The array which indicates the device type for every given extension.</desc>
13876 </param>
13877 </method>
13878
13879 <method name="describeProperties" const="yes">
13880 <desc>
13881 Returns several arrays describing the properties supported by this
13882 format.
13883
13884 An element with the given index in each array describes one
13885 property. Thus, the number of elements in each returned array is the
13886 same and corresponds to the number of supported properties.
13887
13888 The returned arrays are filled in only if the
13889 <link to="MediumFormatCapabilities_Properties"/> flag is set.
13890 All arguments must be non-@c null.
13891
13892 <see><link to="DataType"/>, <link to="DataFlags"/></see>
13893 </desc>
13894
13895 <param name="names" type="wstring" safearray="yes" dir="out">
13896 <desc>Array of property names.</desc>
13897 </param>
13898 <param name="description" type="wstring" safearray="yes" dir="out">
13899 <desc>Array of property descriptions.</desc>
13900 </param>
13901 <param name="types" type="DataType" safearray="yes" dir="out">
13902 <desc>Array of property types.</desc>
13903 </param>
13904 <param name="flags" type="unsigned long" safearray="yes" dir="out">
13905 <desc>Array of property flags.</desc>
13906 </param>
13907 <param name="defaults" type="wstring" safearray="yes" dir="out">
13908 <desc>Array of default property values.</desc>
13909 </param>
13910 </method>
13911
13912 </interface>
13913
13914
13915 <!--
13916 // IKeyboard
13917 /////////////////////////////////////////////////////////////////////////
13918 -->
13919
13920 <interface
13921 name="IKeyboard" extends="$unknown"
13922 uuid="f6916ec5-a881-4237-898f-7de58cf88672"
13923 wsmap="managed"
13924 >
13925 <desc>
13926 The IKeyboard interface represents the virtual machine's keyboard. Used
13927 in <link to="IConsole::keyboard"/>.
13928
13929 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
13930 to the virtual machine.
13931
13932 </desc>
13933 <method name="putScancode">
13934 <desc>Sends a scancode to the keyboard.
13935
13936 <result name="VBOX_E_IPRT_ERROR">
13937 Could not send scan code to virtual keyboard.
13938 </result>
13939
13940 </desc>
13941 <param name="scancode" type="long" dir="in"/>
13942 </method>
13943
13944 <method name="putScancodes">
13945 <desc>Sends an array of scancodes to the keyboard.
13946
13947 <result name="VBOX_E_IPRT_ERROR">
13948 Could not send all scan codes to virtual keyboard.
13949 </result>
13950
13951 </desc>
13952 <param name="scancodes" type="long" dir="in" safearray="yes"/>
13953 <param name="codesStored" type="unsigned long" dir="return"/>
13954 </method>
13955
13956 <method name="putCAD">
13957 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
13958 function is nothing special, it is just a convenience function
13959 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
13960
13961 <result name="VBOX_E_IPRT_ERROR">
13962 Could not send all scan codes to virtual keyboard.
13963 </result>
13964
13965 </desc>
13966 </method>
13967
13968 <attribute name="eventSource" type="IEventSource" readonly="yes">
13969 <desc>
13970 Event source for keyboard events.
13971 </desc>
13972 </attribute>
13973
13974 </interface>
13975
13976
13977 <!--
13978 // IMouse
13979 /////////////////////////////////////////////////////////////////////////
13980 -->
13981
13982 <enum
13983 name="MouseButtonState"
13984 uuid="9ee094b8-b28a-4d56-a166-973cb588d7f8"
13985 >
13986 <desc>
13987 Mouse button state.
13988 </desc>
13989
13990 <const name="LeftButton" value="0x01"/>
13991 <const name="RightButton" value="0x02"/>
13992 <const name="MiddleButton" value="0x04"/>
13993 <const name="WheelUp" value="0x08"/>
13994 <const name="WheelDown" value="0x10"/>
13995 <const name="XButton1" value="0x20"/>
13996 <const name="XButton2" value="0x40"/>
13997 <const name="MouseStateMask" value="0x7F"/>
13998 </enum>
13999
14000 <interface
14001 name="IMouse" extends="$unknown"
14002 uuid="05044a52-7811-4f00-ae3a-0ab7ff707b10"
14003 wsmap="managed"
14004 >
14005 <desc>
14006 The IMouse interface represents the virtual machine's mouse. Used in
14007 <link to="IConsole::mouse"/>.
14008
14009 Through this interface, the virtual machine's virtual mouse can be
14010 controlled.
14011 </desc>
14012
14013 <attribute name="absoluteSupported" type="boolean" readonly="yes">
14014 <desc>
14015 Whether the guest OS supports absolute mouse pointer positioning
14016 or not.
14017 <note>
14018 You can use the <link to="IMouseCapabilityChangedEvent"/>
14019 event to be instantly informed about changes of this attribute
14020 during virtual machine execution.
14021 </note>
14022 <see><link to="#putMouseEventAbsolute"/></see>
14023 </desc>
14024 </attribute>
14025
14026 <attribute name="relativeSupported" type="boolean" readonly="yes">
14027 <desc>
14028 Whether the guest OS supports relative mouse pointer positioning
14029 or not.
14030 <note>
14031 You can use the <link to="IMouseCapabilityChangedEvent"/>
14032 event to be instantly informed about changes of this attribute
14033 during virtual machine execution.
14034 </note>
14035 <see><link to="#putMouseEvent"/></see>
14036 </desc>
14037 </attribute>
14038
14039 <attribute name="needsHostCursor" type="boolean" readonly="yes">
14040 <desc>
14041 Whether the guest OS can currently switch to drawing it's own mouse
14042 cursor on demand.
14043 <note>
14044 You can use the <link to="IMouseCapabilityChangedEvent"/>
14045 event to be instantly informed about changes of this attribute
14046 during virtual machine execution.
14047 </note>
14048 <see><link to="#putMouseEvent"/></see>
14049 </desc>
14050 </attribute>
14051
14052 <method name="putMouseEvent">
14053 <desc>
14054 Initiates a mouse event using relative pointer movements
14055 along x and y axis.
14056
14057 <result name="E_ACCESSDENIED">
14058 Console not powered up.
14059 </result>
14060 <result name="VBOX_E_IPRT_ERROR">
14061 Could not send mouse event to virtual mouse.
14062 </result>
14063
14064 </desc>
14065
14066 <param name="dx" type="long" dir="in">
14067 <desc>
14068 Amount of pixels the mouse should move to the right.
14069 Negative values move the mouse to the left.
14070 </desc>
14071 </param>
14072 <param name="dy" type="long" dir="in">
14073 <desc>
14074 Amount of pixels the mouse should move downwards.
14075 Negative values move the mouse upwards.
14076 </desc>
14077 </param>
14078 <param name="dz" type="long" dir="in">
14079 <desc>
14080 Amount of mouse wheel moves.
14081 Positive values describe clockwise wheel rotations,
14082 negative values describe counterclockwise rotations.
14083 </desc>
14084 </param>
14085 <param name="dw" type="long" dir="in">
14086 <desc>
14087 Amount of horizontal mouse wheel moves.
14088 Positive values describe a movement to the left,
14089 negative values describe a movement to the right.
14090 </desc>
14091 </param>
14092 <param name="buttonState" type="long" dir="in">
14093 <desc>
14094 The current state of mouse buttons. Every bit represents
14095 a mouse button as follows:
14096 <table>
14097 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
14098 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
14099 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
14100 </table>
14101 A value of <tt>1</tt> means the corresponding button is pressed.
14102 otherwise it is released.
14103 </desc>
14104 </param>
14105 </method>
14106
14107 <method name="putMouseEventAbsolute">
14108 <desc>
14109 Positions the mouse pointer using absolute x and y coordinates.
14110 These coordinates are expressed in pixels and
14111 start from <tt>[1,1]</tt> which corresponds to the top left
14112 corner of the virtual display.
14113
14114 <result name="E_ACCESSDENIED">
14115 Console not powered up.
14116 </result>
14117 <result name="VBOX_E_IPRT_ERROR">
14118 Could not send mouse event to virtual mouse.
14119 </result>
14120
14121 <note>
14122 This method will have effect only if absolute mouse
14123 positioning is supported by the guest OS.
14124 </note>
14125
14126 <see><link to="#absoluteSupported"/></see>
14127 </desc>
14128
14129 <param name="x" type="long" dir="in">
14130 <desc>
14131 X coordinate of the pointer in pixels, starting from @c 1.
14132 </desc>
14133 </param>
14134 <param name="y" type="long" dir="in">
14135 <desc>
14136 Y coordinate of the pointer in pixels, starting from @c 1.
14137 </desc>
14138 </param>
14139 <param name="dz" type="long" dir="in">
14140 <desc>
14141 Amount of mouse wheel moves.
14142 Positive values describe clockwise wheel rotations,
14143 negative values describe counterclockwise rotations.
14144 </desc>
14145 </param>
14146 <param name="dw" type="long" dir="in">
14147 <desc>
14148 Amount of horizontal mouse wheel moves.
14149 Positive values describe a movement to the left,
14150 negative values describe a movement to the right.
14151 </desc>
14152 </param>
14153 <param name="buttonState" type="long" dir="in">
14154 <desc>
14155 The current state of mouse buttons. Every bit represents
14156 a mouse button as follows:
14157 <table>
14158 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
14159 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
14160 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
14161 </table>
14162 A value of @c 1 means the corresponding button is pressed.
14163 otherwise it is released.
14164 </desc>
14165 </param>
14166 </method>
14167
14168 <attribute name="eventSource" type="IEventSource" readonly="yes">
14169 <desc>
14170 Event source for mouse events.
14171 </desc>
14172 </attribute>
14173
14174 </interface>
14175
14176 <!--
14177 // IDisplay
14178 /////////////////////////////////////////////////////////////////////////
14179 -->
14180
14181 <enum
14182 name="FramebufferPixelFormat"
14183 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
14184 >
14185 <desc>
14186 Format of the video memory buffer. Constants represented by this enum can
14187 be used to test for particular values of <link
14188 to="IFramebuffer::pixelFormat"/>. See also <link
14189 to="IFramebuffer::requestResize"/>.
14190
14191 See also www.fourcc.org for more information about FOURCC pixel formats.
14192 </desc>
14193
14194 <const name="Opaque" value="0">
14195 <desc>
14196 Unknown buffer format (the user may not assume any particular format of
14197 the buffer).
14198 </desc>
14199 </const>
14200 <const name="FOURCC_RGB" value="0x32424752">
14201 <desc>
14202 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
14203 bit layout).
14204 </desc>
14205 </const>
14206 </enum>
14207
14208 <interface
14209 name="IFramebuffer" extends="$unknown"
14210 uuid="b7ed347a-5765-40a0-ae1c-f543eb4ddeaf"
14211 wsmap="suppress"
14212 >
14213 <attribute name="address" type="octet" mod="ptr" readonly="yes">
14214 <desc>Address of the start byte of the frame buffer.</desc>
14215 </attribute>
14216
14217 <attribute name="width" type="unsigned long" readonly="yes">
14218 <desc>Frame buffer width, in pixels.</desc>
14219 </attribute>
14220
14221 <attribute name="height" type="unsigned long" readonly="yes">
14222 <desc>Frame buffer height, in pixels.</desc>
14223 </attribute>
14224
14225 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
14226 <desc>
14227 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
14228 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
14229 are: 8, 15, 16, 24 and 32.
14230 </desc>
14231 </attribute>
14232
14233 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
14234 <desc>
14235 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
14236 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
14237 size of the scan line must be aligned to 32 bits.
14238 </desc>
14239 </attribute>
14240
14241 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
14242 <desc>
14243 Frame buffer pixel format. It's either one of the values defined by <link
14244 to="FramebufferPixelFormat"/> or a raw FOURCC code.
14245 <note>
14246 This attribute must never return <link
14247 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
14248 <link to="#address"/> points to must be always known.
14249 </note>
14250 </desc>
14251 </attribute>
14252
14253 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
14254 <desc>
14255 Defines whether this frame buffer uses the virtual video card's memory
14256 buffer (guest VRAM) directly or not. See <link
14257 to="IFramebuffer::requestResize"/> for more information.
14258 </desc>
14259 </attribute>
14260
14261 <attribute name="heightReduction" type="unsigned long" readonly="yes">
14262 <desc>
14263 Hint from the frame buffer about how much of the standard
14264 screen height it wants to use for itself. This information is
14265 exposed to the guest through the VESA BIOS and VMMDev interface
14266 so that it can use it for determining its video mode table. It
14267 is not guaranteed that the guest respects the value.
14268 </desc>
14269 </attribute>
14270
14271 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
14272 <desc>
14273 An alpha-blended overlay which is superposed over the frame buffer.
14274 The initial purpose is to allow the display of icons providing
14275 information about the VM state, including disk activity, in front
14276 ends which do not have other means of doing that. The overlay is
14277 designed to controlled exclusively by IDisplay. It has no locking
14278 of its own, and any changes made to it are not guaranteed to be
14279 visible until the affected portion of IFramebuffer is updated. The
14280 overlay can be created lazily the first time it is requested. This
14281 attribute can also return @c null to signal that the overlay is not
14282 implemented.
14283 </desc>
14284 </attribute>
14285
14286 <attribute name="winId" type="long long" readonly="yes">
14287 <desc>
14288 Platform-dependent identifier of the window where context of this
14289 frame buffer is drawn, or zero if there's no such window.
14290 </desc>
14291 </attribute>
14292
14293 <method name="lock">
14294 <desc>
14295 Locks the frame buffer.
14296 Gets called by the IDisplay object where this frame buffer is
14297 bound to.
14298 </desc>
14299 </method>
14300
14301 <method name="unlock">
14302 <desc>
14303 Unlocks the frame buffer.
14304 Gets called by the IDisplay object where this frame buffer is
14305 bound to.
14306 </desc>
14307 </method>
14308
14309 <method name="notifyUpdate">
14310 <desc>
14311 Informs about an update.
14312 Gets called by the display object where this buffer is
14313 registered.
14314 </desc>
14315 <param name="x" type="unsigned long" dir="in"/>
14316 <param name="y" type="unsigned long" dir="in"/>
14317 <param name="width" type="unsigned long" dir="in"/>
14318 <param name="height" type="unsigned long" dir="in"/>
14319 </method>
14320
14321 <method name="requestResize">
14322 <desc>
14323 Requests a size and pixel format change.
14324
14325 There are two modes of working with the video buffer of the virtual
14326 machine. The <i>indirect</i> mode implies that the IFramebuffer
14327 implementation allocates a memory buffer for the requested display mode
14328 and provides it to the virtual machine. In <i>direct</i> mode, the
14329 IFramebuffer implementation uses the memory buffer allocated and owned
14330 by the virtual machine. This buffer represents the video memory of the
14331 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
14332 usually faster because the implementation gets a raw pointer to the
14333 guest VRAM buffer which it can directly use for visualizing the contents
14334 of the virtual display, as opposed to the indirect mode where the
14335 contents of guest VRAM are copied to the memory buffer provided by
14336 the implementation every time a display update occurs.
14337
14338 It is important to note that the direct mode is really fast only when
14339 the implementation uses the given guest VRAM buffer directly, for
14340 example, by blitting it to the window representing the virtual machine's
14341 display, which saves at least one copy operation comparing to the
14342 indirect mode. However, using the guest VRAM buffer directly is not
14343 always possible: the format and the color depth of this buffer may be
14344 not supported by the target window, or it may be unknown (opaque) as in
14345 case of text or non-linear multi-plane VGA video modes. In this case,
14346 the indirect mode (that is always available) should be used as a
14347 fallback: when the guest VRAM contents are copied to the
14348 implementation-provided memory buffer, color and format conversion is
14349 done automatically by the underlying code.
14350
14351 The @a pixelFormat parameter defines whether the direct mode is
14352 available or not. If @a pixelFormat is <link
14353 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
14354 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and
14355 @a bytesPerLine parameters must be ignored and the implementation must use
14356 the indirect mode (where it provides its own buffer in one of the
14357 supported formats). In all other cases, @a pixelFormat together with
14358 @a bitsPerPixel and @a bytesPerLine define the format of the video memory
14359 buffer pointed to by the @a VRAM parameter and the implementation is
14360 free to choose which mode to use. To indicate that this frame buffer uses
14361 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
14362 attribute must return @c true and <link to="#address"/> must
14363 return exactly the same address that is passed in the @a VRAM parameter
14364 of this method; otherwise it is assumed that the indirect strategy is
14365 chosen.
14366
14367 The @a width and @a height parameters represent the size of the
14368 requested display mode in both modes. In case of indirect mode, the
14369 provided memory buffer should be big enough to store data of the given
14370 display mode. In case of direct mode, it is guaranteed that the given
14371 @a VRAM buffer contains enough space to represent the display mode of the
14372 given size. Note that this frame buffer's <link to="#width"/> and <link
14373 to="#height"/> attributes must return exactly the same values as
14374 passed to this method after the resize is completed (see below).
14375
14376 The @a finished output parameter determines if the implementation has
14377 finished resizing the frame buffer or not. If, for some reason, the
14378 resize cannot be finished immediately during this call, @a finished
14379 must be set to @c false, and the implementation must call
14380 <link to="IDisplay::resizeCompleted"/> after it has returned from
14381 this method as soon as possible. If @a finished is @c false, the
14382 machine will not call any frame buffer methods until
14383 <link to="IDisplay::resizeCompleted"/> is called.
14384
14385 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
14386 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
14387 this frame buffer must return exactly the same values as specified in the
14388 parameters of this method, after the resize is completed. If the
14389 indirect mode is chosen, these attributes must return values describing
14390 the format of the implementation's own memory buffer <link
14391 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
14392 value must always correlate with <link to="#pixelFormat"/>. Note that
14393 the <link to="#pixelFormat"/> attribute must never return <link
14394 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
14395
14396 <note>
14397 This method is called by the IDisplay object under the
14398 <link to="#lock"/> provided by this IFramebuffer
14399 implementation. If this method returns @c false in @a finished, then
14400 this lock is not released until
14401 <link to="IDisplay::resizeCompleted"/> is called.
14402 </note>
14403 </desc>
14404 <param name="screenId" type="unsigned long" dir="in">
14405 <desc>
14406 Logical screen number. Must be used in the corresponding call to
14407 <link to="IDisplay::resizeCompleted"/> if this call is made.
14408 </desc>
14409 </param>
14410 <param name="pixelFormat" type="unsigned long" dir="in">
14411 <desc>
14412 Pixel format of the memory buffer pointed to by @a VRAM.
14413 See also <link to="FramebufferPixelFormat"/>.
14414 </desc>
14415 </param>
14416 <param name="VRAM" type="octet" mod="ptr" dir="in">
14417 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
14418 </param>
14419 <param name="bitsPerPixel" type="unsigned long" dir="in">
14420 <desc>Color depth, bits per pixel.</desc>
14421 </param>
14422 <param name="bytesPerLine" type="unsigned long" dir="in">
14423 <desc>Size of one scan line, in bytes.</desc>
14424 </param>
14425 <param name="width" type="unsigned long" dir="in">
14426 <desc>Width of the guest display, in pixels.</desc>
14427 </param>
14428 <param name="height" type="unsigned long" dir="in">
14429 <desc>Height of the guest display, in pixels.</desc>
14430 </param>
14431 <param name="finished" type="boolean" dir="return">
14432 <desc>
14433 Can the VM start using the new frame buffer immediately
14434 after this method returns or it should wait for
14435 <link to="IDisplay::resizeCompleted"/>.
14436 </desc>
14437 </param>
14438 </method>
14439
14440 <method name="videoModeSupported">
14441 <desc>
14442 Returns whether the frame buffer implementation is willing to
14443 support a given video mode. In case it is not able to render
14444 the video mode (or for some reason not willing), it should
14445 return @c false. Usually this method is called when the guest
14446 asks the VMM device whether a given video mode is supported
14447 so the information returned is directly exposed to the guest.
14448 It is important that this method returns very quickly.
14449 </desc>
14450 <param name="width" type="unsigned long" dir="in"/>
14451 <param name="height" type="unsigned long" dir="in"/>
14452 <param name="bpp" type="unsigned long" dir="in"/>
14453 <param name="supported" type="boolean" dir="return"/>
14454 </method>
14455
14456 <method name="getVisibleRegion">
14457 <desc>
14458 Returns the visible region of this frame buffer.
14459
14460 If the @a rectangles parameter is @c null then the value of the
14461 @a count parameter is ignored and the number of elements necessary to
14462 describe the current visible region is returned in @a countCopied.
14463
14464 If @a rectangles is not @c null but @a count is less
14465 than the required number of elements to store region data, the method
14466 will report a failure. If @a count is equal or greater than the
14467 required number of elements, then the actual number of elements copied
14468 to the provided array will be returned in @a countCopied.
14469
14470 <note>
14471 The address of the provided array must be in the process space of
14472 this IFramebuffer object.
14473 </note>
14474 <note>
14475 Method not yet implemented.
14476 </note>
14477 </desc>
14478 <param name="rectangles" type="octet" mod="ptr" dir="in">
14479 <desc>Pointer to the @c RTRECT array to receive region data.</desc>
14480 </param>
14481 <param name="count" type="unsigned long" dir="in">
14482 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
14483 </param>
14484 <param name="countCopied" type="unsigned long" dir="return">
14485 <desc>Number of elements copied to the @a rectangles array.</desc>
14486 </param>
14487 </method>
14488
14489 <method name="setVisibleRegion">
14490 <desc>
14491 Suggests a new visible region to this frame buffer. This region
14492 represents the area of the VM display which is a union of regions of
14493 all top-level windows of the guest operating system running inside the
14494 VM (if the Guest Additions for this system support this
14495 functionality). This information may be used by the frontends to
14496 implement the seamless desktop integration feature.
14497
14498 <note>
14499 The address of the provided array must be in the process space of
14500 this IFramebuffer object.
14501 </note>
14502 <note>
14503 The IFramebuffer implementation must make a copy of the provided
14504 array of rectangles.
14505 </note>
14506 <note>
14507 Method not yet implemented.
14508 </note>
14509 </desc>
14510 <param name="rectangles" type="octet" mod="ptr" dir="in">
14511 <desc>Pointer to the @c RTRECT array.</desc>
14512 </param>
14513 <param name="count" type="unsigned long" dir="in">
14514 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
14515 </param>
14516 </method>
14517
14518 <method name="processVHWACommand">
14519 <desc>
14520 Posts a Video HW Acceleration Command to the frame buffer for processing.
14521 The commands used for 2D video acceleration (DDraw surface creation/destroying, blitting, scaling, color conversion, overlaying, etc.)
14522 are posted from quest to the host to be processed by the host hardware.
14523
14524 <note>
14525 The address of the provided command must be in the process space of
14526 this IFramebuffer object.
14527 </note>
14528 </desc>
14529
14530 <param name="command" type="octet" mod="ptr" dir="in">
14531 <desc>Pointer to VBOXVHWACMD containing the command to execute.</desc>
14532 </param>
14533 </method>
14534
14535 </interface>
14536
14537 <interface
14538 name="IFramebufferOverlay" extends="IFramebuffer"
14539 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
14540 wsmap="suppress"
14541 >
14542 <desc>
14543 The IFramebufferOverlay interface represents an alpha blended overlay
14544 for displaying status icons above an IFramebuffer. It is always created
14545 not visible, so that it must be explicitly shown. It only covers a
14546 portion of the IFramebuffer, determined by its width, height and
14547 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
14548 that order) format, and may be written to directly. Do re-read the
14549 width though, after setting it, as it may be adjusted (increased) to
14550 make it more suitable for the front end.
14551 </desc>
14552 <attribute name="x" type="unsigned long" readonly="yes">
14553 <desc>X position of the overlay, relative to the frame buffer.</desc>
14554 </attribute>
14555
14556 <attribute name="y" type="unsigned long" readonly="yes">
14557 <desc>Y position of the overlay, relative to the frame buffer.</desc>
14558 </attribute>
14559
14560 <attribute name="visible" type="boolean" readonly="no">
14561 <desc>
14562 Whether the overlay is currently visible.
14563 </desc>
14564 </attribute>
14565
14566 <attribute name="alpha" type="unsigned long" readonly="no">
14567 <desc>
14568 The global alpha value for the overlay. This may or may not be
14569 supported by a given front end.
14570 </desc>
14571 </attribute>
14572
14573 <method name="move">
14574 <desc>
14575 Changes the overlay's position relative to the IFramebuffer.
14576 </desc>
14577 <param name="x" type="unsigned long" dir="in"/>
14578 <param name="y" type="unsigned long" dir="in"/>
14579 </method>
14580
14581 </interface>
14582
14583 <interface
14584 name="IDisplay" extends="$unknown"
14585 uuid="b83ee395-8679-40ca-8d60-1a0cbe724930"
14586 wsmap="managed"
14587 >
14588 <desc>
14589 The IDisplay interface represents the virtual machine's display.
14590
14591 The object implementing this interface is contained in each
14592 <link to="IConsole::display"/> attribute and represents the visual
14593 output of the virtual machine.
14594
14595 The virtual display supports pluggable output targets represented by the
14596 IFramebuffer interface. Examples of the output target are a window on
14597 the host computer or an RDP session's display on a remote computer.
14598 </desc>
14599 <method name="getScreenResolution">
14600 <desc>Queries display width, height and color depth for given screen.</desc>
14601 <param name="screenId" type="unsigned long" dir="in"/>
14602 <param name="width" type="unsigned long" dir="out"/>
14603 <param name="height" type="unsigned long" dir="out"/>
14604 <param name="bitsPerPixel" type="unsigned long" dir="out"/>
14605 </method>
14606
14607 <method name="setFramebuffer">
14608 <desc>
14609 Sets the framebuffer for given screen.
14610 </desc>
14611 <param name="screenId" type="unsigned long" dir="in"/>
14612 <param name="framebuffer" type="IFramebuffer" dir="in"/>
14613 </method>
14614
14615 <method name="getFramebuffer">
14616 <desc>
14617 Queries the framebuffer for given screen.
14618 </desc>
14619 <param name="screenId" type="unsigned long" dir="in"/>
14620 <param name="framebuffer" type="IFramebuffer" dir="out"/>
14621 <param name="xOrigin" type="long" dir="out"/>
14622 <param name="yOrigin" type="long" dir="out"/>
14623 </method>
14624
14625 <method name="setVideoModeHint">
14626 <desc>
14627 Asks VirtualBox to request the given video mode from
14628 the guest. This is just a hint and it cannot be guaranteed
14629 that the requested resolution will be used. Guest Additions
14630 are required for the request to be seen by guests. The caller
14631 should issue the request and wait for a resolution change and
14632 after a timeout retry.
14633
14634 Specifying @c 0 for either @a width, @a height or @a bitsPerPixel
14635 parameters means that the corresponding values should be taken from the
14636 current video mode (i.e. left unchanged).
14637
14638 If the guest OS supports multi-monitor configuration then the @a display
14639 parameter specifies the number of the guest display to send the hint to:
14640 @c 0 is the primary display, @c 1 is the first secondary and
14641 so on. If the multi-monitor configuration is not supported, @a display
14642 must be @c 0.
14643
14644 <result name="E_INVALIDARG">
14645 The @a display is not associated with any monitor.
14646 </result>
14647
14648 </desc>
14649 <param name="display" type="unsigned long" dir="in">
14650 <desc>
14651 The number of the guest display to send the hint to.
14652 </desc>
14653 </param>
14654 <param name="enabled" type="boolean" dir="in">
14655 <desc>
14656 @c True, if this guest screen is enabled,
14657 @c False otherwise.
14658 </desc>
14659 </param>
14660 <param name="changeOrigin" type="boolean" dir="in">
14661 <desc>
14662 @c True, if the origin of the guest screen should be changed,
14663 @c False otherwise.
14664 </desc>
14665 </param>
14666 <param name="originX" type="long" dir="in">
14667 <desc>
14668 The X origin of the guest screen.
14669 </desc>
14670 </param>
14671 <param name="originY" type="long" dir="in">
14672 <desc>
14673 The Y origin of the guest screen.
14674 </desc>
14675 </param>
14676 <param name="width" type="unsigned long" dir="in"/>
14677 <param name="height" type="unsigned long" dir="in"/>
14678 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
14679 </method>
14680
14681 <method name="setSeamlessMode">
14682 <desc>
14683 Enables or disables seamless guest display rendering (seamless desktop
14684 integration) mode.
14685 <note>
14686 Calling this method has no effect if <link
14687 to="IGuest::getFacilityStatus"/> with facility @c Seamless
14688 does not return @c Active.
14689 </note>
14690 </desc>
14691 <param name="enabled" type="boolean" dir="in"/>
14692 </method>
14693
14694 <method name="takeScreenShot">
14695 <desc>
14696 Takes a screen shot of the requested size and copies it to the
14697 32-bpp buffer allocated by the caller and pointed to by @a address.
14698 A pixel consists of 4 bytes in order: B, G, R, 0.
14699
14700 <note>This API can be used only locally by a VM process through the
14701 COM/XPCOM C++ API as it requires pointer support. It is not
14702 available for scripting langages, Java or any webservice clients.
14703 Unless you are writing a new VM frontend use
14704 <link to="#takeScreenShotToArray" />.
14705 </note>
14706
14707 <result name="E_NOTIMPL">
14708 Feature not implemented.
14709 </result>
14710 <result name="VBOX_E_IPRT_ERROR">
14711 Could not take a screenshot.
14712 </result>
14713
14714 </desc>
14715 <param name="screenId" type="unsigned long" dir="in"/>
14716 <param name="address" type="octet" mod="ptr" dir="in"/>
14717 <param name="width" type="unsigned long" dir="in"/>
14718 <param name="height" type="unsigned long" dir="in"/>
14719 </method>
14720
14721 <method name="takeScreenShotToArray">
14722 <desc>
14723 Takes a guest screen shot of the requested size and returns it as
14724 an array of bytes in uncompressed 32-bit RGBA format.
14725 A pixel consists of 4 bytes in order: R, G, B, 0xFF.
14726
14727 This API is slow, but could be the only option to get guest screenshot
14728 for scriptable languages not allowed to manipulate with addresses
14729 directly.
14730
14731 <result name="E_NOTIMPL">
14732 Feature not implemented.
14733 </result>
14734 <result name="VBOX_E_IPRT_ERROR">
14735 Could not take a screenshot.
14736 </result>
14737 </desc>
14738 <param name="screenId" type="unsigned long" dir="in">
14739 <desc>
14740 Monitor to take screenshot from.
14741 </desc>
14742 </param>
14743 <param name="width" type="unsigned long" dir="in">
14744 <desc>
14745 Desired image width.
14746 </desc>
14747 </param>
14748 <param name="height" type="unsigned long" dir="in">
14749 <desc>
14750 Desired image height.
14751 </desc>
14752 </param>
14753 <param name="screenData" type="octet" dir="return" safearray="yes">
14754 <desc>
14755 Array with resulting screen data.
14756 </desc>
14757 </param>
14758 </method>
14759
14760 <method name="takeScreenShotPNGToArray">
14761 <desc>
14762 Takes a guest screen shot of the requested size and returns it as
14763 PNG image in array.
14764
14765 <result name="E_NOTIMPL">
14766 Feature not implemented.
14767 </result>
14768 <result name="VBOX_E_IPRT_ERROR">
14769 Could not take a screenshot.
14770 </result>
14771 </desc>
14772 <param name="screenId" type="unsigned long" dir="in">
14773 <desc>
14774 Monitor to take the screenshot from.
14775 </desc>
14776 </param>
14777 <param name="width" type="unsigned long" dir="in">
14778 <desc>
14779 Desired image width.
14780 </desc>
14781 </param>
14782 <param name="height" type="unsigned long" dir="in">
14783 <desc>
14784 Desired image height.
14785 </desc>
14786 </param>
14787 <param name="screenData" type="octet" dir="return" safearray="yes">
14788 <desc>
14789 Array with resulting screen data.
14790 </desc>
14791 </param>
14792 </method>
14793
14794 <method name="drawToScreen">
14795 <desc>
14796 Draws a 32-bpp image of the specified size from the given buffer
14797 to the given point on the VM display.
14798
14799 <result name="E_NOTIMPL">
14800 Feature not implemented.
14801 </result>
14802 <result name="VBOX_E_IPRT_ERROR">
14803 Could not draw to screen.
14804 </result>
14805
14806 </desc>
14807 <param name="screenId" type="unsigned long" dir="in">
14808 <desc>
14809 Monitor to take the screenshot from.
14810 </desc>
14811 </param>
14812 <param name="address" type="octet" mod="ptr" dir="in">
14813 <desc>
14814 Address to store the screenshot to
14815 </desc>
14816 </param>
14817 <param name="x" type="unsigned long" dir="in">
14818 <desc>
14819 Relative to the screen top left corner.
14820 </desc>
14821 </param>
14822 <param name="y" type="unsigned long" dir="in">
14823 <desc>
14824 Relative to the screen top left corner.
14825 </desc>
14826 </param>
14827 <param name="width" type="unsigned long" dir="in">
14828 <desc>
14829 Desired image width.
14830 </desc>
14831 </param>
14832 <param name="height" type="unsigned long" dir="in">
14833 <desc>
14834 Desired image height.
14835 </desc>
14836 </param>
14837 </method>
14838
14839 <method name="invalidateAndUpdate">
14840 <desc>
14841 Does a full invalidation of the VM display and instructs the VM
14842 to update it.
14843
14844 <result name="VBOX_E_IPRT_ERROR">
14845 Could not invalidate and update screen.
14846 </result>
14847
14848 </desc>
14849 </method>
14850
14851 <method name="resizeCompleted">
14852 <desc>
14853 Signals that a framebuffer has completed the resize operation.
14854
14855 <result name="VBOX_E_NOT_SUPPORTED">
14856 Operation only valid for external frame buffers.
14857 </result>
14858
14859 </desc>
14860 <param name="screenId" type="unsigned long" dir="in"/>
14861 </method>
14862
14863 <method name="completeVHWACommand">
14864 <desc>
14865 Signals that the Video HW Acceleration command has completed.
14866 </desc>
14867
14868 <param name="command" type="octet" mod="ptr" dir="in">
14869 <desc>Pointer to VBOXVHWACMD containing the completed command.</desc>
14870 </param>
14871 </method>
14872
14873 <method name="viewportChanged">
14874 <desc>
14875 Signals that framebuffer window viewport has changed.
14876
14877 <result name="E_INVALIDARG">
14878 The specified viewport data is invalid.
14879 </result>
14880
14881 </desc>
14882
14883 <param name="screenId" type="unsigned long" dir="in">
14884 <desc>
14885 Monitor to take the screenshot from.
14886 </desc>
14887 </param>
14888 <param name="x" type="unsigned long" dir="in">
14889 <desc>
14890 Framebuffer x offset.
14891 </desc>
14892 </param>
14893 <param name="y" type="unsigned long" dir="in">
14894 <desc>
14895 Framebuffer y offset.
14896 </desc>
14897 </param>
14898 <param name="width" type="unsigned long" dir="in">
14899 <desc>
14900 Viewport width.
14901 </desc>
14902 </param>
14903 <param name="height" type="unsigned long" dir="in">
14904 <desc>
14905 Viewport height.
14906 </desc>
14907 </param>
14908 </method>
14909 </interface>
14910
14911 <!--
14912 // INetworkAdapter
14913 /////////////////////////////////////////////////////////////////////////
14914 -->
14915
14916 <enum
14917 name="NetworkAttachmentType"
14918 uuid="2ac4bc71-6b82-417a-acd1-f7426d2570d6"
14919 >
14920 <desc>
14921 Network attachment type.
14922 </desc>
14923
14924 <const name="Null" value="0">
14925 <desc>Null value, also means "not attached".</desc>
14926 </const>
14927 <const name="NAT" value="1"/>
14928 <const name="Bridged" value="2"/>
14929 <const name="Internal" value="3"/>
14930 <const name="HostOnly" value="4"/>
14931 <const name="Generic" value="5"/>
14932 </enum>
14933
14934 <enum
14935 name="NetworkAdapterType"
14936 uuid="3c2281e4-d952-4e87-8c7d-24379cb6a81c"
14937 >
14938 <desc>
14939 Network adapter type.
14940 </desc>
14941
14942 <const name="Null" value="0">
14943 <desc>Null value (never used by the API).</desc>
14944 </const>
14945 <const name="Am79C970A" value="1">
14946 <desc>AMD PCNet-PCI II network card (Am79C970A).</desc>
14947 </const>
14948 <const name="Am79C973" value="2">
14949 <desc>AMD PCNet-FAST III network card (Am79C973).</desc>
14950 </const>
14951 <const name="I82540EM" value="3">
14952 <desc>Intel PRO/1000 MT Desktop network card (82540EM).</desc>
14953 </const>
14954 <const name="I82543GC" value="4">
14955 <desc>Intel PRO/1000 T Server network card (82543GC).</desc>
14956 </const>
14957 <const name="I82545EM" value="5">
14958 <desc>Intel PRO/1000 MT Server network card (82545EM).</desc>
14959 </const>
14960 <const name="Virtio" value="6">
14961 <desc>Virtio network device.</desc>
14962 </const>
14963 </enum>
14964
14965 <enum
14966 name="NetworkAdapterPromiscModePolicy"
14967 uuid="c963768a-376f-4c85-8d84-d8ced4b7269e"
14968 >
14969 <desc>
14970 The promiscuous mode policy of an interface.
14971 </desc>
14972
14973 <const name="Deny" value="1">
14974 <desc>Deny promiscuous mode requests.</desc>
14975 </const>
14976 <const name="AllowNetwork" value="2">
14977 <desc>
14978 Allow promicuous mode, but restrict the scope it to the internal
14979 network so that it only applies to other VMs.
14980 </desc>
14981 </const>
14982 <const name="AllowAll" value="3">
14983 <desc>
14984 Allow promicuous mode, include unrelated traffic going over the wire
14985 and internally on the host.
14986 </desc>
14987 </const>
14988 </enum>
14989
14990 <interface
14991 name="INetworkAdapter" extends="$unknown"
14992 uuid="efa0f965-63c7-4c60-afdf-b1cc9943b9c0"
14993 wsmap="managed"
14994 >
14995 <desc>
14996 Represents a virtual network adapter that is attached to a virtual machine.
14997 Each virtual machine has a fixed number of network adapter slots with one
14998 instance of this attached to each of them. Call
14999 <link to="IMachine::getNetworkAdapter" /> to get the network adapter that
15000 is attached to a given slot in a given machine.
15001
15002 Each network adapter can be in one of five attachment modes, which are
15003 represented by the <link to="NetworkAttachmentType" /> enumeration;
15004 see the <link to="#attachmentType" /> attribute.
15005 </desc>
15006
15007 <attribute name="adapterType" type="NetworkAdapterType">
15008 <desc>
15009 Type of the virtual network adapter. Depending on this value,
15010 VirtualBox will provide a different virtual network hardware
15011 to the guest.
15012 </desc>
15013 </attribute>
15014
15015 <attribute name="slot" type="unsigned long" readonly="yes">
15016 <desc>
15017 Slot number this adapter is plugged into. Corresponds to
15018 the value you pass to <link to="IMachine::getNetworkAdapter"/>
15019 to obtain this instance.
15020 </desc>
15021 </attribute>
15022
15023 <attribute name="enabled" type="boolean">
15024 <desc>
15025 Flag whether the network adapter is present in the
15026 guest system. If disabled, the virtual guest hardware will
15027 not contain this network adapter. Can only be changed when
15028 the VM is not running.
15029 </desc>
15030 </attribute>
15031
15032 <attribute name="MACAddress" type="wstring">
15033 <desc>
15034 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
15035 it to @c null or an empty string, VirtualBox will generate a unique MAC address.
15036 </desc>
15037 </attribute>
15038
15039 <attribute name="attachmentType" type="NetworkAttachmentType">
15040 <desc>
15041 Sets/Gets network attachment type of this network adapter.
15042 </desc>
15043 </attribute>
15044
15045 <attribute name="bridgedInterface" type="wstring">
15046 <desc>
15047 Name of the network interface the VM should be bridged to.
15048 </desc>
15049 </attribute>
15050
15051 <attribute name="hostOnlyInterface" type="wstring">
15052 <desc>
15053 Name of the host only network interface the VM is attached to.
15054 </desc>
15055 </attribute>
15056
15057 <attribute name="internalNetwork" type="wstring">
15058 <desc>
15059 Name of the internal network the VM is attached to.
15060 </desc>
15061 </attribute>
15062
15063 <attribute name="NATNetwork" type="wstring">
15064 <desc>
15065 Name of the NAT network the VM is attached to.
15066 </desc>
15067 </attribute>
15068
15069 <attribute name="genericDriver" type="wstring">
15070 <desc>
15071 Name of the driver to use for the "Generic" network attachment type.
15072 </desc>
15073 </attribute>
15074
15075 <attribute name="cableConnected" type="boolean">
15076 <desc>
15077 Flag whether the adapter reports the cable as connected or not.
15078 It can be used to report offline situations to a VM.
15079 </desc>
15080 </attribute>
15081
15082 <attribute name="lineSpeed" type="unsigned long">
15083 <desc>
15084 Line speed reported by custom drivers, in units of 1 kbps.
15085 </desc>
15086 </attribute>
15087
15088 <attribute name="promiscModePolicy" type="NetworkAdapterPromiscModePolicy">
15089 <desc>
15090 The promiscuous mode policy of the network adapter when attached to an
15091 internal network, host only network or a bridge.
15092 </desc>
15093 </attribute>
15094
15095 <attribute name="traceEnabled" type="boolean">
15096 <desc>
15097 Flag whether network traffic from/to the network card should be traced.
15098 Can only be toggled when the VM is turned off.
15099 </desc>
15100 </attribute>
15101
15102 <attribute name="traceFile" type="wstring">
15103 <desc>
15104 Filename where a network trace will be stored. If not set, VBox-pid.pcap
15105 will be used.
15106 </desc>
15107 </attribute>
15108
15109 <attribute name="NATEngine" type="INATEngine" readonly="yes">
15110 <desc>
15111 Points to the NAT engine which handles the network address translation
15112 for this interface. This is active only when the interface actually uses
15113 NAT.
15114 </desc>
15115 </attribute>
15116
15117 <attribute name="bootPriority" type="unsigned long">
15118 <desc>
15119 Network boot priority of the adapter. Priority 1 is highest. If not set,
15120 the priority is considered to be at the lowest possible setting.
15121 </desc>
15122 </attribute>
15123
15124 <attribute name="bandwidthGroup" type="IBandwidthGroup">
15125 <desc>The bandwidth group this network adapter is assigned to.</desc>
15126 </attribute>
15127
15128 <!-- property methods -->
15129
15130 <method name="getProperty" const="yes">
15131 <desc>
15132 Returns the value of the network attachment property with the given name.
15133
15134 If the requested data @a key does not exist, this function will
15135 succeed and return an empty string in the @a value argument.
15136
15137 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
15138 </desc>
15139 <param name="key" type="wstring" dir="in">
15140 <desc>Name of the property to get.</desc>
15141 </param>
15142 <param name="value" type="wstring" dir="return">
15143 <desc>Current property value.</desc>
15144 </param>
15145 </method>
15146
15147 <method name="setProperty">
15148 <desc>
15149 Sets the value of the network attachment property with the given name.
15150
15151 Setting the property value to @c null or an empty string is equivalent
15152 to deleting the existing value.
15153
15154 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
15155 </desc>
15156 <param name="key" type="wstring" dir="in">
15157 <desc>Name of the property to set.</desc>
15158 </param>
15159 <param name="value" type="wstring" dir="in">
15160 <desc>Property value to set.</desc>
15161 </param>
15162 </method>
15163
15164 <method name="getProperties" const="yes">
15165 <desc>
15166 Returns values for a group of properties in one call.
15167
15168 The names of the properties to get are specified using the @a names
15169 argument which is a list of comma-separated property names or
15170 an empty string if all properties are to be returned.
15171 <note>Currently the value of this argument is ignored and the method
15172 always returns all existing properties.</note>
15173
15174 The method returns two arrays, the array of property names corresponding
15175 to the @a names argument and the current values of these properties.
15176 Both arrays have the same number of elements with each element at the
15177 given index in the first array corresponds to an element at the same
15178 index in the second array.
15179 </desc>
15180 <param name="names" type="wstring" dir="in">
15181 <desc>
15182 Names of properties to get.
15183 </desc>
15184 </param>
15185 <param name="returnNames" type="wstring" safearray="yes" dir="out">
15186 <desc>Names of returned properties.</desc>
15187 </param>
15188 <param name="returnValues" type="wstring" safearray="yes" dir="return">
15189 <desc>Values of returned properties.</desc>
15190 </param>
15191 </method>
15192
15193 </interface>
15194
15195
15196 <!--
15197 // ISerialPort
15198 /////////////////////////////////////////////////////////////////////////
15199 -->
15200
15201 <enum
15202 name="PortMode"
15203 uuid="533b5fe3-0185-4197-86a7-17e37dd39d76"
15204 >
15205 <desc>
15206 The PortMode enumeration represents possible communication modes for
15207 the virtual serial port device.
15208 </desc>
15209
15210 <const name="Disconnected" value="0">
15211 <desc>Virtual device is not attached to any real host device.</desc>
15212 </const>
15213 <const name="HostPipe" value="1">
15214 <desc>Virtual device is attached to a host pipe.</desc>
15215 </const>
15216 <const name="HostDevice" value="2">
15217 <desc>Virtual device is attached to a host device.</desc>
15218 </const>
15219 <const name="RawFile" value="3">
15220 <desc>Virtual device is attached to a raw file.</desc>
15221 </const>
15222 </enum>
15223
15224 <interface
15225 name="ISerialPort" extends="$unknown"
15226 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
15227 wsmap="managed"
15228 >
15229
15230 <desc>
15231 The ISerialPort interface represents the virtual serial port device.
15232
15233 The virtual serial port device acts like an ordinary serial port
15234 inside the virtual machine. This device communicates to the real
15235 serial port hardware in one of two modes: host pipe or host device.
15236
15237 In host pipe mode, the #path attribute specifies the path to the pipe on
15238 the host computer that represents a serial port. The #server attribute
15239 determines if this pipe is created by the virtual machine process at
15240 machine startup or it must already exist before starting machine
15241 execution.
15242
15243 In host device mode, the #path attribute specifies the name of the
15244 serial port device on the host computer.
15245
15246 There is also a third communication mode: the disconnected mode. In this
15247 mode, the guest OS running inside the virtual machine will be able to
15248 detect the serial port, but all port write operations will be discarded
15249 and all port read operations will return no data.
15250
15251 <see><link to="IMachine::getSerialPort"/></see>
15252 </desc>
15253
15254 <attribute name="slot" type="unsigned long" readonly="yes">
15255 <desc>
15256 Slot number this serial port is plugged into. Corresponds to
15257 the value you pass to <link to="IMachine::getSerialPort"/>
15258 to obtain this instance.
15259 </desc>
15260 </attribute>
15261
15262 <attribute name="enabled" type="boolean">
15263 <desc>
15264 Flag whether the serial port is enabled. If disabled,
15265 the serial port will not be reported to the guest OS.
15266 </desc>
15267 </attribute>
15268
15269 <attribute name="IOBase" type="unsigned long">
15270 <desc>Base I/O address of the serial port.</desc>
15271 </attribute>
15272
15273 <attribute name="IRQ" type="unsigned long">
15274 <desc>IRQ number of the serial port.</desc>
15275 </attribute>
15276
15277 <attribute name="hostMode" type="PortMode">
15278 <desc>
15279 How is this port connected to the host.
15280 <note>
15281 Changing this attribute may fail if the conditions for
15282 <link to="#path"/> are not met.
15283 </note>
15284 </desc>
15285 </attribute>
15286
15287 <attribute name="server" type="boolean">
15288 <desc>
15289 Flag whether this serial port acts as a server (creates a new pipe on
15290 the host) or as a client (uses the existing pipe). This attribute is
15291 used only when <link to="#hostMode"/> is PortMode_HostPipe.
15292 </desc>
15293 </attribute>
15294
15295 <attribute name="path" type="wstring">
15296 <desc>
15297 Path to the serial port's pipe on the host when <link to="ISerialPort::hostMode"/> is
15298 PortMode_HostPipe, or the host serial device name when
15299 <link to="ISerialPort::hostMode"/> is PortMode_HostDevice. For both
15300 cases, setting a @c null or empty string as the attribute's value
15301 is an error. Otherwise, the value of this property is ignored.
15302 </desc>
15303 </attribute>
15304
15305 </interface>
15306
15307 <!--
15308 // IParallelPort
15309 /////////////////////////////////////////////////////////////////////////
15310 -->
15311
15312 <interface
15313 name="IParallelPort" extends="$unknown"
15314 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
15315 wsmap="managed"
15316 >
15317
15318 <desc>
15319 The IParallelPort interface represents the virtual parallel port device.
15320
15321 The virtual parallel port device acts like an ordinary parallel port
15322 inside the virtual machine. This device communicates to the real
15323 parallel port hardware using the name of the parallel device on the host
15324 computer specified in the #path attribute.
15325
15326 Each virtual parallel port device is assigned a base I/O address and an
15327 IRQ number that will be reported to the guest operating system and used
15328 to operate the given parallel port from within the virtual machine.
15329
15330 <see><link to="IMachine::getParallelPort"/></see>
15331 </desc>
15332
15333 <attribute name="slot" type="unsigned long" readonly="yes">
15334 <desc>
15335 Slot number this parallel port is plugged into. Corresponds to
15336 the value you pass to <link to="IMachine::getParallelPort"/>
15337 to obtain this instance.
15338 </desc>
15339 </attribute>
15340
15341 <attribute name="enabled" type="boolean">
15342 <desc>
15343 Flag whether the parallel port is enabled. If disabled,
15344 the parallel port will not be reported to the guest OS.
15345 </desc>
15346 </attribute>
15347
15348 <attribute name="IOBase" type="unsigned long">
15349 <desc>Base I/O address of the parallel port.</desc>
15350 </attribute>
15351
15352 <attribute name="IRQ" type="unsigned long">
15353 <desc>IRQ number of the parallel port.</desc>
15354 </attribute>
15355
15356 <attribute name="path" type="wstring">
15357 <desc>
15358 Host parallel device name. If this parallel port is enabled, setting a
15359 @c null or an empty string as this attribute's value will result in
15360 an error.
15361 </desc>
15362 </attribute>
15363
15364 </interface>
15365
15366
15367 <!--
15368 // IMachineDebugger
15369 /////////////////////////////////////////////////////////////////////////
15370 -->
15371
15372 <interface
15373 name="IMachineDebugger" extends="$unknown"
15374 uuid="a9abbb7c-d678-43b2-bed2-19ec0e32303d"
15375 wsmap="suppress"
15376 >
15377 <method name="dumpGuestCore">
15378 <desc>
15379 Takes a core dump of the guest.
15380
15381 See include/VBox/dbgfcorefmt.h for details on the file format.
15382 </desc>
15383 <param name="filename" type="wstring" dir="in">
15384 <desc>
15385 The name of the output file. The file must not exist.
15386 </desc>
15387 </param>
15388 <param name="compression" type="wstring" dir="in">
15389 <desc>
15390 Reserved for future compression method indicator.
15391 </desc>
15392 </param>
15393 </method>
15394
15395 <method name="dumpHostProcessCore">
15396 <desc>
15397 Takes a core dump of the VM process on the host.
15398
15399 This feature is not implemented in the 4.0.0 release but it may show up
15400 in a dot release.
15401 </desc>
15402 <param name="filename" type="wstring" dir="in">
15403 <desc>
15404 The name of the output file. The file must not exist.
15405 </desc>
15406 </param>
15407 <param name="compression" type="wstring" dir="in">
15408 <desc>
15409 Reserved for future compression method indicator.
15410 </desc>
15411 </param>
15412 </method>
15413
15414 <method name="info">
15415 <desc>
15416 Interfaces with the info dumpers (DBGFInfo).
15417
15418 This feature is not implemented in the 4.0.0 release but it may show up
15419 in a dot release.
15420 </desc>
15421 <param name="name" type="wstring" dir="in">
15422 <desc>
15423 The name of the info item.
15424 </desc>
15425 </param>
15426 <param name="args" type="wstring" dir="in">
15427 <desc>
15428 Arguments to the info dumper.
15429 </desc>
15430 </param>
15431 <param name="info" type="wstring" dir="return">
15432 <desc>
15433 The into string.
15434 </desc>
15435 </param>
15436 </method>
15437
15438 <method name="injectNMI">
15439 <desc>
15440 Inject an NMI into a running VT-x/AMD-V VM.
15441 </desc>
15442 </method>
15443
15444 <method name="modifyLogGroups">
15445 <desc>
15446 Modifies the group settings of the debug or release logger.
15447 </desc>
15448 <param name="settings" type="wstring" dir="in">
15449 <desc>
15450 The group settings string. See iprt/log.h for details. To target the
15451 release logger, prefix the string with "release:".
15452 </desc>
15453 </param>
15454 </method>
15455
15456 <method name="modifyLogFlags">
15457 <desc>
15458 Modifies the debug or release logger flags.
15459 </desc>
15460 <param name="settings" type="wstring" dir="in">
15461 <desc>
15462 The flags settings string. See iprt/log.h for details. To target the
15463 release logger, prefix the string with "release:".
15464 </desc>
15465 </param>
15466 </method>
15467
15468 <method name="modifyLogDestinations">
15469 <desc>
15470 Modifies the debug or release logger destinations.
15471 </desc>
15472 <param name="settings" type="wstring" dir="in">
15473 <desc>
15474 The destination settings string. See iprt/log.h for details. To target the
15475 release logger, prefix the string with "release:".
15476 </desc>
15477 </param>
15478 </method>
15479
15480 <method name="readPhysicalMemory">
15481 <desc>
15482 Reads guest physical memory, no side effects (MMIO++).
15483
15484 This feature is not implemented in the 4.0.0 release but may show up
15485 in a dot release.
15486 </desc>
15487 <param name="address" type="long long" dir="in">
15488 <desc>The guest physical address.</desc>
15489 </param>
15490 <param name="size" type="unsigned long" dir="in">
15491 <desc>The number of bytes to read.</desc>
15492 </param>
15493 <param name="bytes" type="octet" safearray="yes" dir="return">
15494 <desc>The bytes read.</desc>
15495 </param>
15496 </method>
15497
15498 <method name="writePhysicalMemory">
15499 <desc>
15500 Writes guest physical memory, access handles (MMIO++) are ignored.
15501
15502 This feature is not implemented in the 4.0.0 release but may show up
15503 in a dot release.
15504 </desc>
15505 <param name="address" type="long long" dir="in">
15506 <desc>The guest physical address.</desc>
15507 </param>
15508 <param name="size" type="unsigned long" dir="in">
15509 <desc>The number of bytes to read.</desc>
15510 </param>
15511 <param name="bytes" type="octet" safearray="yes" dir="in">
15512 <desc>The bytes to write.</desc>
15513 </param>
15514 </method>
15515
15516 <method name="readVirtualMemory">
15517 <desc>
15518 Reads guest virtual memory, no side effects (MMIO++).
15519
15520 This feature is not implemented in the 4.0.0 release but may show up
15521 in a dot release.
15522 </desc>
15523 <param name="cpuId" type="unsigned long" dir="in">
15524 <desc>The identifier of the Virtual CPU.</desc>
15525 </param>
15526 <param name="address" type="long long" dir="in">
15527 <desc>The guest virtual address.</desc>
15528 </param>
15529 <param name="size" type="unsigned long" dir="in">
15530 <desc>The number of bytes to read.</desc>
15531 </param>
15532 <param name="bytes" type="octet" safearray="yes" dir="return">
15533 <desc>The bytes read.</desc>
15534 </param>
15535 </method>
15536
15537 <method name="writeVirtualMemory">
15538 <desc>
15539 Writes guest virtual memory, access handles (MMIO++) are ignored.
15540
15541 This feature is not implemented in the 4.0.0 release but may show up
15542 in a dot release.
15543 </desc>
15544 <param name="cpuId" type="unsigned long" dir="in">
15545 <desc>The identifier of the Virtual CPU.</desc>
15546 </param>
15547 <param name="address" type="long long" dir="in">
15548 <desc>The guest virtual address.</desc>
15549 </param>
15550 <param name="size" type="unsigned long" dir="in">
15551 <desc>The number of bytes to read.</desc>
15552 </param>
15553 <param name="bytes" type="octet" safearray="yes" dir="in">
15554 <desc>The bytes to write.</desc>
15555 </param>
15556 </method>
15557
15558 <method name="detectOS">
15559 <desc>
15560 Tries to (re-)detect the guest OS kernel.
15561
15562 This feature is not implemented in the 4.0.0 release but may show up
15563 in a dot release.
15564 </desc>
15565 <param name="os" type="wstring" dir="return">
15566 <desc>
15567 The detected OS kernel on success.
15568 </desc>
15569 </param>
15570 </method>
15571
15572 <method name="getRegister">
15573 <desc>
15574 Gets one register.
15575
15576 This feature is not implemented in the 4.0.0 release but may show up
15577 in a dot release.
15578 </desc>
15579 <param name="cpuId" type="unsigned long" dir="in">
15580 <desc>The identifier of the Virtual CPU.</desc>
15581 </param>
15582 <param name="name" type="wstring" dir="in">
15583 <desc>The register name, case is ignored.</desc>
15584 </param>
15585 <param name="value" type="wstring" dir="return">
15586 <desc>
15587 The register value. This is usually a hex value (always 0x prefixed)
15588 but other format may be used for floating point registers (TBD).
15589 </desc>
15590 </param>
15591 </method>
15592
15593 <method name="getRegisters">
15594 <desc>
15595 Gets all the registers for the given CPU.
15596
15597 This feature is not implemented in the 4.0.0 release but may show up
15598 in a dot release.
15599 </desc>
15600 <param name="cpuId" type="unsigned long" dir="in">
15601 <desc>The identifier of the Virtual CPU.</desc>
15602 </param>
15603 <param name="names" type="wstring" dir="out" safearray="yes">
15604 <desc>Array containing the lowercase register names.</desc>
15605 </param>
15606 <param name="values" type="wstring" dir="out" safearray="yes">
15607 <desc>
15608 Array paralell to the names holding the register values as if the
15609 register was returned by <link to="IMachineDebugger::getRegister"/>.
15610 </desc>
15611 </param>
15612 </method>
15613
15614 <method name="setRegister">
15615 <desc>
15616 Gets one register.
15617
15618 This feature is not implemented in the 4.0.0 release but may show up
15619 in a dot release.
15620 </desc>
15621 <param name="cpuId" type="unsigned long" dir="in">
15622 <desc>The identifier of the Virtual CPU.</desc>
15623 </param>
15624 <param name="name" type="wstring" dir="in">
15625 <desc>The register name, case is ignored.</desc>
15626 </param>
15627 <param name="value" type="wstring" dir="in">
15628 <desc>
15629 The new register value. Hexadecimal, decimal and octal formattings
15630 are supported in addition to any special formattings returned by
15631 the getters.
15632 </desc>
15633 </param>
15634 </method>
15635
15636 <method name="setRegisters">
15637 <desc>
15638 Sets zero or more registers atomically.
15639
15640 This feature is not implemented in the 4.0.0 release but may show up
15641 in a dot release.
15642 </desc>
15643 <param name="cpuId" type="unsigned long" dir="in">
15644 <desc>The identifier of the Virtual CPU.</desc>
15645 </param>
15646 <param name="names" type="wstring" dir="in" safearray="yes">
15647 <desc>Array containing the register names, case ignored.</desc>
15648 </param>
15649 <param name="values" type="wstring" dir="in" safearray="yes">
15650 <desc>
15651 Array paralell to the names holding the register values. See
15652 <link to="IMachineDebugger::setRegister"/> for formatting
15653 guidelines.
15654 </desc>
15655 </param>
15656 </method>
15657
15658 <method name="dumpGuestStack">
15659 <desc>
15660 Produce a simple stack dump using the current guest state.
15661
15662 This feature is not implemented in the 4.0.0 release but may show up
15663 in a dot release.
15664 </desc>
15665 <param name="cpuId" type="unsigned long" dir="in">
15666 <desc>The identifier of the Virtual CPU.</desc>
15667 </param>
15668 <param name="stack" type="wstring" dir="return">
15669 <desc>String containing the formatted stack dump.</desc>
15670 </param>
15671 </method>
15672
15673 <method name="resetStats">
15674 <desc>
15675 Reset VM statistics.
15676 </desc>
15677 <param name="pattern" type="wstring" dir="in">
15678 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15679 </param>
15680 </method>
15681
15682 <method name="dumpStats">
15683 <desc>
15684 Dumps VM statistics.
15685 </desc>
15686 <param name="pattern" type="wstring" dir="in">
15687 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15688 </param>
15689 </method>
15690
15691 <method name="getStats">
15692 <desc>
15693 Get the VM statistics in a XMLish format.
15694 </desc>
15695 <param name="pattern" type="wstring" dir="in">
15696 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15697 </param>
15698 <param name="withDescriptions" type="boolean" dir="in">
15699 <desc>Whether to include the descriptions.</desc>
15700 </param>
15701 <param name="stats" type="wstring" dir="out">
15702 <desc>The XML document containing the statistics.</desc>
15703 </param>
15704 </method>
15705
15706 <attribute name="singleStep" type="boolean">
15707 <desc>Switch for enabling single-stepping.</desc>
15708 </attribute>
15709
15710 <attribute name="recompileUser" type="boolean">
15711 <desc>Switch for forcing code recompilation for user mode code.</desc>
15712 </attribute>
15713
15714 <attribute name="recompileSupervisor" type="boolean">
15715 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
15716 </attribute>
15717
15718 <attribute name="PATMEnabled" type="boolean">
15719 <desc>Switch for enabling and disabling the PATM component.</desc>
15720 </attribute>
15721
15722 <attribute name="CSAMEnabled" type="boolean">
15723 <desc>Switch for enabling and disabling the CSAM component.</desc>
15724 </attribute>
15725
15726 <attribute name="logEnabled" type="boolean">
15727 <desc>Switch for enabling and disabling the debug logger.</desc>
15728 </attribute>
15729
15730 <attribute name="logDbgFlags" type="wstring" readonly="yes">
15731 <desc>The debug logger flags.</desc>
15732 </attribute>
15733
15734 <attribute name="logDbgGroups" type="wstring" readonly="yes">
15735 <desc>The debug logger's group settings.</desc>
15736 </attribute>
15737
15738 <attribute name="logDbgDestinations" type="wstring" readonly="yes">
15739 <desc>The debug logger's destination settings.</desc>
15740 </attribute>
15741
15742 <attribute name="logRelFlags" type="wstring" readonly="yes">
15743 <desc>The release logger flags.</desc>
15744 </attribute>
15745
15746 <attribute name="logRelGroups" type="wstring" readonly="yes">
15747 <desc>The release logger's group settings.</desc>
15748 </attribute>
15749
15750 <attribute name="logRelDestinations" type="wstring" readonly="yes">
15751 <desc>The relase logger's destination settings.</desc>
15752 </attribute>
15753
15754 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
15755 <desc>
15756 Flag indicating whether the VM is currently making use of CPU hardware
15757 virtualization extensions.
15758 </desc>
15759 </attribute>
15760
15761 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
15762 <desc>
15763 Flag indicating whether the VM is currently making use of the nested paging
15764 CPU hardware virtualization extension.
15765 </desc>
15766 </attribute>
15767
15768 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
15769 <desc>
15770 Flag indicating whether the VM is currently making use of the VPID
15771 VT-x extension.
15772 </desc>
15773 </attribute>
15774
15775 <attribute name="OSName" type="wstring" readonly="yes">
15776 <desc>
15777 Query the guest OS kernel name as detected by the DBGF.
15778
15779 This feature is not implemented in the 4.0.0 release but may show up
15780 in a dot release.
15781 </desc>
15782 </attribute>
15783
15784 <attribute name="OSVersion" type="wstring" readonly="yes">
15785 <desc>
15786 Query the guest OS kernel version string as detected by the DBGF.
15787
15788 This feature is not implemented in the 4.0.0 release but may show up
15789 in a dot release.
15790 </desc>
15791 </attribute>
15792
15793 <attribute name="PAEEnabled" type="boolean" readonly="yes">
15794 <desc>
15795 Flag indicating whether the VM is currently making use of the Physical
15796 Address Extension CPU feature.
15797 </desc>
15798 </attribute>
15799
15800 <attribute name="virtualTimeRate" type="unsigned long">
15801 <desc>
15802 The rate at which the virtual time runs expressed as a percentage.
15803 The accepted range is 2% to 20000%.
15804 </desc>
15805 </attribute>
15806
15807 <attribute name="VM" type="long long" readonly="yes">
15808 <desc>
15809 Gets the VM handle. This is only for internal use while
15810 we carve the details of this interface.
15811 </desc>
15812 </attribute>
15813
15814 </interface>
15815
15816 <!--
15817 // IUSBController
15818 /////////////////////////////////////////////////////////////////////////
15819 -->
15820
15821 <interface
15822 name="IUSBController" extends="$unknown"
15823 uuid="01e6f13a-0580-452f-a40f-74e32a5e4921"
15824 wsmap="managed"
15825 >
15826 <attribute name="enabled" type="boolean">
15827 <desc>
15828 Flag whether the USB controller is present in the
15829 guest system. If disabled, the virtual guest hardware will
15830 not contain any USB controller. Can only be changed when
15831 the VM is powered off.
15832 </desc>
15833 </attribute>
15834
15835 <attribute name="enabledEHCI" type="boolean">
15836 <desc>
15837 Flag whether the USB EHCI controller is present in the
15838 guest system. If disabled, the virtual guest hardware will
15839 not contain a USB EHCI controller. Can only be changed when
15840 the VM is powered off.
15841 </desc>
15842 </attribute>
15843
15844 <attribute name="proxyAvailable" type="boolean" readonly="yes">
15845 <desc>
15846 Flag whether there is an USB proxy available.
15847 </desc>
15848 </attribute>
15849
15850 <attribute name="USBStandard" type="unsigned short" readonly="yes">
15851 <desc>
15852 USB standard version which the controller implements.
15853 This is a BCD which means that the major version is in the
15854 high byte and minor version is in the low byte.
15855 </desc>
15856 </attribute>
15857
15858 <attribute name="deviceFilters" type="IUSBDeviceFilter" readonly="yes" safearray="yes">
15859 <desc>
15860 List of USB device filters associated with the machine.
15861
15862 If the machine is currently running, these filters are activated
15863 every time a new (supported) USB device is attached to the host
15864 computer that was not ignored by global filters
15865 (<link to="IHost::USBDeviceFilters"/>).
15866
15867 These filters are also activated when the machine is powered up.
15868 They are run against a list of all currently available USB
15869 devices (in states
15870 <link to="USBDeviceState_Available"/>,
15871 <link to="USBDeviceState_Busy"/>,
15872 <link to="USBDeviceState_Held"/>) that were not previously
15873 ignored by global filters.
15874
15875 If at least one filter matches the USB device in question, this
15876 device is automatically captured (attached to) the virtual USB
15877 controller of this machine.
15878
15879 <see><link to="IUSBDeviceFilter"/>, <link to="IUSBController"/></see>
15880 </desc>
15881 </attribute>
15882
15883 <method name="createDeviceFilter">
15884 <desc>
15885 Creates a new USB device filter. All attributes except
15886 the filter name are set to empty (any match),
15887 <i>active</i> is @c false (the filter is not active).
15888
15889 The created filter can then be added to the list of filters using
15890 <link to="#insertDeviceFilter"/>.
15891
15892 <result name="VBOX_E_INVALID_VM_STATE">
15893 The virtual machine is not mutable.
15894 </result>
15895
15896 <see><link to="#deviceFilters"/></see>
15897 </desc>
15898 <param name="name" type="wstring" dir="in">
15899 <desc>
15900 Filter name. See <link to="IUSBDeviceFilter::name"/>
15901 for more info.
15902 </desc>
15903 </param>
15904 <param name="filter" type="IUSBDeviceFilter" dir="return">
15905 <desc>Created filter object.</desc>
15906 </param>
15907 </method>
15908
15909 <method name="insertDeviceFilter">
15910 <desc>
15911 Inserts the given USB device to the specified position
15912 in the list of filters.
15913
15914 Positions are numbered starting from <tt>0</tt>. If the specified
15915 position is equal to or greater than the number of elements in
15916 the list, the filter is added to the end of the collection.
15917
15918 <note>
15919 Duplicates are not allowed, so an attempt to insert a
15920 filter that is already in the collection, will return an
15921 error.
15922 </note>
15923
15924 <result name="VBOX_E_INVALID_VM_STATE">
15925 Virtual machine is not mutable.
15926 </result>
15927 <result name="E_INVALIDARG">
15928 USB device filter not created within this VirtualBox instance.
15929 </result>
15930 <result name="VBOX_E_INVALID_OBJECT_STATE">
15931 USB device filter already in list.
15932 </result>
15933
15934 <see><link to="#deviceFilters"/></see>
15935 </desc>
15936 <param name="position" type="unsigned long" dir="in">
15937 <desc>Position to insert the filter to.</desc>
15938 </param>
15939 <param name="filter" type="IUSBDeviceFilter" dir="in">
15940 <desc>USB device filter to insert.</desc>
15941 </param>
15942 </method>
15943
15944 <method name="removeDeviceFilter">
15945 <desc>
15946 Removes a USB device filter from the specified position in the
15947 list of filters.
15948
15949 Positions are numbered starting from <tt>0</tt>. Specifying a
15950 position equal to or greater than the number of elements in
15951 the list will produce an error.
15952
15953 <see><link to="#deviceFilters"/></see>
15954
15955 <result name="VBOX_E_INVALID_VM_STATE">
15956 Virtual machine is not mutable.
15957 </result>
15958 <result name="E_INVALIDARG">
15959 USB device filter list empty or invalid @a position.
15960 </result>
15961
15962 </desc>
15963 <param name="position" type="unsigned long" dir="in">
15964 <desc>Position to remove the filter from.</desc>
15965 </param>
15966 <param name="filter" type="IUSBDeviceFilter" dir="return">
15967 <desc>Removed USB device filter.</desc>
15968 </param>
15969 </method>
15970
15971 </interface>
15972
15973
15974 <!--
15975 // IUSBDevice
15976 /////////////////////////////////////////////////////////////////////////
15977 -->
15978
15979 <interface
15980 name="IUSBDevice" extends="$unknown"
15981 uuid="f8967b0b-4483-400f-92b5-8b675d98a85b"
15982 wsmap="managed"
15983 >
15984 <desc>
15985 The IUSBDevice interface represents a virtual USB device attached to the
15986 virtual machine.
15987
15988 A collection of objects implementing this interface is stored in the
15989 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
15990 attached to a running virtual machine's USB controller.
15991 </desc>
15992
15993 <attribute name="id" type="uuid" mod="string" readonly="yes">
15994 <desc>
15995 Unique USB device ID. This ID is built from #vendorId,
15996 #productId, #revision and #serialNumber.
15997 </desc>
15998 </attribute>
15999
16000 <attribute name="vendorId" type="unsigned short" readonly="yes">
16001 <desc>Vendor ID.</desc>
16002 </attribute>
16003
16004 <attribute name="productId" type="unsigned short" readonly="yes">
16005 <desc>Product ID.</desc>
16006 </attribute>
16007
16008 <attribute name="revision" type="unsigned short" readonly="yes">
16009 <desc>
16010 Product revision number. This is a packed BCD represented as
16011 unsigned short. The high byte is the integer part and the low
16012 byte is the decimal.
16013 </desc>
16014 </attribute>
16015
16016 <attribute name="manufacturer" type="wstring" readonly="yes">
16017 <desc>Manufacturer string.</desc>
16018 </attribute>
16019
16020 <attribute name="product" type="wstring" readonly="yes">
16021 <desc>Product string.</desc>
16022 </attribute>
16023
16024 <attribute name="serialNumber" type="wstring" readonly="yes">
16025 <desc>Serial number string.</desc>
16026 </attribute>
16027
16028 <attribute name="address" type="wstring" readonly="yes">
16029 <desc>Host specific address of the device.</desc>
16030 </attribute>
16031
16032 <attribute name="port" type="unsigned short" readonly="yes">
16033 <desc>
16034 Host USB port number the device is physically
16035 connected to.
16036 </desc>
16037 </attribute>
16038
16039 <attribute name="version" type="unsigned short" readonly="yes">
16040 <desc>
16041 The major USB version of the device - 1 or 2.
16042 </desc>
16043 </attribute>
16044
16045 <attribute name="portVersion" type="unsigned short" readonly="yes">
16046 <desc>
16047 The major USB version of the host USB port the device is
16048 physically connected to - 1 or 2. For devices not connected to
16049 anything this will have the same value as the version attribute.
16050 </desc>
16051 </attribute>
16052
16053 <attribute name="remote" type="boolean" readonly="yes">
16054 <desc>
16055 Whether the device is physically connected to a remote VRDE
16056 client or to a local host machine.
16057 </desc>
16058 </attribute>
16059
16060 </interface>
16061
16062
16063 <!--
16064 // IUSBDeviceFilter
16065 /////////////////////////////////////////////////////////////////////////
16066 -->
16067
16068 <interface
16069 name="IUSBDeviceFilter" extends="$unknown"
16070 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
16071 wsmap="managed"
16072 >
16073 <desc>
16074 The IUSBDeviceFilter interface represents an USB device filter used
16075 to perform actions on a group of USB devices.
16076
16077 This type of filters is used by running virtual machines to
16078 automatically capture selected USB devices once they are physically
16079 attached to the host computer.
16080
16081 A USB device is matched to the given device filter if and only if all
16082 attributes of the device match the corresponding attributes of the
16083 filter (that is, attributes are joined together using the logical AND
16084 operation). On the other hand, all together, filters in the list of
16085 filters carry the semantics of the logical OR operation. So if it is
16086 desirable to create a match like "this vendor id OR this product id",
16087 one needs to create two filters and specify "any match" (see below)
16088 for unused attributes.
16089
16090 All filter attributes used for matching are strings. Each string
16091 is an expression representing a set of values of the corresponding
16092 device attribute, that will match the given filter. Currently, the
16093 following filtering expressions are supported:
16094
16095 <ul>
16096 <li><i>Interval filters</i>. Used to specify valid intervals for
16097 integer device attributes (Vendor ID, Product ID and Revision).
16098 The format of the string is:
16099
16100 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
16101
16102 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
16103 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
16104 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
16105 is omitted before a dash (<tt>-</tt>), the minimum possible integer
16106 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
16107 possible integer is assumed.
16108 </li>
16109 <li><i>Boolean filters</i>. Used to specify acceptable values for
16110 boolean device attributes. The format of the string is:
16111
16112 <tt>true|false|yes|no|0|1</tt>
16113
16114 </li>
16115 <li><i>Exact match</i>. Used to specify a single value for the given
16116 device attribute. Any string that doesn't start with <tt>int:</tt>
16117 represents the exact match. String device attributes are compared to
16118 this string including case of symbols. Integer attributes are first
16119 converted to a string (see individual filter attributes) and then
16120 compared ignoring case.
16121
16122 </li>
16123 <li><i>Any match</i>. Any value of the corresponding device attribute
16124 will match the given filter. An empty or @c null string is
16125 used to construct this type of filtering expressions.
16126
16127 </li>
16128 </ul>
16129
16130 <note>
16131 On the Windows host platform, interval filters are not currently
16132 available. Also all string filter attributes
16133 (<link to="#manufacturer"/>, <link to="#product"/>,
16134 <link to="#serialNumber"/>) are ignored, so they behave as
16135 <i>any match</i> no matter what string expression is specified.
16136 </note>
16137
16138 <see><link to="IUSBController::deviceFilters"/>,
16139 <link to="IHostUSBDeviceFilter"/></see>
16140 </desc>
16141
16142 <attribute name="name" type="wstring">
16143 <desc>
16144 Visible name for this filter.
16145 This name is used to visually distinguish one filter from another,
16146 so it can neither be @c null nor an empty string.
16147 </desc>
16148 </attribute>
16149
16150 <attribute name="active" type="boolean">
16151 <desc>Whether this filter active or has been temporarily disabled.</desc>
16152 </attribute>
16153
16154 <attribute name="vendorId" type="wstring">
16155 <desc>
16156 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
16157 The string representation for the <i>exact matching</i>
16158 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
16159 (including leading zeroes).
16160 </desc>
16161 </attribute>
16162
16163 <attribute name="productId" type="wstring">
16164 <desc>
16165 <link to="IUSBDevice::productId">Product ID</link> filter.
16166 The string representation for the <i>exact matching</i>
16167 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
16168 (including leading zeroes).
16169 </desc>
16170 </attribute>
16171
16172 <attribute name="revision" type="wstring">
16173 <desc>
16174 <link to="IUSBDevice::productId">Product revision number</link>
16175 filter. The string representation for the <i>exact matching</i>
16176 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
16177 of the integer part of the revision, and <tt>F</tt> is the
16178 decimal digit of its fractional part (including leading and
16179 trailing zeros).
16180 Note that for interval filters, it's best to use the hexadecimal
16181 form, because the revision is stored as a 16 bit packed BCD value;
16182 so the expression <tt>int:0x0100-0x0199</tt> will match any
16183 revision from <tt>1.0</tt> to <tt>1.99</tt>.
16184 </desc>
16185 </attribute>
16186
16187 <attribute name="manufacturer" type="wstring">
16188 <desc>
16189 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
16190 </desc>
16191 </attribute>
16192
16193 <attribute name="product" type="wstring">
16194 <desc>
16195 <link to="IUSBDevice::product">Product</link> filter.
16196 </desc>
16197 </attribute>
16198
16199 <attribute name="serialNumber" type="wstring">
16200 <desc>
16201 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
16202 </desc>
16203 </attribute>
16204
16205 <attribute name="port" type="wstring">
16206 <desc>
16207 <link to="IUSBDevice::port">Host USB port</link> filter.
16208 </desc>
16209 </attribute>
16210
16211 <attribute name="remote" type="wstring">
16212 <desc>
16213 <link to="IUSBDevice::remote">Remote state</link> filter.
16214 <note>
16215 This filter makes sense only for machine USB filters,
16216 i.e. it is ignored by IHostUSBDeviceFilter objects.
16217 </note>
16218 </desc>
16219 </attribute>
16220
16221 <attribute name="maskedInterfaces" type="unsigned long">
16222 <desc>
16223 This is an advanced option for hiding one or more USB interfaces
16224 from the guest. The value is a bit mask where the bits that are set
16225 means the corresponding USB interface should be hidden, masked off
16226 if you like.
16227 This feature only works on Linux hosts.
16228 </desc>
16229 </attribute>
16230
16231 </interface>
16232
16233
16234 <!--
16235 // IHostUSBDevice
16236 /////////////////////////////////////////////////////////////////////////
16237 -->
16238
16239 <enum
16240 name="USBDeviceState"
16241 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
16242 >
16243 <desc>
16244 USB device state. This enumeration represents all possible states
16245 of the USB device physically attached to the host computer regarding
16246 its state on the host computer and availability to guest computers
16247 (all currently running virtual machines).
16248
16249 Once a supported USB device is attached to the host, global USB
16250 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
16251 either ignore the device, or put it to USBDeviceState_Held state, or do
16252 nothing. Unless the device is ignored by global filters, filters of all
16253 currently running guests (<link to="IUSBController::deviceFilters"/>) are
16254 activated that can put it to USBDeviceState_Captured state.
16255
16256 If the device was ignored by global filters, or didn't match
16257 any filters at all (including guest ones), it is handled by the host
16258 in a normal way. In this case, the device state is determined by
16259 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
16260 or USBDeviceState_Available, depending on the current device usage.
16261
16262 Besides auto-capturing based on filters, the device can be manually
16263 captured by guests (<link to="IConsole::attachUSBDevice"/>) if its
16264 state is USBDeviceState_Busy, USBDeviceState_Available or
16265 USBDeviceState_Held.
16266
16267 <note>
16268 Due to differences in USB stack implementations in Linux and Win32,
16269 states USBDeviceState_Busy and USBDeviceState_Unavailable are applicable
16270 only to the Linux version of the product. This also means that (<link
16271 to="IConsole::attachUSBDevice"/>) can only succeed on Win32 if the
16272 device state is USBDeviceState_Held.
16273 </note>
16274
16275 <see><link to="IHostUSBDevice"/>, <link to="IHostUSBDeviceFilter"/></see>
16276 </desc>
16277
16278 <const name="NotSupported" value="0">
16279 <desc>
16280 Not supported by the VirtualBox server, not available to guests.
16281 </desc>
16282 </const>
16283 <const name="Unavailable" value="1">
16284 <desc>
16285 Being used by the host computer exclusively,
16286 not available to guests.
16287 </desc>
16288 </const>
16289 <const name="Busy" value="2">
16290 <desc>
16291 Being used by the host computer, potentially available to guests.
16292 </desc>
16293 </const>
16294 <const name="Available" value="3">
16295 <desc>
16296 Not used by the host computer, available to guests (the host computer
16297 can also start using the device at any time).
16298 </desc>
16299 </const>
16300 <const name="Held" value="4">
16301 <desc>
16302 Held by the VirtualBox server (ignored by the host computer),
16303 available to guests.
16304 </desc>
16305 </const>
16306 <const name="Captured" value="5">
16307 <desc>
16308 Captured by one of the guest computers, not available
16309 to anybody else.
16310 </desc>
16311 </const>
16312 </enum>
16313
16314 <interface
16315 name="IHostUSBDevice" extends="IUSBDevice"
16316 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
16317 wsmap="managed"
16318 >
16319 <desc>
16320 The IHostUSBDevice interface represents a physical USB device attached
16321 to the host computer.
16322
16323 Besides properties inherited from IUSBDevice, this interface adds the
16324 <link to="#state"/> property that holds the current state of the USB
16325 device.
16326
16327 <see><link to="IHost::USBDevices"/>,
16328 <link to="IHost::USBDeviceFilters"/></see>
16329 </desc>
16330
16331 <attribute name="state" type="USBDeviceState" readonly="yes">
16332 <desc>
16333 Current state of the device.
16334 </desc>
16335 </attribute>
16336
16337 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
16338
16339 </interface>
16340
16341
16342 <!--
16343 // IHostUSBDeviceFilter
16344 /////////////////////////////////////////////////////////////////////////
16345 -->
16346
16347 <enum
16348 name="USBDeviceFilterAction"
16349 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
16350 >
16351 <desc>
16352 Actions for host USB device filters.
16353 <see><link to="IHostUSBDeviceFilter"/>, <link to="USBDeviceState"/></see>
16354 </desc>
16355
16356 <const name="Null" value="0">
16357 <desc>Null value (never used by the API).</desc>
16358 </const>
16359 <const name="Ignore" value="1">
16360 <desc>Ignore the matched USB device.</desc>
16361 </const>
16362 <const name="Hold" value="2">
16363 <desc>Hold the matched USB device.</desc>
16364 </const>
16365 </enum>
16366
16367 <interface
16368 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
16369 uuid="4cc70246-d74a-400f-8222-3900489c0374"
16370 wsmap="managed"
16371 >
16372 <desc>
16373 The IHostUSBDeviceFilter interface represents a global filter for a
16374 physical USB device used by the host computer. Used indirectly in
16375 <link to="IHost::USBDeviceFilters"/>.
16376
16377 Using filters of this type, the host computer determines the initial
16378 state of the USB device after it is physically attached to the
16379 host's USB controller.
16380
16381 <note>
16382 The <link to="IUSBDeviceFilter::remote"/> attribute is ignored by this type of
16383 filters, because it makes sense only for
16384 <link to="IUSBController::deviceFilters">machine USB filters</link>.
16385 </note>
16386
16387 <see><link to="IHost::USBDeviceFilters"/></see>
16388 </desc>
16389
16390 <attribute name="action" type="USBDeviceFilterAction">
16391 <desc>
16392 Action performed by the host when an attached USB device
16393 matches this filter.
16394 </desc>
16395 </attribute>
16396
16397 </interface>
16398
16399 <!--
16400 // IAudioAdapter
16401 /////////////////////////////////////////////////////////////////////////
16402 -->
16403
16404 <enum
16405 name="AudioDriverType"
16406 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
16407 >
16408 <desc>
16409 Host audio driver type.
16410 </desc>
16411
16412 <const name="Null" value="0">
16413 <desc>Null value, also means "dummy audio driver".</desc>
16414 </const>
16415 <const name="WinMM" value="1">
16416 <desc>Windows multimedia (Windows hosts only).</desc>
16417 </const>
16418 <const name="OSS" value="2">
16419 <desc>Open Sound System (Linux hosts only).</desc>
16420 </const>
16421 <const name="ALSA" value="3">
16422 <desc>Advanced Linux Sound Architecture (Linux hosts only).</desc>
16423 </const>
16424 <const name="DirectSound" value="4">
16425 <desc>DirectSound (Windows hosts only).</desc>
16426 </const>
16427 <const name="CoreAudio" value="5">
16428 <desc>CoreAudio (Mac hosts only).</desc>
16429 </const>
16430 <const name="MMPM" value="6">
16431 <desc>Reserved for historical reasons.</desc>
16432 </const>
16433 <const name="Pulse" value="7">
16434 <desc>PulseAudio (Linux hosts only).</desc>
16435 </const>
16436 <const name="SolAudio" value="8">
16437 <desc>Solaris audio (Solaris hosts only).</desc>
16438 </const>
16439 </enum>
16440
16441 <enum
16442 name="AudioControllerType"
16443 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
16444 >
16445 <desc>
16446 Virtual audio controller type.
16447 </desc>
16448
16449 <const name="AC97" value="0"/>
16450 <const name="SB16" value="1"/>
16451 <const name="HDA" value="2"/>
16452 </enum>
16453
16454 <interface
16455 name="IAudioAdapter" extends="$unknown"
16456 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
16457 wsmap="managed"
16458 >
16459 <desc>
16460 The IAudioAdapter interface represents the virtual audio adapter of
16461 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
16462 </desc>
16463 <attribute name="enabled" type="boolean">
16464 <desc>
16465 Flag whether the audio adapter is present in the
16466 guest system. If disabled, the virtual guest hardware will
16467 not contain any audio adapter. Can only be changed when
16468 the VM is not running.
16469 </desc>
16470 </attribute>
16471 <attribute name="audioController" type="AudioControllerType">
16472 <desc>
16473 The audio hardware we emulate.
16474 </desc>
16475 </attribute>
16476 <attribute name="audioDriver" type="AudioDriverType">
16477 <desc>
16478 Audio driver the adapter is connected to. This setting
16479 can only be changed when the VM is not running.
16480 </desc>
16481 </attribute>
16482 </interface>
16483
16484 <enum
16485 name="AuthType"
16486 uuid="7eef6ef6-98c2-4dc2-ab35-10d2b292028d"
16487 >
16488 <desc>
16489 VirtualBox authentication type.
16490 </desc>
16491
16492 <const name="Null" value="0">
16493 <desc>Null value, also means "no authentication".</desc>
16494 </const>
16495 <const name="External" value="1"/>
16496 <const name="Guest" value="2"/>
16497 </enum>
16498
16499 <!--
16500 // IVRDEServer
16501 /////////////////////////////////////////////////////////////////////////
16502 -->
16503
16504 <interface
16505 name="IVRDEServer" extends="$unknown"
16506 uuid="d38de40a-c2c1-4e95-b5a4-167b05f5694c"
16507 wsmap="managed"
16508 >
16509 <attribute name="enabled" type="boolean">
16510 <desc>VRDE server status.</desc>
16511 </attribute>
16512
16513 <attribute name="authType" type="AuthType">
16514 <desc>VRDE authentication method.</desc>
16515 </attribute>
16516
16517 <attribute name="authTimeout" type="unsigned long">
16518 <desc>Timeout for guest authentication. Milliseconds.</desc>
16519 </attribute>
16520
16521 <attribute name="allowMultiConnection" type="boolean">
16522 <desc>
16523 Flag whether multiple simultaneous connections to the VM are permitted.
16524 Note that this will be replaced by a more powerful mechanism in the future.
16525 </desc>
16526 </attribute>
16527
16528 <attribute name="reuseSingleConnection" type="boolean">
16529 <desc>
16530 Flag whether the existing connection must be dropped and a new connection
16531 must be established by the VRDE server, when a new client connects in single
16532 connection mode.
16533 </desc>
16534 </attribute>
16535
16536 <attribute name="VRDEExtPack" type="wstring">
16537 <desc>
16538 The name of Extension Pack providing VRDE for this VM. Overrides
16539 <link to="ISystemProperties::defaultVRDEExtPack"/>.
16540 </desc>
16541 </attribute>
16542
16543 <attribute name="authLibrary" type="wstring">
16544 <desc>
16545 Library used for authentication of RDP clients by this VM. Overrides
16546 <link to="ISystemProperties::VRDEAuthLibrary"/>.
16547 </desc>
16548 </attribute>
16549
16550 <attribute name="VRDEProperties" type="wstring" readonly="yes" safearray="yes">
16551 <desc>
16552 Array of names of properties, which are supported by this VRDE server.
16553 </desc>
16554 </attribute>
16555
16556 <method name="setVRDEProperty">
16557 <desc>
16558 Sets a VRDE specific property string.
16559
16560 If you pass @c null or empty string as a key @a value, the given @a key
16561 will be deleted.
16562
16563 </desc>
16564 <param name="key" type="wstring" dir="in">
16565 <desc>Name of the key to set.</desc>
16566 </param>
16567 <param name="value" type="wstring" dir="in">
16568 <desc>Value to assign to the key.</desc>
16569 </param>
16570 </method>
16571
16572 <method name="getVRDEProperty" const="yes">
16573 <desc>
16574 Returns a VRDE specific property string.
16575
16576 If the requested data @a key does not exist, this function will
16577 succeed and return an empty string in the @a value argument.
16578
16579 </desc>
16580 <param name="key" type="wstring" dir="in">
16581 <desc>Name of the key to get.</desc>
16582 </param>
16583 <param name="value" type="wstring" dir="return">
16584 <desc>Value of the requested key.</desc>
16585 </param>
16586 </method>
16587
16588 </interface>
16589
16590
16591 <!--
16592 // ISharedFolder
16593 /////////////////////////////////////////////////////////////////////////
16594 -->
16595
16596 <interface
16597 name="ISharedFolder" extends="$unknown"
16598 uuid="8388da11-b559-4574-a5b7-2bd7acd5cef8"
16599 wsmap="struct"
16600 >
16601 <desc>
16602 The ISharedFolder interface represents a folder in the host computer's
16603 file system accessible from the guest OS running inside a virtual
16604 machine using an associated logical name.
16605
16606 There are three types of shared folders:
16607 <ul>
16608 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
16609 folders available to all virtual machines.</li>
16610 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
16611 VM-specific shared folders available to the given virtual machine at
16612 startup.</li>
16613 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
16614 VM-specific shared folders created in the session context (for
16615 example, when the virtual machine is running) and automatically
16616 discarded when the session is closed (the VM is powered off).</li>
16617 </ul>
16618
16619 Logical names of shared folders must be unique within the given scope
16620 (global, permanent or transient). However, they do not need to be unique
16621 across scopes. In this case, the definition of the shared folder in a
16622 more specific scope takes precedence over definitions in all other
16623 scopes. The order of precedence is (more specific to more general):
16624 <ol>
16625 <li>Transient definitions</li>
16626 <li>Permanent definitions</li>
16627 <li>Global definitions</li>
16628 </ol>
16629
16630 For example, if MyMachine has a shared folder named
16631 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
16632 transient shared folder named <tt>C_DRIVE</tt> (that points
16633 to <tt>C:\\\\WINDOWS</tt>) will change the definition
16634 of <tt>C_DRIVE</tt> in the guest OS so
16635 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
16636 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
16637 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
16638 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
16639 to <tt>C:\\</tt> if it still exists.
16640
16641 Note that permanent and transient shared folders of different machines
16642 are in different name spaces, so they don't overlap and don't need to
16643 have unique logical names.
16644
16645 <note>
16646 Global shared folders are not implemented in the current version of the
16647 product.
16648 </note>
16649 </desc>
16650
16651 <attribute name="name" type="wstring" readonly="yes">
16652 <desc>Logical name of the shared folder.</desc>
16653 </attribute>
16654
16655 <attribute name="hostPath" type="wstring" readonly="yes">
16656 <desc>Full path to the shared folder in the host file system.</desc>
16657 </attribute>
16658
16659 <attribute name="accessible" type="boolean" readonly="yes">
16660 <desc>
16661 Whether the folder defined by the host path is currently
16662 accessible or not.
16663 For example, the folder can be inaccessible if it is placed
16664 on the network share that is not available by the time
16665 this property is read.
16666 </desc>
16667 </attribute>
16668
16669 <attribute name="writable" type="boolean" readonly="yes">
16670 <desc>
16671 Whether the folder defined by the host path is writable or
16672 not.
16673 </desc>
16674 </attribute>
16675
16676 <attribute name="autoMount" type="boolean" readonly="yes">
16677 <desc>
16678 Whether the folder gets automatically mounted by the guest or not.
16679 </desc>
16680 </attribute>
16681
16682 <attribute name="lastAccessError" type="wstring" readonly="yes">
16683 <desc>
16684 Text message that represents the result of the last accessibility
16685 check.
16686
16687 Accessibility checks are performed each time the <link to="#accessible"/>
16688 attribute is read. An empty string is returned if the last
16689 accessibility check was successful. A non-empty string indicates a
16690 failure and should normally describe a reason of the failure (for
16691 example, a file read error).
16692 </desc>
16693 </attribute>
16694
16695 </interface>
16696
16697 <!--
16698 // ISession
16699 /////////////////////////////////////////////////////////////////////////
16700 -->
16701
16702 <interface
16703 name="IInternalSessionControl" extends="$unknown"
16704 uuid="3e83963a-1c3b-400d-8c5f-f2d077b0a597"
16705 internal="yes"
16706 wsmap="suppress"
16707 >
16708 <method name="getPID">
16709 <desc>PID of the process that has created this Session object.
16710 </desc>
16711 <param name="pid" type="unsigned long" dir="return"/>
16712 </method>
16713
16714 <method name="getRemoteConsole">
16715 <desc>
16716 Returns the console object suitable for remote control.
16717
16718 <result name="VBOX_E_INVALID_VM_STATE">
16719 Session state prevents operation.
16720 </result>
16721 <result name="VBOX_E_INVALID_OBJECT_STATE">
16722 Session type prevents operation.
16723 </result>
16724
16725 </desc>
16726 <param name="console" type="IConsole" dir="return"/>
16727 </method>
16728
16729 <method name="assignMachine">
16730 <desc>
16731 Assigns the machine object associated with this direct-type
16732 session or informs the session that it will be a remote one
16733 (if @a machine == @c null).
16734
16735 <result name="VBOX_E_INVALID_VM_STATE">
16736 Session state prevents operation.
16737 </result>
16738 <result name="VBOX_E_INVALID_OBJECT_STATE">
16739 Session type prevents operation.
16740 </result>
16741
16742 </desc>
16743 <param name="machine" type="IMachine" dir="in"/>
16744 <param name="lockType" type="LockType" dir="in"/>
16745 </method>
16746
16747 <method name="assignRemoteMachine">
16748 <desc>
16749 Assigns the machine and the (remote) console object associated with
16750 this remote-type session.
16751
16752 <result name="VBOX_E_INVALID_VM_STATE">
16753 Session state prevents operation.
16754 </result>
16755
16756 </desc>
16757 <param name="machine" type="IMachine" dir="in"/>
16758 <param name="console" type="IConsole" dir="in"/>
16759 </method>
16760
16761 <method name="updateMachineState">
16762 <desc>
16763 Updates the machine state in the VM process.
16764 Must be called only in certain cases
16765 (see the method implementation).
16766
16767 <result name="VBOX_E_INVALID_VM_STATE">
16768 Session state prevents operation.
16769 </result>
16770 <result name="VBOX_E_INVALID_OBJECT_STATE">
16771 Session type prevents operation.
16772 </result>
16773
16774 </desc>
16775 <param name="aMachineState" type="MachineState" dir="in"/>
16776 </method>
16777
16778 <method name="uninitialize">
16779 <desc>
16780 Uninitializes (closes) this session. Used by VirtualBox to close
16781 the corresponding remote session when the direct session dies
16782 or gets closed.
16783
16784 <result name="VBOX_E_INVALID_VM_STATE">
16785 Session state prevents operation.
16786 </result>
16787
16788 </desc>
16789 </method>
16790
16791 <method name="onNetworkAdapterChange">
16792 <desc>
16793 Triggered when settings of a network adapter of the
16794 associated virtual machine have changed.
16795
16796 <result name="VBOX_E_INVALID_VM_STATE">
16797 Session state prevents operation.
16798 </result>
16799 <result name="VBOX_E_INVALID_OBJECT_STATE">
16800 Session type prevents operation.
16801 </result>
16802
16803 </desc>
16804 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
16805 <param name="changeAdapter" type="boolean" dir="in"/>
16806 </method>
16807
16808 <method name="onSerialPortChange">
16809 <desc>
16810 Triggered when settings of a serial port of the
16811 associated virtual machine have changed.
16812
16813 <result name="VBOX_E_INVALID_VM_STATE">
16814 Session state prevents operation.
16815 </result>
16816 <result name="VBOX_E_INVALID_OBJECT_STATE">
16817 Session type prevents operation.
16818 </result>
16819
16820 </desc>
16821 <param name="serialPort" type="ISerialPort" dir="in"/>
16822 </method>
16823
16824 <method name="onParallelPortChange">
16825 <desc>
16826 Triggered when settings of a parallel port of the
16827 associated virtual machine have changed.
16828
16829 <result name="VBOX_E_INVALID_VM_STATE">
16830 Session state prevents operation.
16831 </result>
16832 <result name="VBOX_E_INVALID_OBJECT_STATE">
16833 Session type prevents operation.
16834 </result>
16835
16836 </desc>
16837 <param name="parallelPort" type="IParallelPort" dir="in"/>
16838 </method>
16839
16840 <method name="onStorageControllerChange">
16841 <desc>
16842 Triggered when settings of a storage controller of the
16843 associated virtual machine have changed.
16844
16845 <result name="VBOX_E_INVALID_VM_STATE">
16846 Session state prevents operation.
16847 </result>
16848 <result name="VBOX_E_INVALID_OBJECT_STATE">
16849 Session type prevents operation.
16850 </result>
16851
16852 </desc>
16853 </method>
16854
16855 <method name="onMediumChange">
16856 <desc>
16857 Triggered when attached media of the
16858 associated virtual machine have changed.
16859
16860 <result name="VBOX_E_INVALID_VM_STATE">
16861 Session state prevents operation.
16862 </result>
16863 <result name="VBOX_E_INVALID_OBJECT_STATE">
16864 Session type prevents operation.
16865 </result>
16866
16867 </desc>
16868
16869 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
16870 <desc>The medium attachment which changed.</desc>
16871 </param>
16872 <param name="force" type="boolean" dir="in">
16873 <desc>If the medium change was forced.</desc>
16874 </param>
16875 </method>
16876
16877 <method name="onStorageDeviceChange">
16878 <desc>
16879 Triggered when attached storage devices of the
16880 associated virtual machine have changed.
16881
16882 <result name="VBOX_E_INVALID_VM_STATE">
16883 Session state prevents operation.
16884 </result>
16885 <result name="VBOX_E_INVALID_OBJECT_STATE">
16886 Session type prevents operation.
16887 </result>
16888
16889 </desc>
16890
16891 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
16892 <desc>The medium attachment which changed.</desc>
16893 </param>
16894 <param name="remove" type="boolean" dir="in">
16895 <desc>TRUE if the device is removed, FALSE if it was added.</desc>
16896 </param>
16897 </method>
16898
16899 <method name="onClipboardModeChange">
16900 <desc>
16901 Notification when the shared clipboard mode changes.
16902 </desc>
16903 <param name="clipboardMode" type="ClipboardMode" dir="in">
16904 <desc>The new shared clipboard mode.</desc>
16905 </param>
16906 </method>
16907
16908 <method name="onDragAndDropModeChange">
16909 <desc>
16910 Notification when the drag'n'drop mode changes.
16911 </desc>
16912 <param name="dragAndDropMode" type="DragAndDropMode" dir="in">
16913 <desc>The new mode for drag'n'drop.</desc>
16914 </param>
16915 </method>
16916
16917 <method name="onCPUChange">
16918 <desc>
16919 Notification when a CPU changes.
16920 </desc>
16921 <param name="cpu" type="unsigned long" dir="in">
16922 <desc>The CPU which changed</desc>
16923 </param>
16924 <param name="add" type="boolean" dir="in">
16925 <desc>Flag whether the CPU was added or removed</desc>
16926 </param>
16927 </method>
16928
16929 <method name="onCPUExecutionCapChange">
16930 <desc>
16931 Notification when the CPU execution cap changes.
16932 </desc>
16933 <param name="executionCap" type="unsigned long" dir="in">
16934 <desc>The new CPU execution cap value. (1-100)</desc>
16935 </param>
16936 </method>
16937
16938 <method name="onVRDEServerChange">
16939 <desc>
16940 Triggered when settings of the VRDE server object of the
16941 associated virtual machine have changed.
16942
16943 <result name="VBOX_E_INVALID_VM_STATE">
16944 Session state prevents operation.
16945 </result>
16946 <result name="VBOX_E_INVALID_OBJECT_STATE">
16947 Session type prevents operation.
16948 </result>
16949
16950 </desc>
16951 <param name="restart" type="boolean" dir="in">
16952 <desc>Flag whether the server must be restarted</desc>
16953 </param>
16954 </method>
16955
16956 <method name="onUSBControllerChange">
16957 <desc>
16958 Triggered when settings of the USB controller object of the
16959 associated virtual machine have changed.
16960
16961 <result name="VBOX_E_INVALID_VM_STATE">
16962 Session state prevents operation.
16963 </result>
16964 <result name="VBOX_E_INVALID_OBJECT_STATE">
16965 Session type prevents operation.
16966 </result>
16967
16968 </desc>
16969 </method>
16970
16971 <method name="onSharedFolderChange">
16972 <desc>
16973 Triggered when a permanent (global or machine) shared folder has been
16974 created or removed.
16975 <note>
16976 We don't pass shared folder parameters in this notification because
16977 the order in which parallel notifications are delivered is not defined,
16978 therefore it could happen that these parameters were outdated by the
16979 time of processing this notification.
16980 </note>
16981
16982 <result name="VBOX_E_INVALID_VM_STATE">
16983 Session state prevents operation.
16984 </result>
16985 <result name="VBOX_E_INVALID_OBJECT_STATE">
16986 Session type prevents operation.
16987 </result>
16988
16989 </desc>
16990 <param name="global" type="boolean" dir="in"/>
16991 </method>
16992
16993 <method name="onUSBDeviceAttach">
16994 <desc>
16995 Triggered when a request to capture a USB device (as a result
16996 of matched USB filters or direct call to
16997 <link to="IConsole::attachUSBDevice"/>) has completed.
16998 A @c null @a error object means success, otherwise it
16999 describes a failure.
17000
17001 <result name="VBOX_E_INVALID_VM_STATE">
17002 Session state prevents operation.
17003 </result>
17004 <result name="VBOX_E_INVALID_OBJECT_STATE">
17005 Session type prevents operation.
17006 </result>
17007
17008 </desc>
17009 <param name="device" type="IUSBDevice" dir="in"/>
17010 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
17011 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
17012 </method>
17013
17014 <method name="onUSBDeviceDetach">
17015 <desc>
17016 Triggered when a request to release the USB device (as a result
17017 of machine termination or direct call to
17018 <link to="IConsole::detachUSBDevice"/>) has completed.
17019 A @c null @a error object means success, otherwise it
17020 describes a failure.
17021
17022 <result name="VBOX_E_INVALID_VM_STATE">
17023 Session state prevents operation.
17024 </result>
17025 <result name="VBOX_E_INVALID_OBJECT_STATE">
17026 Session type prevents operation.
17027 </result>
17028
17029 </desc>
17030 <param name="id" type="uuid" mod="string" dir="in"/>
17031 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
17032 </method>
17033
17034 <method name="onShowWindow">
17035 <desc>
17036 Called by <link to="IMachine::canShowConsoleWindow"/> and by
17037 <link to="IMachine::showConsoleWindow"/> in order to notify
17038 console listeners
17039 <link to="ICanShowWindowEvent"/>
17040 and <link to="IShowWindowEvent"/>.
17041
17042 <result name="VBOX_E_INVALID_OBJECT_STATE">
17043 Session type prevents operation.
17044 </result>
17045
17046 </desc>
17047 <param name="check" type="boolean" dir="in"/>
17048 <param name="canShow" type="boolean" dir="out"/>
17049 <param name="winId" type="long long" dir="out"/>
17050 </method>
17051
17052 <method name="onBandwidthGroupChange">
17053 <desc>
17054 Notification when one of the bandwidth groups change.
17055 </desc>
17056 <param name="bandwidthGroup" type="IBandwidthGroup" dir="in">
17057 <desc>The bandwidth group which changed.</desc>
17058 </param>
17059 </method>
17060
17061 <method name="accessGuestProperty">
17062 <desc>
17063 Called by <link to="IMachine::getGuestProperty"/> and by
17064 <link to="IMachine::setGuestProperty"/> in order to read and
17065 modify guest properties.
17066
17067 <result name="VBOX_E_INVALID_VM_STATE">
17068 Machine session is not open.
17069 </result>
17070 <result name="VBOX_E_INVALID_OBJECT_STATE">
17071 Session type is not direct.
17072 </result>
17073
17074 </desc>
17075 <param name="name" type="wstring" dir="in"/>
17076 <param name="value" type="wstring" dir="in"/>
17077 <param name="flags" type="wstring" dir="in"/>
17078 <param name="isSetter" type="boolean" dir="in"/>
17079 <param name="retValue" type="wstring" dir="out"/>
17080 <param name="retTimestamp" type="long long" dir="out"/>
17081 <param name="retFlags" type="wstring" dir="out"/>
17082 </method>
17083
17084 <method name="enumerateGuestProperties" const="yes">
17085 <desc>
17086 Return a list of the guest properties matching a set of patterns along
17087 with their values, time stamps and flags.
17088
17089 <result name="VBOX_E_INVALID_VM_STATE">
17090 Machine session is not open.
17091 </result>
17092 <result name="VBOX_E_INVALID_OBJECT_STATE">
17093 Session type is not direct.
17094 </result>
17095
17096 </desc>
17097 <param name="patterns" type="wstring" dir="in">
17098 <desc>
17099 The patterns to match the properties against as a comma-separated
17100 string. If this is empty, all properties currently set will be
17101 returned.
17102 </desc>
17103 </param>
17104 <param name="key" type="wstring" dir="out" safearray="yes">
17105 <desc>
17106 The key names of the properties returned.
17107 </desc>
17108 </param>
17109 <param name="value" type="wstring" dir="out" safearray="yes">
17110 <desc>
17111 The values of the properties returned. The array entries match the
17112 corresponding entries in the @a key array.
17113 </desc>
17114 </param>
17115 <param name="timestamp" type="long long" dir="out" safearray="yes">
17116 <desc>
17117 The time stamps of the properties returned. The array entries match
17118 the corresponding entries in the @a key array.
17119 </desc>
17120 </param>
17121 <param name="flags" type="wstring" dir="out" safearray="yes">
17122 <desc>
17123 The flags of the properties returned. The array entries match the
17124 corresponding entries in the @a key array.
17125 </desc>
17126 </param>
17127 </method>
17128
17129 <method name="onlineMergeMedium">
17130 <desc>
17131 Triggers online merging of a hard disk. Used internally when deleting
17132 a snapshot while a VM referring to the same hard disk chain is running.
17133
17134 <result name="VBOX_E_INVALID_VM_STATE">
17135 Machine session is not open.
17136 </result>
17137 <result name="VBOX_E_INVALID_OBJECT_STATE">
17138 Session type is not direct.
17139 </result>
17140
17141 </desc>
17142 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
17143 <desc>The medium attachment to identify the medium chain.</desc>
17144 </param>
17145 <param name="sourceIdx" type="unsigned long" dir="in">
17146 <desc>The index of the source image in the chain.
17147 Redundant, but drastically reduces IPC.</desc>
17148 </param>
17149 <param name="targetIdx" type="unsigned long" dir="in">
17150 <desc>The index of the target image in the chain.
17151 Redundant, but drastically reduces IPC.</desc>
17152 </param>
17153 <param name="source" type="IMedium" dir="in">
17154 <desc>Merge source medium.</desc>
17155 </param>
17156 <param name="target" type="IMedium" dir="in">
17157 <desc>Merge target medium.</desc>
17158 </param>
17159 <param name="mergeForward" type="boolean" dir="in">
17160 <desc>Merge direction.</desc>
17161 </param>
17162 <param name="parentForTarget" type="IMedium" dir="in">
17163 <desc>For forward merges: new parent for target medium.</desc>
17164 </param>
17165 <param name="childrenToReparent" type="IMedium" safearray="yes" dir="in">
17166 <desc>For backward merges: list of media which need their parent UUID
17167 updated.</desc>
17168 </param>
17169 <param name="progress" type="IProgress" dir="in">
17170 <desc>
17171 Progress object for this operation.
17172 </desc>
17173 </param>
17174 </method>
17175
17176 <method name="enableVMMStatistics">
17177 <desc>
17178 Enables or disables collection of VMM RAM statistics.
17179
17180 <result name="VBOX_E_INVALID_VM_STATE">
17181 Machine session is not open.
17182 </result>
17183 <result name="VBOX_E_INVALID_OBJECT_STATE">
17184 Session type is not direct.
17185 </result>
17186
17187 </desc>
17188 <param name="enable" type="boolean" dir="in">
17189 <desc>True enables statistics collection.</desc>
17190 </param>
17191 </method>
17192
17193 </interface>
17194
17195 <interface
17196 name="ISession" extends="$unknown"
17197 uuid="12F4DCDB-12B2-4EC1-B7CD-DDD9F6C5BF4D"
17198 wsmap="managed"
17199 >
17200 <desc>
17201 The ISession interface represents a client process and allows for locking
17202 virtual machines (represented by IMachine objects) to prevent conflicting
17203 changes to the machine.
17204
17205 Any caller wishing to manipulate a virtual machine needs to create a session
17206 object first, which lives in its own process space. Such session objects are
17207 then associated with <link to="IMachine" /> objects living in the VirtualBox
17208 server process to coordinate such changes.
17209
17210 There are two typical scenarios in which sessions are used:
17211
17212 <ul>
17213 <li>To alter machine settings or control a running virtual machine, one
17214 needs to lock a machine for a given session (client process) by calling
17215 <link to="IMachine::lockMachine"/>.
17216
17217 Whereas multiple sessions may control a running virtual machine, only
17218 one process can obtain a write lock on the machine to prevent conflicting
17219 changes. A write lock is also needed if a process wants to actually run a
17220 virtual machine in its own context, such as the VirtualBox GUI or
17221 VBoxHeadless front-ends. They must also lock a machine for their own
17222 sessions before they are allowed to power up the virtual machine.
17223
17224 As a result, no machine settings can be altered while another process is
17225 already using it, either because that process is modifying machine settings
17226 or because the machine is running.
17227 </li>
17228 <li>
17229 To start a VM using one of the existing VirtualBox front-ends (e.g. the
17230 VirtualBox GUI or VBoxHeadless), one would use
17231 <link to="IMachine::launchVMProcess"/>, which also takes a session object
17232 as its first parameter. This session then identifies the caller and lets the
17233 caller control the started machine (for example, pause machine execution or
17234 power it down) as well as be notified about machine execution state changes.
17235 </li>
17236 </ul>
17237
17238 How sessions objects are created in a client process depends on whether you use
17239 the Main API via COM or via the webservice:
17240
17241 <ul>
17242 <li>When using the COM API directly, an object of the Session class from the
17243 VirtualBox type library needs to be created. In regular COM C++ client code,
17244 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
17245 This object will then act as a local session object in further calls to open
17246 a session.
17247 </li>
17248
17249 <li>In the webservice, the session manager (IWebsessionManager) instead creates
17250 a session object automatically whenever <link to="IWebsessionManager::logon" />
17251 is called. A managed object reference to that session object can be retrieved by
17252 calling <link to="IWebsessionManager::getSessionObject" />.
17253 </li>
17254 </ul>
17255 </desc>
17256
17257 <attribute name="state" type="SessionState" readonly="yes">
17258 <desc>Current state of this session.</desc>
17259 </attribute>
17260
17261 <attribute name="type" type="SessionType" readonly="yes">
17262 <desc>
17263 Type of this session. The value of this attribute is valid only
17264 if the session currently has a machine locked (i.e. its
17265 <link to="#state" /> is Locked), otherwise an error will be returned.
17266 </desc>
17267 </attribute>
17268
17269 <attribute name="machine" type="IMachine" readonly="yes">
17270 <desc>Machine object associated with this session.</desc>
17271 </attribute>
17272
17273 <attribute name="console" type="IConsole" readonly="yes">
17274 <desc>Console object associated with this session.</desc>
17275 </attribute>
17276
17277 <method name="unlockMachine">
17278 <desc>
17279 Unlocks a machine that was previously locked for the current session.
17280
17281 Calling this method is required every time a machine has been locked
17282 for a particular session using the <link to="IMachine::launchVMProcess" />
17283 or <link to="IMachine::lockMachine" /> calls. Otherwise the state of
17284 the machine will be set to <link to="MachineState_Aborted" /> on the
17285 server, and changes made to the machine settings will be lost.
17286
17287 Generally, it is recommended to unlock all machines explicitly
17288 before terminating the application (regardless of the reason for
17289 the termination).
17290
17291 <note>
17292 Do not expect the session state (<link to="ISession::state" />
17293 to return to "Unlocked" immediately after you invoke this method,
17294 particularly if you have started a new VM process. The session
17295 state will automatically return to "Unlocked" once the VM is no
17296 longer executing, which can of course take a very long time.
17297 </note>
17298
17299 <result name="E_UNEXPECTED">
17300 Session is not locked.
17301 </result>
17302
17303 </desc>
17304 </method>
17305
17306 </interface>
17307
17308 <!--
17309 // IStorageController
17310 /////////////////////////////////////////////////////////////////////////
17311 -->
17312
17313 <enum
17314 name="StorageBus"
17315 uuid="eee67ab3-668d-4ef5-91e0-7025fe4a0d7a"
17316 >
17317 <desc>
17318 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy);
17319 see <link to="IStorageController::bus" />.
17320 </desc>
17321 <const name="Null" value="0">
17322 <desc>@c null value. Never used by the API.</desc>
17323 </const>
17324 <const name="IDE" value="1"/>
17325 <const name="SATA" value="2"/>
17326 <const name="SCSI" value="3"/>
17327 <const name="Floppy" value="4"/>
17328 <const name="SAS" value="5"/>
17329 </enum>
17330
17331 <enum
17332 name="StorageControllerType"
17333 uuid="8a412b8a-f43e-4456-bd37-b474f0879a58"
17334 >
17335 <desc>
17336 The exact variant of storage controller hardware presented
17337 to the guest; see <link to="IStorageController::controllerType" />.
17338 </desc>
17339
17340 <const name="Null" value="0">
17341 <desc>@c null value. Never used by the API.</desc>
17342 </const>
17343 <const name="LsiLogic" value="1">
17344 <desc>A SCSI controller of the LsiLogic variant.</desc>
17345 </const>
17346 <const name="BusLogic" value="2">
17347 <desc>A SCSI controller of the BusLogic variant.</desc>
17348 </const>
17349 <const name="IntelAhci" value="3">
17350 <desc>An Intel AHCI SATA controller; this is the only variant for SATA.</desc>
17351 </const>
17352 <const name="PIIX3" value="4">
17353 <desc>An IDE controller of the PIIX3 variant.</desc>
17354 </const>
17355 <const name="PIIX4" value="5">
17356 <desc>An IDE controller of the PIIX4 variant.</desc>
17357 </const>
17358 <const name="ICH6" value="6">
17359 <desc>An IDE controller of the ICH6 variant.</desc>
17360 </const>
17361 <const name="I82078" value="7">
17362 <desc>A floppy disk controller; this is the only variant for floppy drives.</desc>
17363 </const>
17364 <const name="LsiLogicSas" value="8">
17365 <desc>A variant of the LsiLogic controller using SAS.</desc>
17366 </const>
17367 </enum>
17368
17369 <enum
17370 name="ChipsetType"
17371 uuid="8b4096a8-a7c3-4d3b-bbb1-05a0a51ec394"
17372 >
17373 <desc>
17374 Type of emulated chipset (mostly southbridge).
17375 </desc>
17376
17377 <const name="Null" value="0">
17378 <desc>@c null value. Never used by the API.</desc>
17379 </const>
17380 <const name="PIIX3" value="1">
17381 <desc>A PIIX3 (PCI IDE ISA Xcelerator) chipset.</desc>
17382 </const>
17383 <const name="ICH9" value="2">
17384 <desc>A ICH9 (I/O Controller Hub) chipset.</desc>
17385 </const>
17386 </enum>
17387
17388 <interface
17389 name="IStorageController" extends="$unknown"
17390 uuid="a1556333-09b6-46d9-bfb7-fc239b7fbe1e"
17391 wsmap="managed"
17392 >
17393 <desc>
17394 Represents a storage controller that is attached to a virtual machine
17395 (<link to="IMachine" />). Just as drives (hard disks, DVDs, FDs) are
17396 attached to storage controllers in a real computer, virtual drives
17397 (represented by <link to="IMediumAttachment" />) are attached to virtual
17398 storage controllers, represented by this interface.
17399
17400 As opposed to physical hardware, VirtualBox has a very generic concept
17401 of a storage controller, and for purposes of the Main API, all virtual
17402 storage is attached to virtual machines via instances of this interface.
17403 There are five types of such virtual storage controllers: IDE, SCSI, SATA,
17404 SAS and Floppy (see <link to="#bus" />). Depending on which of these four
17405 is used, certain sub-types may be available and can be selected in
17406 <link to="#controllerType" />.
17407
17408 Depending on these settings, the guest operating system might see
17409 significantly different virtual hardware.
17410 </desc>
17411
17412 <attribute name="name" type="wstring" readonly="yes">
17413 <desc>
17414 Name of the storage controller, as originally specified with
17415 <link to="IMachine::addStorageController" />. This then uniquely
17416 identifies this controller with other method calls such as
17417 <link to="IMachine::attachDevice" /> and <link to="IMachine::mountMedium" />.
17418 </desc>
17419 </attribute>
17420
17421 <attribute name="maxDevicesPerPortCount" type="unsigned long" readonly="yes">
17422 <desc>
17423 Maximum number of devices which can be attached to one port.
17424 </desc>
17425 </attribute>
17426
17427 <attribute name="minPortCount" type="unsigned long" readonly="yes">
17428 <desc>
17429 Minimum number of ports that <link to="IStorageController::portCount"/> can be set to.
17430 </desc>
17431 </attribute>
17432
17433 <attribute name="maxPortCount" type="unsigned long" readonly="yes">
17434 <desc>
17435 Maximum number of ports that <link to="IStorageController::portCount"/> can be set to.
17436 </desc>
17437 </attribute>
17438
17439 <attribute name="instance" type="unsigned long">
17440 <desc>
17441 The instance number of the device in the running VM.
17442 </desc>
17443 </attribute>
17444
17445 <attribute name="portCount" type="unsigned long">
17446 <desc>
17447 The number of currently usable ports on the controller.
17448 The minimum and maximum number of ports for one controller are
17449 stored in <link to="IStorageController::minPortCount"/>
17450 and <link to="IStorageController::maxPortCount"/>.
17451 </desc>
17452 </attribute>
17453
17454 <attribute name="bus" type="StorageBus" readonly="yes">
17455 <desc>
17456 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy).
17457 </desc>
17458 </attribute>
17459
17460 <attribute name="controllerType" type="StorageControllerType">
17461 <desc>
17462 The exact variant of storage controller hardware presented
17463 to the guest.
17464 Depending on this value, VirtualBox will provide a different
17465 virtual storage controller hardware to the guest.
17466 For SATA, SAS and floppy controllers, only one variant is
17467 available, but for IDE and SCSI, there are several.
17468
17469 For SCSI controllers, the default type is LsiLogic.
17470 </desc>
17471 </attribute>
17472
17473 <attribute name="useHostIOCache" type="boolean">
17474 <desc>
17475 If true, the storage controller emulation will use a dedicated I/O thread, enable the host I/O
17476 caches and use synchronous file APIs on the host. This was the only option in the API before
17477 VirtualBox 3.2 and is still the default for IDE controllers.
17478
17479 If false, the host I/O cache will be disabled for image files attached to this storage controller.
17480 Instead, the storage controller emulation will use asynchronous I/O APIs on the host. This makes
17481 it possible to turn off the host I/O caches because the emulation can handle unaligned access to
17482 the file. This should be used on OS X and Linux hosts if a high I/O load is expected or many
17483 virtual machines are running at the same time to prevent I/O cache related hangs.
17484 This option new with the API of VirtualBox 3.2 and is now the default for non-IDE storage controllers.
17485 </desc>
17486 </attribute>
17487
17488 <attribute name="bootable" type="boolean" readonly="yes">
17489 <desc>
17490 Returns whether it is possible to boot from disks attached to this controller.
17491 </desc>
17492 </attribute>
17493
17494 <method name="getIDEEmulationPort">
17495 <desc>
17496 Gets the corresponding port number which is emulated as an IDE device.
17497 Works only with SATA controllers.
17498
17499 <result name="E_INVALIDARG">
17500 The @a devicePosition is not in the range 0 to 3.
17501 </result>
17502 <result name="E_NOTIMPL">
17503 The storage controller type is not SATAIntelAhci.
17504 </result>
17505
17506 </desc>
17507 <param name="devicePosition" type="long" dir="in"/>
17508 <param name="portNumber" type="long" dir="return"/>
17509 </method>
17510
17511 <method name="setIDEEmulationPort">
17512 <desc>
17513 Sets the port number which is emulated as an IDE device.
17514 Works only with SATA controllers.
17515
17516 <result name="E_INVALIDARG">
17517 The @a devicePosition is not in the range 0 to 3 or the
17518 @a portNumber is not in the range 0 to 29.
17519 </result>
17520 <result name="E_NOTIMPL">
17521 The storage controller type is not SATAIntelAhci.
17522 </result>
17523
17524 </desc>
17525 <param name="devicePosition" type="long" dir="in"/>
17526 <param name="portNumber" type="long" dir="in"/>
17527 </method>
17528
17529 </interface>
17530
17531<if target="wsdl">
17532
17533 <!--
17534 // IManagedObjectRef
17535 /////////////////////////////////////////////////////////////////////////
17536 -->
17537
17538 <interface
17539 name="IManagedObjectRef" extends="$unknown"
17540 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
17541 internal="yes"
17542 wsmap="managed"
17543 wscpp="hardcoded"
17544 >
17545 <desc>
17546 Managed object reference.
17547
17548 Only within the webservice, a managed object reference (which is really
17549 an opaque number) allows a webservice client to address an object
17550 that lives in the address space of the webservice server.
17551
17552 Behind each managed object reference, there is a COM object that lives
17553 in the webservice server's address space. The COM object is not freed
17554 until the managed object reference is released, either by an explicit
17555 call to <link to="IManagedObjectRef::release" /> or by logging off from
17556 the webservice (<link to="IWebsessionManager::logoff" />), which releases
17557 all objects created during the webservice session.
17558
17559 Whenever a method call of the VirtualBox API returns a COM object, the
17560 webservice representation of that method will instead return a
17561 managed object reference, which can then be used to invoke methods
17562 on that object.
17563 </desc>
17564
17565 <method name="getInterfaceName">
17566 <desc>
17567 Returns the name of the interface that this managed object represents,
17568 for example, "IMachine", as a string.
17569 </desc>
17570 <param name="return" type="wstring" dir="return"/>
17571 </method>
17572
17573 <method name="release">
17574 <desc>
17575 Releases this managed object reference and frees the resources that
17576 were allocated for it in the webservice server process. After calling
17577 this method, the identifier of the reference can no longer be used.
17578 </desc>
17579 </method>
17580
17581 </interface>
17582
17583 <!--
17584 // IWebsessionManager
17585 /////////////////////////////////////////////////////////////////////////
17586 -->
17587
17588 <interface
17589 name="IWebsessionManager" extends="$unknown"
17590 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
17591 internal="yes"
17592 wsmap="global"
17593 wscpp="hardcoded"
17594 >
17595 <desc>
17596 Websession manager. This provides essential services
17597 to webservice clients.
17598 </desc>
17599 <method name="logon">
17600 <desc>
17601 Logs a new client onto the webservice and returns a managed object reference to
17602 the IVirtualBox instance, which the client can then use as a basis to further
17603 queries, since all calls to the VirtualBox API are based on the IVirtualBox
17604 interface, in one way or the other.
17605 </desc>
17606 <param name="username" type="wstring" dir="in"/>
17607 <param name="password" type="wstring" dir="in"/>
17608 <param name="return" type="IVirtualBox" dir="return"/>
17609 </method>
17610
17611 <method name="getSessionObject">
17612 <desc>
17613 Returns a managed object reference to the internal ISession object that was created
17614 for this web service session when the client logged on.
17615
17616 <see><link to="ISession"/></see>
17617 </desc>
17618 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
17619 <param name="return" type="ISession" dir="return"/>
17620 </method>
17621
17622 <method name="logoff">
17623 <desc>
17624 Logs off the client who has previously logged on with <link to="IWebsessionManager::logon" />
17625 and destroys all resources associated with the session (most importantly, all
17626 managed objects created in the server while the session was active).
17627 </desc>
17628 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
17629 </method>
17630
17631 </interface>
17632
17633</if>
17634
17635 <!--
17636 // IPerformanceCollector & friends
17637 /////////////////////////////////////////////////////////////////////////
17638 -->
17639
17640 <interface
17641 name="IPerformanceMetric" extends="$unknown"
17642 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
17643 >
17644 <desc>
17645 The IPerformanceMetric interface represents parameters of the given
17646 performance metric.
17647 </desc>
17648
17649 <attribute name="metricName" type="wstring" readonly="yes">
17650 <desc>
17651 Name of the metric.
17652 </desc>
17653 </attribute>
17654
17655 <attribute name="object" type="$unknown" readonly="yes">
17656 <desc>
17657 Object this metric belongs to.
17658 </desc>
17659 </attribute>
17660
17661 <attribute name="description" type="wstring" readonly="yes">
17662 <desc>
17663 Textual description of the metric.
17664 </desc>
17665 </attribute>
17666
17667 <attribute name="period" type="unsigned long" readonly="yes">
17668 <desc>
17669 Time interval between samples, measured in seconds.
17670 </desc>
17671 </attribute>
17672
17673 <attribute name="count" type="unsigned long" readonly="yes">
17674 <desc>
17675 Number of recent samples retained by the performance collector for this
17676 metric.
17677
17678 When the collected sample count exceeds this number, older samples
17679 are discarded.
17680 </desc>
17681 </attribute>
17682
17683 <attribute name="unit" type="wstring" readonly="yes">
17684 <desc>
17685 Unit of measurement.
17686 </desc>
17687 </attribute>
17688
17689 <attribute name="minimumValue" type="long" readonly="yes">
17690 <desc>
17691 Minimum possible value of this metric.
17692 </desc>
17693 </attribute>
17694
17695 <attribute name="maximumValue" type="long" readonly="yes">
17696 <desc>
17697 Maximum possible value of this metric.
17698 </desc>
17699 </attribute>
17700 </interface>
17701
17702 <interface
17703 name="IPerformanceCollector" extends="$unknown"
17704 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
17705 wsmap="managed"
17706 >
17707 <desc>
17708 The IPerformanceCollector interface represents a service that collects
17709 and stores performance metrics data.
17710
17711 Performance metrics are associated with objects of interfaces like IHost
17712 and IMachine. Each object has a distinct set of performance metrics. The
17713 set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
17714
17715 Metric data is collected at the specified intervals and is retained
17716 internally. The interval and the number of retained samples can be set
17717 with <link to="IPerformanceCollector::setupMetrics" />. Both metric data
17718 and collection settings are not persistent, they are discarded as soon as
17719 VBoxSVC process terminates. Moreover, metric settings and data associated
17720 with a particular VM only exist while VM is running. They disappear as
17721 soon as VM shuts down. It is not possible to set up metrics for machines
17722 that are powered off. One needs to start VM first, then set up metric
17723 collection parameters.
17724
17725 Metrics are organized hierarchically, with each level separated by a
17726 slash (/) character. Generally, the scheme for metric names is like this:
17727
17728 <tt>Category/Metric[/SubMetric][:aggregation]</tt>
17729
17730 "Category/Metric" together form the base metric name. A base metric is
17731 the smallest unit for which a sampling interval and the number of
17732 retained samples can be set. Only base metrics can be enabled and
17733 disabled. All sub-metrics are collected when their base metric is
17734 collected. Collected values for any set of sub-metrics can be queried
17735 with <link to="IPerformanceCollector::queryMetricsData" />.
17736
17737 For example "CPU/Load/User:avg" metric name stands for the "CPU"
17738 category, "Load" metric, "User" submetric, "average" aggregate. An
17739 aggregate function is computed over all retained data. Valid aggregate
17740 functions are:
17741
17742 <ul>
17743 <li>avg -- average</li>
17744 <li>min -- minimum</li>
17745 <li>max -- maximum</li>
17746 </ul>
17747
17748 When setting up metric parameters, querying metric data, enabling or
17749 disabling metrics wildcards can be used in metric names to specify a
17750 subset of metrics. For example, to select all CPU-related metrics
17751 use <tt>CPU/*</tt>, all averages can be queried using <tt>*:avg</tt> and
17752 so on. To query metric values without aggregates <tt>*:</tt> can be used.
17753
17754 The valid names for base metrics are:
17755
17756 <ul>
17757 <li>CPU/Load</li>
17758 <li>CPU/MHz</li>
17759 <li>RAM/Usage</li>
17760 <li>RAM/VMM</li>
17761 </ul>
17762
17763 The general sequence for collecting and retrieving the metrics is:
17764 <ul>
17765 <li>
17766 Obtain an instance of IPerformanceCollector with
17767 <link to="IVirtualBox::performanceCollector" />
17768 </li>
17769 <li>
17770 Allocate and populate an array with references to objects the metrics
17771 will be collected for. Use references to IHost and IMachine objects.
17772 </li>
17773 <li>
17774 Allocate and populate an array with base metric names the data will
17775 be collected for.
17776 </li>
17777 <li>
17778 Call <link to="IPerformanceCollector::setupMetrics" />. From now on
17779 the metric data will be collected and stored.
17780 </li>
17781 <li>
17782 Wait for the data to get collected.
17783 </li>
17784 <li>
17785 Allocate and populate an array with references to objects the metric
17786 values will be queried for. You can re-use the object array used for
17787 setting base metrics.
17788 </li>
17789 <li>
17790 Allocate and populate an array with metric names the data will be
17791 collected for. Note that metric names differ from base metric names.
17792 </li>
17793 <li>
17794 Call <link to="IPerformanceCollector::queryMetricsData" />. The data
17795 that have been collected so far are returned. Note that the values
17796 are still retained internally and data collection continues.
17797 </li>
17798 </ul>
17799
17800 For an example of usage refer to the following files in VirtualBox SDK:
17801 <ul>
17802 <li>
17803 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
17804 </li>
17805 <li>
17806 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
17807 </li>
17808 </ul>
17809 </desc>
17810
17811 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
17812 <desc>
17813 Array of unique names of metrics.
17814
17815 This array represents all metrics supported by the performance
17816 collector. Individual objects do not necessarily support all of them.
17817 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
17818 list of supported metrics for a particular object.
17819 </desc>
17820 </attribute>
17821
17822 <method name="getMetrics">
17823 <desc>
17824 Returns parameters of specified metrics for a set of objects.
17825 <note>
17826 @c Null metrics array means all metrics. @c Null object array means
17827 all existing objects.
17828 </note>
17829 </desc>
17830 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17831 <desc>
17832 Metric name filter. Currently, only a comma-separated list of metrics
17833 is supported.
17834 </desc>
17835 </param>
17836 <param name="objects" type="$unknown" dir="in" safearray="yes">
17837 <desc>
17838 Set of objects to return metric parameters for.
17839 </desc>
17840 </param>
17841 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
17842 <desc>
17843 Array of returned metric parameters.
17844 </desc>
17845 </param>
17846 </method>
17847
17848 <method name="setupMetrics">
17849 <desc>
17850 Sets parameters of specified base metrics for a set of objects. Returns
17851 an array of <link to="IPerformanceMetric" /> describing the metrics
17852 have been affected.
17853 <note>
17854 @c Null or empty metric name array means all metrics. @c Null or
17855 empty object array means all existing objects. If metric name array
17856 contains a single element and object array contains many, the single
17857 metric name array element is applied to each object array element to
17858 form metric/object pairs.
17859 </note>
17860 </desc>
17861 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17862 <desc>
17863 Metric name filter. Comma-separated list of metrics with wildcard
17864 support.
17865 </desc>
17866 </param>
17867 <param name="objects" type="$unknown" dir="in" safearray="yes">
17868 <desc>
17869 Set of objects to setup metric parameters for.
17870 </desc>
17871 </param>
17872 <param name="period" type="unsigned long" dir="in">
17873 <desc>
17874 Time interval in seconds between two consecutive samples of
17875 performance data.
17876 </desc>
17877 </param>
17878 <param name="count" type="unsigned long" dir="in">
17879 <desc>
17880 Number of samples to retain in performance data history. Older
17881 samples get discarded.
17882 </desc>
17883 </param>
17884 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17885 <desc>
17886 Array of metrics that have been modified by the call to this method.
17887 </desc>
17888 </param>
17889 </method>
17890
17891 <method name="enableMetrics">
17892 <desc>
17893 Turns on collecting specified base metrics. Returns an array of
17894 <link to="IPerformanceMetric" /> describing the metrics have been
17895 affected.
17896 <note>
17897 @c Null or empty metric name array means all metrics. @c Null or
17898 empty object array means all existing objects. If metric name array
17899 contains a single element and object array contains many, the single
17900 metric name array element is applied to each object array element to
17901 form metric/object pairs.
17902 </note>
17903 </desc>
17904 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17905 <desc>
17906 Metric name filter. Comma-separated list of metrics with wildcard
17907 support.
17908 </desc>
17909 </param>
17910 <param name="objects" type="$unknown" dir="in" safearray="yes">
17911 <desc>
17912 Set of objects to enable metrics for.
17913 </desc>
17914 </param>
17915 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17916 <desc>
17917 Array of metrics that have been modified by the call to this method.
17918 </desc>
17919 </param>
17920 </method>
17921
17922 <method name="disableMetrics">
17923 <desc>
17924 Turns off collecting specified base metrics. Returns an array of
17925 <link to="IPerformanceMetric" /> describing the metrics have been
17926 affected.
17927 <note>
17928 @c Null or empty metric name array means all metrics. @c Null or
17929 empty object array means all existing objects. If metric name array
17930 contains a single element and object array contains many, the single
17931 metric name array element is applied to each object array element to
17932 form metric/object pairs.
17933 </note>
17934 </desc>
17935 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17936 <desc>
17937 Metric name filter. Comma-separated list of metrics with wildcard
17938 support.
17939 </desc>
17940 </param>
17941 <param name="objects" type="$unknown" dir="in" safearray="yes">
17942 <desc>
17943 Set of objects to disable metrics for.
17944 </desc>
17945 </param>
17946 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17947 <desc>
17948 Array of metrics that have been modified by the call to this method.
17949 </desc>
17950 </param>
17951 </method>
17952
17953 <method name="queryMetricsData">
17954 <desc>
17955 Queries collected metrics data for a set of objects.
17956
17957 The data itself and related metric information are returned in seven
17958 parallel and one flattened array of arrays. Elements of
17959 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
17960 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
17961 the same index describe one set of values corresponding to a single
17962 metric.
17963
17964 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
17965 start and length of a sub-array is indicated by
17966 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
17967 value for metric <tt>metricNames[i]</tt> is at
17968 <tt>returnData[returnIndices[i]]</tt>.
17969
17970 <note>
17971 @c Null or empty metric name array means all metrics. @c Null or
17972 empty object array means all existing objects. If metric name array
17973 contains a single element and object array contains many, the single
17974 metric name array element is applied to each object array element to
17975 form metric/object pairs.
17976 </note>
17977 <note>
17978 Data collection continues behind the scenes after call to @c
17979 queryMetricsData. The return data can be seen as the snapshot of the
17980 current state at the time of @c queryMetricsData call. The internally
17981 kept metric values are not cleared by the call. This makes possible
17982 querying different subsets of metrics or aggregates with subsequent
17983 calls. If periodic querying is needed it is highly suggested to query
17984 the values with @c interval*count period to avoid confusion. This way
17985 a completely new set of data values will be provided by each query.
17986 </note>
17987 </desc>
17988 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17989 <desc>
17990 Metric name filter. Comma-separated list of metrics with wildcard
17991 support.
17992 </desc>
17993 </param>
17994 <param name="objects" type="$unknown" dir="in" safearray="yes">
17995 <desc>
17996 Set of objects to query metrics for.
17997 </desc>
17998 </param>
17999 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
18000 <desc>
18001 Names of metrics returned in @c returnData.
18002 </desc>
18003 </param>
18004 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
18005 <desc>
18006 Objects associated with metrics returned in @c returnData.
18007 </desc>
18008 </param>
18009 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
18010 <desc>
18011 Units of measurement for each returned metric.
18012 </desc>
18013 </param>
18014 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
18015 <desc>
18016 Divisor that should be applied to return values in order to get
18017 floating point values. For example:
18018 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
18019 will retrieve the floating point value of i-th sample of the first
18020 metric.
18021 </desc>
18022 </param>
18023 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
18024 <desc>
18025 Sequence numbers of the first elements of value sequences of
18026 particular metrics returned in @c returnData. For aggregate metrics
18027 it is the sequence number of the sample the aggregate started
18028 calculation from.
18029 </desc>
18030 </param>
18031 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
18032 <desc>
18033 Indices of the first elements of value sequences of particular
18034 metrics returned in @c returnData.
18035 </desc>
18036 </param>
18037 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
18038 <desc>
18039 Lengths of value sequences of particular metrics.
18040 </desc>
18041 </param>
18042 <param name="returnData" type="long" dir="return" safearray="yes">
18043 <desc>
18044 Flattened array of all metric data containing sequences of values for
18045 each metric.
18046 </desc>
18047 </param>
18048 </method>
18049
18050 </interface>
18051
18052 <enum
18053 name="NATAliasMode"
18054 uuid="67772168-50d9-11df-9669-7fb714ee4fa1"
18055 >
18056 <desc></desc>
18057 <const name="AliasLog" value="0x1">
18058 <desc></desc>
18059 </const>
18060 <const name="AliasProxyOnly" value="0x02">
18061 <desc></desc>
18062 </const>
18063 <const name="AliasUseSamePorts" value="0x04">
18064 <desc></desc>
18065 </const>
18066 </enum>
18067
18068 <enum
18069 name="NATProtocol"
18070 uuid="e90164be-eb03-11de-94af-fff9b1c1b19f"
18071 >
18072 <desc>Protocol definitions used with NAT port-forwarding rules.</desc>
18073 <const name="UDP" value="0">
18074 <desc>Port-forwarding uses UDP protocol.</desc>
18075 </const>
18076 <const name="TCP" value="1">
18077 <desc>Port-forwarding uses TCP protocol.</desc>
18078 </const>
18079 </enum>
18080
18081 <interface
18082 name="INATEngine" extends="$unknown"
18083 uuid="26451b99-3b2d-4dcb-8e4b-d63654218175"
18084 wsmap="managed"
18085 >
18086 <desc>Interface for managing a NAT engine which is used with a virtual machine. This
18087 allows for changing NAT behavior such as port-forwarding rules. This interface is
18088 used in the <link to="INetworkAdapter::NATEngine" /> attribute.</desc>
18089 <attribute name="network" type="wstring">
18090 <desc>The network attribute of the NAT engine (the same value is used with built-in
18091 DHCP server to fill corresponding fields of DHCP leases).</desc>
18092 </attribute>
18093 <attribute name="hostIP" type="wstring">
18094 <desc>IP of host interface to bind all opened sockets to.
18095 <note>Changing this does not change binding of port forwarding.</note>
18096 </desc>
18097 </attribute>
18098 <attribute name="TFTPPrefix" type="wstring">
18099 <desc>TFTP prefix attribute which is used with the built-in DHCP server to fill
18100 the corresponding fields of DHCP leases.</desc>
18101 </attribute>
18102 <attribute name="TFTPBootFile" type="wstring">
18103 <desc>TFTP boot file attribute which is used with the built-in DHCP server to fill
18104 the corresponding fields of DHCP leases.</desc>
18105 </attribute>
18106 <attribute name="TFTPNextServer" type="wstring">
18107 <desc>TFTP server attribute which is used with the built-in DHCP server to fill
18108 the corresponding fields of DHCP leases.
18109 <note>The preferred form is IPv4 addresses.</note>
18110 </desc>
18111 </attribute>
18112 <attribute name="aliasMode" type="unsigned long">
18113 <desc></desc>
18114 </attribute>
18115 <attribute name="DNSPassDomain" type="boolean">
18116 <desc>Whether the DHCP server should pass the DNS domain used by the host.</desc>
18117 </attribute>
18118 <attribute name="DNSProxy" type="boolean">
18119 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
18120 of the DNS proxy and process traffic using DNS servers registered on the host.</desc>
18121 </attribute>
18122 <attribute name="DNSUseHostResolver" type="boolean">
18123 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
18124 of the DNS proxy and process traffic using the host resolver mechanism.</desc>
18125 </attribute>
18126 <attribute name="redirects" type="wstring" readonly="yes" safearray="yes">
18127 <desc>Array of NAT port-forwarding rules in string representation, in the following
18128 format: "name,protocol id,host ip,host port,guest ip,guest port".</desc>
18129 </attribute>
18130 <method name="setNetworkSettings">
18131 <desc>Sets network configuration of the NAT engine.</desc>
18132 <param name="mtu" type="unsigned long" dir="in">
18133 <desc>MTU (maximum transmission unit) of the NAT engine in bytes.</desc>
18134 </param>
18135 <param name="sockSnd" type="unsigned long" dir="in">
18136 <desc>Capacity of the socket send buffer in bytes when creating a new socket.</desc>
18137 </param>
18138 <param name="sockRcv" type="unsigned long" dir="in">
18139 <desc>Capacity of the socket receive buffer in bytes when creating a new socket.</desc>
18140 </param>
18141 <param name="TcpWndSnd" type="unsigned long" dir="in">
18142 <desc>Initial size of the NAT engine's sending TCP window in bytes when
18143 establishing a new TCP connection.</desc>
18144 </param>
18145 <param name="TcpWndRcv" type="unsigned long" dir="in">
18146 <desc>Initial size of the NAT engine's receiving TCP window in bytes when
18147 establishing a new TCP connection.</desc>
18148 </param>
18149 </method>
18150 <method name="getNetworkSettings">
18151 <desc>Returns network configuration of NAT engine. See <link to="#setNetworkSettings" />
18152 for parameter descriptions.</desc>
18153 <param name="mtu" type="unsigned long" dir="out" />
18154 <param name="sockSnd" type="unsigned long" dir="out" />
18155 <param name="sockRcv" type="unsigned long" dir="out" />
18156 <param name="TcpWndSnd" type="unsigned long" dir="out" />
18157 <param name="TcpWndRcv" type="unsigned long" dir="out" />
18158 </method>
18159 <method name="addRedirect">
18160 <desc>Adds a new NAT port-forwarding rule.</desc>
18161 <param name="name" type="wstring" dir="in">
18162 <desc>The name of the rule. An empty name is acceptable, in which case the NAT engine
18163 auto-generates one using the other parameters.</desc>
18164 </param>
18165 <param name="proto" type="NATProtocol" dir="in">
18166 <desc>Protocol handled with the rule.</desc>
18167 </param>
18168 <param name="hostIP" type="wstring" dir="in">
18169 <desc>IP of the host interface to which the rule should apply. An empty ip address is
18170 acceptable, in which case the NAT engine binds the handling socket to any interface.</desc>
18171 </param>
18172 <param name="hostPort" type="unsigned short" dir="in">
18173 <desc>The port number to listen on.</desc>
18174 </param>
18175 <param name="guestIP" type="wstring" dir="in">
18176 <desc>The IP address of the guest which the NAT engine will forward matching packets
18177 to. An empty IP address is acceptable, in which case the NAT engine will forward
18178 packets to the first DHCP lease (x.x.x.15).</desc>
18179 </param>
18180 <param name="guestPort" type="unsigned short" dir="in">
18181 <desc>The port number to forward.</desc>
18182 </param>
18183 </method>
18184 <method name="removeRedirect">
18185 <desc>Removes a port-forwarding rule that was previously registered.</desc>
18186 <param name="name" type="wstring" dir="in">
18187 <desc>The name of the rule to delete.</desc>
18188 </param>
18189 </method>
18190 </interface>
18191
18192 <!--
18193 // IExtPackManager
18194 /////////////////////////////////////////////////////////////////////////
18195 -->
18196
18197 <interface
18198 name="IExtPackPlugIn" extends="$unknown"
18199 uuid="58000040-e718-4746-bbce-4b86d96da461"
18200 wsmap="suppress"
18201 >
18202 <desc>
18203 Interface for keeping information about a plug-in that ships with an
18204 extension pack.
18205 </desc>
18206 <attribute name="name" type="wstring" readonly="yes">
18207 <desc>The plug-in name.</desc>
18208 </attribute>
18209 <attribute name="description" type="wstring" readonly="yes">
18210 <desc>The plug-in description.</desc>
18211 </attribute>
18212 <attribute name="frontend" type="wstring" readonly="yes">
18213 <desc>
18214 The name of the frontend or component name this plug-in plugs into.
18215 </desc>
18216 </attribute>
18217 <attribute name="modulePath" type="wstring" readonly="yes">
18218 <desc> The module path. </desc>
18219 </attribute>
18220 </interface>
18221
18222 <interface
18223 name="IExtPackBase" extends="$unknown"
18224 uuid="f79b75d8-2890-4f34-ffff-ffffa144e82c"
18225 wsmap="suppress"
18226 >
18227 <desc>
18228 Interface for querying information about an extension pack as well as
18229 accessing COM objects within it.
18230 </desc>
18231 <attribute name="name" type="wstring" readonly="yes">
18232 <desc>The extension pack name. This is unique.</desc>
18233 </attribute>
18234 <attribute name="description" type="wstring" readonly="yes">
18235 <desc>The extension pack description.</desc>
18236 </attribute>
18237 <attribute name="version" type="wstring" readonly="yes">
18238 <desc>
18239 The extension pack version string. This is restricted to the dotted
18240 version number and optionally a build indicator. No tree revision or
18241 tag will be included in the string as those things are available as
18242 separate properties. An optional publisher tag may be present like for
18243 <link to="IVirtualBox::version"/>.
18244
18245 Examples: "1.2.3", "1.2.3_BETA1" and "1.2.3_RC2".
18246 </desc>
18247 </attribute>
18248 <attribute name="revision" type="unsigned long" readonly="yes">
18249 <desc>The extension pack internal revision number.</desc>
18250 </attribute>
18251 <attribute name="edition" type="wstring" readonly="yes">
18252 <desc>
18253 Edition indicator. This is usually empty.
18254
18255 Can for instance be used to help distinguishing between two editions
18256 of the same extension pack where only the license, service contract or
18257 something differs.
18258 </desc>
18259 </attribute>
18260 <attribute name="VRDEModule" type="wstring" readonly="yes">
18261 <desc>The name of the VRDE module if the extension pack sports one.</desc>
18262 </attribute>
18263 <attribute name="plugIns" type="IExtPackPlugIn" safearray="yes" readonly="yes">
18264 <desc>Plug-ins provided by this extension pack.</desc>
18265 </attribute>
18266 <attribute name="usable" type="boolean" readonly="yes">
18267 <desc>
18268 Indicates whether the extension pack is usable or not.
18269
18270 There are a number of reasons why an extension pack might be unusable,
18271 typical examples would be broken installation/file or that it is
18272 incompatible with the current VirtualBox version.
18273 </desc>
18274 </attribute>
18275 <attribute name="whyUnusable" type="wstring" readonly="yes">
18276 <desc>
18277 String indicating why the extension pack is not usable. This is an
18278 empty string if usable and always a non-empty string if not usable.
18279 </desc>
18280 </attribute>
18281 <attribute name="showLicense" type="boolean" readonly="yes">
18282 <desc>Whether to show the license before installation</desc>
18283 </attribute>
18284 <attribute name="license" type="wstring" readonly="yes">
18285 <desc>
18286 The default HTML license text for the extension pack. Same as
18287 calling <link to="#queryLicense">queryLicense</link> with
18288 preferredLocale and preferredLanguage as empty strings and format set
18289 to html.
18290 </desc>
18291 </attribute>
18292
18293 <method name="queryLicense">
18294 <desc>
18295 Full feature version of the license attribute.
18296 </desc>
18297 <param name="preferredLocale" type="wstring" dir="in">
18298 <desc>
18299 The preferred license locale. Pass an empty string to get the default
18300 license.
18301 </desc>
18302 </param>
18303 <param name="preferredLanguage" type="wstring" dir="in">
18304 <desc>
18305 The preferred license language. Pass an empty string to get the
18306 default language for the locale.
18307 </desc>
18308 </param>
18309 <param name="format" type="wstring" dir="in">
18310 <desc>
18311 The license format: html, rtf or txt. If a license is present there
18312 will always be an HTML of it, the rich text format (RTF) and plain
18313 text (txt) versions are optional. If
18314 </desc>
18315 </param>
18316 <param name="licenseText" type="wstring" dir="return">
18317 <desc>The license text.</desc>
18318 </param>
18319 </method>
18320
18321 </interface>
18322
18323 <interface
18324 name="IExtPack" extends="IExtPackBase"
18325 uuid="431685da-3618-4ebc-b038-833ba829b4b2"
18326 wsmap="suppress"
18327 >
18328 <desc>
18329 Interface for querying information about an extension pack as well as
18330 accessing COM objects within it.
18331 </desc>
18332 <method name="queryObject">
18333 <desc>
18334 Queries the IUnknown interface to an object in the extension pack
18335 main module. This allows plug-ins and others to talk directly to an
18336 extension pack.
18337 </desc>
18338 <param name="objUuid" type="wstring" dir="in">
18339 <desc>The object ID. What exactly this is </desc>
18340 </param>
18341 <param name="returnInterface" type="$unknown" dir="return">
18342 <desc>The queried interface.</desc>
18343 </param>
18344 </method>
18345 </interface>
18346
18347 <interface
18348 name="IExtPackFile" extends="IExtPackBase"
18349 uuid="b6b49f55-efcc-4f08-b486-56e8d8afb10b"
18350 wsmap="suppress"
18351 >
18352 <desc>
18353 Extension pack file (aka tarball, .vbox-extpack) representation returned
18354 by <link to="IExtPackManager::openExtPackFile"/>. This provides the base
18355 extension pack information with the addition of the file name.
18356 </desc>
18357 <attribute name="filePath" type="wstring" readonly="yes">
18358 <desc>
18359 The path to the extension pack file.
18360 </desc>
18361 </attribute>
18362
18363 <method name="install">
18364 <desc>
18365 Install the extension pack.
18366 </desc>
18367 <param name="replace" type="boolean" dir="in">
18368 <desc>
18369 Set this to automatically uninstall any existing extension pack with
18370 the same name as the one being installed.
18371 </desc>
18372 </param>
18373 <param name="displayInfo" type="wstring" dir="in">
18374 <desc>
18375 Platform specific display information. Reserved for future hacks.
18376 </desc>
18377 </param>
18378 <param name="progess" type="IProgress" dir="return">
18379 <desc>
18380 Progress object for the operation.
18381 </desc>
18382 </param>
18383 </method>
18384 </interface>
18385
18386 <interface
18387 name="IExtPackManager" extends="$unknown"
18388 uuid="3295e6ce-b051-47b2-9514-2c588bfe7554"
18389 wsmap="suppress"
18390 >
18391 <desc>
18392 Interface for managing VirtualBox Extension Packs.
18393
18394 TODO: Describe extension packs, how they are managed and how to create
18395 one.
18396 </desc>
18397
18398 <attribute name="installedExtPacks" type="IExtPack" safearray="yes" readonly="yes">
18399 <desc>
18400 List of the installed extension packs.
18401 </desc>
18402 </attribute>
18403
18404 <method name="find">
18405 <desc>
18406 Returns the extension pack with the specified name if found.
18407
18408 <result name="VBOX_E_OBJECT_NOT_FOUND">
18409 No extension pack matching @a name was found.
18410 </result>
18411 </desc>
18412 <param name="name" type="wstring" dir="in">
18413 <desc>The name of the extension pack to locate.</desc>
18414 </param>
18415 <param name="returnData" type="IExtPack" dir="return">
18416 <desc>The extension pack if found.</desc>
18417 </param>
18418 </method>
18419
18420 <method name="openExtPackFile">
18421 <desc>
18422 Attempts to open an extension pack file in preparation for
18423 installation.
18424 </desc>
18425 <param name="path" type="wstring" dir="in">
18426 <desc>The path of the extension pack tarball. This can optionally be
18427 followed by a "::SHA-256=hex-digit" of the tarball. </desc>
18428 </param>
18429 <param name="file" type="IExtPackFile" dir="return">
18430 <desc>The interface of the extension pack file object.</desc>
18431 </param>
18432 </method>
18433
18434 <method name="uninstall">
18435 <desc>Uninstalls an extension pack, removing all related files.</desc>
18436 <param name="name" type="wstring" dir="in">
18437 <desc>The name of the extension pack to uninstall.</desc>
18438 </param>
18439 <param name="forcedRemoval" type="boolean" dir="in">
18440 <desc>
18441 Forced removal of the extension pack. This means that the uninstall
18442 hook will not be called.
18443 </desc>
18444 </param>
18445 <param name="displayInfo" type="wstring" dir="in">
18446 <desc>
18447 Platform specific display information. Reserved for future hacks.
18448 </desc>
18449 </param>
18450 <param name="progess" type="IProgress" dir="return">
18451 <desc>
18452 Progress object for the operation.
18453 </desc>
18454 </param>
18455 </method>
18456
18457 <method name="cleanup">
18458 <desc>Cleans up failed installs and uninstalls</desc>
18459 </method>
18460
18461 <method name="queryAllPlugInsForFrontend">
18462 <desc>
18463 Gets the path to all the plug-in modules for a given frontend.
18464
18465 This is a convenience method that is intended to simplify the plug-in
18466 loading process for a frontend.
18467 </desc>
18468 <param name="frontendName" type="wstring" dir="in">
18469 <desc>The name of the frontend or component.</desc>
18470 </param>
18471 <param name="plugInModules" type="wstring" dir="return" safearray="yes">
18472 <desc>Array containing the plug-in modules (full paths).</desc>
18473 </param>
18474 </method>
18475
18476 <method name="isExtPackUsable">
18477 <desc>Check if the given extension pack is loaded and usable.</desc>
18478 <param name="name" type="wstring" dir="in">
18479 <desc>The name of the extension pack to check for.</desc>
18480 </param>
18481 <param name="usable" type="boolean" dir="return">
18482 <desc>Is the given extension pack loaded and usable.</desc>
18483 </param>
18484 </method>
18485
18486 </interface>
18487
18488 <!--
18489 // BandwidthGroupType
18490 /////////////////////////////////////////////////////////////////////////
18491 -->
18492 <enum
18493 name="BandwidthGroupType"
18494 uuid="1d92b67d-dc69-4be9-ad4c-93a01e1e0c8e">
18495
18496 <desc>
18497 Type of a bandwidth control group.
18498 </desc>
18499
18500 <const name="Null" value="0">
18501 <desc>
18502 Null type, must be first.
18503 </desc>
18504 </const>
18505
18506 <const name="Disk" value="1">
18507 <desc>
18508 The bandwidth group controls disk I/O.
18509 </desc>
18510 </const>
18511
18512 <const name="Network" value="2">
18513 <desc>
18514 The bandwidth group controls network I/O.
18515 </desc>
18516 </const>
18517
18518 </enum>
18519
18520 <!--
18521 // IBandwidthGroup
18522 /////////////////////////////////////////////////////////////////////////
18523 -->
18524 <interface
18525 name="IBandwidthGroup" extends="$unknown"
18526 uuid="badea2d7-0261-4146-89f0-6a57cc34833d"
18527 wsmap="managed"
18528 >
18529 <desc>Represents one bandwidth group.</desc>
18530
18531 <attribute name="name" type="wstring" readonly="yes">
18532 <desc>Name of the group.</desc>
18533 </attribute>
18534
18535 <attribute name="type" type="BandwidthGroupType" readonly="yes">
18536 <desc>Type of the group.</desc>
18537 </attribute>
18538
18539 <attribute name="reference" type="unsigned long" readonly="yes">
18540 <desc>How many devices/medium attachements use this group.</desc>
18541 </attribute>
18542
18543 <attribute name="maxBytesPerSec" type="long long">
18544 <desc>The maximum number of bytes which can be transfered by all
18545 entities attached to this group during one second.</desc>
18546 </attribute>
18547
18548 </interface>
18549
18550 <!--
18551 // IBandwidthControl
18552 /////////////////////////////////////////////////////////////////////////
18553 -->
18554 <interface
18555 name="IBandwidthControl" extends="$unknown"
18556 uuid="e2eb3930-d2f4-4f87-be17-0707e30f019f"
18557 wsmap="managed"
18558 >
18559 <desc>
18560 Controls the bandwidth groups of one machine used to cap I/O done by a VM.
18561 This includes network and disk I/O.
18562 </desc>
18563
18564 <attribute name="numGroups" type="unsigned long" readonly="yes">
18565 <desc>
18566 The current number of existing bandwidth groups managed.
18567 </desc>
18568 </attribute>
18569
18570 <method name="createBandwidthGroup">
18571 <desc>
18572 Creates a new bandwidth group.
18573 </desc>
18574
18575 <param name="name" type="wstring" dir="in">
18576 <desc>Name of the bandwidth group.</desc>
18577 </param>
18578 <param name="type" type="BandwidthGroupType" dir="in">
18579 <desc>The type of the bandwidth group (network or disk).</desc>
18580 </param>
18581 <param name="maxBytesPerSec" type="long long" dir="in">
18582 <desc>The maximum number of bytes which can be transfered by all
18583 entities attached to this group during one second.</desc>
18584 </param>
18585 </method>
18586
18587 <method name="deleteBandwidthGroup">
18588 <desc>
18589 Deletes a new bandwidth group.
18590 </desc>
18591
18592 <param name="name" type="wstring" dir="in">
18593 <desc>Name of the bandwidth group to delete.</desc>
18594 </param>
18595 </method>
18596
18597 <method name="getBandwidthGroup" const="yes">
18598 <desc>
18599 Get a bandwidth group by name.
18600 </desc>
18601
18602 <param name="name" type="wstring" dir="in">
18603 <desc>Name of the bandwidth group to get.</desc>
18604 </param>
18605 <param name="bandwidthGroup" type="IBandwidthGroup" dir="return">
18606 <desc>Where to store the bandwidth group on success.</desc>
18607 </param>
18608 </method>
18609
18610 <method name="getAllBandwidthGroups" const="yes">
18611 <desc>
18612 Get all managed bandwidth groups.
18613 </desc>
18614
18615 <param name="bandwidthGroups" type="IBandwidthGroup" dir="return" safearray="yes">
18616 <desc>The array of managed bandwidth groups.</desc>
18617 </param>
18618 </method>
18619 </interface>
18620
18621 <!--
18622 // IVirtualBoxClient
18623 /////////////////////////////////////////////////////////////////////////
18624 -->
18625
18626 <interface
18627 name="IVirtualBoxClient" extends="$unknown"
18628 uuid="5fe0bd48-1181-40d1-991f-3b02f269a823"
18629 wsmap="suppress"
18630 >
18631 <desc>
18632 Convenience interface for client applications. Treat this as a
18633 singleton, i.e. never create more than one instance of this interface.
18634
18635 At the moment only available for clients of the local API (not usable
18636 via the webservice). Once the session logic is redesigned this might
18637 change.
18638 </desc>
18639
18640 <attribute name="virtualBox" type="IVirtualBox" readonly="yes">
18641 <desc>
18642 Reference to the server-side API root object.
18643 </desc>
18644 </attribute>
18645
18646 <attribute name="session" type="ISession" readonly="yes">
18647 <desc>
18648 Create a new session object and return the reference to it.
18649 </desc>
18650 </attribute>
18651
18652 <attribute name="eventSource" type="IEventSource" readonly="yes">
18653 <desc>
18654 Event source for VirtualBoxClient events.
18655 </desc>
18656 </attribute>
18657
18658 </interface>
18659
18660 <!--
18661 // Events
18662 /////////////////////////////////////////////////////////////////////////
18663 -->
18664 <enum
18665 name="VBoxEventType"
18666 uuid="0d67e79e-b7b1-4919-aab3-b36866075515"
18667 >
18668
18669 <desc>
18670 Type of an event.
18671 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
18672 </desc>
18673
18674 <const name="Invalid" value="0">
18675 <desc>
18676 Invalid event, must be first.
18677 </desc>
18678 </const>
18679
18680 <const name="Any" value="1">
18681 <desc>
18682 Wildcard for all events.
18683 Events of this type are never delivered, and only used in
18684 <link to="IEventSource::registerListener"/> call to simplify registration.
18685 </desc>
18686 </const>
18687
18688 <const name="Vetoable" value="2">
18689 <desc>
18690 Wildcard for all vetoable events. Events of this type are never delivered, and only
18691 used in <link to="IEventSource::registerListener"/> call to simplify registration.
18692 </desc>
18693 </const>
18694
18695 <const name="MachineEvent" value="3">
18696 <desc>
18697 Wildcard for all machine events. Events of this type are never delivered, and only used in
18698 <link to="IEventSource::registerListener"/> call to simplify registration.
18699 </desc>
18700 </const>
18701
18702 <const name="SnapshotEvent" value="4">
18703 <desc>
18704 Wildcard for all snapshot events. Events of this type are never delivered, and only used in
18705 <link to="IEventSource::registerListener"/> call to simplify registration.
18706 </desc>
18707 </const>
18708
18709 <const name="InputEvent" value="5">
18710 <desc>
18711 Wildcard for all input device (keyboard, mouse) events.
18712 Events of this type are never delivered, and only used in
18713 <link to="IEventSource::registerListener"/> call to simplify registration.
18714 </desc>
18715 </const>
18716
18717 <const name="LastWildcard" value="31">
18718 <desc>
18719 Last wildcard.
18720 </desc>
18721 </const>
18722
18723 <const name="OnMachineStateChanged" value="32">
18724 <desc>
18725 See <link to="IMachineStateChangedEvent">IMachineStateChangedEvent</link>.
18726 </desc>
18727 </const>
18728 <const name="OnMachineDataChanged" value="33">
18729 <desc>
18730 See <link to="IMachineDataChangedEvent">IMachineDataChangedEvent</link>.
18731 </desc>
18732 </const>
18733 <const name="OnExtraDataChanged" value="34">
18734 <desc>
18735 See <link to="IExtraDataChangedEvent">IExtraDataChangedEvent</link>.
18736 </desc>
18737 </const>
18738 <const name="OnExtraDataCanChange" value="35">
18739 <desc>
18740 See <link to="IExtraDataCanChangeEvent">IExtraDataCanChangeEvent</link>.
18741 </desc>
18742 </const>
18743 <const name="OnMediumRegistered" value="36">
18744 <desc>
18745 See <link to="IMediumRegisteredEvent">IMediumRegisteredEvent</link>.
18746 </desc>
18747 </const>
18748 <const name="OnMachineRegistered" value="37">
18749 <desc>
18750 See <link to="IMachineRegisteredEvent">IMachineRegisteredEvent</link>.
18751 </desc>
18752 </const>
18753 <const name="OnSessionStateChanged" value="38">
18754 <desc>
18755 See <link to="ISessionStateChangedEvent">ISessionStateChangedEvent</link>.
18756 </desc>
18757 </const>
18758 <const name="OnSnapshotTaken" value="39">
18759 <desc>
18760 See <link to="ISnapshotTakenEvent">ISnapshotTakenEvent</link>.
18761 </desc>
18762 </const>
18763 <const name="OnSnapshotDeleted" value="40">
18764 <desc>
18765 See <link to="ISnapshotDeletedEvent">ISnapshotDeletedEvent</link>.
18766 </desc>
18767 </const>
18768 <const name="OnSnapshotChanged" value="41">
18769 <desc>
18770 See <link to="ISnapshotChangedEvent">ISnapshotChangedEvent</link>.
18771 </desc>
18772 </const>
18773 <const name="OnGuestPropertyChanged" value="42">
18774 <desc>
18775 See <link to="IGuestPropertyChangedEvent">IGuestPropertyChangedEvent</link>.
18776 </desc>
18777 </const>
18778 <!-- Console events -->
18779 <const name="OnMousePointerShapeChanged" value="43">
18780 <desc>
18781 See <link to="IMousePointerShapeChangedEvent">IMousePointerShapeChangedEvent</link>.
18782 </desc>
18783 </const>
18784 <const name="OnMouseCapabilityChanged" value="44">
18785 <desc>
18786 See <link to="IMouseCapabilityChangedEvent">IMouseCapabilityChangedEvent</link>.
18787 </desc>
18788 </const>
18789 <const name="OnKeyboardLedsChanged" value="45">
18790 <desc>
18791 See <link to="IKeyboardLedsChangedEvent">IKeyboardLedsChangedEvent</link>.
18792 </desc>
18793 </const>
18794 <const name="OnStateChanged" value="46">
18795 <desc>
18796 See <link to="IStateChangedEvent">IStateChangedEvent</link>.
18797 </desc>
18798 </const>
18799 <const name="OnAdditionsStateChanged" value="47">
18800 <desc>
18801 See <link to="IAdditionsStateChangedEvent">IAdditionsStateChangedEvent</link>.
18802 </desc>
18803 </const>
18804 <const name="OnNetworkAdapterChanged" value="48">
18805 <desc>
18806 See <link to="INetworkAdapterChangedEvent">INetworkAdapterChangedEvent</link>.
18807 </desc>
18808 </const>
18809 <const name="OnSerialPortChanged" value="49">
18810 <desc>
18811 See <link to="ISerialPortChangedEvent">ISerialPortChangedEvent</link>.
18812 </desc>
18813 </const>
18814 <const name="OnParallelPortChanged" value="50">
18815 <desc>
18816 See <link to="IParallelPortChangedEvent">IParallelPortChangedEvent</link>.
18817 </desc>
18818 </const>
18819 <const name="OnStorageControllerChanged" value="51">
18820 <desc>
18821 See <link to="IStorageControllerChangedEvent">IStorageControllerChangedEvent</link>.
18822 </desc>
18823 </const>
18824 <const name="OnMediumChanged" value="52">
18825 <desc>
18826 See <link to="IMediumChangedEvent">IMediumChangedEvent</link>.
18827 </desc>
18828 </const>
18829 <const name="OnVRDEServerChanged" value="53">
18830 <desc>
18831 See <link to="IVRDEServerChangedEvent">IVRDEServerChangedEvent</link>.
18832 </desc>
18833 </const>
18834 <const name="OnUSBControllerChanged" value="54">
18835 <desc>
18836 See <link to="IUSBControllerChangedEvent">IUSBControllerChangedEvent</link>.
18837 </desc>
18838 </const>
18839 <const name="OnUSBDeviceStateChanged" value="55">
18840 <desc>
18841 See <link to="IUSBDeviceStateChangedEvent">IUSBDeviceStateChangedEvent</link>.
18842 </desc>
18843 </const>
18844 <const name="OnSharedFolderChanged" value="56">
18845 <desc>
18846 See <link to="ISharedFolderChangedEvent">ISharedFolderChangedEvent</link>.
18847 </desc>
18848 </const>
18849 <const name="OnRuntimeError" value="57">
18850 <desc>
18851 See <link to="IRuntimeErrorEvent">IRuntimeErrorEvent</link>.
18852 </desc>
18853 </const>
18854 <const name="OnCanShowWindow" value="58">
18855 <desc>
18856 See <link to="ICanShowWindowEvent">ICanShowWindowEvent</link>.
18857 </desc>
18858 </const>
18859 <const name="OnShowWindow" value="59">
18860 <desc>
18861 See <link to="IShowWindowEvent">IShowWindowEvent</link>.
18862 </desc>
18863 </const>
18864 <const name="OnCPUChanged" value="60">
18865 <desc>
18866 See <link to="ICPUChangedEvent">ICPUChangedEvent</link>.
18867 </desc>
18868 </const>
18869 <const name="OnVRDEServerInfoChanged" value="61">
18870 <desc>
18871 See <link to="IVRDEServerInfoChangedEvent">IVRDEServerInfoChangedEvent</link>.
18872 </desc>
18873 </const>
18874 <const name="OnEventSourceChanged" value="62">
18875 <desc>
18876 See <link to="IEventSourceChangedEvent">IEventSourceChangedEvent</link>.
18877 </desc>
18878 </const>
18879 <const name="OnCPUExecutionCapChanged" value="63">
18880 <desc>
18881 See <link to="ICPUExecutionCapChangedEvent">ICPUExecutionCapChangedEvent</link>.
18882 </desc>
18883 </const>
18884 <const name="OnGuestKeyboard" value="64">
18885 <desc>
18886 See <link to="IGuestKeyboardEvent">IGuestKeyboardEvent</link>.
18887 </desc>
18888 </const>
18889 <const name="OnGuestMouse" value="65">
18890 <desc>
18891 See <link to="IGuestMouseEvent">IGuestMouseEvent</link>.
18892 </desc>
18893 </const>
18894 <const name="OnNATRedirect" value="66">
18895 <desc>
18896 See <link to="INATRedirectEvent">INATRedirectEvent</link>.
18897 </desc>
18898 </const>
18899 <const name="OnHostPCIDevicePlug" value="67">
18900 <desc>
18901 See <link to="IHostPCIDevicePlugEvent">IHostPCIDevicePlugEvent</link>.
18902 </desc>
18903 </const>
18904 <const name="OnVBoxSVCAvailabilityChanged" value="68">
18905 <desc>
18906 See <link to="IVBoxSVCAvailabilityChangedEvent">IVBoxSVCAvailablityChangedEvent</link>.
18907 </desc>
18908 </const>
18909 <const name="OnBandwidthGroupChanged" value="69">
18910 <desc>
18911 See <link to="IBandwidthGroupChangedEvent">IBandwidthGroupChangedEvent</link>.
18912 </desc>
18913 </const>
18914 <const name="OnGuestMonitorChanged" value="70">
18915 <desc>
18916 See <link to="IGuestMonitorChangedEvent">IGuestMonitorChangedEvent</link>.
18917 </desc>
18918 </const>
18919 <const name="OnStorageDeviceChanged" value="71">
18920 <desc>
18921 See <link to="IStorageDeviceChangedEvent">IStorageDeviceChangedEvent</link>.
18922 </desc>
18923 </const>
18924 <const name="OnClipboardModeChanged" value="72">
18925 <desc>
18926 See <link to="IClipboardModeChangedEvent">IClipboardModeChangedEvent</link>.
18927 </desc>
18928 </const>
18929 <const name="OnDragAndDropModeChanged" value="73">
18930 <desc>
18931 See <link to="IDragAndDropModeChangedEvent">IDragAndDropModeChangedEvent</link>.
18932 </desc>
18933 </const>
18934
18935 <!-- Last event marker -->
18936 <const name="Last" value="74">
18937 <desc>
18938 Must be last event, used for iterations and structures relying on numerical event values.
18939 </desc>
18940 </const>
18941
18942 </enum>
18943
18944 <interface
18945 name="IEventSource" extends="$unknown"
18946 uuid="9b6e1aee-35f3-4f4d-b5bb-ed0ecefd8538"
18947 wsmap="managed"
18948 >
18949 <desc>
18950 Event source. Generally, any object which could generate events can be an event source,
18951 or aggregate one. To simplify using one-way protocols such as webservices running on top of HTTP(S),
18952 an event source can work with listeners in either active or passive mode. In active mode it is up to
18953 the IEventSource implementation to call <link to="IEventListener::handleEvent" />, in passive mode the
18954 event source keeps track of pending events for each listener and returns available events on demand.
18955
18956 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
18957 </desc>
18958
18959 <method name="createListener">
18960 <desc>
18961 Creates a new listener object, useful for passive mode.
18962 </desc>
18963 <param name="listener" type="IEventListener" dir="return"/>
18964 </method>
18965
18966 <method name="createAggregator">
18967 <desc>
18968 Creates an aggregator event source, collecting events from multiple sources.
18969 This way a single listener can listen for events coming from multiple sources,
18970 using a single blocking <link to="#getEvent"/> on the returned aggregator.
18971 </desc>
18972 <param name="subordinates" type="IEventSource" dir="in" safearray="yes">
18973 <desc>
18974 Subordinate event source this one aggregatres.
18975 </desc>
18976 </param>
18977 <param name="result" type="IEventSource" dir="return">
18978 <desc>
18979 Event source aggregating passed sources.
18980 </desc>
18981 </param>
18982 </method>
18983
18984 <method name="registerListener">
18985 <desc>
18986 Register an event listener.
18987
18988 <note>
18989 To avoid system overload, the VirtualBox server process checks if passive event
18990 listeners call <link to="IEventSource::getEvent"/> frequently enough. In the
18991 current implementation, if more than 500 pending events are detected for a passive
18992 event listener, it is forcefully unregistered by the system, and further
18993 <link to="#getEvent" /> calls will return @c VBOX_E_OBJECT_NOT_FOUND.
18994 </note>
18995 </desc>
18996 <param name="listener" type="IEventListener" dir="in">
18997 <desc>Listener to register.</desc>
18998 </param>
18999 <param name="interesting" type="VBoxEventType" dir="in" safearray="yes">
19000 <desc>
19001 Event types listener is interested in. One can use wildcards like -
19002 <link to="VBoxEventType_Any"/> to specify wildcards, matching more
19003 than one event.
19004 </desc>
19005 </param>
19006 <param name="active" type="boolean" dir="in">
19007 <desc>
19008 Which mode this listener is operating in.
19009 In active mode, <link to="IEventListener::handleEvent" /> is called directly.
19010 In passive mode, an internal event queue is created for this this IEventListener.
19011 For each event coming in, it is added to queues for all interested registered passive
19012 listeners. It is then up to the external code to call the listener's
19013 <link to="IEventListener::handleEvent" /> method. When done with an event, the
19014 external code must call <link to="#eventProcessed" />.
19015 </desc>
19016 </param>
19017 </method>
19018
19019 <method name="unregisterListener">
19020 <desc>
19021 Unregister an event listener. If listener is passive, and some waitable events are still
19022 in queue they are marked as processed automatically.
19023 </desc>
19024 <param name="listener" type="IEventListener" dir="in">
19025 <desc>Listener to unregister.</desc>
19026 </param>
19027 </method>
19028
19029 <method name="fireEvent">
19030 <desc>
19031 Fire an event for this source.
19032 </desc>
19033 <param name="event" type="IEvent" dir="in">
19034 <desc>Event to deliver.</desc>
19035 </param>
19036 <param name="timeout" type="long" dir="in">
19037 <desc>
19038 Maximum time to wait for event processing (if event is waitable), in ms;
19039 0 = no wait, -1 = indefinite wait.
19040 </desc>
19041 </param>
19042 <param name="result" type="boolean" dir="return">
19043 <desc>true if an event was delivered to all targets, or is non-waitable.</desc>
19044 </param>
19045 </method>
19046
19047 <method name="getEvent">
19048 <desc>
19049 Get events from this peer's event queue (for passive mode). Calling this method
19050 regularly is required for passive event listeners to avoid system overload;
19051 see <link to="IEventSource::registerListener" /> for details.
19052
19053 <result name="VBOX_E_OBJECT_NOT_FOUND">
19054 Listener is not registered, or autounregistered.
19055 </result>
19056 </desc>
19057 <param name="listener" type="IEventListener" dir="in">
19058 <desc>Which listener to get data for.</desc>
19059 </param>
19060 <param name="timeout" type="long" dir="in">
19061 <desc>
19062 Maximum time to wait for events, in ms;
19063 0 = no wait, -1 = indefinite wait.
19064 </desc>
19065 </param>
19066 <param name="event" type="IEvent" dir="return">
19067 <desc>Event retrieved, or null if none available.</desc>
19068 </param>
19069 </method>
19070
19071 <method name="eventProcessed">
19072 <desc>
19073 Must be called for waitable events after a particular listener finished its
19074 event processing. When all listeners of a particular event have called this
19075 method, the system will then call <link to="IEvent::setProcessed" />.
19076 </desc>
19077 <param name="listener" type="IEventListener" dir="in">
19078 <desc>Which listener processed event.</desc>
19079 </param>
19080 <param name="event" type="IEvent" dir="in">
19081 <desc>Which event.</desc>
19082 </param>
19083 </method>
19084
19085 </interface>
19086
19087 <interface
19088 name="IEventListener" extends="$unknown"
19089 uuid="67099191-32e7-4f6c-85ee-422304c71b90"
19090 wsmap="managed"
19091 >
19092 <desc>
19093 Event listener. An event listener can work in either active or passive mode, depending on the way
19094 it was registered.
19095 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
19096 </desc>
19097
19098 <method name="handleEvent">
19099 <desc>
19100 Handle event callback for active listeners. It is not called for
19101 passive listeners. After calling <link to="#handleEvent"/> on all active listeners
19102 and having received acknowledgement from all passive listeners via
19103 <link to="IEventSource::eventProcessed"/>, the event is marked as
19104 processed and <link to="IEvent::waitProcessed"/> will return
19105 immediately.
19106 </desc>
19107 <param name="event" type="IEvent" dir="in">
19108 <desc>Event available.</desc>
19109 </param>
19110 </method>
19111
19112 </interface>
19113
19114 <interface
19115 name="IEvent" extends="$unknown"
19116 uuid="0ca2adba-8f30-401b-a8cd-fe31dbe839c0"
19117 wsmap="managed"
19118 >
19119 <desc>
19120 Abstract parent interface for VirtualBox events. Actual events will typically implement
19121 a more specific interface which derives from this (see below).
19122
19123 <b>Introduction to VirtualBox events</b>
19124
19125 Generally speaking, an event (represented by this interface) signals that something
19126 happened, while an event listener (see <link to="IEventListener" />) represents an
19127 entity that is interested in certain events. In order for this to work with
19128 unidirectional protocols (i.e. web services), the concepts of passive and active
19129 listener are used.
19130
19131 Event consumers can register themselves as listeners, providing an array of
19132 events they are interested in (see <link to="IEventSource::registerListener" />).
19133 When an event triggers, the listener is notified about the event. The exact
19134 mechanism of the notification depends on whether the listener was registered as
19135 an active or passive listener:
19136
19137 <ul>
19138 <li>An active listener is very similar to a callback: it is a function invoked
19139 by the API. As opposed to the callbacks that were used in the API before
19140 VirtualBox 4.0 however, events are now objects with an interface hierarchy.
19141 </li>
19142
19143 <li>Passive listeners are somewhat trickier to implement, but do not require
19144 a client function to be callable, which is not an option with scripting
19145 languages or web service clients. Internally the <link to="IEventSource" />
19146 implementation maintains an event queue for each passive listener, and
19147 newly arrived events are put in this queue. When the listener calls
19148 <link to="IEventSource::getEvent"/>, first element from its internal event
19149 queue is returned. When the client completes processing of an event,
19150 the <link to="IEventSource::eventProcessed" /> function must be called,
19151 acknowledging that the event was processed. It supports implementing
19152 waitable events. On passive listener unregistration, all events from its
19153 queue are auto-acknowledged.
19154 </li>
19155 </ul>
19156
19157 Waitable events are useful in situations where the event generator wants to track
19158 delivery or a party wants to wait until all listeners have completed the event. A
19159 typical example would be a vetoable event (see <link to="IVetoEvent" />) where a
19160 listeners might veto a certain action, and thus the event producer has to make
19161 sure that all listeners have processed the event and not vetoed before taking
19162 the action.
19163
19164 A given event may have both passive and active listeners at the same time.
19165
19166 <b>Using events</b>
19167
19168 Any VirtualBox object capable of producing externally visible events provides an
19169 @c eventSource read-only attribute, which is of the type <link to="IEventSource" />.
19170 This event source object is notified by VirtualBox once something has happened, so
19171 consumers may register event listeners with this event source. To register a listener,
19172 an object implementing the <link to="IEventListener" /> interface must be provided.
19173 For active listeners, such an object is typically created by the consumer, while for
19174 passive listeners <link to="IEventSource::createListener" /> should be used. Please
19175 note that a listener created with <link to="IEventSource::createListener"/> must not be used as an active listener.
19176
19177 Once created, the listener must be registered to listen for the desired events
19178 (see <link to="IEventSource::registerListener" />), providing an array of
19179 <link to="VBoxEventType" /> enums. Those elements can either be the individual
19180 event IDs or wildcards matching multiple event IDs.
19181
19182 After registration, the callback's <link to="IEventListener::handleEvent" /> method is
19183 called automatically when the event is triggered, while passive listeners have to call
19184 <link to="IEventSource::getEvent" /> and <link to="IEventSource::eventProcessed" /> in
19185 an event processing loop.
19186
19187 The IEvent interface is an abstract parent interface for all such VirtualBox events
19188 coming in. As a result, the standard use pattern inside <link to="IEventListener::handleEvent" />
19189 or the event processing loop is to check the <link to="#type" /> attribute of the event and
19190 then cast to the appropriate specific interface using @c QueryInterface().
19191 </desc>
19192
19193 <attribute name="type" readonly="yes" type="VBoxEventType">
19194 <desc>
19195 Event type.
19196 </desc>
19197 </attribute>
19198
19199 <attribute name="source" readonly="yes" type="IEventSource">
19200 <desc>
19201 Source of this event.
19202 </desc>
19203 </attribute>
19204
19205 <attribute name="waitable" readonly="yes" type="boolean">
19206 <desc>
19207 If we can wait for this event being processed. If false, <link to="#waitProcessed"/> returns immediately,
19208 and <link to="#setProcessed"/> doesn't make sense. Non-waitable events are generally better performing,
19209 as no additional overhead associated with waitability imposed.
19210 Waitable events are needed when one need to be able to wait for particular event processed,
19211 for example for vetoable changes, or if event refers to some resource which need to be kept immutable
19212 until all consumers confirmed events.
19213 </desc>
19214 </attribute>
19215
19216 <method name="setProcessed">
19217 <desc>
19218 Internal method called by the system when all listeners of a particular event have called
19219 <link to="IEventSource::eventProcessed" />. This should not be called by client code.
19220 </desc>
19221 </method>
19222
19223 <method name="waitProcessed">
19224 <desc>
19225 Wait until time outs, or this event is processed. Event must be waitable for this operation to have
19226 described semantics, for non-waitable returns true immediately.
19227 </desc>
19228 <param name="timeout" type="long" dir="in">
19229 <desc>
19230 Maximum time to wait for event processeing, in ms;
19231 0 = no wait, -1 = indefinite wait.
19232 </desc>
19233 </param>
19234 <param name="result" type="boolean" dir="return">
19235 <desc>If this event was processed before timeout.</desc>
19236 </param>
19237 </method>
19238 </interface>
19239
19240
19241 <interface
19242 name="IReusableEvent" extends="IEvent"
19243 uuid="69bfb134-80f6-4266-8e20-16371f68fa25"
19244 wsmap="managed"
19245 >
19246 <desc>Base abstract interface for all reusable events.</desc>
19247
19248 <attribute name="generation" readonly="yes" type="unsigned long">
19249 <desc>Current generation of event, incremented on reuse.</desc>
19250 </attribute>
19251
19252 <method name="reuse">
19253 <desc>
19254 Marks an event as reused, increments 'generation', fields shall no
19255 longer be considered valid.
19256 </desc>
19257 </method>
19258 </interface>
19259
19260 <interface
19261 name="IMachineEvent" extends="IEvent"
19262 uuid="92ed7b1a-0d96-40ed-ae46-a564d484325e"
19263 wsmap="managed" id="MachineEvent"
19264 >
19265 <desc>Base abstract interface for all machine events.</desc>
19266
19267 <attribute name="machineId" readonly="yes" type="uuid" mod="string">
19268 <desc>ID of the machine this event relates to.</desc>
19269 </attribute>
19270
19271 </interface>
19272
19273 <interface
19274 name="IMachineStateChangedEvent" extends="IMachineEvent"
19275 uuid="5748F794-48DF-438D-85EB-98FFD70D18C9"
19276 wsmap="managed" autogen="VBoxEvent" id="OnMachineStateChanged"
19277 >
19278 <desc>Machine state change event.</desc>
19279
19280 <attribute name="state" readonly="yes" type="MachineState">
19281 <desc>New execution state.</desc>
19282 </attribute>
19283 </interface>
19284
19285 <interface
19286 name="IMachineDataChangedEvent" extends="IMachineEvent"
19287 uuid="abe94809-2e88-4436-83d7-50f3e64d0503"
19288 wsmap="managed" autogen="VBoxEvent" id="OnMachineDataChanged"
19289 >
19290 <desc>
19291 Any of the settings of the given machine has changed.
19292 </desc>
19293
19294 <attribute name="temporary" readonly="yes" type="boolean">
19295 <desc>@c true if the settings change is temporary. All permanent
19296 settings changes will trigger an event, and only temporary settings
19297 changes for running VMs will trigger an event. Note: sending events
19298 for temporary changes is NOT IMPLEMENTED.</desc>
19299 </attribute>
19300 </interface>
19301
19302 <interface
19303 name="IMediumRegisteredEvent" extends="IEvent"
19304 uuid="53fac49a-b7f1-4a5a-a4ef-a11dd9c2a458"
19305 wsmap="managed" autogen="VBoxEvent" id="OnMediumRegistered"
19306 >
19307 <desc>
19308 The given medium was registered or unregistered
19309 within this VirtualBox installation.
19310 </desc>
19311
19312 <attribute name="mediumId" readonly="yes" type="uuid" mod="string">
19313 <desc>ID of the medium this event relates to.</desc>
19314 </attribute>
19315
19316 <attribute name="mediumType" readonly="yes" type="DeviceType">
19317 <desc>Type of the medium this event relates to.</desc>
19318 </attribute>
19319
19320 <attribute name="registered" type="boolean" readonly="yes">
19321 <desc>
19322 If @c true, the medium was registered, otherwise it was
19323 unregistered.
19324 </desc>
19325 </attribute>
19326 </interface>
19327
19328 <interface
19329 name="IMachineRegisteredEvent" extends="IMachineEvent"
19330 uuid="c354a762-3ff2-4f2e-8f09-07382ee25088"
19331 wsmap="managed" autogen="VBoxEvent" id="OnMachineRegistered"
19332 >
19333 <desc>
19334 The given machine was registered or unregistered
19335 within this VirtualBox installation.
19336 </desc>
19337
19338 <attribute name="registered" type="boolean" readonly="yes">
19339 <desc>
19340 If @c true, the machine was registered, otherwise it was
19341 unregistered.
19342 </desc>
19343 </attribute>
19344 </interface>
19345
19346 <interface
19347 name="ISessionStateChangedEvent" extends="IMachineEvent"
19348 uuid="714a3eef-799a-4489-86cd-fe8e45b2ff8e"
19349 wsmap="managed" autogen="VBoxEvent" id="OnSessionStateChanged"
19350 >
19351 <desc>
19352 The state of the session for the given machine was changed.
19353 <see><link to="IMachine::sessionState"/></see>
19354 </desc>
19355
19356 <attribute name="state" type="SessionState" readonly="yes">
19357 <desc>
19358 New session state.
19359 </desc>
19360 </attribute>
19361 </interface>
19362
19363 <interface
19364 name="IGuestPropertyChangedEvent" extends="IMachineEvent"
19365 uuid="3f63597a-26f1-4edb-8dd2-6bddd0912368"
19366 wsmap="managed" autogen="VBoxEvent" id="OnGuestPropertyChanged"
19367 >
19368 <desc>
19369 Notification when a guest property has changed.
19370 </desc>
19371
19372 <attribute name="name" readonly="yes" type="wstring">
19373 <desc>
19374 The name of the property that has changed.
19375 </desc>
19376 </attribute>
19377
19378 <attribute name="value" readonly="yes" type="wstring">
19379 <desc>
19380 The new property value.
19381 </desc>
19382 </attribute>
19383
19384 <attribute name="flags" readonly="yes" type="wstring">
19385 <desc>
19386 The new property flags.
19387 </desc>
19388 </attribute>
19389
19390 </interface>
19391
19392 <interface
19393 name="ISnapshotEvent" extends="IMachineEvent"
19394 uuid="21637b0e-34b8-42d3-acfb-7e96daf77c22"
19395 wsmap="managed" id="SnapshotEvent"
19396 >
19397 <desc>Base interface for all snapshot events.</desc>
19398
19399 <attribute name="snapshotId" readonly="yes" type="uuid" mod="string">
19400 <desc>ID of the snapshot this event relates to.</desc>
19401 </attribute>
19402
19403 </interface>
19404
19405 <interface
19406 name="ISnapshotTakenEvent" extends="ISnapshotEvent"
19407 uuid="d27c0b3d-6038-422c-b45e-6d4a0503d9f1"
19408 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotTaken"
19409 >
19410 <desc>
19411 A new snapshot of the machine has been taken.
19412 <see><link to="ISnapshot"/></see>
19413 </desc>
19414 </interface>
19415
19416 <interface
19417 name="ISnapshotDeletedEvent" extends="ISnapshotEvent"
19418 uuid="c48f3401-4a9e-43f4-b7a7-54bd285e22f4"
19419 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotDeleted"
19420 >
19421 <desc>
19422 Snapshot of the given machine has been deleted.
19423
19424 <note>
19425 This notification is delivered <b>after</b> the snapshot
19426 object has been uninitialized on the server (so that any
19427 attempt to call its methods will return an error).
19428 </note>
19429
19430 <see><link to="ISnapshot"/></see>
19431 </desc>
19432 </interface>
19433
19434 <interface
19435 name="ISnapshotChangedEvent" extends="ISnapshotEvent"
19436 uuid="07541941-8079-447a-a33e-47a69c7980db"
19437 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotChanged"
19438 >
19439 <desc>
19440 Snapshot properties (name and/or description) have been changed.
19441 <see><link to="ISnapshot"/></see>
19442 </desc>
19443 </interface>
19444
19445 <interface
19446 name="IMousePointerShapeChangedEvent" extends="IEvent"
19447 uuid="a6dcf6e8-416b-4181-8c4a-45ec95177aef"
19448 wsmap="managed" autogen="VBoxEvent" id="OnMousePointerShapeChanged"
19449 >
19450 <desc>
19451 Notification when the guest mouse pointer shape has
19452 changed. The new shape data is given.
19453 </desc>
19454
19455 <attribute name="visible" type="boolean" readonly="yes">
19456 <desc>
19457 Flag whether the pointer is visible.
19458 </desc>
19459 </attribute>
19460 <attribute name="alpha" type="boolean" readonly="yes">
19461 <desc>
19462 Flag whether the pointer has an alpha channel.
19463 </desc>
19464 </attribute>
19465 <attribute name="xhot" type="unsigned long" readonly="yes">
19466 <desc>
19467 The pointer hot spot X coordinate.
19468 </desc>
19469 </attribute>
19470 <attribute name="yhot" type="unsigned long" readonly="yes">
19471 <desc>
19472 The pointer hot spot Y coordinate.
19473 </desc>
19474 </attribute>
19475 <attribute name="width" type="unsigned long" readonly="yes">
19476 <desc>
19477 Width of the pointer shape in pixels.
19478 </desc>
19479 </attribute>
19480 <attribute name="height" type="unsigned long" readonly="yes">
19481 <desc>
19482 Height of the pointer shape in pixels.
19483 </desc>
19484 </attribute>
19485 <attribute name="shape" type="octet" safearray="yes" readonly="yes">
19486 <desc>
19487 Shape buffer arrays.
19488
19489 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
19490 followed by a 32-bpp XOR (color) mask.
19491
19492 For pointers without alpha channel the XOR mask pixels are 32
19493 bit values: (lsb)BGR0(msb). For pointers with alpha channel
19494 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
19495
19496 An AND mask is used for pointers with alpha channel, so if the
19497 callback does not support alpha, the pointer could be
19498 displayed as a normal color pointer.
19499
19500 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
19501 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
19502 height</tt>. The padding bits at the end of each scanline are
19503 undefined.
19504
19505 The XOR mask follows the AND mask on the next 4-byte aligned
19506 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
19507 Bytes in the gap between the AND and the XOR mask are undefined.
19508 The XOR mask scanlines have no gap between them and the size of
19509 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
19510
19511 <note>
19512 If @a shape is 0, only the pointer visibility is changed.
19513 </note>
19514 </desc>
19515 </attribute>
19516 </interface>
19517
19518 <interface
19519 name="IMouseCapabilityChangedEvent" extends="IEvent"
19520 uuid="d633ad48-820c-4207-b46c-6bd3596640d5"
19521 wsmap="managed" autogen="VBoxEvent" id="OnMouseCapabilityChanged"
19522 >
19523 <desc>
19524 Notification when the mouse capabilities reported by the
19525 guest have changed. The new capabilities are passed.
19526 </desc>
19527 <attribute name="supportsAbsolute" type="boolean" readonly="yes">
19528 <desc>
19529 Supports absolute coordinates.
19530 </desc>
19531 </attribute>
19532 <attribute name="supportsRelative" type="boolean" readonly="yes">
19533 <desc>
19534 Supports relative coordinates.
19535 </desc>
19536 </attribute>
19537 <attribute name="needsHostCursor" type="boolean" readonly="yes">
19538 <desc>
19539 If host cursor is needed.
19540 </desc>
19541 </attribute>
19542 </interface>
19543
19544 <interface
19545 name="IKeyboardLedsChangedEvent" extends="IEvent"
19546 uuid="6DDEF35E-4737-457B-99FC-BC52C851A44F"
19547 wsmap="managed" autogen="VBoxEvent" id="OnKeyboardLedsChanged"
19548 >
19549 <desc>
19550 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
19551 to alter the state of the keyboard LEDs.
19552 </desc>
19553 <attribute name="numLock" type="boolean" readonly="yes">
19554 <desc>
19555 NumLock status.
19556 </desc>
19557 </attribute>
19558 <attribute name="capsLock" type="boolean" readonly="yes">
19559 <desc>
19560 CapsLock status.
19561 </desc>
19562 </attribute>
19563 <attribute name="scrollLock" type="boolean" readonly="yes">
19564 <desc>
19565 ScrollLock status.
19566 </desc>
19567 </attribute>
19568 </interface>
19569
19570 <interface
19571 name="IStateChangedEvent" extends="IEvent"
19572 uuid="4376693C-CF37-453B-9289-3B0F521CAF27"
19573 wsmap="managed" autogen="VBoxEvent" id="OnStateChanged"
19574 >
19575 <desc>
19576 Notification when the execution state of the machine has changed.
19577 The new state is given.
19578 </desc>
19579 <attribute name="state" type="MachineState" readonly="yes">
19580 <desc>
19581 New machine state.
19582 </desc>
19583 </attribute>
19584 </interface>
19585
19586 <interface
19587 name="IAdditionsStateChangedEvent" extends="IEvent"
19588 uuid="D70F7915-DA7C-44C8-A7AC-9F173490446A"
19589 wsmap="managed" autogen="VBoxEvent" id="OnAdditionsStateChanged"
19590 >
19591 <desc>
19592 Notification when a Guest Additions property changes.
19593 Interested callees should query IGuest attributes to
19594 find out what has changed.
19595 </desc>
19596 </interface>
19597
19598 <interface
19599 name="INetworkAdapterChangedEvent" extends="IEvent"
19600 uuid="08889892-1EC6-4883-801D-77F56CFD0103"
19601 wsmap="managed" autogen="VBoxEvent" id="OnNetworkAdapterChanged"
19602 >
19603 <desc>
19604 Notification when a property of one of the
19605 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
19606 changes. Interested callees should use INetworkAdapter methods and
19607 attributes to find out what has changed.
19608 </desc>
19609 <attribute name="networkAdapter" type="INetworkAdapter" readonly="yes">
19610 <desc>
19611 Network adapter that is subject to change.
19612 </desc>
19613 </attribute>
19614 </interface>
19615
19616 <interface
19617 name="ISerialPortChangedEvent" extends="IEvent"
19618 uuid="3BA329DC-659C-488B-835C-4ECA7AE71C6C"
19619 wsmap="managed" autogen="VBoxEvent" id="OnSerialPortChanged"
19620 >
19621 <desc>
19622 Notification when a property of one of the
19623 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
19624 Interested callees should use ISerialPort methods and attributes
19625 to find out what has changed.
19626 </desc>
19627 <attribute name="serialPort" type="ISerialPort" readonly="yes">
19628 <desc>
19629 Serial port that is subject to change.
19630 </desc>
19631 </attribute>
19632 </interface>
19633
19634 <interface
19635 name="IParallelPortChangedEvent" extends="IEvent"
19636 uuid="813C99FC-9849-4F47-813E-24A75DC85615"
19637 wsmap="managed" autogen="VBoxEvent" id="OnParallelPortChanged"
19638 >
19639 <desc>
19640 Notification when a property of one of the
19641 virtual <link to="IMachine::getParallelPort">parallel ports</link>
19642 changes. Interested callees should use ISerialPort methods and
19643 attributes to find out what has changed.
19644 </desc>
19645 <attribute name="parallelPort" type="IParallelPort" readonly="yes">
19646 <desc>
19647 Parallel port that is subject to change.
19648 </desc>
19649 </attribute>
19650 </interface>
19651
19652 <interface
19653 name="IStorageControllerChangedEvent" extends="IEvent"
19654 uuid="715212BF-DA59-426E-8230-3831FAA52C56"
19655 wsmap="managed" autogen="VBoxEvent" id="OnStorageControllerChanged"
19656 >
19657 <desc>
19658 Notification when a
19659 <link to="IMachine::mediumAttachments">medium attachment</link>
19660 changes.
19661 </desc>
19662 </interface>
19663
19664 <interface
19665 name="IMediumChangedEvent" extends="IEvent"
19666 uuid="0FE2DA40-5637-472A-9736-72019EABD7DE"
19667 wsmap="managed" autogen="VBoxEvent" id="OnMediumChanged"
19668 >
19669 <desc>
19670 Notification when a
19671 <link to="IMachine::mediumAttachments">medium attachment</link>
19672 changes.
19673 </desc>
19674 <attribute name="mediumAttachment" type="IMediumAttachment" readonly="yes">
19675 <desc>
19676 Medium attachment that is subject to change.
19677 </desc>
19678 </attribute>
19679 </interface>
19680
19681 <interface
19682 name="IClipboardModeChangedEvent" extends="IEvent"
19683 uuid="cac21692-7997-4595-a731-3a509db604e5"
19684 wsmap="managed" autogen="VBoxEvent" id="OnClipboardModeChanged"
19685 >
19686 <desc>
19687 Notification when the shared clipboard mode changes.
19688 </desc>
19689 <attribute name="clipboardMode" type="ClipboardMode" readonly="yes">
19690 <desc>
19691 The new clipboard mode.
19692 </desc>
19693 </attribute>
19694 </interface>
19695
19696 <interface
19697 name="IDragAndDropModeChangedEvent" extends="IEvent"
19698 uuid="e90b8850-ac8e-4dff-8059-4100ae2c3c3d"
19699 wsmap="managed" autogen="VBoxEvent" id="OnDragAndDropModeChanged"
19700 >
19701 <desc>
19702 Notification when the drag'n'drop mode changes.
19703 </desc>
19704 <attribute name="dragAndDropMode" type="DragAndDropMode" readonly="yes">
19705 <desc>
19706 The new drag'n'drop mode.
19707 </desc>
19708 </attribute>
19709 </interface>
19710
19711 <interface
19712 name="ICPUChangedEvent" extends="IEvent"
19713 uuid="4da2dec7-71b2-4817-9a64-4ed12c17388e"
19714 wsmap="managed" autogen="VBoxEvent" id="OnCPUChanged"
19715 >
19716 <desc>
19717 Notification when a CPU changes.
19718 </desc>
19719 <attribute name="CPU" type="unsigned long" readonly="yes">
19720 <desc>
19721 The CPU which changed.
19722 </desc>
19723 </attribute>
19724 <attribute name="add" type="boolean" readonly="yes">
19725 <desc>
19726 Flag whether the CPU was added or removed.
19727 </desc>
19728 </attribute>
19729 </interface>
19730
19731 <interface
19732 name="ICPUExecutionCapChangedEvent" extends="IEvent"
19733 uuid="dfa7e4f5-b4a4-44ce-85a8-127ac5eb59dc"
19734 wsmap="managed" autogen="VBoxEvent" id="OnCPUExecutionCapChanged"
19735 >
19736 <desc>
19737 Notification when the CPU execution cap changes.
19738 </desc>
19739 <attribute name="executionCap" type="unsigned long" readonly="yes">
19740 <desc>
19741 The new CPU execution cap value. (1-100)
19742 </desc>
19743 </attribute>
19744 </interface>
19745
19746 <interface
19747 name="IGuestKeyboardEvent" extends="IEvent"
19748 uuid="88394258-7006-40d4-b339-472ee3801844"
19749 wsmap="managed" autogen="VBoxEvent" id="OnGuestKeyboard"
19750 >
19751 <desc>
19752 Notification when guest keyboard event happens.
19753 </desc>
19754 <attribute name="scancodes" type="long" safearray="yes" readonly="yes">
19755 <desc>
19756 Array of scancodes.
19757 </desc>
19758 </attribute>
19759 </interface>
19760
19761 <interface
19762 name="IGuestMouseEvent" extends="IReusableEvent"
19763 uuid="1f85d35c-c524-40ff-8e98-307000df0992"
19764 wsmap="managed" autogen="VBoxEvent" id="OnGuestMouse"
19765 >
19766 <desc>
19767 Notification when guest mouse event happens.
19768 </desc>
19769
19770 <attribute name="absolute" type="boolean" readonly="yes">
19771 <desc>
19772 If this event is relative or absolute.
19773 </desc>
19774 </attribute>
19775
19776 <attribute name="x" type="long" readonly="yes">
19777 <desc>
19778 New X position, or X delta.
19779 </desc>
19780 </attribute>
19781
19782 <attribute name="y" type="long" readonly="yes">
19783 <desc>
19784 New Y position, or Y delta.
19785 </desc>
19786 </attribute>
19787
19788 <attribute name="z" type="long" readonly="yes">
19789 <desc>
19790 Z delta.
19791 </desc>
19792 </attribute>
19793
19794 <attribute name="w" type="long" readonly="yes">
19795 <desc>
19796 W delta.
19797 </desc>
19798 </attribute>
19799
19800 <attribute name="buttons" type="long" readonly="yes">
19801 <desc>
19802 Button state bitmask.
19803 </desc>
19804 </attribute>
19805
19806 </interface>
19807
19808
19809 <interface
19810 name="IVRDEServerChangedEvent" extends="IEvent"
19811 uuid="a06fd66a-3188-4c8c-8756-1395e8cb691c"
19812 wsmap="managed" autogen="VBoxEvent" id="OnVRDEServerChanged"
19813 >
19814 <desc>
19815 Notification when a property of the
19816 <link to="IMachine::VRDEServer">VRDE server</link> changes.
19817 Interested callees should use IVRDEServer methods and attributes to
19818 find out what has changed.
19819 </desc>
19820 </interface>
19821
19822 <interface
19823 name="IVRDEServerInfoChangedEvent" extends="IEvent"
19824 uuid="dd6a1080-e1b7-4339-a549-f0878115596e"
19825 wsmap="managed" autogen="VBoxEvent" id="OnVRDEServerInfoChanged"
19826 >
19827 <desc>
19828 Notification when the status of the VRDE server changes. Interested callees
19829 should use <link to="IConsole::VRDEServerInfo">IVRDEServerInfo</link>
19830 attributes to find out what is the current status.
19831 </desc>
19832 </interface>
19833
19834 <interface
19835 name="IUSBControllerChangedEvent" extends="IEvent"
19836 uuid="93BADC0C-61D9-4940-A084-E6BB29AF3D83"
19837 wsmap="managed" autogen="VBoxEvent" id="OnUSBControllerChanged"
19838 >
19839 <desc>
19840 Notification when a property of the virtual
19841 <link to="IMachine::USBController">USB controller</link> changes.
19842 Interested callees should use IUSBController methods and attributes to
19843 find out what has changed.
19844 </desc>
19845 </interface>
19846
19847 <interface
19848 name="IUSBDeviceStateChangedEvent" extends="IEvent"
19849 uuid="806da61b-6679-422a-b629-51b06b0c6d93"
19850 wsmap="managed" autogen="VBoxEvent" id="OnUSBDeviceStateChanged"
19851 >
19852 <desc>
19853 Notification when a USB device is attached to or detached from
19854 the virtual USB controller.
19855
19856 This notification is sent as a result of the indirect
19857 request to attach the device because it matches one of the
19858 machine USB filters, or as a result of the direct request
19859 issued by <link to="IConsole::attachUSBDevice"/> or
19860 <link to="IConsole::detachUSBDevice"/>.
19861
19862 This notification is sent in case of both a succeeded and a
19863 failed request completion. When the request succeeds, the
19864 @a error parameter is @c null, and the given device has been
19865 already added to (when @a attached is @c true) or removed from
19866 (when @a attached is @c false) the collection represented by
19867 <link to="IConsole::USBDevices"/>. On failure, the collection
19868 doesn't change and the @a error parameter represents the error
19869 message describing the failure.
19870 </desc>
19871 <attribute name="device" type="IUSBDevice" readonly="yes">
19872 <desc>
19873 Device that is subject to state change.
19874 </desc>
19875 </attribute>
19876 <attribute name="attached" type="boolean" readonly="yes">
19877 <desc>
19878 @c true if the device was attached and @c false otherwise.
19879 </desc>
19880 </attribute>
19881 <attribute name="error" type="IVirtualBoxErrorInfo" readonly="yes">
19882 <desc>
19883 @c null on success or an error message object on failure.
19884 </desc>
19885 </attribute>
19886 </interface>
19887
19888 <interface
19889 name="ISharedFolderChangedEvent" extends="IEvent"
19890 uuid="B66349B5-3534-4239-B2DE-8E1535D94C0B"
19891 wsmap="managed" autogen="VBoxEvent" id="OnSharedFolderChanged"
19892 >
19893 <desc>
19894 Notification when a shared folder is added or removed.
19895 The @a scope argument defines one of three scopes:
19896 <link to="IVirtualBox::sharedFolders">global shared folders</link>
19897 (<link to="Scope_Global">Global</link>),
19898 <link to="IMachine::sharedFolders">permanent shared folders</link> of
19899 the machine (<link to="Scope_Machine">Machine</link>) or <link
19900 to="IConsole::sharedFolders">transient shared folders</link> of the
19901 machine (<link to="Scope_Session">Session</link>). Interested callees
19902 should use query the corresponding collections to find out what has
19903 changed.
19904 </desc>
19905 <attribute name="scope" type="Scope" readonly="yes">
19906 <desc>
19907 Scope of the notification.
19908 </desc>
19909 </attribute>
19910 </interface>
19911
19912 <interface
19913 name="IRuntimeErrorEvent" extends="IEvent"
19914 uuid="883DD18B-0721-4CDE-867C-1A82ABAF914C"
19915 wsmap="managed" autogen="VBoxEvent" id="OnRuntimeError"
19916 >
19917 <desc>
19918 Notification when an error happens during the virtual
19919 machine execution.
19920
19921 There are three kinds of runtime errors:
19922 <ul>
19923 <li><i>fatal</i></li>
19924 <li><i>non-fatal with retry</i></li>
19925 <li><i>non-fatal warnings</i></li>
19926 </ul>
19927
19928 <b>Fatal</b> errors are indicated by the @a fatal parameter set
19929 to @c true. In case of fatal errors, the virtual machine
19930 execution is always paused before calling this notification, and
19931 the notification handler is supposed either to immediately save
19932 the virtual machine state using <link to="IConsole::saveState"/>
19933 or power it off using <link to="IConsole::powerDown"/>.
19934 Resuming the execution can lead to unpredictable results.
19935
19936 <b>Non-fatal</b> errors and warnings are indicated by the
19937 @a fatal parameter set to @c false. If the virtual machine
19938 is in the Paused state by the time the error notification is
19939 received, it means that the user can <i>try to resume</i> the machine
19940 execution after attempting to solve the problem that caused the
19941 error. In this case, the notification handler is supposed
19942 to show an appropriate message to the user (depending on the
19943 value of the @a id parameter) that offers several actions such
19944 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
19945 wants to retry, the notification handler should continue
19946 the machine execution using the <link to="IConsole::resume"/>
19947 call. If the machine execution is not Paused during this
19948 notification, then it means this notification is a <i>warning</i>
19949 (for example, about a fatal condition that can happen very soon);
19950 no immediate action is required from the user, the machine
19951 continues its normal execution.
19952
19953 Note that in either case the notification handler
19954 <b>must not</b> perform any action directly on a thread
19955 where this notification is called. Everything it is allowed to
19956 do is to post a message to another thread that will then talk
19957 to the user and take the corresponding action.
19958
19959 Currently, the following error identifiers are known:
19960 <ul>
19961 <li><tt>"HostMemoryLow"</tt></li>
19962 <li><tt>"HostAudioNotResponding"</tt></li>
19963 <li><tt>"VDIStorageFull"</tt></li>
19964 <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
19965 </ul>
19966 </desc>
19967 <attribute name="fatal" type="boolean" readonly="yes">
19968 <desc>
19969 Whether the error is fatal or not.
19970 </desc>
19971 </attribute>
19972 <attribute name="id" type="wstring" readonly="yes">
19973 <desc>
19974 Error identifier.
19975 </desc>
19976 </attribute>
19977 <attribute name="message" type="wstring" readonly="yes">
19978 <desc>
19979 Optional error message.
19980 </desc>
19981 </attribute>
19982 </interface>
19983
19984
19985 <interface
19986 name="IEventSourceChangedEvent" extends="IEvent"
19987 uuid="e7932cb8-f6d4-4ab6-9cbf-558eb8959a6a"
19988 waitable="yes"
19989 wsmap="managed" autogen="VBoxEvent" id="OnEventSourceChanged"
19990 >
19991 <desc>
19992 Notification when an event source state changes (listener added or removed).
19993 </desc>
19994
19995 <attribute name="listener" type="IEventListener" readonly="yes">
19996 <desc>
19997 Event listener which has changed.
19998 </desc>
19999 </attribute>
20000
20001 <attribute name="add" type="boolean" readonly="yes">
20002 <desc>
20003 Flag whether listener was added or removed.
20004 </desc>
20005 </attribute>
20006 </interface>
20007
20008 <interface
20009 name="IExtraDataChangedEvent" extends="IEvent"
20010 uuid="024F00CE-6E0B-492A-A8D0-968472A94DC7"
20011 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataChanged"
20012 >
20013 <desc>
20014 Notification when machine specific or global extra data
20015 has changed.
20016 </desc>
20017 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
20018 <desc>
20019 ID of the machine this event relates to.
20020 Null for global extra data changes.
20021 </desc>
20022 </attribute>
20023 <attribute name="key" type="wstring" readonly="yes">
20024 <desc>
20025 Extra data key that has changed.
20026 </desc>
20027 </attribute>
20028 <attribute name="value" type="wstring" readonly="yes">
20029 <desc>
20030 Extra data value for the given key.
20031 </desc>
20032 </attribute>
20033 </interface>
20034
20035 <interface
20036 name="IVetoEvent" extends="IEvent"
20037 uuid="9a1a4130-69fe-472f-ac10-c6fa25d75007"
20038 wsmap="managed"
20039 >
20040 <desc>Base abstract interface for veto events.</desc>
20041
20042 <method name="addVeto">
20043 <desc>
20044 Adds a veto on this event.
20045 </desc>
20046 <param name="reason" type="wstring" dir="in">
20047 <desc>
20048 Reason for veto, could be null or empty string.
20049 </desc>
20050 </param>
20051 </method>
20052
20053 <method name="isVetoed">
20054 <desc>
20055 If this event was vetoed.
20056 </desc>
20057 <param name="result" type="boolean" dir="return">
20058 <desc>
20059 Reason for veto.
20060 </desc>
20061 </param>
20062 </method>
20063
20064 <method name="getVetos">
20065 <desc>
20066 Current veto reason list, if size is 0 - no veto.
20067 </desc>
20068 <param name="result" type="wstring" dir="return" safearray="yes">
20069 <desc>
20070 Array of reasons for veto provided by different event handlers.
20071 </desc>
20072 </param>
20073 </method>
20074
20075 </interface>
20076
20077 <interface
20078 name="IExtraDataCanChangeEvent" extends="IVetoEvent"
20079 uuid="245d88bd-800a-40f8-87a6-170d02249a55"
20080 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataCanChange"
20081 waitable="true"
20082 >
20083 <desc>
20084 Notification when someone tries to change extra data for
20085 either the given machine or (if @c null) global extra data.
20086 This gives the chance to veto against changes.
20087 </desc>
20088 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
20089 <desc>
20090 ID of the machine this event relates to.
20091 Null for global extra data changes.
20092 </desc>
20093 </attribute>
20094 <attribute name="key" type="wstring" readonly="yes">
20095 <desc>
20096 Extra data key that has changed.
20097 </desc>
20098 </attribute>
20099 <attribute name="value" type="wstring" readonly="yes">
20100 <desc>
20101 Extra data value for the given key.
20102 </desc>
20103 </attribute>
20104 </interface>
20105
20106 <interface
20107 name="ICanShowWindowEvent" extends="IVetoEvent"
20108 uuid="adf292b0-92c9-4a77-9d35-e058b39fe0b9"
20109 wsmap="managed" autogen="VBoxEvent" id="OnCanShowWindow"
20110 waitable="true"
20111 >
20112 <desc>
20113 Notification when a call to
20114 <link to="IMachine::canShowConsoleWindow"/> is made by a
20115 front-end to check if a subsequent call to
20116 <link to="IMachine::showConsoleWindow"/> can succeed.
20117
20118 The callee should give an answer appropriate to the current
20119 machine state using event veto. This answer must
20120 remain valid at least until the next
20121 <link to="IConsole::state">machine state</link> change.
20122 </desc>
20123 </interface>
20124
20125 <interface
20126 name="IShowWindowEvent" extends="IEvent"
20127 uuid="B0A0904D-2F05-4D28-855F-488F96BAD2B2"
20128 wsmap="managed" autogen="VBoxEvent" id="OnShowWindow"
20129 waitable="true"
20130 >
20131 <desc>
20132 Notification when a call to
20133 <link to="IMachine::showConsoleWindow"/>
20134 requests the console window to be activated and brought to
20135 foreground on the desktop of the host PC.
20136
20137 This notification should cause the VM console process to
20138 perform the requested action as described above. If it is
20139 impossible to do it at a time of this notification, this
20140 method should return a failure.
20141
20142 Note that many modern window managers on many platforms
20143 implement some sort of focus stealing prevention logic, so
20144 that it may be impossible to activate a window without the
20145 help of the currently active application (which is supposedly
20146 an initiator of this notification). In this case, this method
20147 must return a non-zero identifier that represents the
20148 top-level window of the VM console process. The caller, if it
20149 represents a currently active process, is responsible to use
20150 this identifier (in a platform-dependent manner) to perform
20151 actual window activation.
20152
20153 This method must set @a winId to zero if it has performed all
20154 actions necessary to complete the request and the console
20155 window is now active and in foreground, to indicate that no
20156 further action is required on the caller's side.
20157 </desc>
20158 <attribute name="winId" type="long long">
20159 <desc>
20160 Platform-dependent identifier of the top-level VM console
20161 window, or zero if this method has performed all actions
20162 necessary to implement the <i>show window</i> semantics for
20163 the given platform and/or this VirtualBox front-end.
20164 </desc>
20165 </attribute>
20166 </interface>
20167
20168 <interface
20169 name="INATRedirectEvent" extends="IMachineEvent"
20170 uuid="24eef068-c380-4510-bc7c-19314a7352f1"
20171 wsmap="managed" autogen="VBoxEvent" id="OnNATRedirect"
20172 >
20173 <desc>
20174 Notification when NAT redirect rule added or removed.
20175 </desc>
20176 <attribute name="slot" type="unsigned long" readonly="yes">
20177 <desc>
20178 Adapter which NAT attached to.
20179 </desc>
20180 </attribute>
20181 <attribute name="remove" type="boolean" readonly="yes">
20182 <desc>
20183 Whether rule remove or add.
20184 </desc>
20185 </attribute>
20186 <attribute name="name" type="wstring" readonly="yes">
20187 <desc>
20188 Name of the rule.
20189 </desc>
20190 </attribute>
20191 <attribute name="proto" type="NATProtocol" readonly="yes">
20192 <desc>
20193 Protocol (TCP or UDP) of the redirect rule.
20194 </desc>
20195 </attribute>
20196 <attribute name="hostIP" type="wstring" readonly="yes">
20197 <desc>
20198 Host ip address to bind socket on.
20199 </desc>
20200 </attribute>
20201 <attribute name="hostPort" type="long" readonly="yes">
20202 <desc>
20203 Host port to bind socket on.
20204 </desc>
20205 </attribute>
20206 <attribute name="guestIP" type="wstring" readonly="yes">
20207 <desc>
20208 Guest ip address to redirect to.
20209 </desc>
20210 </attribute>
20211 <attribute name="guestPort" type="long" readonly="yes">
20212 <desc>
20213 Guest port to redirect to.
20214 </desc>
20215 </attribute>
20216 </interface>
20217
20218 <interface
20219 name="IHostPCIDevicePlugEvent" extends="IMachineEvent"
20220 waitable="yes"
20221 uuid="a0bad6df-d612-47d3-89d4-db3992533948"
20222 wsmap="managed" autogen="VBoxEvent" id="OnHostPCIDevicePlug"
20223 >
20224 <desc>
20225 Notification when host PCI device is plugged/unplugged. Plugging
20226 usually takes place on VM startup, unplug - when
20227 <link to="IMachine::detachHostPCIDevice"/> is called.
20228
20229 <see><link to="IMachine::detachHostPCIDevice"/></see>
20230
20231 </desc>
20232
20233 <attribute name="plugged" type="boolean" readonly="yes">
20234 <desc>
20235 If device successfully plugged or unplugged.
20236 </desc>
20237 </attribute>
20238
20239 <attribute name="success" type="boolean" readonly="yes">
20240 <desc>
20241 If operation was successful, if false - 'message' attribute
20242 may be of interest.
20243 </desc>
20244 </attribute>
20245
20246 <attribute name="attachment" type="IPCIDeviceAttachment" readonly="yes">
20247 <desc>
20248 Attachment info for this device.
20249 </desc>
20250 </attribute>
20251
20252 <attribute name="message" type="wstring" readonly="yes">
20253 <desc>
20254 Optional error message.
20255 </desc>
20256 </attribute>
20257
20258 </interface>
20259
20260 <interface
20261 name="IVBoxSVCAvailabilityChangedEvent" extends="IEvent"
20262 uuid="97c78fcd-d4fc-485f-8613-5af88bfcfcdc"
20263 wsmap="managed" autogen="VBoxEvent" id="OnVBoxSVCAvailabilityChanged"
20264 >
20265 <desc>
20266 Notification when VBoxSVC becomes unavailable (due to a crash or similar
20267 unexpected circumstances) or available again.
20268 </desc>
20269
20270 <attribute name="available" type="boolean" readonly="yes">
20271 <desc>
20272 Whether VBoxSVC is available now.
20273 </desc>
20274 </attribute>
20275 </interface>
20276
20277 <interface
20278 name="IBandwidthGroupChangedEvent" extends="IEvent"
20279 uuid="334df94a-7556-4cbc-8c04-043096b02d82"
20280 wsmap="managed" autogen="VBoxEvent" id="OnBandwidthGroupChanged"
20281 >
20282 <desc>
20283 Notification when one of the bandwidth groups changed
20284 </desc>
20285 <attribute name="bandwidthGroup" type="IBandwidthGroup" readonly="yes">
20286 <desc>
20287 The changed bandwidth group.
20288 </desc>
20289 </attribute>
20290 </interface>
20291
20292 <enum
20293 name="GuestMonitorChangedEventType"
20294 uuid="ef172985-7e36-4297-95be-e46396968d66"
20295 >
20296
20297 <desc>
20298 How the guest monitor has been changed.
20299 </desc>
20300
20301 <const name="Enabled" value="0">
20302 <desc>
20303 The guest monitor has been enabled by the guest.
20304 </desc>
20305 </const>
20306
20307 <const name="Disabled" value="1">
20308 <desc>
20309 The guest monitor has been disabled by the guest.
20310 </desc>
20311 </const>
20312
20313 <const name="NewOrigin" value="2">
20314 <desc>
20315 The guest monitor origin has changed in the guest.
20316 </desc>
20317 </const>
20318 </enum>
20319
20320 <interface
20321 name="IGuestMonitorChangedEvent" extends="IEvent"
20322 uuid="0f7b8a22-c71f-4a36-8e5f-a77d01d76090"
20323 wsmap="managed" autogen="VBoxEvent" id="OnGuestMonitorChanged"
20324 >
20325 <desc>
20326 Notification when the guest enables one of its monitors.
20327 </desc>
20328
20329 <attribute name="changeType" type="GuestMonitorChangedEventType" readonly="yes">
20330 <desc>
20331 What was changed for this guest monitor.
20332 </desc>
20333 </attribute>
20334
20335 <attribute name="screenId" type="unsigned long" readonly="yes">
20336 <desc>
20337 The monitor which was changed.
20338 </desc>
20339 </attribute>
20340
20341 <attribute name="originX" type="unsigned long" readonly="yes">
20342 <desc>
20343 Physical X origin relative to the primary screen.
20344 Valid for Enabled and NewOrigin.
20345 </desc>
20346 </attribute>
20347
20348 <attribute name="originY" type="unsigned long" readonly="yes">
20349 <desc>
20350 Physical Y origin relative to the primary screen.
20351 Valid for Enabled and NewOrigin.
20352 </desc>
20353 </attribute>
20354
20355 <attribute name="width" type="unsigned long" readonly="yes">
20356 <desc>
20357 Width of the screen.
20358 Valid for Enabled.
20359 </desc>
20360 </attribute>
20361
20362 <attribute name="height" type="unsigned long" readonly="yes">
20363 <desc>
20364 Height of the screen.
20365 Valid for Enabled.
20366 </desc>
20367 </attribute>
20368
20369 </interface>
20370
20371 <interface
20372 name="IStorageDeviceChangedEvent" extends="IEvent"
20373 uuid="8a5c2dce-e341-49d4-afce-c95979f7d70c"
20374 wsmap="managed" autogen="VBoxEvent" id="OnStorageDeviceChanged"
20375 >
20376 <desc>
20377 Notification when a
20378 <link to="IMachine::mediumAttachments">storage device</link>
20379 is attached or removed.
20380 </desc>
20381 <attribute name="storageDevice" type="IMediumAttachment" readonly="yes">
20382 <desc>
20383 Storage device that is subject to change.
20384 </desc>
20385 </attribute>
20386 <attribute name="removed" type="boolean" readonly="yes">
20387 <desc>
20388 Flag whether the device was removed or added to the VM.
20389 </desc>
20390 </attribute>
20391 </interface>
20392
20393 <module name="VBoxSVC" context="LocalServer">
20394 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
20395 namespace="virtualbox.org">
20396 <interface name="IVirtualBox" default="yes"/>
20397 </class>
20398 </module>
20399
20400 <module name="VBoxC" context="InprocServer" threadingModel="Free">
20401 <class name="VirtualBoxClient" uuid="dd3fc71d-26c0-4fe1-bf6f-67f633265bba"
20402 namespace="virtualbox.org">
20403 <interface name="IVirtualBoxClient" default="yes"/>
20404 </class>
20405
20406 <class name="Session" uuid="3C02F46D-C9D2-4F11-A384-53F0CF917214"
20407 namespace="virtualbox.org">
20408 <interface name="ISession" default="yes"/>
20409 </class>
20410 </module>
20411
20412</library>
20413
20414</idl>
20415
20416<!-- 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