VirtualBox

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

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

Main/VBoxService: Introduced ProcessCreateFlag_ExpandArguments (not implemented yet).

  • Property svn:eol-style set to native
File size: 720.1 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="35192799-bfde-405d-9bea-c735ab9998e4"
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 <const name="ExpandArguments" value="64">
9169 <desc>Expands environment variables in process arguments.</desc>
9170 </const>
9171 </enum>
9172
9173 <enum
9174 name="ProcessPriority"
9175 uuid="ee8cac50-e232-49fe-806b-d1214d9c2e49"
9176 >
9177 <desc>
9178 TODO
9179 </desc>
9180
9181 <const name="Invalid" value="0">
9182 <desc>TODO</desc>
9183 </const>
9184 <const name="Default" value="1">
9185 <desc>TODO</desc>
9186 </const>
9187 </enum>
9188
9189 <enum
9190 name="SymlinkType"
9191 uuid="37794668-f8f1-4714-98a5-6f8fa2ed0118"
9192 >
9193 <desc>
9194 TODO
9195 </desc>
9196
9197 <const name="Unknown" value="0">
9198 <desc>TODO</desc>
9199 </const>
9200 <const name="Directory" value="1">
9201 <desc>TODO</desc>
9202 </const>
9203 <const name="File" value="2">
9204 <desc>TODO</desc>
9205 </const>
9206 </enum>
9207
9208 <enum
9209 name="SymlinkReadFlag"
9210 uuid="b7fe2b9d-790e-4b25-8adf-1ca33026931f"
9211 >
9212 <desc>
9213 TODO
9214 </desc>
9215
9216 <const name="None" value="0">
9217 <desc>TODO.</desc>
9218 </const>
9219 <const name="NoSymlinks" value="1">
9220 <desc>TODO</desc>
9221 </const>
9222 </enum>
9223
9224 <enum
9225 name="ProcessStatus"
9226 uuid="4d52368f-5b48-4bfe-b486-acf89139b52f"
9227 >
9228 <desc>
9229 Guest process execution status.
9230 </desc>
9231 <const name="Undefined" value="0">
9232 <desc>Process is in an undefined state.</desc>
9233 </const>
9234
9235 <const name="Starting" value="10">
9236 <desc>TODO</desc>
9237 </const>
9238 <const name="Started" value="100">
9239 <desc>Process has been started.</desc>
9240 </const>
9241 <const name="Paused" value="110">
9242 <desc>TODO</desc>
9243 </const>
9244 <const name="Terminating" value="480">
9245 <desc>TODO</desc>
9246 </const>
9247 <const name="TerminatedNormally" value="500">
9248 <desc>Process terminated normally.</desc>
9249 </const>
9250 <const name="TerminatedSignal" value="510">
9251 <desc>Process terminated via signal.</desc>
9252 </const>
9253 <const name="TerminatedAbnormally" value="511">
9254 <desc>Process terminated abnormally.</desc>
9255 </const>
9256 <const name="TimedOutKilled" value="512">
9257 <desc>Process timed out and was killed.</desc>
9258 </const>
9259 <const name="TimedOutAbnormally" value="513">
9260 <desc>Process timed out and was not killed successfully.</desc>
9261 </const>
9262 <const name="Down" value="600">
9263 <desc>Service/OS is stopping, process was killed.</desc>
9264 </const>
9265 <const name="Error" value="800">
9266 <desc>Something went wrong (error code in flags).</desc>
9267 </const>
9268 </enum>
9269
9270 <enum
9271 name="FsObjType"
9272 uuid="a1ed437c-b3c3-4ca2-b19c-4239d658d5e8"
9273 >
9274 <desc>
9275 TODO
9276 </desc>
9277
9278 <const name="Undefined" value="0">
9279 <desc>TODO</desc>
9280 </const>
9281 <const name="FIFO" value="1">
9282 <desc>TODO</desc>
9283 </const>
9284 <const name="DevChar" value="10">
9285 <desc>TODO</desc>
9286 </const>
9287 <const name="DevBlock" value="11">
9288 <desc>TODO</desc>
9289 </const>
9290 <const name="Directory" value="50">
9291 <desc>TODO</desc>
9292 </const>
9293 <const name="File" value="80">
9294 <desc>TODO</desc>
9295 </const>
9296 <const name="Symlink" value="100">
9297 <desc>TODO</desc>
9298 </const>
9299 <const name="Socket" value="200">
9300 <desc>TODO</desc>
9301 </const>
9302 <const name="Whiteout" value="400">
9303 <desc>TODO</desc>
9304 </const>
9305 </enum>
9306
9307 <enum
9308 name="DragAndDropAction"
9309 uuid="47f3b162-c107-4fcd-bfa7-54b8135c441e"
9310 >
9311 <desc>
9312 Possible actions within an Drag and Drop operation.
9313 </desc>
9314
9315 <const name="Ignore" value="0">
9316 <desc>Do nothing.</desc>
9317 </const>
9318
9319 <const name="Copy" value="1">
9320 <desc>Copy the item to the target.</desc>
9321 </const>
9322
9323 <const name="Move" value="2">
9324 <desc>Move the item to the target.</desc>
9325 </const>
9326
9327 <const name="Link" value="3">
9328 <desc>Link the item from within the target.</desc>
9329 </const>
9330 </enum>
9331
9332 <enum
9333 name="DirectoryOpenFlag"
9334 uuid="5138837a-8fd2-4194-a1b0-08f7bc3949d0"
9335 >
9336 <desc>
9337 Directory open flags.
9338 </desc>
9339 <const name="None" value="0">
9340 <desc>No flag set.</desc>
9341 </const>
9342 <const name="NoSymlinks" value="1">
9343 <desc>Don't allow symbolic links as part of the path.</desc>
9344 </const>
9345 </enum>
9346
9347 <enum
9348 name="GuestDirEntryType"
9349 uuid="6d19d924-1b77-4fc8-b369-a3b2c85c8241"
9350 >
9351 <desc>
9352 Guest directory entry type.
9353 </desc>
9354 <const name="Unknown" value="0">
9355 <desc>Unknown.</desc>
9356 </const>
9357 <const name="Directory" value="4">
9358 <desc>Regular file.</desc>
9359 </const>
9360 <const name="File" value="10">
9361 <desc>Regular file.</desc>
9362 </const>
9363 <const name="Symlink" value="12">
9364 <desc>Symbolic link.</desc>
9365 </const>
9366 </enum>
9367
9368 <interface
9369 name="IGuestDirEntry" extends="$unknown"
9370 uuid="20a66efc-c2f6-4438-826f-38454c04369e"
9371 wsmap="struct"
9372 >
9373 <desc>
9374 Structure representing a directory entry on the guest OS.
9375 </desc>
9376 <attribute name="nodeId" type="long long" readonly="yes">
9377 <desc>The unique identifier (within the guest's file system) of this file system object.</desc>
9378 </attribute>
9379 <attribute name="name" type="wstring" readonly="yes">
9380 <desc>The filename.</desc>
9381 </attribute>
9382 <attribute name="type" type="GuestDirEntryType" readonly="yes">
9383 <desc>The entry type.</desc>
9384 </attribute>
9385 </interface>
9386
9387 <interface
9388 name="IGuestSession" extends="$unknown"
9389 uuid="45aca317-55d7-4b6c-bbec-d053289118b9"
9390 wsmap="managed"
9391 >
9392
9393 <attribute name="user" type="wstring" readonly="yes">
9394 <desc>
9395 TODO
9396 <note>
9397 TODO
9398 </note>
9399 </desc>
9400 </attribute>
9401
9402 <attribute name="domain" type="wstring" readonly="yes">
9403 <desc>
9404 TODO
9405 <note>
9406 TODO
9407 </note>
9408 </desc>
9409 </attribute>
9410
9411 <attribute name="name" type="wstring" readonly="yes">
9412 <desc>
9413 TODO
9414 <note>
9415 TODO
9416 </note>
9417 </desc>
9418 </attribute>
9419
9420 <attribute name="id" type="unsigned long" readonly="yes">
9421 <desc>
9422 TODO
9423 <note>
9424 TODO
9425 </note>
9426 </desc>
9427 </attribute>
9428
9429 <attribute name="timeout" type="unsigned long" readonly="no">
9430 <desc>
9431 TODO
9432 <note>
9433 TODO
9434 </note>
9435 </desc>
9436 </attribute>
9437
9438 <attribute name="environment" type="wstring" safearray="yes">
9439 <desc>
9440 TODO
9441 </desc>
9442 </attribute>
9443
9444 <attribute name="processes" type="IGuestProcess" readonly="yes" safearray="yes">
9445 <desc>
9446 TODO
9447 </desc>
9448 </attribute>
9449
9450 <attribute name="directories" type="IGuestDirectory" readonly="yes" safearray="yes">
9451 <desc>
9452 TODO
9453 </desc>
9454 </attribute>
9455
9456 <attribute name="files" type="IGuestFile" readonly="yes" safearray="yes">
9457 <desc>
9458 TODO
9459 </desc>
9460 </attribute>
9461
9462 <method name="close">
9463 <desc>
9464 TODO
9465
9466 <result name="VBOX_E_NOT_SUPPORTED">
9467 TODO
9468 </result>
9469 </desc>
9470 </method>
9471
9472 <method name="copyFrom">
9473 <desc>
9474 TODO
9475
9476 <result name="VBOX_E_NOT_SUPPORTED">
9477 TODO
9478 </result>
9479 </desc>
9480 <param name="source" type="wstring" dir="in">
9481 <desc>TODO</desc>
9482 </param>
9483 <param name="dest" type="wstring" dir="in">
9484 <desc>TODO</desc>
9485 </param>
9486 <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
9487 <desc>TODO</desc>
9488 </param>
9489 <param name="progress" type="IProgress" dir="return">
9490 <desc>Progress object to track the operation completion.</desc>
9491 </param>
9492 </method>
9493
9494 <method name="copyTo">
9495 <desc>
9496 TODO
9497
9498 <result name="VBOX_E_NOT_SUPPORTED">
9499 TODO
9500 </result>
9501 </desc>
9502 <param name="source" type="wstring" dir="in">
9503 <desc>TODO</desc>
9504 </param>
9505 <param name="dest" type="wstring" dir="in">
9506 <desc>TODO</desc>
9507 </param>
9508 <param name="flags" type="CopyFileFlag" dir="in" safearray="yes">
9509 <desc>TODO</desc>
9510 </param>
9511 <param name="progress" type="IProgress" dir="return">
9512 <desc>Progress object to track the operation completion.</desc>
9513 </param>
9514 </method>
9515
9516 <method name="directoryCreate">
9517 <desc>
9518 TODO
9519
9520 <result name="VBOX_E_NOT_SUPPORTED">
9521 TODO
9522 </result>
9523 </desc>
9524 <param name="path" type="wstring" dir="in">
9525 <desc>TODO</desc>
9526 </param>
9527 <param name="mode" type="unsigned long" dir="in">
9528 <desc>TODO</desc>
9529 </param>
9530 <param name="flags" type="DirectoryCreateFlag" dir="in" safearray="yes">
9531 <desc>TODO</desc>
9532 </param>
9533 <param name="directory" type="IGuestDirectory" dir="return">
9534 <desc>Optional.</desc>
9535 </param>
9536 </method>
9537
9538 <method name="directoryCreateTemp">
9539 <desc>
9540 TODO
9541
9542 <result name="VBOX_E_NOT_SUPPORTED">
9543 TODO
9544 </result>
9545 </desc>
9546 <param name="templateName" type="wstring" dir="in">
9547 <desc>TODO</desc>
9548 </param>
9549 <param name="mode" type="unsigned long" dir="in">
9550 <desc>TODO</desc>
9551 </param>
9552 <param name="path" type="wstring" dir="in">
9553 <desc>TODO</desc>
9554 </param>
9555 <param name="directory" type="IGuestDirectory" dir="return">
9556 <desc>TODO</desc>
9557 </param>
9558 </method>
9559
9560 <method name="directoryExists">
9561 <desc>
9562 TODO
9563
9564 <result name="VBOX_E_NOT_SUPPORTED">
9565 TODO
9566 </result>
9567 </desc>
9568 <param name="path" type="wstring" dir="in">
9569 <desc>TODO</desc>
9570 </param>
9571 <param name="exists" type="boolean" dir="return">
9572 <desc>TODO</desc>
9573 </param>
9574 </method>
9575
9576 <method name="directoryOpen">
9577 <desc>
9578 TODO
9579
9580 <result name="VBOX_E_NOT_SUPPORTED">
9581 TODO
9582 </result>
9583 </desc>
9584 <param name="path" type="wstring" dir="in">
9585 <desc>TODO</desc>
9586 </param>
9587 <param name="filter" type="wstring" dir="in">
9588 <desc>TODO</desc>
9589 </param>
9590 <param name="flags" type="DirectoryOpenFlag" dir="in" safearray="yes">
9591 <desc>TODO</desc>
9592 </param>
9593 <param name="directory" type="IGuestDirectory" dir="return">
9594 <desc>TODO</desc>
9595 </param>
9596 </method>
9597
9598 <method name="directoryQueryInfo">
9599 <desc>
9600 TODO
9601
9602 <result name="VBOX_E_NOT_SUPPORTED">
9603 TODO
9604 </result>
9605 </desc>
9606 <param name="path" type="wstring" dir="in">
9607 <desc>TODO</desc>
9608 </param>
9609 <param name="info" type="IGuestFsObjInfo" dir="return">
9610 <desc>TODO</desc>
9611 </param>
9612 </method>
9613
9614 <method name="directoryRemove">
9615 <desc>
9616 TODO
9617
9618 <result name="VBOX_E_NOT_SUPPORTED">
9619 TODO
9620 </result>
9621 </desc>
9622 <param name="path" type="wstring" dir="in">
9623 <desc>TODO</desc>
9624 </param>
9625 </method>
9626
9627 <method name="directoryRemoveRecursive">
9628 <desc>
9629 TODO
9630
9631 <result name="VBOX_E_NOT_SUPPORTED">
9632 TODO
9633 </result>
9634 </desc>
9635 <param name="path" type="wstring" dir="in">
9636 <desc>TODO</desc>
9637 </param>
9638 <param name="flags" type="DirectoryRemoveRecFlag" dir="in" safearray="yes">
9639 <desc>TODO</desc>
9640 </param>
9641 <param name="progress" type="IProgress" dir="return">
9642 <desc>TODO</desc>
9643 </param>
9644 </method>
9645
9646 <method name="directoryRename">
9647 <desc>
9648 TODO
9649
9650 <result name="VBOX_E_NOT_SUPPORTED">
9651 TODO
9652 </result>
9653 </desc>
9654 <param name="source" type="wstring" dir="in">
9655 <desc>TODO</desc>
9656 </param>
9657 <param name="dest" type="wstring" dir="in">
9658 <desc>TODO</desc>
9659 </param>
9660 <param name="flags" type="PathRenameFlag" dir="in" safearray="yes">
9661 <desc>TODO</desc>
9662 </param>
9663 </method>
9664
9665 <method name="directorySetACL">
9666 <desc>
9667 TODO
9668
9669 <result name="VBOX_E_NOT_SUPPORTED">
9670 TODO
9671 </result>
9672 </desc>
9673 <param name="path" type="wstring" dir="in">
9674 <desc>TODO</desc>
9675 </param>
9676 <param name="acl" type="wstring" dir="in">
9677 <desc>TODO</desc>
9678 </param>
9679 </method>
9680
9681 <method name="environmentClear">
9682 <desc>
9683 TODO
9684
9685 <result name="VBOX_E_NOT_SUPPORTED">
9686 TODO
9687 </result>
9688 </desc>
9689 </method>
9690
9691 <method name="environmentGet">
9692 <desc>
9693 TODO
9694
9695 <result name="VBOX_E_NOT_SUPPORTED">
9696 TODO
9697 </result>
9698 </desc>
9699 <param name="name" type="wstring" dir="in">
9700 <desc>TODO</desc>
9701 </param>
9702 <param name="value" type="wstring" dir="return">
9703 <desc>TODO</desc>
9704 </param>
9705 </method>
9706
9707 <method name="environmentSet">
9708 <desc>
9709 TODO
9710
9711 <result name="VBOX_E_NOT_SUPPORTED">
9712 TODO
9713 </result>
9714 </desc>
9715 <param name="name" type="wstring" dir="in">
9716 <desc>TODO</desc>
9717 </param>
9718 <param name="value" type="wstring" dir="in">
9719 <desc>TODO</desc>
9720 </param>
9721 </method>
9722
9723 <method name="environmentUnset">
9724 <desc>
9725 TODO
9726
9727 <result name="VBOX_E_NOT_SUPPORTED">
9728 TODO
9729 </result>
9730 </desc>
9731 <param name="name" type="wstring" dir="in">
9732 <desc>TODO</desc>
9733 </param>
9734 </method>
9735
9736 <method name="fileCreateTemp">
9737 <desc>
9738 TODO
9739
9740 <result name="VBOX_E_NOT_SUPPORTED">
9741 TODO
9742 </result>
9743 </desc>
9744 <param name="templateName" type="wstring" dir="in">
9745 <desc>TODO</desc>
9746 </param>
9747 <param name="mode" type="unsigned long" dir="in">
9748 <desc>TODO</desc>
9749 </param>
9750 <param name="path" type="wstring" dir="in">
9751 <desc>TODO</desc>
9752 </param>
9753 <param name="file" type="IGuestFile" dir="return">
9754 <desc>Optional.</desc>
9755 </param>
9756 </method>
9757
9758 <method name="fileExists">
9759 <desc>
9760 TODO
9761
9762 <result name="VBOX_E_NOT_SUPPORTED">
9763 TODO
9764 </result>
9765 </desc>
9766 <param name="path" type="wstring" dir="in">
9767 <desc>TODO</desc>
9768 </param>
9769 <param name="exists" type="boolean" dir="return">
9770 <desc>TODO</desc>
9771 </param>
9772 </method>
9773
9774 <method name="fileRemove">
9775 <desc>
9776 Remove a single file on the guest.
9777
9778 </desc>
9779 <param name="path" type="wstring" dir="in">
9780 <desc>Path to the file to remove.</desc>
9781 </param>
9782 </method>
9783
9784 <method name="fileOpen">
9785 <desc>
9786 TODO
9787
9788 <result name="VBOX_E_NOT_SUPPORTED">
9789 TODO
9790 </result>
9791 </desc>
9792 <param name="path" type="wstring" dir="in">
9793 <desc>TODO</desc>
9794 </param>
9795 <param name="openMode" type="wstring" dir="in">
9796 <desc>TODO</desc>
9797 </param>
9798 <param name="disposition" type="wstring" dir="in">
9799 <desc>TODO</desc>
9800 </param>
9801 <param name="creationMode" type="unsigned long" dir="in">
9802 <desc>TODO</desc>
9803 </param>
9804 <param name="offset" type="long long" dir="in">
9805 <desc>TODO</desc>
9806 </param>
9807 <param name="file" type="IGuestFile" dir="return">
9808 <desc>TODO</desc>
9809 </param>
9810 </method>
9811
9812 <method name="fileQueryInfo">
9813 <desc>
9814 TODO
9815
9816 <result name="VBOX_E_NOT_SUPPORTED">
9817 TODO
9818 </result>
9819 </desc>
9820 <param name="path" type="wstring" dir="in">
9821 <desc>TODO</desc>
9822 </param>
9823 <param name="info" type="IGuestFsObjInfo" dir="return">
9824 <desc>TODO</desc>
9825 </param>
9826 </method>
9827
9828 <method name="fileQuerySize">
9829 <desc>
9830 TODO
9831
9832 <result name="VBOX_E_NOT_SUPPORTED">
9833 TODO
9834 </result>
9835 </desc>
9836 <param name="path" type="wstring" dir="in">
9837 <desc>TODO</desc>
9838 </param>
9839 <param name="size" type="long long" dir="return">
9840 <desc>TODO</desc>
9841 </param>
9842 </method>
9843
9844 <method name="fileRename">
9845 <desc>
9846 TODO
9847
9848 <result name="VBOX_E_NOT_SUPPORTED">
9849 TODO
9850 </result>
9851 </desc>
9852 <param name="source" type="wstring" dir="in">
9853 <desc>TODO</desc>
9854 </param>
9855 <param name="dest" type="wstring" dir="in">
9856 <desc>TODO</desc>
9857 </param>
9858 <param name="flags" type="PathRenameFlag" dir="in" safearray="yes">
9859 <desc>TODO</desc>
9860 </param>
9861 </method>
9862
9863 <method name="fileSetACL">
9864 <desc>
9865 TODO
9866
9867 <result name="VBOX_E_NOT_SUPPORTED">
9868 TODO
9869 </result>
9870 </desc>
9871 <param name="file" type="wstring" dir="in">
9872 <desc>TODO</desc>
9873 </param>
9874 <param name="acl" type="wstring" dir="in">
9875 <desc>TODO</desc>
9876 </param>
9877 </method>
9878
9879 <method name="processCreate">
9880 <desc>
9881 TODO
9882
9883 <result name="VBOX_E_NOT_SUPPORTED">
9884 TODO
9885 </result>
9886 </desc>
9887 <param name="command" type="wstring" dir="in">
9888 <desc>TODO</desc>
9889 </param>
9890 <param name="arguments" type="wstring" dir="in" safearray="yes">
9891 <desc>TODO</desc>
9892 </param>
9893 <param name="environment" type="wstring" dir="in" safearray="yes">
9894 <desc>TODO</desc>
9895 </param>
9896 <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
9897 <desc>TODO</desc>
9898 </param>
9899 <param name="timeoutMS" type="unsigned long" dir="in">
9900 <desc>TODO</desc>
9901 </param>
9902 <param name="guestProcess" type="IGuestProcess" dir="return">
9903 <desc>TODO</desc>
9904 </param>
9905 </method>
9906
9907 <method name="processCreateEx">
9908 <desc>
9909 TODO
9910
9911 <result name="VBOX_E_NOT_SUPPORTED">
9912 TODO
9913 </result>
9914 </desc>
9915 <param name="command" type="wstring" dir="in">
9916 <desc>TODO</desc>
9917 </param>
9918 <param name="arguments" type="wstring" dir="in" safearray="yes">
9919 <desc>TODO</desc>
9920 </param>
9921 <param name="environment" type="wstring" dir="in" safearray="yes">
9922 <desc>TODO</desc>
9923 </param>
9924 <param name="flags" type="ProcessCreateFlag" dir="in" safearray="yes">
9925 <desc>TODO</desc>
9926 </param>
9927 <param name="timeoutMS" type="unsigned long" dir="in">
9928 <desc>TODO</desc>
9929 </param>
9930 <param name="priority" type="ProcessPriority" dir="in">
9931 <desc>TODO</desc>
9932 </param>
9933 <param name="affinity" type="long" dir="in" safearray="yes">
9934 <desc>TODO</desc>
9935 </param>
9936 <param name="guestProcess" type="IGuestProcess" dir="return">
9937 <desc>TODO</desc>
9938 </param>
9939 </method>
9940
9941 <method name="processGet">
9942 <desc>
9943 TODO
9944
9945 <result name="VBOX_E_NOT_SUPPORTED">
9946 TODO
9947 </result>
9948 </desc>
9949 <param name="pid" type="unsigned long" dir="in">
9950 <desc>TODO</desc>
9951 </param>
9952 <param name="guestProcess" type="IGuestProcess" dir="return">
9953 <desc>TODO</desc>
9954 </param>
9955 </method>
9956
9957 <method name="symlinkCreate">
9958 <desc>
9959 TODO
9960
9961 <result name="VBOX_E_NOT_SUPPORTED">
9962 TODO
9963 </result>
9964 </desc>
9965 <param name="source" type="wstring" dir="in">
9966 <desc>TODO</desc>
9967 </param>
9968 <param name="target" type="wstring" dir="in">
9969 <desc>TODO</desc>
9970 </param>
9971 <param name="type" type="SymlinkType" dir="in">
9972 <desc>TODO</desc>
9973 </param>
9974 </method>
9975
9976 <method name="symlinkExists">
9977 <desc>
9978 TODO
9979
9980 <result name="VBOX_E_NOT_SUPPORTED">
9981 TODO
9982 </result>
9983 </desc>
9984 <param name="symlink" type="wstring" dir="in">
9985 <desc>TODO</desc>
9986 </param>
9987 <param name="exists" type="boolean" dir="return">
9988 <desc>TODO</desc>
9989 </param>
9990 </method>
9991
9992 <method name="symlinkRead">
9993 <desc>
9994 TODO
9995
9996 <result name="VBOX_E_NOT_SUPPORTED">
9997 TODO
9998 </result>
9999 </desc>
10000 <param name="symlink" type="wstring" dir="in">
10001 <desc>TODO</desc>
10002 </param>
10003 <param name="flags" type="SymlinkReadFlag" dir="in" safearray="yes">
10004 <desc>TODO</desc>
10005 </param>
10006 <param name="target" type="wstring" dir="return">
10007 <desc>TODO</desc>
10008 </param>
10009 </method>
10010
10011 <method name="symlinkRemoveDirectory">
10012 <desc>
10013 TODO
10014
10015 <result name="VBOX_E_NOT_SUPPORTED">
10016 TODO
10017 </result>
10018 </desc>
10019 <param name="path" type="wstring" dir="in">
10020 <desc>TODO</desc>
10021 </param>
10022 </method>
10023
10024 <method name="symlinkRemoveFile">
10025 <desc>
10026 TODO
10027
10028 <result name="VBOX_E_NOT_SUPPORTED">
10029 TODO
10030 </result>
10031 </desc>
10032 <param name="file" type="wstring" dir="in">
10033 <desc>TODO</desc>
10034 </param>
10035 </method>
10036
10037 </interface>
10038
10039 <interface
10040 name="IProcess" extends="$unknown"
10041 uuid="896df50a-c5d1-4892-8bc6-b78d0c1f4e33"
10042 wsmap="managed"
10043 >
10044 <desc>
10045 TODO
10046 </desc>
10047 <attribute name="PID" type="unsigned long" readonly="yes">
10048 <desc>
10049 TODO
10050 <note>
10051 TODO
10052 </note>
10053 </desc>
10054 </attribute>
10055 <attribute name="status" type="ProcessStatus" readonly="yes">
10056 <desc>
10057 TODO
10058 <note>
10059 TODO
10060 </note>
10061 </desc>
10062 </attribute>
10063 <attribute name="exitCode" type="long" readonly="yes">
10064 <desc>
10065 TODO
10066 <note>
10067 TODO
10068 </note>
10069 </desc>
10070 </attribute>
10071 <attribute name="environment" type="wstring" readonly="yes" safearray="yes">
10072 <desc>
10073 TODO
10074 <note>
10075 TODO
10076 </note>
10077 </desc>
10078 </attribute>
10079 <attribute name="arguments" type="wstring" readonly="yes" safearray="yes">
10080 <desc>
10081 TODO
10082 <note>
10083 TODO
10084 </note>
10085 </desc>
10086 </attribute>
10087 <attribute name="executablePath" type="wstring" readonly="yes">
10088 <desc>
10089 TODO
10090 <note>
10091 TODO
10092 </note>
10093 </desc>
10094 </attribute>
10095 <attribute name="name" type="wstring" readonly="yes">
10096 <desc>
10097 TODO
10098 <note>
10099 TODO
10100 </note>
10101 </desc>
10102 </attribute>
10103
10104 <method name="waitFor">
10105 <desc>
10106 TODO
10107
10108 <result name="VBOX_E_NOT_SUPPORTED">
10109 TODO
10110 </result>
10111 </desc>
10112 <param name="waitFor" type="unsigned long" dir="in">
10113 <desc>TODO</desc>
10114 </param>
10115 <param name="timeoutMS" type="unsigned long" dir="in">
10116 <desc>TODO</desc>
10117 </param>
10118 <param name="reason" type="ProcessWaitResult" dir="return">
10119 <desc>TODO</desc>
10120 </param>
10121 </method>
10122
10123 <method name="waitForArray">
10124 <desc>
10125 Scriptable version of <link to="#waitFor" />.
10126
10127 <result name="VBOX_E_NOT_SUPPORTED">
10128 TODO
10129 </result>
10130 </desc>
10131 <param name="waitFor" type="ProcessWaitForFlag" dir="in" safearray="yes">
10132 <desc>TODO</desc>
10133 </param>
10134 <param name="timeoutMS" type="unsigned long" dir="in">
10135 <desc>TODO</desc>
10136 </param>
10137 <param name="reason" type="ProcessWaitResult" dir="return">
10138 <desc>TODO</desc>
10139 </param>
10140 </method>
10141
10142 <method name="read">
10143 <desc>
10144 TODO
10145
10146 <result name="VBOX_E_NOT_SUPPORTED">
10147 TODO
10148 </result>
10149 </desc>
10150 <param name="handle" type="unsigned long" dir="in">
10151 <desc>TODO</desc>
10152 </param>
10153 <param name="size" type="unsigned long" dir="in">
10154 <desc>TODO</desc>
10155 </param>
10156 <param name="timeoutMS" type="unsigned long" dir="in">
10157 <desc>TODO</desc>
10158 </param>
10159 <param name="data" type="octet" dir="return" safearray="yes">
10160 <desc>TODO</desc>
10161 </param>
10162 </method>
10163
10164 <method name="write">
10165 <desc>
10166 TODO
10167
10168 <result name="VBOX_E_NOT_SUPPORTED">
10169 TODO
10170 </result>
10171 </desc>
10172 <param name="handle" type="unsigned long" dir="in">
10173 <desc>TODO</desc>
10174 </param>
10175 <param name="flags" type="unsigned long" dir="in">
10176 <desc>
10177 <link to="ProcessInputFlag"/> flags.
10178 </desc>
10179 </param>
10180 <param name="data" type="octet" dir="in" safearray="yes">
10181 <desc>TODO</desc>
10182 </param>
10183 <param name="timeoutMS" type="unsigned long" dir="in">
10184 <desc>TODO</desc>
10185 </param>
10186 <param name="written" type="unsigned long" dir="return">
10187 <desc>TODO</desc>
10188 </param>
10189 </method>
10190
10191 <method name="WriteArray">
10192 <desc>
10193 TODO
10194
10195 <result name="VBOX_E_NOT_SUPPORTED">
10196 TODO
10197 </result>
10198 </desc>
10199 <param name="handle" type="unsigned long" dir="in">
10200 <desc>TODO</desc>
10201 </param>
10202 <param name="flags" type="ProcessInputFlag" dir="in" safearray="yes">
10203 <desc>
10204 <link to="ProcessInputFlag"/> flags.
10205 </desc>
10206 </param>
10207 <param name="data" type="octet" dir="in" safearray="yes">
10208 <desc>TODO</desc>
10209 </param>
10210 <param name="timeoutMS" type="unsigned long" dir="in">
10211 <desc>TODO</desc>
10212 </param>
10213 <param name="written" type="unsigned long" dir="return">
10214 <desc>TODO</desc>
10215 </param>
10216 </method>
10217
10218 <method name="terminate">
10219 <desc>
10220 TODO
10221
10222 <result name="VBOX_E_NOT_SUPPORTED">
10223 TODO
10224 </result>
10225 </desc>
10226 </method>
10227 </interface>
10228
10229 <interface
10230 name="IGuestProcess" extends="IProcess"
10231 uuid="dfa39a36-5d43-4840-a025-67ea956b3111"
10232 wsmap="managed"
10233 >
10234 <desc>
10235 TODO
10236 </desc>
10237 </interface>
10238
10239 <interface
10240 name="IDirectory" extends="$unknown"
10241 uuid="1b70dd03-26d7-483a-8877-89bbb0f87b70"
10242 wsmap="managed"
10243 >
10244 <desc>
10245 TODO
10246 </desc>
10247
10248 <attribute name="directoryName" type="wstring" readonly="yes">
10249 <desc>
10250 Full path of directory.
10251 <note>
10252 TODO
10253 </note>
10254 </desc>
10255 </attribute>
10256
10257 <attribute name="filter" type="wstring" readonly="yes">
10258 <desc>
10259 The open filter.
10260 <note>
10261 TODO
10262 </note>
10263 </desc>
10264 </attribute>
10265
10266 <method name="close">
10267 <desc>
10268 TODO
10269
10270 <result name="VBOX_E_NOT_SUPPORTED">
10271 TODO
10272 </result>
10273 </desc>
10274 </method>
10275
10276 <method name="read">
10277 <desc>
10278 TODO
10279
10280 <result name="VBOX_E_OBJECT_NOT_FOUND">
10281 End of directory listing reached.
10282 </result>
10283 </desc>
10284 <param name="objInfo" type="IFsObjInfo" dir="return">
10285 <desc>TODO</desc>
10286 </param>
10287 </method>
10288 </interface>
10289
10290 <interface
10291 name="IGuestDirectory" extends="IDirectory"
10292 uuid="af4a8ce0-0725-42b7-8826-46e3c7ba7357"
10293 wsmap="managed"
10294 >
10295 <desc>
10296 TODO
10297 </desc>
10298 </interface>
10299
10300 <interface
10301 name="IFile" extends="$unknown"
10302 uuid="b3484293-b98b-4952-ae23-f18eca6a5ff9"
10303 wsmap="managed"
10304 >
10305 <desc>
10306 TODO
10307 </desc>
10308 <attribute name="creationMode" type="unsigned long" readonly="yes">
10309 <desc>
10310 TODO
10311 <note>
10312 TODO
10313 </note>
10314 </desc>
10315 </attribute>
10316 <attribute name="disposition" type="unsigned long" readonly="yes">
10317 <desc>
10318 TODO
10319 <note>
10320 TODO
10321 </note>
10322 </desc>
10323 </attribute>
10324 <attribute name="fileName" type="wstring" readonly="yes">
10325 <desc>
10326 TODO
10327 <note>
10328 TODO
10329 </note>
10330 </desc>
10331 </attribute>
10332 <attribute name="initialSize" type="long long" readonly="yes">
10333 <desc>
10334 TODO
10335 <note>
10336 TODO
10337 </note>
10338 </desc>
10339 </attribute>
10340 <attribute name="openMode" type="unsigned long" readonly="yes">
10341 <desc>
10342 TODO
10343 <note>
10344 TODO
10345 </note>
10346 </desc>
10347 </attribute>
10348 <attribute name="offset" type="long long" readonly="yes">
10349 <desc>
10350 TODO
10351 <note>
10352 TODO
10353 </note>
10354 </desc>
10355 </attribute>
10356
10357 <method name="close">
10358 <desc>
10359 TODO
10360
10361 <result name="VBOX_E_NOT_SUPPORTED">
10362 TODO
10363 </result>
10364 </desc>
10365 </method>
10366
10367 <method name="queryInfo">
10368 <desc>
10369 TODO
10370
10371 <result name="VBOX_E_NOT_SUPPORTED">
10372 TODO
10373 </result>
10374 </desc>
10375 <param name="objInfo" type="IFsObjInfo" dir="return">
10376 <desc>TODO</desc>
10377 </param>
10378 </method>
10379
10380 <method name="read">
10381 <desc>
10382 TODO
10383
10384 <result name="VBOX_E_NOT_SUPPORTED">
10385 TODO
10386 </result>
10387 </desc>
10388 <param name="toRead" type="unsigned long" dir="in">
10389 <desc>TODO</desc>
10390 </param>
10391 <param name="read" type="unsigned long" dir="out">
10392 <desc>TODO</desc>
10393 </param>
10394 <param name="data" type="octet" dir="return" safearray="yes">
10395 <desc>TODO</desc>
10396 </param>
10397 </method>
10398
10399 <method name="readAt">
10400 <desc>
10401 TODO
10402
10403 <result name="VBOX_E_NOT_SUPPORTED">
10404 TODO
10405 </result>
10406 </desc>
10407 <param name="offset" type="long long" dir="in">
10408 <desc>TODO</desc>
10409 </param>
10410 <param name="toRead" type="unsigned long" dir="in">
10411 <desc>TODO</desc>
10412 </param>
10413 <param name="read" type="unsigned long" dir="out">
10414 <desc>TODO</desc>
10415 </param>
10416 <param name="data" type="octet" dir="return" safearray="yes">
10417 <desc>TODO</desc>
10418 </param>
10419 </method>
10420
10421 <method name="seek">
10422 <desc>
10423 TODO
10424
10425 <result name="VBOX_E_NOT_SUPPORTED">
10426 TODO
10427 </result>
10428 </desc>
10429 <param name="offset" type="long long" dir="in">
10430 <desc>TODO</desc>
10431 </param>
10432 <param name="whence" type="FileSeekType" dir="in">
10433 <desc>TODO</desc>
10434 </param>
10435 </method>
10436
10437 <method name="setACL">
10438 <desc>
10439 TODO
10440
10441 <result name="VBOX_E_NOT_SUPPORTED">
10442 TODO
10443 </result>
10444 </desc>
10445 <param name="acl" type="wstring" dir="in">
10446 <desc>TODO</desc>
10447 </param>
10448 </method>
10449
10450 <method name="write">
10451 <desc>
10452 TODO
10453
10454 <result name="VBOX_E_NOT_SUPPORTED">
10455 TODO
10456 </result>
10457 </desc>
10458 <param name="data" type="octet" dir="in" safearray="yes">
10459 <desc>TODO</desc>
10460 </param>
10461 <param name="written" type="unsigned long" dir="return">
10462 <desc>TODO</desc>
10463 </param>
10464 </method>
10465
10466 <method name="writeAt">
10467 <desc>
10468 TODO
10469
10470 <result name="VBOX_E_NOT_SUPPORTED">
10471 TODO
10472 </result>
10473 </desc>
10474 <param name="offset" type="long long" dir="in">
10475 <desc>TODO</desc>
10476 </param>
10477 <param name="data" type="octet" dir="in" safearray="yes">
10478 <desc>TODO</desc>
10479 </param>
10480 <param name="written" type="unsigned long" dir="return">
10481 <desc>TODO</desc>
10482 </param>
10483 </method>
10484
10485 </interface>
10486
10487 <interface
10488 name="IGuestFile" extends="IFile"
10489 uuid="60661aec-145f-4d11-b80e-8ea151598093"
10490 wsmap="managed"
10491 >
10492 <desc>
10493 TODO
10494 </desc>
10495 </interface>
10496
10497 <interface
10498 name="IFsObjInfo" extends="$unknown"
10499 uuid="4047ba30-7006-4966-ae86-94164e5e20eb"
10500 wsmap="managed"
10501 >
10502 <desc>
10503 TODO
10504 </desc>
10505
10506 <attribute name="accessTime" type="long long" readonly="yes">
10507 <desc>
10508 TODO
10509 <note>
10510 TODO
10511 </note>
10512 </desc>
10513 </attribute>
10514 <attribute name="allocatedSize" type="long long" readonly="yes">
10515 <desc>
10516 TODO
10517 <note>
10518 TODO
10519 </note>
10520 </desc>
10521 </attribute>
10522 <attribute name="birthTime" type="long long" readonly="yes">
10523 <desc>
10524 TODO
10525 <note>
10526 TODO
10527 </note>
10528 </desc>
10529 </attribute>
10530 <attribute name="changeTime" type="long long" readonly="yes">
10531 <desc>
10532 TODO
10533 <note>
10534 TODO
10535 </note>
10536 </desc>
10537 </attribute>
10538 <attribute name="deviceNumber" type="unsigned long" readonly="yes">
10539 <desc>
10540 TODO
10541 <note>
10542 TODO
10543 </note>
10544 </desc>
10545 </attribute>
10546 <attribute name="fileAttributes" type="wstring" readonly="yes">
10547 <desc>
10548 TODO
10549 <note>
10550 TODO
10551 </note>
10552 </desc>
10553 </attribute>
10554 <attribute name="generationId" type="unsigned long" readonly="yes">
10555 <desc>
10556 TODO
10557 <note>
10558 TODO
10559 </note>
10560 </desc>
10561 </attribute>
10562 <attribute name="GID" type="unsigned long" readonly="yes">
10563 <desc>
10564 TODO
10565 <note>
10566 TODO
10567 </note>
10568 </desc>
10569 </attribute>
10570 <attribute name="groupName" type="wstring" readonly="yes">
10571 <desc>
10572 TODO
10573 <note>
10574 TODO
10575 </note>
10576 </desc>
10577 </attribute>
10578 <attribute name="hardLinks" type="unsigned long" readonly="yes">
10579 <desc>
10580 TODO
10581 <note>
10582 TODO
10583 </note>
10584 </desc>
10585 </attribute>
10586 <attribute name="modificationTime" type="long long" readonly="yes">
10587 <desc>
10588 TODO
10589 <note>
10590 TODO
10591 </note>
10592 </desc>
10593 </attribute>
10594 <attribute name="name" type="wstring" readonly="yes">
10595 <desc>
10596 TODO
10597 <note>
10598 TODO
10599 </note>
10600 </desc>
10601 </attribute>
10602 <attribute name="nodeId" type="long long" readonly="yes">
10603 <desc>
10604 TODO
10605 <note>
10606 TODO
10607 </note>
10608 </desc>
10609 </attribute>
10610 <attribute name="nodeIdDevice" type="unsigned long" readonly="yes">
10611 <desc>
10612 TODO
10613 <note>
10614 TODO
10615 </note>
10616 </desc>
10617 </attribute>
10618 <attribute name="objectSize" type="long long" readonly="yes">
10619 <desc>
10620 TODO
10621 <note>
10622 TODO
10623 </note>
10624 </desc>
10625 </attribute>
10626 <attribute name="type" type="FsObjType" readonly="yes">
10627 <desc>
10628 TODO
10629 <note>
10630 TODO
10631 </note>
10632 </desc>
10633 </attribute>
10634 <attribute name="UID" type="unsigned long" readonly="yes">
10635 <desc>
10636 TODO
10637 <note>
10638 TODO
10639 </note>
10640 </desc>
10641 </attribute>
10642 <attribute name="userFlags" type="unsigned long" readonly="yes">
10643 <desc>
10644 TODO
10645 <note>
10646 TODO
10647 </note>
10648 </desc>
10649 </attribute>
10650 <attribute name="userName" type="wstring" readonly="yes">
10651 <desc>
10652 TODO
10653 <note>
10654 TODO
10655 </note>
10656 </desc>
10657 </attribute>
10658
10659 </interface>
10660
10661 <interface
10662 name="IGuestFsObjInfo" extends="IFsObjInfo"
10663 uuid="d5cf678e-3484-4e4a-ac55-329e15462e18"
10664 wsmap="managed"
10665 >
10666 <desc>
10667 TODO
10668 </desc>
10669 </interface>
10670
10671 <interface
10672 name="IGuest" extends="$unknown"
10673 uuid="19c32350-0618-4ede-b0c3-2b4311bf0d9b"
10674 wsmap="managed"
10675 >
10676 <desc>
10677 The IGuest interface represents information about the operating system
10678 running inside the virtual machine. Used in
10679 <link to="IConsole::guest"/>.
10680
10681 IGuest provides information about the guest operating system, whether
10682 Guest Additions are installed and other OS-specific virtual machine
10683 properties.
10684 </desc>
10685
10686 <attribute name="OSTypeId" type="wstring" readonly="yes">
10687 <desc>
10688 Identifier of the Guest OS type as reported by the Guest
10689 Additions.
10690 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
10691 an IGuestOSType object representing details about the given
10692 Guest OS type.
10693 <note>
10694 If Guest Additions are not installed, this value will be
10695 the same as <link to="IMachine::OSTypeId"/>.
10696 </note>
10697 </desc>
10698 </attribute>
10699
10700 <attribute name="additionsRunLevel" type="AdditionsRunLevelType" readonly="yes">
10701 <desc>
10702 Current run level of the Guest Additions.
10703 </desc>
10704 </attribute>
10705
10706 <attribute name="additionsVersion" type="wstring" readonly="yes">
10707 <desc>
10708 Version of the Guest Additions in the same format as
10709 <link to="IVirtualBox::version"/>.
10710 </desc>
10711 </attribute>
10712
10713 <attribute name="additionsRevision" type="unsigned long" readonly="yes">
10714 <desc>
10715 The internal build revision number of the additions.
10716
10717 See also <link to="IVirtualBox::revision"/>.
10718 </desc>
10719 </attribute>
10720
10721 <attribute name="facilities" type="IAdditionsFacility" readonly="yes" safearray="yes">
10722 <desc>
10723 Array of current known facilities. Only returns facilities where a status is known,
10724 e.g. facilities with an unknown status will not be returned.
10725 </desc>
10726 </attribute>
10727
10728 <attribute name="sessions" type="IGuestSession" readonly="yes" safearray="yes">
10729 <desc>TODO</desc>
10730 </attribute>
10731
10732 <attribute name="memoryBalloonSize" type="unsigned long">
10733 <desc>Guest system memory balloon size in megabytes (transient property).</desc>
10734 </attribute>
10735
10736 <attribute name="statisticsUpdateInterval" type="unsigned long">
10737 <desc>Interval to update guest statistics in seconds.</desc>
10738 </attribute>
10739
10740 <method name="internalGetStatistics">
10741 <desc>
10742 Internal method; do not use as it might change at any time.
10743 </desc>
10744 <param name="cpuUser" type="unsigned long" dir="out">
10745 <desc>Percentage of processor time spent in user mode as seen by the guest.</desc>
10746 </param>
10747 <param name="cpuKernel" type="unsigned long" dir="out">
10748 <desc>Percentage of processor time spent in kernel mode as seen by the guest.</desc>
10749 </param>
10750 <param name="cpuIdle" type="unsigned long" dir="out">
10751 <desc>Percentage of processor time spent idling as seen by the guest.</desc>
10752 </param>
10753 <param name="memTotal" type="unsigned long" dir="out">
10754 <desc>Total amount of physical guest RAM.</desc>
10755 </param>
10756 <param name="memFree" type="unsigned long" dir="out">
10757 <desc>Free amount of physical guest RAM.</desc>
10758 </param>
10759 <param name="memBalloon" type="unsigned long" dir="out">
10760 <desc>Amount of ballooned physical guest RAM.</desc>
10761 </param>
10762 <param name="memShared" type="unsigned long" dir="out">
10763 <desc>Amount of shared physical guest RAM.</desc>
10764 </param>
10765 <param name="memCache" type="unsigned long" dir="out">
10766 <desc>Total amount of guest (disk) cache memory.</desc>
10767 </param>
10768 <param name="pagedTotal" type="unsigned long" dir="out">
10769 <desc>Total amount of space in the page file.</desc>
10770 </param>
10771 <param name="memAllocTotal" type="unsigned long" dir="out">
10772 <desc>Total amount of memory allocated by the hypervisor.</desc>
10773 </param>
10774 <param name="memFreeTotal" type="unsigned long" dir="out">
10775 <desc>Total amount of free memory available in the hypervisor.</desc>
10776 </param>
10777 <param name="memBalloonTotal" type="unsigned long" dir="out">
10778 <desc>Total amount of memory ballooned by the hypervisor.</desc>
10779 </param>
10780 <param name="memSharedTotal" type="unsigned long" dir="out">
10781 <desc>Total amount of shared memory in the hypervisor.</desc>
10782 </param>
10783 </method>
10784
10785 <method name="getFacilityStatus">
10786 <desc>
10787 Get the current status of a Guest Additions facility.
10788 </desc>
10789 <param name="facility" type="AdditionsFacilityType" dir="in">
10790 <desc>Facility to check status for.</desc>
10791 </param>
10792 <param name="timestamp" type="long long" dir="out">
10793 <desc>Timestamp (in ms) of last status update seen by the host.</desc>
10794 </param>
10795 <param name="status" type="AdditionsFacilityStatus" dir="return">
10796 <desc>The current (latest) facility status.</desc>
10797 </param>
10798 </method>
10799
10800 <method name="getAdditionsStatus">
10801 <desc>
10802 Retrieve the current status of a certain Guest Additions run level.
10803
10804 <result name="VBOX_E_NOT_SUPPORTED">
10805 Wrong status level specified.
10806 </result>
10807
10808 </desc>
10809 <param name="level" type="AdditionsRunLevelType" dir="in">
10810 <desc>Status level to check</desc>
10811 </param>
10812 <param name="active" type="boolean" dir="return">
10813 <desc>Flag whether the status level has been reached or not</desc>
10814 </param>
10815 </method>
10816
10817 <method name="setCredentials">
10818 <desc>
10819 Store login credentials that can be queried by guest operating
10820 systems with Additions installed. The credentials are transient
10821 to the session and the guest may also choose to erase them. Note
10822 that the caller cannot determine whether the guest operating system
10823 has queried or made use of the credentials.
10824
10825 <result name="VBOX_E_VM_ERROR">
10826 VMM device is not available.
10827 </result>
10828
10829 </desc>
10830 <param name="userName" type="wstring" dir="in">
10831 <desc>User name string, can be empty</desc>
10832 </param>
10833 <param name="password" type="wstring" dir="in">
10834 <desc>Password string, can be empty</desc>
10835 </param>
10836 <param name="domain" type="wstring" dir="in">
10837 <desc>Domain name (guest logon scheme specific), can be empty</desc>
10838 </param>
10839 <param name="allowInteractiveLogon" type="boolean" dir="in">
10840 <desc>
10841 Flag whether the guest should alternatively allow the user to
10842 interactively specify different credentials. This flag might
10843 not be supported by all versions of the Additions.
10844 </desc>
10845 </param>
10846 </method>
10847
10848 <method name="dragHGEnter">
10849 <desc>
10850 Informs the guest about a Drag and Drop enter event.
10851
10852 This is used in Host - Guest direction.
10853
10854 <result name="VBOX_E_VM_ERROR">
10855 VMM device is not available.
10856 </result>
10857
10858 </desc>
10859 <param name="screenId" type="unsigned long" dir="in">
10860 <desc>The screen id where the Drag and Drop event occured.</desc>
10861 </param>
10862 <param name="y" type="unsigned long" dir="in">
10863 <desc>y-position of the event.</desc>
10864 </param>
10865 <param name="x" type="unsigned long" dir="in">
10866 <desc>x-position of the event.</desc>
10867 </param>
10868 <param name="defaultAction" type="DragAndDropAction" dir="in">
10869 <desc>The default action to use.</desc>
10870 </param>
10871 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10872 <desc>The actions which are allowed.</desc>
10873 </param>
10874 <param name="formats" type="wstring" dir="in" safearray="yes">
10875 <desc>The supported mime types.</desc>
10876 </param>
10877 <param name="resultAction" type="DragAndDropAction" dir="return">
10878 <desc>The resulting action of this event.</desc>
10879 </param>
10880 </method>
10881
10882 <method name="dragHGMove">
10883 <desc>
10884 Informs the guest about a Drag and Drop move event.
10885
10886 This is used in Host - Guest direction.
10887
10888 <result name="VBOX_E_VM_ERROR">
10889 VMM device is not available.
10890 </result>
10891
10892 </desc>
10893 <param name="screenId" type="unsigned long" dir="in">
10894 <desc>The screen id where the Drag and Drop event occured.</desc>
10895 </param>
10896 <param name="x" type="unsigned long" dir="in">
10897 <desc>x-position of the event.</desc>
10898 </param>
10899 <param name="y" type="unsigned long" dir="in">
10900 <desc>y-position of the event.</desc>
10901 </param>
10902 <param name="defaultAction" type="DragAndDropAction" dir="in">
10903 <desc>The default action to use.</desc>
10904 </param>
10905 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10906 <desc>The actions which are allowed.</desc>
10907 </param>
10908 <param name="formats" type="wstring" dir="in" safearray="yes">
10909 <desc>The supported mime types.</desc>
10910 </param>
10911 <param name="resultAction" type="DragAndDropAction" dir="return">
10912 <desc>The resulting action of this event.</desc>
10913 </param>
10914 </method>
10915
10916 <method name="dragHGLeave">
10917 <desc>
10918 Informs the guest about a Drag and Drop leave event.
10919
10920 This is used in Host - Guest direction.
10921
10922 <result name="VBOX_E_VM_ERROR">
10923 VMM device is not available.
10924 </result>
10925
10926 </desc>
10927 <param name="screenId" type="unsigned long" dir="in">
10928 <desc>The screen id where the Drag and Drop event occured.</desc>
10929 </param>
10930 </method>
10931
10932 <method name="dragHGDrop">
10933 <desc>
10934 Informs the guest about a drop event.
10935
10936 This is used in Host - Guest direction.
10937
10938 <result name="VBOX_E_VM_ERROR">
10939 VMM device is not available.
10940 </result>
10941
10942 </desc>
10943 <param name="screenId" type="unsigned long" dir="in">
10944 <desc>The screen id where the Drag and Drop event occured.</desc>
10945 </param>
10946 <param name="x" type="unsigned long" dir="in">
10947 <desc>x-position of the event.</desc>
10948 </param>
10949 <param name="y" type="unsigned long" dir="in">
10950 <desc>y-position of the event.</desc>
10951 </param>
10952 <param name="defaultAction" type="DragAndDropAction" dir="in">
10953 <desc>The default action to use.</desc>
10954 </param>
10955 <param name="allowedActions" type="DragAndDropAction" dir="in" safearray="yes">
10956 <desc>The actions which are allowed.</desc>
10957 </param>
10958 <param name="formats" type="wstring" dir="in" safearray="yes">
10959 <desc>The supported mime types.</desc>
10960 </param>
10961 <param name="format" type="wstring" dir="out">
10962 <desc>The resulting format of this event.</desc>
10963 </param>
10964 <param name="resultAction" type="DragAndDropAction" dir="return">
10965 <desc>The resulting action of this event.</desc>
10966 </param>
10967 </method>
10968
10969 <method name="dragHGPutData">
10970 <desc>
10971 Informs the guest about a drop data event.
10972
10973 This is used in Host - Guest direction.
10974
10975 <result name="VBOX_E_VM_ERROR">
10976 VMM device is not available.
10977 </result>
10978
10979 </desc>
10980 <param name="screenId" type="unsigned long" dir="in">
10981 <desc>The screen id where the Drag and Drop event occured.</desc>
10982 </param>
10983 <param name="format" type="wstring" dir="in">
10984 <desc>The mime type the data is in.</desc>
10985 </param>
10986 <param name="data" type="octet" dir="in" safearray="yes">
10987 <desc>The actual data.</desc>
10988 </param>
10989 <param name="progress" type="IProgress" dir="return">
10990 <desc>Progress object to track the operation completion.</desc>
10991 </param>
10992 </method>
10993
10994 <method name="dragGHPending">
10995 <desc>
10996 Ask the guest if there is any Drag and Drop operation pending in the guest.
10997
10998 If no Drag and Drop operation is pending currently, Ignore is returned.
10999
11000 This is used in Guest - Host direction.
11001
11002 <result name="VBOX_E_VM_ERROR">
11003 VMM device is not available.
11004 </result>
11005
11006 </desc>
11007 <param name="screenId" type="unsigned long" dir="in">
11008 <desc>The screen id where the Drag and Drop event occured.</desc>
11009 </param>
11010 <param name="format" type="wstring" dir="out" safearray="yes">
11011 <desc>On return the supported mime types.</desc>
11012 </param>
11013 <param name="allowedActions" type="DragAndDropAction" dir="out" safearray="yes">
11014 <desc>On return the actions which are allowed.</desc>
11015 </param>
11016 <param name="defaultAction" type="DragAndDropAction" dir="return">
11017 <desc>On return the default action to use.</desc>
11018 </param>
11019 </method>
11020
11021 <method name="dragGHDropped">
11022 <desc>
11023 Informs the guest that a drop event occured for a pending Drag and Drop event.
11024
11025 This is used in Guest - Host direction.
11026
11027 <result name="VBOX_E_VM_ERROR">
11028 VMM device is not available.
11029 </result>
11030
11031 </desc>
11032
11033 <param name="format" type="wstring" dir="in">
11034 <desc>The mime type the data must be in.</desc>
11035 </param>
11036 <param name="action" type="DragAndDropAction" dir="in">
11037 <desc>The action to use.</desc>
11038 </param>
11039 <param name="progress" type="IProgress" dir="return">
11040 <desc>Progress object to track the operation completion.</desc>
11041 </param>
11042 </method>
11043
11044 <method name="dragGHGetData">
11045 <desc>
11046 Fetch the data of a previously Drag and Drop event from the guest.
11047
11048 This is used in Guest - Host direction.
11049
11050 <result name="VBOX_E_VM_ERROR">
11051 VMM device is not available.
11052 </result>
11053
11054 </desc>
11055
11056 <param name="data" type="octet" safearray="yes" dir="return">
11057 <desc>The actual data.</desc>
11058 </param>
11059 </method>
11060
11061 <method name="createSession">
11062 <desc>
11063 TODO
11064 </desc>
11065 <param name="user" type="wstring" dir="in">
11066 <desc>
11067 TODO
11068 </desc>
11069 </param>
11070 <param name="password" type="wstring" dir="in">
11071 <desc>
11072 TODO
11073 </desc>
11074 </param>
11075 <param name="domain" type="wstring" dir="in">
11076 <desc>
11077 TODO
11078 </desc>
11079 </param>
11080 <param name="sessionName" type="wstring" dir="in">
11081 <desc>
11082 TODO
11083 </desc>
11084 </param>
11085 <param name="guestSession" type="IGuestSession" dir="return">
11086 <desc>
11087 TODO
11088 </desc>
11089 </param>
11090 </method>
11091
11092 <method name="findSession">
11093 <desc>
11094 TODO
11095 </desc>
11096 <param name="sessionName" type="wstring" dir="in">
11097 <desc>
11098 TODO
11099 </desc>
11100 </param>
11101 <param name="sessions" type="IGuestSession" safearray="yes" dir="return">
11102 <desc>
11103 TODO
11104 </desc>
11105 </param>
11106 </method>
11107
11108 <method name="executeProcess">
11109 <desc>
11110 Executes an existing program inside the guest VM.
11111
11112 <note>
11113 Starting at VirtualBox 4.1.8 guest process execution by default is limited
11114 to serve up to 25 guest processes at a time. If all 25 guest processes
11115 are still active and running, starting a new guest process will result in an
11116 appropriate error message.
11117
11118 If ExecuteProcessFlag_WaitForStdOut and/or respectively
11119 ExecuteProcessFlag_WaitForStdErr of <link to="ExecuteProcessFlag"/> is
11120 set, the guest process will not exit until all data from the specified
11121 stream(s) is/are read out.
11122
11123 To raise or lower the guest process execution limit, either the guest property
11124 "/VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept" or VBoxService'
11125 command line by specifying "--control-procs-max-kept" needs to be modified.
11126 A restart of the guest OS is required afterwards. To serve unlimited guest
11127 processes, a value of "0" needs to be set (not recommended).
11128 </note>
11129
11130 <result name="VBOX_E_IPRT_ERROR">
11131 Could not execute process.
11132 </result>
11133
11134 </desc>
11135 <param name="execName" type="wstring" dir="in">
11136 <desc>
11137 Full path name of the command to execute on the guest; the
11138 commands has to exists in the guest VM in order to be executed.
11139 </desc>
11140 </param>
11141 <param name="flags" type="unsigned long" dir="in">
11142 <desc>
11143 <link to="ExecuteProcessFlag"/> flags.
11144 </desc>
11145 </param>
11146 <param name="arguments" type="wstring" safearray="yes" dir="in">
11147 <desc>
11148 Array of arguments passed to the execution command.
11149 </desc>
11150 </param>
11151 <param name="environment" type="wstring" safearray="yes" dir="in">
11152 <desc>
11153 Environment variables that can be set while the command is being
11154 executed, in form of "NAME=VALUE"; one pair per entry. To unset a
11155 variable just set its name ("NAME") without a value.
11156 </desc>
11157 </param>
11158 <param name="userName" type="wstring" dir="in">
11159 <desc>
11160 User name under which the command will be executed; has to exist
11161 and have the appropriate rights to execute programs in the VM.
11162 </desc>
11163 </param>
11164 <param name="password" type="wstring" dir="in">
11165 <desc>
11166 Password of the user account specified.
11167 </desc>
11168 </param>
11169 <param name="timeoutMS" type="unsigned long" dir="in">
11170 <desc>
11171 The maximum timeout value (in msec) to wait for finished program
11172 execution. Pass 0 for an infinite timeout.
11173 </desc>
11174 </param>
11175 <param name="pid" type="unsigned long" dir="out">
11176 <desc>
11177 The PID (process ID) of the started command for later reference.
11178 </desc>
11179 </param>
11180 <param name="progress" type="IProgress" dir="return">
11181 <desc>Progress object to track the operation completion.</desc>
11182 </param>
11183 </method>
11184
11185 <method name="getProcessOutput">
11186 <desc>
11187 Retrieves output of a formerly started and running guest process.
11188
11189 <note>
11190 Starting with VirtualBox 4.1.8 this only will return output data
11191 from stdout or stderr if flag ExecuteProcessFlag_WaitForStdOut
11192 and/or respectively ExecuteProcessFlag_WaitForStdErr of
11193 <link to="ExecuteProcessFlag"/> is set in the
11194 former <link to="#executeProcess"/> call for this guest process.
11195 </note>
11196
11197 <result name="VBOX_E_IPRT_ERROR">
11198 Could not retrieve output.
11199 </result>
11200
11201 </desc>
11202 <param name="pid" type="unsigned long" dir="in">
11203 <desc>
11204 Process id returned by earlier <link to="#executeProcess"/> call.
11205 </desc>
11206 </param>
11207 <param name="flags" type="unsigned long" dir="in">
11208 <desc>
11209 <link to="ProcessOutputFlag"/> flags.
11210 </desc>
11211 </param>
11212 <param name="timeoutMS" type="unsigned long" dir="in">
11213 <desc>
11214 The maximum timeout value (in msec) to wait for output
11215 data. Pass 0 for an infinite timeout.
11216 </desc>
11217 </param>
11218 <param name="size" type="long long" dir="in">
11219 <desc>
11220 Size in bytes to read in the buffer.
11221 </desc>
11222 </param>
11223 <param name="data" type="octet" safearray="yes" dir="return">
11224 <desc>
11225 Buffer for retrieving the actual output. A data size of 0 means end of file
11226 if the requested size was not 0. This is the unprocessed
11227 output data, i.e. the line ending style depends on the platform of
11228 the system the server is running on.
11229 </desc>
11230 </param>
11231 </method>
11232
11233 <method name="getProcessStatus">
11234 <desc>
11235 Retrieves status, exit code and the exit reason of a formerly started
11236 guest process. If a guest process exited or got terminated this function
11237 returns its final status and removes this process from the list of
11238 known guest processes for further retrieval.
11239
11240 <result name="VBOX_E_IPRT_ERROR">
11241 Process with specified PID was not found.
11242 </result>
11243
11244 </desc>
11245 <param name="pid" type="unsigned long" dir="in">
11246 <desc>
11247 Process id returned by earlier <link to="#executeProcess"/> call.
11248 </desc>
11249 </param>
11250 <param name="exitcode" type="unsigned long" dir="out">
11251 <desc>
11252 The exit code (if available).
11253 </desc>
11254 </param>
11255 <param name="flags" type="unsigned long" dir="out">
11256 <desc>
11257 Additional flags of process status. Not used at the moment and
11258 must be set to 0.
11259 </desc>
11260 </param>
11261 <param name="reason" type="ExecuteProcessStatus" dir="return">
11262 <desc>
11263 The current process status.
11264 </desc>
11265 </param>
11266 </method>
11267
11268 <method name="copyFromGuest">
11269 <desc>
11270 Copies files/directories from guest to the host.
11271
11272 <result name="VBOX_E_IPRT_ERROR">
11273 Error while copying.
11274 </result>
11275
11276 </desc>
11277 <param name="source" type="wstring" dir="in">
11278 <desc>
11279 Source file on the guest to copy.
11280 </desc>
11281 </param>
11282 <param name="dest" type="wstring" dir="in">
11283 <desc>
11284 Destination path on the host.
11285 </desc>
11286 </param>
11287 <param name="userName" type="wstring" dir="in">
11288 <desc>
11289 User name under which the copy command will be executed; the
11290 user has to exist and have the appropriate rights to read from
11291 the source path.
11292 </desc>
11293 </param>
11294 <param name="password" type="wstring" dir="in">
11295 <desc>
11296 Password of the user account specified.
11297 </desc>
11298 </param>
11299 <param name="flags" type="unsigned long" dir="in">
11300 <desc>
11301 <link to="CopyFileFlag"/> flags. Not used at the moment and should be set to 0.
11302 </desc>
11303 </param>
11304 <param name="progress" type="IProgress" dir="return">
11305 <desc>Progress object to track the operation completion.</desc>
11306 </param>
11307 </method>
11308
11309 <method name="copyToGuest">
11310 <desc>
11311 Copies files/directories from host to the guest.
11312
11313 <result name="VBOX_E_IPRT_ERROR">
11314 Error while copying.
11315 </result>
11316
11317 </desc>
11318 <param name="source" type="wstring" dir="in">
11319 <desc>
11320 Source file on the host to copy.
11321 </desc>
11322 </param>
11323 <param name="dest" type="wstring" dir="in">
11324 <desc>
11325 Destination path on the guest.
11326 </desc>
11327 </param>
11328 <param name="userName" type="wstring" dir="in">
11329 <desc>
11330 User name under which the copy command will be executed; the
11331 user has to exist and have the appropriate rights to write to
11332 the destination path.
11333 </desc>
11334 </param>
11335 <param name="password" type="wstring" dir="in">
11336 <desc>
11337 Password of the user account specified.
11338 </desc>
11339 </param>
11340 <param name="flags" type="unsigned long" dir="in">
11341 <desc>
11342 <link to="CopyFileFlag"/> flags. Not used at the moment and should be set to 0.
11343 </desc>
11344 </param>
11345 <param name="progress" type="IProgress" dir="return">
11346 <desc>Progress object to track the operation completion.</desc>
11347 </param>
11348 </method>
11349
11350 <method name="directoryClose">
11351 <desc>
11352 Closes a formerly opened guest directory.
11353
11354 <result name="VBOX_E_IPRT_ERROR">
11355 Error while closing directory.
11356 </result>
11357
11358 </desc>
11359 <param name="handle" type="unsigned long" dir="in">
11360 <desc>
11361 Handle of opened directory to close.
11362 </desc>
11363 </param>
11364 </method>
11365
11366 <method name="directoryCreate">
11367 <desc>
11368 Creates a directory on the guest.
11369
11370 <result name="VBOX_E_IPRT_ERROR">
11371 Error while creating directory.
11372 </result>
11373
11374 </desc>
11375 <param name="directory" type="wstring" dir="in">
11376 <desc>
11377 Directory to create.
11378 </desc>
11379 </param>
11380 <param name="userName" type="wstring" dir="in">
11381 <desc>
11382 User name under which the directory creation will be executed; the
11383 user has to exist and have the appropriate rights to create the
11384 desired directory.
11385 </desc>
11386 </param>
11387 <param name="password" type="wstring" dir="in">
11388 <desc>
11389 Password of the user account specified.
11390 </desc>
11391 </param>
11392 <param name="mode" type="unsigned long" dir="in">
11393 <desc>
11394 File mode.
11395 </desc>
11396 </param>
11397 <param name="flags" type="unsigned long" dir="in">
11398 <desc>
11399 <link to="DirectoryCreateFlag"/> flags.
11400 </desc>
11401 </param>
11402 </method>
11403
11404 <method name="directoryOpen">
11405 <desc>
11406 Opens a directory on the guest.
11407
11408 <result name="VBOX_E_IPRT_ERROR">
11409 Error while opening / reading directory.
11410 </result>
11411
11412 </desc>
11413 <param name="directory" type="wstring" dir="in">
11414 <desc>
11415 Directory to read.
11416 </desc>
11417 </param>
11418 <param name="filter" type="wstring" dir="in">
11419 <desc>
11420 Directory filter (DOS style wildcards). Set to empty
11421 string if no filter required.
11422 </desc>
11423 </param>
11424 <param name="flags" type="unsigned long" dir="in">
11425 <desc>
11426 <link to="DirectoryOpenFlag"/> flags.
11427 </desc>
11428 </param>
11429 <param name="userName" type="wstring" dir="in">
11430 <desc>
11431 User name under which the directory reading will be performed; the
11432 user has to exist and have the appropriate rights to access / read the
11433 desired directory.
11434 </desc>
11435 </param>
11436 <param name="password" type="wstring" dir="in">
11437 <desc>
11438 Password of the user account specified.
11439 </desc>
11440 </param>
11441 <param name="handle" type="unsigned long" dir="return">
11442 <desc>
11443 Handle of opened directory returned by openDirectory.
11444 </desc>
11445 </param>
11446 </method>
11447
11448 <method name="directoryRead">
11449 <desc>
11450 Reads the next directory entry of an opened guest directory.
11451
11452 <result name="E_ABORT">
11453 When the end of the directory has been reached.
11454 </result>
11455
11456 <result name="VBOX_E_IPRT_ERROR">
11457 Error while opening / reading directory.
11458 </result>
11459
11460 </desc>
11461 <param name="handle" type="unsigned long" dir="in">
11462 <desc>
11463 Handle of opened directory returned by openDirectory.
11464 </desc>
11465 </param>
11466 <param name="entry" type="IGuestDirEntry" dir="return">
11467 <desc>
11468 Information about next directory entry on success.
11469 </desc>
11470 </param>
11471 </method>
11472
11473 <method name="fileExists">
11474 <desc>
11475 Checks if the specified file name exists and is a regular file.
11476
11477 If the file name ends with a slash or backslash, the function assumes
11478 it's a directory and will check if the specified directory exists and
11479 is a regular directory.
11480
11481 <result name="VBOX_E_IPRT_ERROR">
11482 Error while looking up information.
11483 </result>
11484
11485 </desc>
11486 <param name="file" type="wstring" dir="in">
11487 <desc>
11488 Full path of file to check.
11489 </desc>
11490 </param>
11491 <param name="userName" type="wstring" dir="in">
11492 <desc>
11493 User name under which the lookup will be performed; the
11494 user has to exist and have the appropriate rights to access / read the
11495 desired directory.
11496 </desc>
11497 </param>
11498 <param name="password" type="wstring" dir="in">
11499 <desc>
11500 Password of the user account specified.
11501 </desc>
11502 </param>
11503 <param name="exists" type="boolean" dir="return">
11504 <desc>
11505 True if it's a regular file, false if it isn't (or doesn't exist).
11506 </desc>
11507 </param>
11508 </method>
11509
11510 <method name="fileQuerySize">
11511 <desc>
11512 Queries the size of a file, given the path to it.
11513
11514 <result name="VBOX_E_IPRT_ERROR">
11515 Error while looking up information.
11516 </result>
11517
11518 </desc>
11519 <param name="file" type="wstring" dir="in">
11520 <desc>
11521 Full path of file to query file size for.
11522 </desc>
11523 </param>
11524 <param name="userName" type="wstring" dir="in">
11525 <desc>
11526 User name under which the lookup will be performed; the
11527 user has to exist and have the appropriate rights to access / read the
11528 desired directory.
11529 </desc>
11530 </param>
11531 <param name="password" type="wstring" dir="in">
11532 <desc>
11533 Password of the user account specified.
11534 </desc>
11535 </param>
11536 <param name="size" type="long long" dir="return">
11537 <desc>
11538 Size (in bytes) of file specified.
11539 </desc>
11540 </param>
11541 </method>
11542
11543 <method name="setProcessInput">
11544 <desc>
11545 Sends input into a formerly started process.
11546
11547 <result name="VBOX_E_IPRT_ERROR">
11548 Could not send input.
11549 </result>
11550
11551 </desc>
11552 <param name="pid" type="unsigned long" dir="in">
11553 <desc>
11554 Process id returned by earlier <link to="#executeProcess"/> call.
11555 </desc>
11556 </param>
11557 <param name="flags" type="unsigned long" dir="in">
11558 <desc>
11559 <link to="ProcessInputFlag"/> flags.
11560 </desc>
11561 </param>
11562 <param name="timeoutMS" type="unsigned long" dir="in">
11563 <desc>
11564 The maximum timeout value (in msec) to wait for getting the
11565 data transfered to the guest. Pass 0 for an infinite timeout.
11566 </desc>
11567 </param>
11568 <param name="data" type="octet" dir="in" safearray="yes">
11569 <desc>
11570 Buffer of input data to send to the started process to.
11571 </desc>
11572 </param>
11573 <param name="written" type="unsigned long" dir="return">
11574 <desc>
11575 Number of bytes written.
11576 </desc>
11577 </param>
11578 </method>
11579
11580 <method name="updateGuestAdditions">
11581 <desc>
11582 Updates already installed Guest Additions in a VM
11583 (Windows guests only).
11584
11585 <result name="VBOX_E_IPRT_ERROR">
11586 Error while updating.
11587 </result>
11588
11589 </desc>
11590 <param name="source" type="wstring" dir="in">
11591 <desc>
11592 Path to the Guest Additions .ISO file to use for the upate.
11593 </desc>
11594 </param>
11595 <param name="flags" type="AdditionsUpdateFlag" dir="in" safearray="yes">
11596 <desc>
11597 <link to="AdditionsUpdateFlag"/> flags.
11598 </desc>
11599 </param>
11600 <param name="progress" type="IProgress" dir="return">
11601 <desc>Progress object to track the operation completion.</desc>
11602 </param>
11603 </method>
11604
11605 </interface>
11606
11607
11608 <!--
11609 // IProgress
11610 /////////////////////////////////////////////////////////////////////////
11611 -->
11612
11613 <interface
11614 name="IProgress" extends="$unknown"
11615 uuid="c20238e4-3221-4d3f-8891-81ce92d9f913"
11616 wsmap="managed"
11617 >
11618 <desc>
11619 The IProgress interface is used to track and control
11620 asynchronous tasks within VirtualBox.
11621
11622 An instance of this is returned every time VirtualBox starts
11623 an asynchronous task (in other words, a separate thread) which
11624 continues to run after a method call returns. For example,
11625 <link to="IConsole::saveState" />, which saves the state of
11626 a running virtual machine, can take a long time to complete.
11627 To be able to display a progress bar, a user interface such as
11628 the VirtualBox graphical user interface can use the IProgress
11629 object returned by that method.
11630
11631 Note that IProgress is a "read-only" interface in the sense
11632 that only the VirtualBox internals behind the Main API can
11633 create and manipulate progress objects, whereas client code
11634 can only use the IProgress object to monitor a task's
11635 progress and, if <link to="#cancelable" /> is @c true,
11636 cancel the task by calling <link to="#cancel" />.
11637
11638 A task represented by IProgress consists of either one or
11639 several sub-operations that run sequentially, one by one (see
11640 <link to="#operation" /> and <link to="#operationCount" />).
11641 Every operation is identified by a number (starting from 0)
11642 and has a separate description.
11643
11644 You can find the individual percentage of completion of the current
11645 operation in <link to="#operationPercent" /> and the
11646 percentage of completion of the task as a whole
11647 in <link to="#percent" />.
11648
11649 Similarly, you can wait for the completion of a particular
11650 operation via <link to="#waitForOperationCompletion" /> or
11651 for the completion of the whole task via
11652 <link to="#waitForCompletion" />.
11653 </desc>
11654
11655 <attribute name="id" type="uuid" mod="string" readonly="yes">
11656 <desc>ID of the task.</desc>
11657 </attribute>
11658
11659 <attribute name="description" type="wstring" readonly="yes">
11660 <desc>Description of the task.</desc>
11661 </attribute>
11662
11663 <attribute name="initiator" type="$unknown" readonly="yes">
11664 <desc>Initiator of the task.</desc>
11665 </attribute>
11666
11667 <attribute name="cancelable" type="boolean" readonly="yes">
11668 <desc>Whether the task can be interrupted.</desc>
11669 </attribute>
11670
11671 <attribute name="percent" type="unsigned long" readonly="yes">
11672 <desc>
11673 Current progress value of the task as a whole, in percent.
11674 This value depends on how many operations are already complete.
11675 Returns 100 if <link to="#completed" /> is @c true.
11676 </desc>
11677 </attribute>
11678
11679 <attribute name="timeRemaining" type="long" readonly="yes">
11680 <desc>
11681 Estimated remaining time until the task completes, in
11682 seconds. Returns 0 once the task has completed; returns -1
11683 if the remaining time cannot be computed, in particular if
11684 the current progress is 0.
11685
11686 Even if a value is returned, the estimate will be unreliable
11687 for low progress values. It will become more reliable as the
11688 task progresses; it is not recommended to display an ETA
11689 before at least 20% of a task have completed.
11690 </desc>
11691 </attribute>
11692
11693 <attribute name="completed" type="boolean" readonly="yes">
11694 <desc>Whether the task has been completed.</desc>
11695 </attribute>
11696
11697 <attribute name="canceled" type="boolean" readonly="yes">
11698 <desc>Whether the task has been canceled.</desc>
11699 </attribute>
11700
11701 <attribute name="resultCode" type="long" readonly="yes">
11702 <desc>
11703 Result code of the progress task.
11704 Valid only if <link to="#completed"/> is @c true.
11705 </desc>
11706 </attribute>
11707
11708 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
11709 <desc>
11710 Extended information about the unsuccessful result of the
11711 progress operation. May be @c null if no extended information
11712 is available.
11713 Valid only if <link to="#completed"/> is @c true and
11714 <link to="#resultCode"/> indicates a failure.
11715 </desc>
11716 </attribute>
11717
11718 <attribute name="operationCount" type="unsigned long" readonly="yes">
11719 <desc>
11720 Number of sub-operations this task is divided into.
11721 Every task consists of at least one suboperation.
11722 </desc>
11723 </attribute>
11724
11725 <attribute name="operation" type="unsigned long" readonly="yes">
11726 <desc>Number of the sub-operation being currently executed.</desc>
11727 </attribute>
11728
11729 <attribute name="operationDescription" type="wstring" readonly="yes">
11730 <desc>
11731 Description of the sub-operation being currently executed.
11732 </desc>
11733 </attribute>
11734
11735 <attribute name="operationPercent" type="unsigned long" readonly="yes">
11736 <desc>Progress value of the current sub-operation only, in percent.</desc>
11737 </attribute>
11738
11739 <attribute name="operationWeight" type="unsigned long" readonly="yes">
11740 <desc>Weight value of the current sub-operation only.</desc>
11741 </attribute>
11742
11743 <attribute name="timeout" type="unsigned long">
11744 <desc>
11745 When non-zero, this specifies the number of milliseconds after which
11746 the operation will automatically be canceled. This can only be set on
11747 cancelable objects.
11748 </desc>
11749 </attribute>
11750
11751 <method name="setCurrentOperationProgress">
11752 <desc>Internal method, not to be called externally.</desc>
11753 <param name="percent" type="unsigned long" dir="in" />
11754 </method>
11755 <method name="setNextOperation">
11756 <desc>Internal method, not to be called externally.</desc>
11757 <param name="nextOperationDescription" type="wstring" dir="in" />
11758 <param name="nextOperationsWeight" type="unsigned long" dir="in" />
11759 </method>
11760
11761 <method name="waitForCompletion">
11762 <desc>
11763 Waits until the task is done (including all sub-operations)
11764 with a given timeout in milliseconds; specify -1 for an indefinite wait.
11765
11766 Note that the VirtualBox/XPCOM/COM/native event queues of the calling
11767 thread are not processed while waiting. Neglecting event queues may
11768 have dire consequences (degrade performance, resource hogs,
11769 deadlocks, etc.), this is specially so for the main thread on
11770 platforms using XPCOM. Callers are adviced wait for short periods
11771 and service their event queues between calls, or to create a worker
11772 thread to do the waiting.
11773
11774 <result name="VBOX_E_IPRT_ERROR">
11775 Failed to wait for task completion.
11776 </result>
11777 </desc>
11778
11779 <param name="timeout" type="long" dir="in">
11780 <desc>
11781 Maximum time in milliseconds to wait or -1 to wait indefinitely.
11782 </desc>
11783 </param>
11784 </method>
11785
11786 <method name="waitForOperationCompletion">
11787 <desc>
11788 Waits until the given operation is done with a given timeout in
11789 milliseconds; specify -1 for an indefinite wait.
11790
11791 See <link to="#waitForCompletion"> for event queue considerations.</link>
11792
11793 <result name="VBOX_E_IPRT_ERROR">
11794 Failed to wait for operation completion.
11795 </result>
11796
11797 </desc>
11798 <param name="operation" type="unsigned long" dir="in">
11799 <desc>
11800 Number of the operation to wait for.
11801 Must be less than <link to="#operationCount"/>.
11802 </desc>
11803 </param>
11804 <param name="timeout" type="long" dir="in">
11805 <desc>
11806 Maximum time in milliseconds to wait or -1 to wait indefinitely.
11807 </desc>
11808 </param>
11809 </method>
11810
11811 <method name="waitForAsyncProgressCompletion">
11812 <desc>
11813 Waits until the other task is completed (including all
11814 sub-operations) and forward all changes from the other progress to
11815 this progress. This means sub-operation number, description, percent
11816 and so on.
11817
11818 You have to take care on setting up at least the same count on
11819 sub-operations in this progress object like there are in the other
11820 progress object.
11821
11822 If the other progress object supports cancel and this object gets any
11823 cancel request (when here enabled as well), it will be forwarded to
11824 the other progress object.
11825
11826 If there is an error in the other progress, this error isn't
11827 automatically transfered to this progress object. So you have to
11828 check any operation error within the other progress object, after
11829 this method returns.
11830 </desc>
11831
11832 <param name="pProgressAsync" type="IProgress" dir="in">
11833 <desc>
11834 The progress object of the asynchrony process.
11835 </desc>
11836 </param>
11837 </method>
11838
11839 <method name="cancel">
11840 <desc>
11841 Cancels the task.
11842 <note>
11843 If <link to="#cancelable"/> is @c false, then this method will fail.
11844 </note>
11845
11846 <result name="VBOX_E_INVALID_OBJECT_STATE">
11847 Operation cannot be canceled.
11848 </result>
11849
11850 </desc>
11851 </method>
11852
11853 </interface>
11854
11855 <!--
11856 // ISnapshot
11857 /////////////////////////////////////////////////////////////////////////
11858 -->
11859
11860 <interface
11861 name="ISnapshot" extends="$unknown"
11862 uuid="0472823b-c6e7-472a-8e9f-d732e86b8463"
11863 wsmap="managed"
11864 >
11865 <desc>
11866 The ISnapshot interface represents a snapshot of the virtual
11867 machine.
11868
11869 Together with the differencing media that are created
11870 when a snapshot is taken, a machine can be brought back to
11871 the exact state it was in when the snapshot was taken.
11872
11873 The ISnapshot interface has no methods, only attributes; snapshots
11874 are controlled through methods of the <link to="IConsole" /> interface
11875 which also manage the media associated with the snapshot.
11876 The following operations exist:
11877
11878 <ul>
11879 <li><link to="IConsole::takeSnapshot"/> creates a new snapshot
11880 by creating new, empty differencing images for the machine's
11881 media and saving the VM settings and (if the VM is running)
11882 the current VM state in the snapshot.
11883
11884 The differencing images will then receive all data written to
11885 the machine's media, while their parent (base) images
11886 remain unmodified after the snapshot has been taken (see
11887 <link to="IMedium" /> for details about differencing images).
11888 This simplifies restoring a machine to the state of a snapshot:
11889 only the differencing images need to be deleted.
11890
11891 The current machine state is not changed by taking a snapshot
11892 except that <link to="IMachine::currentSnapshot" /> is set to
11893 the newly created snapshot, which is also added to the machine's
11894 snapshots tree.
11895 </li>
11896
11897 <li><link to="IConsole::restoreSnapshot"/> resets a machine to
11898 the state of a previous snapshot by deleting the differencing
11899 image of each of the machine's media and setting the machine's
11900 settings and state to the state that was saved in the snapshot (if any).
11901
11902 This destroys the machine's current state. After calling this,
11903 <link to="IMachine::currentSnapshot" /> points to the snapshot
11904 that was restored.
11905 </li>
11906
11907 <li><link to="IConsole::deleteSnapshot"/> deletes a snapshot
11908 without affecting the current machine state.
11909
11910 This does not change the current machine state, but instead frees the
11911 resources allocated when the snapshot was taken: the settings and machine
11912 state file are deleted (if any), and the snapshot's differencing image for
11913 each of the machine's media gets merged with its parent image.
11914
11915 Neither the current machine state nor other snapshots are affected
11916 by this operation, except that parent media will be modified
11917 to contain the disk data associated with the snapshot being deleted.
11918
11919 When deleting the current snapshot, the <link to="IMachine::currentSnapshot" />
11920 attribute is set to the current snapshot's parent or @c null if it
11921 has no parent. Otherwise the attribute is unchanged.
11922 </li>
11923 </ul>
11924
11925 Each snapshot contains a copy of virtual machine's settings (hardware
11926 configuration etc.). This copy is contained in an immutable (read-only)
11927 instance of <link to="IMachine" /> which is available from the snapshot's
11928 <link to="#machine" /> attribute. When restoring the snapshot, these
11929 settings are copied back to the original machine.
11930
11931 In addition, if the machine was running when the
11932 snapshot was taken (<link to="IMachine::state"/> is <link to="MachineState_Running"/>),
11933 the current VM state is saved in the snapshot (similarly to what happens
11934 when a VM's state is saved). The snapshot is then said to be <i>online</i>
11935 because when restoring it, the VM will be running.
11936
11937 If the machine was in <link to="MachineState_Saved">saved</link> saved,
11938 the snapshot receives a copy of the execution state file
11939 (<link to="IMachine::stateFilePath"/>).
11940
11941 Otherwise, if the machine was not running (<link to="MachineState_PoweredOff"/>
11942 or <link to="MachineState_Aborted"/>), the snapshot is <i>offline</i>;
11943 it then contains a so-called "zero execution state", representing a
11944 machine that is powered off.
11945 </desc>
11946
11947 <attribute name="id" type="uuid" mod="string" readonly="yes">
11948 <desc>UUID of the snapshot.</desc>
11949 </attribute>
11950
11951 <attribute name="name" type="wstring">
11952 <desc>Short name of the snapshot.
11953 <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to
11954 be called implicitly.</note>
11955 </desc>
11956 </attribute>
11957
11958 <attribute name="description" type="wstring">
11959 <desc>Optional description of the snapshot.
11960 <note>Setting this attribute causes <link to="IMachine::saveSettings" /> to
11961 be called implicitly.</note>
11962 </desc>
11963 </attribute>
11964
11965 <attribute name="timeStamp" type="long long" readonly="yes">
11966 <desc>
11967 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
11968 </desc>
11969 </attribute>
11970
11971 <attribute name="online" type="boolean" readonly="yes">
11972 <desc>
11973 @c true if this snapshot is an online snapshot and @c false otherwise.
11974
11975 When this attribute is @c true, the
11976 <link to="IMachine::stateFilePath"/> attribute of the
11977 <link to="#machine"/> object associated with this snapshot
11978 will point to the saved state file. Otherwise, it will be
11979 an empty string.
11980 </desc>
11981 </attribute>
11982
11983 <attribute name="machine" type="IMachine" readonly="yes">
11984 <desc>
11985 Virtual machine this snapshot is taken on. This object
11986 stores all settings the machine had when taking this snapshot.
11987 <note>
11988 The returned machine object is immutable, i.e. no
11989 any settings can be changed.
11990 </note>
11991 </desc>
11992 </attribute>
11993
11994 <attribute name="parent" type="ISnapshot" readonly="yes">
11995 <desc>
11996 Parent snapshot (a snapshot this one is based on), or
11997 @c null if the snapshot has no parent (i.e. is the first snapshot).
11998 </desc>
11999 </attribute>
12000
12001 <attribute name="children" type="ISnapshot" readonly="yes" safearray="yes">
12002 <desc>
12003 Child snapshots (all snapshots having this one as a parent).
12004 By inspecting this attribute starting with a machine's root snapshot
12005 (which can be obtained by calling <link to="IMachine::findSnapshot" />
12006 with a @c null UUID), a machine's snapshots tree can be iterated over.
12007 </desc>
12008 </attribute>
12009
12010 <method name="getChildrenCount" const="yes">
12011 <desc>
12012 Returns the number of direct childrens of this snapshot.
12013 </desc>
12014 <param name="childrenCount" type="unsigned long" dir="return">
12015 <desc>
12016 </desc>
12017 </param>
12018 </method>
12019
12020 </interface>
12021
12022
12023 <!--
12024 // IMedium
12025 /////////////////////////////////////////////////////////////////////////
12026 -->
12027
12028 <enum
12029 name="MediumState"
12030 uuid="ef41e980-e012-43cd-9dea-479d4ef14d13"
12031 >
12032 <desc>
12033 Virtual medium state.
12034 <see><link to="IMedium"/></see>
12035 </desc>
12036
12037 <const name="NotCreated" value="0">
12038 <desc>
12039 Associated medium storage does not exist (either was not created yet or
12040 was deleted).
12041 </desc>
12042 </const>
12043 <const name="Created" value="1">
12044 <desc>
12045 Associated storage exists and accessible; this gets set if the
12046 accessibility check performed by <link to="IMedium::refreshState" />
12047 was successful.
12048 </desc>
12049 </const>
12050 <const name="LockedRead" value="2">
12051 <desc>
12052 Medium is locked for reading (see <link to="IMedium::lockRead"/>),
12053 no data modification is possible.
12054 </desc>
12055 </const>
12056 <const name="LockedWrite" value="3">
12057 <desc>
12058 Medium is locked for writing (see <link to="IMedium::lockWrite"/>),
12059 no concurrent data reading or modification is possible.
12060 </desc>
12061 </const>
12062 <const name="Inaccessible" value="4">
12063 <desc>
12064 Medium accessibility check (see <link to="IMedium::refreshState" />) has
12065 not yet been performed, or else, associated medium storage is not
12066 accessible. In the first case, <link to="IMedium::lastAccessError"/>
12067 is empty, in the second case, it describes the error that occurred.
12068 </desc>
12069 </const>
12070 <const name="Creating" value="5">
12071 <desc>
12072 Associated medium storage is being created.
12073 </desc>
12074 </const>
12075 <const name="Deleting" value="6">
12076 <desc>
12077 Associated medium storage is being deleted.
12078 </desc>
12079 </const>
12080 </enum>
12081
12082 <enum
12083 name="MediumType"
12084 uuid="fe663fb5-c244-4e1b-9d81-c628b417dd04"
12085 >
12086 <desc>
12087 Virtual medium type. For each <link to="IMedium" />, this defines how the medium is
12088 attached to a virtual machine (see <link to="IMediumAttachment" />) and what happens
12089 when a snapshot (see <link to="ISnapshot" />) is taken of a virtual machine which has
12090 the medium attached. At the moment DVD and floppy media are always of type "writethrough".
12091 </desc>
12092
12093 <const name="Normal" value="0">
12094 <desc>
12095 Normal medium (attached directly or indirectly, preserved
12096 when taking snapshots).
12097 </desc>
12098 </const>
12099 <const name="Immutable" value="1">
12100 <desc>
12101 Immutable medium (attached indirectly, changes are wiped out
12102 the next time the virtual machine is started).
12103 </desc>
12104 </const>
12105 <const name="Writethrough" value="2">
12106 <desc>
12107 Write through medium (attached directly, ignored when
12108 taking snapshots).
12109 </desc>
12110 </const>
12111 <const name="Shareable" value="3">
12112 <desc>
12113 Allow using this medium concurrently by several machines.
12114 <note>Present since VirtualBox 3.2.0, and accepted since 3.2.8.</note>
12115 </desc>
12116 </const>
12117 <const name="Readonly" value="4">
12118 <desc>
12119 A readonly medium, which can of course be used by several machines.
12120 <note>Present and accepted since VirtualBox 4.0.</note>
12121 </desc>
12122 </const>
12123 <const name="MultiAttach" value="5">
12124 <desc>
12125 A medium which is indirectly attached, so that one base medium can
12126 be used for several VMs which have their own differencing medium to
12127 store their modifications. In some sense a variant of Immutable
12128 with unset AutoReset flag in each differencing medium.
12129 <note>Present and accepted since VirtualBox 4.0.</note>
12130 </desc>
12131 </const>
12132 </enum>
12133
12134 <enum
12135 name="MediumVariant"
12136 uuid="80685b6b-e42f-497d-8271-e77bf3c61ada"
12137 >
12138 <desc>
12139 Virtual medium image variant. More than one flag may be set.
12140 <see><link to="IMedium"/></see>
12141 </desc>
12142
12143 <const name="Standard" value="0">
12144 <desc>
12145 No particular variant requested, results in using the backend default.
12146 </desc>
12147 </const>
12148 <const name="VmdkSplit2G" value="0x01">
12149 <desc>
12150 VMDK image split in chunks of less than 2GByte.
12151 </desc>
12152 </const>
12153 <const name="VmdkRawDisk" value="0x02">
12154 <desc>
12155 VMDK image representing a raw disk.
12156 </desc>
12157 </const>
12158 <const name="VmdkStreamOptimized" value="0x04">
12159 <desc>
12160 VMDK streamOptimized image. Special import/export format which is
12161 read-only/append-only.
12162 </desc>
12163 </const>
12164 <const name="VmdkESX" value="0x08">
12165 <desc>
12166 VMDK format variant used on ESX products.
12167 </desc>
12168 </const>
12169 <const name="Fixed" value="0x10000">
12170 <desc>
12171 Fixed image. Only allowed for base images.
12172 </desc>
12173 </const>
12174 <const name="Diff" value="0x20000">
12175 <desc>
12176 Differencing image. Only allowed for child images.
12177 </desc>
12178 </const>
12179 <const name="NoCreateDir" value="0x40000000">
12180 <desc>
12181 Special flag which suppresses automatic creation of the subdirectory.
12182 Only used when passing the medium variant as an input parameter.
12183 </desc>
12184 </const>
12185 </enum>
12186
12187 <interface
12188 name="IMediumAttachment" extends="$unknown"
12189 uuid="5ee464d6-0613-4331-b154-7ce12170ef9f"
12190 wsmap="struct"
12191 >
12192 <desc>
12193 The IMediumAttachment interface links storage media to virtual machines.
12194 For each medium (<link to="IMedium"/>) which has been attached to a
12195 storage controller (<link to="IStorageController"/>) of a machine
12196 (<link to="IMachine"/>) via the <link to="IMachine::attachDevice" />
12197 method, one instance of IMediumAttachment is added to the machine's
12198 <link to="IMachine::mediumAttachments"/> array attribute.
12199
12200 Each medium attachment specifies the storage controller as well as a
12201 port and device number and the IMedium instance representing a virtual
12202 hard disk or floppy or DVD image.
12203
12204 For removable media (DVDs or floppies), there are two additional
12205 options. For one, the IMedium instance can be @c null to represent
12206 an empty drive with no media inserted (see <link to="IMachine::mountMedium" />);
12207 secondly, the medium can be one of the pseudo-media for host drives
12208 listed in <link to="IHost::DVDDrives"/> or <link to="IHost::floppyDrives"/>.
12209
12210 <h3>Attaching Hard Disks</h3>
12211
12212 Hard disks are attached to virtual machines using the
12213 <link to="IMachine::attachDevice"/> method and detached using the
12214 <link to="IMachine::detachDevice"/> method. Depending on a medium's
12215 type (see <link to="IMedium::type" />), hard disks are attached either
12216 <i>directly</i> or <i>indirectly</i>.
12217
12218 When a hard disk is being attached directly, it is associated with the
12219 virtual machine and used for hard disk operations when the machine is
12220 running. When a hard disk is being attached indirectly, a new differencing
12221 hard disk linked to it is implicitly created and this differencing hard
12222 disk is associated with the machine and used for hard disk operations.
12223 This also means that if <link to="IMachine::attachDevice"/> performs
12224 a direct attachment then the same hard disk will be returned in response
12225 to the subsequent <link to="IMachine::getMedium"/> call; however if
12226 an indirect attachment is performed then
12227 <link to="IMachine::getMedium"/> will return the implicitly created
12228 differencing hard disk, not the original one passed to <link
12229 to="IMachine::attachDevice"/>. In detail:
12230
12231 <ul>
12232 <li><b>Normal base</b> hard disks that do not have children (i.e.
12233 differencing hard disks linked to them) and that are not already
12234 attached to virtual machines in snapshots are attached <b>directly</b>.
12235 Otherwise, they are attached <b>indirectly</b> because having
12236 dependent children or being part of the snapshot makes it impossible
12237 to modify hard disk contents without breaking the integrity of the
12238 dependent party. The <link to="IMedium::readOnly"/> attribute allows to
12239 quickly determine the kind of the attachment for the given hard
12240 disk. Note that if a normal base hard disk is to be indirectly
12241 attached to a virtual machine with snapshots then a special
12242 procedure called <i>smart attachment</i> is performed (see below).</li>
12243 <li><b>Normal differencing</b> hard disks are like normal base hard disks:
12244 they are attached <b>directly</b> if they do not have children and are
12245 not attached to virtual machines in snapshots, and <b>indirectly</b>
12246 otherwise. Note that the smart attachment procedure is never performed
12247 for differencing hard disks.</li>
12248 <li><b>Immutable</b> hard disks are always attached <b>indirectly</b> because
12249 they are designed to be non-writable. If an immutable hard disk is
12250 attached to a virtual machine with snapshots then a special
12251 procedure called smart attachment is performed (see below).</li>
12252 <li><b>Writethrough</b> hard disks are always attached <b>directly</b>,
12253 also as designed. This also means that writethrough hard disks cannot
12254 have other hard disks linked to them at all.</li>
12255 <li><b>Shareable</b> hard disks are always attached <b>directly</b>,
12256 also as designed. This also means that shareable hard disks cannot
12257 have other hard disks linked to them at all. They behave almost
12258 like writethrough hard disks, except that shareable hard disks can
12259 be attached to several virtual machines which are running, allowing
12260 concurrent accesses. You need special cluster software running in
12261 the virtual machines to make use of such disks.</li>
12262 </ul>
12263
12264 Note that the same hard disk, regardless of its type, may be attached to
12265 more than one virtual machine at a time. In this case, the machine that is
12266 started first gains exclusive access to the hard disk and attempts to
12267 start other machines having this hard disk attached will fail until the
12268 first machine is powered down.
12269
12270 Detaching hard disks is performed in a <i>deferred</i> fashion. This means
12271 that the given hard disk remains associated with the given machine after a
12272 successful <link to="IMachine::detachDevice"/> call until
12273 <link to="IMachine::saveSettings"/> is called to save all changes to
12274 machine settings to disk. This deferring is necessary to guarantee that
12275 the hard disk configuration may be restored at any time by a call to
12276 <link to="IMachine::discardSettings"/> before the settings
12277 are saved (committed).
12278
12279 Note that if <link to="IMachine::discardSettings"/> is called after
12280 indirectly attaching some hard disks to the machine but before a call to
12281 <link to="IMachine::saveSettings"/> is made, it will implicitly delete
12282 all differencing hard disks implicitly created by
12283 <link to="IMachine::attachDevice"/> for these indirect attachments.
12284 Such implicitly created hard disks will also be immediately deleted when
12285 detached explicitly using the <link to="IMachine::detachDevice"/>
12286 call if it is made before <link to="IMachine::saveSettings"/>. This
12287 implicit deletion is safe because newly created differencing hard
12288 disks do not contain any user data.
12289
12290 However, keep in mind that detaching differencing hard disks that were
12291 implicitly created by <link to="IMachine::attachDevice"/>
12292 before the last <link to="IMachine::saveSettings"/> call will
12293 <b>not</b> implicitly delete them as they may already contain some data
12294 (for example, as a result of virtual machine execution). If these hard
12295 disks are no more necessary, the caller can always delete them explicitly
12296 using <link to="IMedium::deleteStorage"/> after they are actually de-associated
12297 from this machine by the <link to="IMachine::saveSettings"/> call.
12298
12299 <h3>Smart Attachment</h3>
12300
12301 When normal base or immutable hard disks are indirectly attached to a
12302 virtual machine then some additional steps are performed to make sure the
12303 virtual machine will have the most recent "view" of the hard disk being
12304 attached. These steps include walking through the machine's snapshots
12305 starting from the current one and going through ancestors up to the first
12306 snapshot. Hard disks attached to the virtual machine in all
12307 of the encountered snapshots are checked whether they are descendants of
12308 the given normal base or immutable hard disk. The first found child (which
12309 is the differencing hard disk) will be used instead of the normal base or
12310 immutable hard disk as a parent for creating a new differencing hard disk
12311 that will be actually attached to the machine. And only if no descendants
12312 are found or if the virtual machine does not have any snapshots then the
12313 normal base or immutable hard disk will be used itself as a parent for
12314 this differencing hard disk.
12315
12316 It is easier to explain what smart attachment does using the
12317 following example:
12318 <pre>
12319BEFORE attaching B.vdi: AFTER attaching B.vdi:
12320
12321Snapshot 1 (B.vdi) Snapshot 1 (B.vdi)
12322 Snapshot 2 (D1->B.vdi) Snapshot 2 (D1->B.vdi)
12323 Snapshot 3 (D2->D1.vdi) Snapshot 3 (D2->D1.vdi)
12324 Snapshot 4 (none) Snapshot 4 (none)
12325 CurState (none) CurState (D3->D2.vdi)
12326
12327 NOT
12328 ...
12329 CurState (D3->B.vdi)
12330 </pre>
12331 The first column is the virtual machine configuration before the base hard
12332 disk <tt>B.vdi</tt> is attached, the second column shows the machine after
12333 this hard disk is attached. Constructs like <tt>D1->B.vdi</tt> and similar
12334 mean that the hard disk that is actually attached to the machine is a
12335 differencing hard disk, <tt>D1.vdi</tt>, which is linked to (based on)
12336 another hard disk, <tt>B.vdi</tt>.
12337
12338 As we can see from the example, the hard disk <tt>B.vdi</tt> was detached
12339 from the machine before taking Snapshot 4. Later, after Snapshot 4 was
12340 taken, the user decides to attach <tt>B.vdi</tt> again. <tt>B.vdi</tt> has
12341 dependent child hard disks (<tt>D1.vdi</tt>, <tt>D2.vdi</tt>), therefore
12342 it cannot be attached directly and needs an indirect attachment (i.e.
12343 implicit creation of a new differencing hard disk). Due to the smart
12344 attachment procedure, the new differencing hard disk
12345 (<tt>D3.vdi</tt>) will be based on <tt>D2.vdi</tt>, not on
12346 <tt>B.vdi</tt> itself, since <tt>D2.vdi</tt> is the most recent view of
12347 <tt>B.vdi</tt> existing for this snapshot branch of the given virtual
12348 machine.
12349
12350 Note that if there is more than one descendant hard disk of the given base
12351 hard disk found in a snapshot, and there is an exact device, channel and
12352 bus match, then this exact match will be used. Otherwise, the youngest
12353 descendant will be picked up.
12354
12355 There is one more important aspect of the smart attachment procedure which
12356 is not related to snapshots at all. Before walking through the snapshots
12357 as described above, the backup copy of the current list of hard disk
12358 attachment is searched for descendants. This backup copy is created when
12359 the hard disk configuration is changed for the first time after the last
12360 <link to="IMachine::saveSettings"/> call and used by
12361 <link to="IMachine::discardSettings"/> to undo the recent hard disk
12362 changes. When such a descendant is found in this backup copy, it will be
12363 simply re-attached back, without creating a new differencing hard disk for
12364 it. This optimization is necessary to make it possible to re-attach the
12365 base or immutable hard disk to a different bus, channel or device slot
12366 without losing the contents of the differencing hard disk actually
12367 attached to the machine in place of it.
12368
12369 </desc>
12370
12371 <attribute name="medium" type="IMedium" readonly="yes">
12372 <desc>Medium object associated with this attachment; it
12373 can be @c null for removable devices.</desc>
12374 </attribute>
12375
12376 <attribute name="controller" type="wstring" readonly="yes">
12377 <desc>Name of the storage controller of this attachment; this
12378 refers to one of the controllers in <link to="IMachine::storageControllers" />
12379 by name.</desc>
12380 </attribute>
12381
12382 <attribute name="port" type="long" readonly="yes">
12383 <desc>Port number of this attachment.
12384 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
12385 </desc>
12386 </attribute>
12387
12388 <attribute name="device" type="long" readonly="yes">
12389 <desc>Device slot number of this attachment.
12390 See <link to="IMachine::attachDevice" /> for the meaning of this value for the different controller types.
12391 </desc>
12392 </attribute>
12393
12394 <attribute name="type" type="DeviceType" readonly="yes">
12395 <desc>Device type of this attachment.</desc>
12396 </attribute>
12397
12398 <attribute name="passthrough" type="boolean" readonly="yes">
12399 <desc>Pass I/O requests through to a device on the host.</desc>
12400 </attribute>
12401
12402 <attribute name="temporaryEject" type="boolean" readonly="yes">
12403 <desc>Whether guest-triggered eject results in unmounting the medium.</desc>
12404 </attribute>
12405
12406 <attribute name="isEjected" type="boolean" readonly="yes">
12407 <desc>Signals that the removable medium has been ejected. This is not
12408 necessarily equivalent to having a @c null medium association.</desc>
12409 </attribute>
12410
12411 <attribute name="nonRotational" type="boolean" readonly="yes">
12412 <desc>Whether the associated medium is non-rotational.</desc>
12413 </attribute>
12414
12415 <attribute name="discard" type="boolean" readonly="yes">
12416 <desc>Whether the associated medium supports discarding unused blocks.</desc>
12417 </attribute>
12418
12419 <attribute name="bandwidthGroup" type="IBandwidthGroup" readonly="yes">
12420 <desc>The bandwidth group this medium attachment is assigned to.</desc>
12421 </attribute>
12422
12423 </interface>
12424
12425 <interface
12426 name="IMedium" extends="$unknown"
12427 uuid="29989373-b111-4654-8493-2e1176cba890"
12428 wsmap="managed"
12429 >
12430 <desc>
12431 The IMedium interface represents virtual storage for a machine's
12432 hard disks, CD/DVD or floppy drives. It will typically represent
12433 a disk image on the host, for example a VDI or VMDK file representing
12434 a virtual hard disk, or an ISO or RAW file representing virtual
12435 removable media, but can also point to a network location (e.g.
12436 for iSCSI targets).
12437
12438 Instances of IMedium are connected to virtual machines by way of medium
12439 attachments, which link the storage medium to a particular device slot
12440 of a storage controller of the virtual machine.
12441 In the VirtualBox API, virtual storage is therefore always represented
12442 by the following chain of object links:
12443
12444 <ul>
12445 <li><link to="IMachine::storageControllers"/> contains an array of
12446 storage controllers (IDE, SATA, SCSI, SAS or a floppy controller;
12447 these are instances of <link to="IStorageController"/>).</li>
12448 <li><link to="IMachine::mediumAttachments"/> contains an array of
12449 medium attachments (instances of <link to="IMediumAttachment"/>
12450 created by <link to="IMachine::attachDevice" />),
12451 each containing a storage controller from the above array, a
12452 port/device specification, and an instance of IMedium representing
12453 the medium storage (image file).
12454
12455 For removable media, the storage medium is optional; a medium
12456 attachment with no medium represents a CD/DVD or floppy drive
12457 with no medium inserted. By contrast, hard disk attachments
12458 will always have an IMedium object attached.</li>
12459 <li>Each IMedium in turn points to a storage unit (such as a file
12460 on the host computer or a network resource) that holds actual
12461 data. This location is represented by the <link to="#location"/>
12462 attribute.</li>
12463 </ul>
12464
12465 Existing media are opened using <link to="IVirtualBox::openMedium"/>;
12466 new hard disk media can be created with the VirtualBox API using the
12467 <link to="IVirtualBox::createHardDisk"/> method. Differencing hard
12468 disks (see below) are usually implicitly created by VirtualBox as
12469 needed, but may also be created explicitly using <link to="#createDiffStorage"/>.
12470 VirtualBox cannot create CD/DVD or floppy images (ISO and RAW files); these
12471 should be created with external tools and then opened from within VirtualBox.
12472
12473 Only for CD/DVDs and floppies, an IMedium instance can also represent a host
12474 drive. In that case the <link to="#id" /> attribute contains the UUID of
12475 one of the drives in <link to="IHost::DVDDrives" /> or <link to="IHost::floppyDrives" />.
12476
12477 <h3>Media registries</h3>
12478
12479 When a medium has been opened or created using one of the aforementioned
12480 APIs, it becomes "known" to VirtualBox. Known media can be attached
12481 to virtual machines and re-found through <link to="IVirtualBox::openMedium"/>.
12482 They also appear in the global
12483 <link to="IVirtualBox::hardDisks" />,
12484 <link to="IVirtualBox::DVDImages" /> and
12485 <link to="IVirtualBox::floppyImages" /> arrays.
12486
12487 Prior to VirtualBox 4.0, opening a medium added it to a global media registry
12488 in the VirtualBox.xml file, which was shared between all machines and made
12489 transporting machines and their media from one host to another difficult.
12490
12491 Starting with VirtualBox 4.0, media are only added to a registry when they are
12492 <i>attached</i> to a machine using <link to="IMachine::attachDevice" />. For
12493 backwards compatibility, which registry a medium is added to depends on which
12494 VirtualBox version created a machine:
12495
12496 <ul>
12497 <li>If the medium has first been attached to a machine which was created by
12498 VirtualBox 4.0 or later, it is added to that machine's media registry in
12499 the machine XML settings file. This way all information about a machine's
12500 media attachments is contained in a single file and can be transported
12501 easily.</li>
12502 <li>For older media attachments (i.e. if the medium was first attached to a
12503 machine which was created with a VirtualBox version before 4.0), media
12504 continue to be registered in the global VirtualBox settings file, for
12505 backwards compatibility.</li>
12506 </ul>
12507
12508 See <link to="IVirtualBox::openMedium" /> for more information.
12509
12510 Media are removed from media registries by the <link to="IMedium::close"/>,
12511 <link to="#deleteStorage"/> and <link to="#mergeTo"/> methods.
12512
12513 <h3>Accessibility checks</h3>
12514
12515 VirtualBox defers media accessibility checks until the <link to="#refreshState" />
12516 method is called explicitly on a medium. This is done to make the VirtualBox object
12517 ready for serving requests as fast as possible and let the end-user
12518 application decide if it needs to check media accessibility right away or not.
12519
12520 As a result, when VirtualBox starts up (e.g. the VirtualBox
12521 object gets created for the first time), all known media are in the
12522 "Inaccessible" state, but the value of the <link to="#lastAccessError"/>
12523 attribute is an empty string because no actual accessibility check has
12524 been made yet.
12525
12526 After calling <link to="#refreshState" />, a medium is considered
12527 <i>accessible</i> if its storage unit can be read. In that case, the
12528 <link to="#state"/> attribute has a value of "Created". If the storage
12529 unit cannot be read (for example, because it is located on a disconnected
12530 network resource, or was accidentally deleted outside VirtualBox),
12531 the medium is considered <i>inaccessible</i>, which is indicated by the
12532 "Inaccessible" state. The exact reason why the medium is inaccessible can be
12533 obtained by reading the <link to="#lastAccessError"/> attribute.
12534
12535 <h3>Medium types</h3>
12536
12537 There are five types of medium behavior which are stored in the
12538 <link to="#type"/> attribute (see <link to="MediumType" />) and
12539 which define the medium's behavior with attachments and snapshots.
12540
12541 All media can be also divided in two groups: <i>base</i> media and
12542 <i>differencing</i> media. A base medium contains all sectors of the
12543 medium data in its own storage and therefore can be used independently.
12544 In contrast, a differencing medium is a "delta" to some other medium and
12545 contains only those sectors which differ from that other medium, which is
12546 then called a <i>parent</i>. The differencing medium is said to be
12547 <i>linked to</i> that parent. The parent may be itself a differencing
12548 medium, thus forming a chain of linked media. The last element in that
12549 chain must always be a base medium. Note that several differencing
12550 media may be linked to the same parent medium.
12551
12552 Differencing media can be distinguished from base media by querying the
12553 <link to="#parent"/> attribute: base media do not have parents they would
12554 depend on, so the value of this attribute is always @c null for them.
12555 Using this attribute, it is possible to walk up the medium tree (from the
12556 child medium to its parent). It is also possible to walk down the tree
12557 using the <link to="#children"/> attribute.
12558
12559 Note that the type of all differencing media is "normal"; all other
12560 values are meaningless for them. Base media may be of any type.
12561
12562 <h3>Automatic composition of the file name part</h3>
12563
12564 Another extension to the <link to="IMedium::location"/> attribute is that
12565 there is a possibility to cause VirtualBox to compose a unique value for
12566 the file name part of the location using the UUID of the hard disk. This
12567 applies only to hard disks in <link to="MediumState_NotCreated"/> state,
12568 e.g. before the storage unit is created, and works as follows. You set the
12569 value of the <link to="IMedium::location"/> attribute to a location
12570 specification which only contains the path specification but not the file
12571 name part and ends with either a forward slash or a backslash character.
12572 In response, VirtualBox will generate a new UUID for the hard disk and
12573 compose the file name using the following pattern:
12574 <pre>
12575 &lt;path&gt;/{&lt;uuid&gt;}.&lt;ext&gt;
12576 </pre>
12577 where <tt>&lt;path&gt;</tt> is the supplied path specification,
12578 <tt>&lt;uuid&gt;</tt> is the newly generated UUID and <tt>&lt;ext&gt;</tt>
12579 is the default extension for the storage format of this hard disk. After
12580 that, you may call any of the methods that create a new hard disk storage
12581 unit and they will use the generated UUID and file name.
12582 </desc>
12583
12584 <attribute name="id" type="uuid" mod="string" readonly="yes">
12585 <desc>
12586 UUID of the medium. For a newly created medium, this value is a randomly
12587 generated UUID.
12588
12589 <note>
12590 For media in one of MediumState_NotCreated, MediumState_Creating or
12591 MediumState_Deleting states, the value of this property is undefined
12592 and will most likely be an empty UUID.
12593 </note>
12594 </desc>
12595 </attribute>
12596
12597 <attribute name="description" type="wstring">
12598 <desc>
12599 Optional description of the medium. For a newly created medium the value
12600 of this attribute is an empty string.
12601
12602 Medium types that don't support this attribute will return E_NOTIMPL in
12603 attempt to get or set this attribute's value.
12604
12605 <note>
12606 For some storage types, reading this attribute may return an outdated
12607 (last known) value when <link to="#state"/> is <link
12608 to="MediumState_Inaccessible"/> or <link
12609 to="MediumState_LockedWrite"/> because the value of this attribute is
12610 stored within the storage unit itself. Also note that changing the
12611 attribute value is not possible in such case, as well as when the
12612 medium is the <link to="MediumState_LockedRead"/> state.
12613 </note>
12614 </desc>
12615 </attribute>
12616
12617 <attribute name="state" type="MediumState" readonly="yes">
12618 <desc>
12619 Returns the current medium state, which is the last state set by
12620 the accessibility check performed by <link to="#refreshState"/>.
12621 If that method has not yet been called on the medium, the state
12622 is "Inaccessible"; as opposed to truly inaccessible media, the
12623 value of <link to="#lastAccessError"/> will be an empty string in
12624 that case.
12625
12626 <note>As of version 3.1, this no longer performs an accessibility check
12627 automatically; call <link to="#refreshState"/> for that.
12628 </note>
12629 </desc>
12630 </attribute>
12631
12632 <attribute name="variant" type="unsigned long" readonly="yes">
12633 <desc>
12634 Returns the storage format variant information for this medium
12635 as a combination of the flags described at <link to="MediumVariant" />.
12636 Before <link to="#refreshState"/> is called this method returns
12637 an undefined value.
12638 </desc>
12639 </attribute>
12640
12641 <attribute name="location" type="wstring">
12642 <desc>
12643 Location of the storage unit holding medium data.
12644
12645 The format of the location string is medium type specific. For medium
12646 types using regular files in a host's file system, the location
12647 string is the full file name.
12648
12649 Some medium types may support changing the storage unit location by
12650 simply changing the value of this property. If this operation is not
12651 supported, the implementation will return E_NOTIMPL in attempt to set
12652 this attribute's value.
12653
12654 When setting a value of the location attribute which is a regular file
12655 in the host's file system, the given file name may be either relative to
12656 the <link to="IVirtualBox::homeFolder">VirtualBox home folder</link> or
12657 absolute. Note that if the given location specification does not contain
12658 the file extension part then a proper default extension will be
12659 automatically appended by the implementation depending on the medium type.
12660 </desc>
12661 </attribute>
12662
12663 <attribute name="name" type="wstring" readonly="yes">
12664 <desc>
12665 Name of the storage unit holding medium data.
12666
12667 The returned string is a short version of the <link to="#location"/>
12668 attribute that is suitable for representing the medium in situations
12669 where the full location specification is too long (such as lists
12670 and comboboxes in GUI frontends). This string is also used by frontends
12671 to sort the media list alphabetically when needed.
12672
12673 For example, for locations that are regular files in the host's file
12674 system, the value of this attribute is just the file name (+ extension),
12675 without the path specification.
12676
12677 Note that as opposed to the <link to="#location"/> attribute, the name
12678 attribute will not necessary be unique for a list of media of the
12679 given type and format.
12680 </desc>
12681 </attribute>
12682
12683 <attribute name="deviceType" type="DeviceType" readonly="yes">
12684 <desc>Kind of device (DVD/Floppy/HardDisk) which is applicable to this
12685 medium.</desc>
12686 </attribute>
12687
12688 <attribute name="hostDrive" type="boolean" readonly="yes">
12689 <desc>True if this corresponds to a drive on the host.</desc>
12690 </attribute>
12691
12692 <attribute name="size" type="long long" readonly="yes">
12693 <desc>
12694 Physical size of the storage unit used to hold medium data (in bytes).
12695
12696 <note>
12697 For media whose <link to="#state"/> is <link
12698 to="MediumState_Inaccessible"/>, the value of this property is the
12699 last known size. For <link to="MediumState_NotCreated"/> media,
12700 the returned value is zero.
12701 </note>
12702 </desc>
12703 </attribute>
12704
12705 <attribute name="format" type="wstring" readonly="yes">
12706 <desc>
12707 Storage format of this medium.
12708
12709 The value of this attribute is a string that specifies a backend used
12710 to store medium data. The storage format is defined when you create a
12711 new medium or automatically detected when you open an existing medium,
12712 and cannot be changed later.
12713
12714 The list of all storage formats supported by this VirtualBox
12715 installation can be obtained using
12716 <link to="ISystemProperties::mediumFormats"/>.
12717 </desc>
12718 </attribute>
12719
12720 <attribute name="mediumFormat" type="IMediumFormat" readonly="yes">
12721 <desc>
12722 Storage medium format object corresponding to this medium.
12723
12724 The value of this attribute is a reference to the medium format object
12725 that specifies the backend properties used to store medium data. The
12726 storage format is defined when you create a new medium or automatically
12727 detected when you open an existing medium, and cannot be changed later.
12728
12729 <note>@c null is returned if there is no associated medium format
12730 object. This can e.g. happen for medium objects representing host
12731 drives and other special medium objects.</note>
12732 </desc>
12733 </attribute>
12734
12735 <attribute name="type" type="MediumType">
12736 <desc>
12737 Type (role) of this medium.
12738
12739 The following constraints apply when changing the value of this
12740 attribute:
12741 <ul>
12742 <li>If a medium is attached to a virtual machine (either in the
12743 current state or in one of the snapshots), its type cannot be
12744 changed.
12745 </li>
12746 <li>As long as the medium has children, its type cannot be set
12747 to <link to="MediumType_Writethrough"/>.
12748 </li>
12749 <li>The type of all differencing media is
12750 <link to="MediumType_Normal"/> and cannot be changed.
12751 </li>
12752 </ul>
12753
12754 The type of a newly created or opened medium is set to
12755 <link to="MediumType_Normal"/>, except for DVD and floppy media,
12756 which have a type of <link to="MediumType_Writethrough"/>.
12757 </desc>
12758 </attribute>
12759
12760 <attribute name="allowedTypes" type="MediumType" safearray="yes" readonly="yes">
12761 <desc>
12762 Returns which medium types can selected for this medium.
12763
12764 <result name="E_NOTIMPL">
12765 This attribute is not implemented at the moment.
12766 </result>
12767 </desc>
12768 </attribute>
12769
12770 <attribute name="parent" type="IMedium" readonly="yes">
12771 <desc>
12772 Parent of this medium (the medium this medium is directly based
12773 on).
12774
12775 Only differencing media have parents. For base (non-differencing)
12776 media, @c null is returned.
12777 </desc>
12778 </attribute>
12779
12780 <attribute name="children" type="IMedium" safearray="yes" readonly="yes">
12781 <desc>
12782 Children of this medium (all differencing media directly based
12783 on this medium). A @c null array is returned if this medium
12784 does not have any children.
12785 </desc>
12786 </attribute>
12787
12788 <attribute name="base" type="IMedium" readonly="yes">
12789 <desc>
12790 Base medium of this medium.
12791
12792 If this is a differencing medium, its base medium is the medium
12793 the given medium branch starts from. For all other types of media, this
12794 property returns the medium object itself (i.e. the same object this
12795 property is read on).
12796 </desc>
12797 </attribute>
12798
12799 <attribute name="readOnly" type="boolean" readonly="yes">
12800 <desc>
12801 Returns @c true if this medium is read-only and @c false otherwise.
12802
12803 A medium is considered to be read-only when its contents cannot be
12804 modified without breaking the integrity of other parties that depend on
12805 this medium such as its child media or snapshots of virtual machines
12806 where this medium is attached to these machines. If there are no
12807 children and no such snapshots then there is no dependency and the
12808 medium is not read-only.
12809
12810 The value of this attribute can be used to determine the kind of the
12811 attachment that will take place when attaching this medium to a
12812 virtual machine. If the value is @c false then the medium will
12813 be attached directly. If the value is @c true then the medium
12814 will be attached indirectly by creating a new differencing child
12815 medium for that. See the interface description for more information.
12816
12817 Note that all <link to="MediumType_Immutable">Immutable</link> media
12818 are always read-only while all
12819 <link to="MediumType_Writethrough">Writethrough</link> media are
12820 always not.
12821
12822 <note>
12823 The read-only condition represented by this attribute is related to
12824 the medium type and usage, not to the current
12825 <link to="IMedium::state">medium state</link> and not to the read-only
12826 state of the storage unit.
12827 </note>
12828 </desc>
12829 </attribute>
12830
12831 <attribute name="logicalSize" type="long long" readonly="yes">
12832 <desc>
12833 Logical size of this medium (in bytes), as reported to the
12834 guest OS running inside the virtual machine this medium is
12835 attached to. The logical size is defined when the medium is created
12836 and cannot be changed later.
12837
12838 <note>
12839 Reading this property on a differencing medium will return the size
12840 of its <link to="#base"/> medium.
12841 </note>
12842 <note>
12843 For media whose state is <link to="#state"/> is <link
12844 to="MediumState_Inaccessible"/>, the value of this property is the
12845 last known logical size. For <link to="MediumState_NotCreated"/>
12846 media, the returned value is zero.
12847 </note>
12848 </desc>
12849 </attribute>
12850
12851 <attribute name="autoReset" type="boolean">
12852 <desc>
12853 Whether this differencing medium will be automatically reset each
12854 time a virtual machine it is attached to is powered up. This
12855 attribute is automatically set to @c true for the last
12856 differencing image of an "immutable" medium (see
12857 <link to="MediumType" />).
12858
12859 See <link to="#reset"/> for more information about resetting
12860 differencing media.
12861
12862 <note>
12863 Reading this property on a base (non-differencing) medium will
12864 always @c false. Changing the value of this property in this
12865 case is not supported.
12866 </note>
12867
12868 <result name="VBOX_E_NOT_SUPPORTED">
12869 This is not a differencing medium (when changing the attribute
12870 value).
12871 </result>
12872 </desc>
12873 </attribute>
12874
12875 <attribute name="lastAccessError" type="wstring" readonly="yes">
12876 <desc>
12877 Text message that represents the result of the last accessibility
12878 check performed by <link to="#refreshState"/>.
12879
12880 An empty string is returned if the last accessibility check
12881 was successful or has not yet been called. As a result, if
12882 <link to="#state" /> is "Inaccessible" and this attribute is empty,
12883 then <link to="#refreshState"/> has yet to be called; this is the
12884 default value of media after VirtualBox initialization.
12885 A non-empty string indicates a failure and should normally describe
12886 a reason of the failure (for example, a file read error).
12887 </desc>
12888 </attribute>
12889
12890 <attribute name="machineIds" type="uuid" mod="string" safearray="yes" readonly="yes">
12891 <desc>
12892 Array of UUIDs of all machines this medium is attached to.
12893
12894 A @c null array is returned if this medium is not attached to any
12895 machine or to any machine's snapshot.
12896
12897 <note>
12898 The returned array will include a machine even if this medium is not
12899 attached to that machine in the current state but attached to it in
12900 one of the machine's snapshots. See <link to="#getSnapshotIds"/> for
12901 details.
12902 </note>
12903 </desc>
12904 </attribute>
12905
12906 <method name="setIds">
12907 <desc>
12908 Changes the UUID and parent UUID for a hard disk medium.
12909 </desc>
12910 <param name="setImageId" type="boolean" dir="in">
12911 <desc>
12912 Select whether a new image UUID is set or not.
12913 </desc>
12914 </param>
12915 <param name="imageId" type="uuid" mod="string" dir="in">
12916 <desc>
12917 New UUID for the image. If an empty string is passed, then a new
12918 UUID is automatically created, provided that @a setImageId is @c true.
12919 Specifying a zero UUID is not allowed.
12920 </desc>
12921 </param>
12922 <param name="setParentId" type="boolean" dir="in">
12923 <desc>
12924 Select whether a new parent UUID is set or not.
12925 </desc>
12926 </param>
12927 <param name="parentId" type="uuid" mod="string" dir="in">
12928 <desc>
12929 New parent UUID for the image. If an empty string is passed, then a
12930 new UUID is automatically created, provided @a setParentId is
12931 @c true. A zero UUID is valid.
12932 </desc>
12933 </param>
12934 <result name="E_INVALIDARG">
12935 Invalid parameter combination.
12936 </result>
12937 <result name="VBOX_E_NOT_SUPPORTED">
12938 Medium is not a hard disk medium.
12939 </result>
12940 </method>
12941
12942 <method name="refreshState">
12943 <desc>
12944 If the current medium state (see <link to="MediumState"/>) is one of
12945 "Created", "Inaccessible" or "LockedRead", then this performs an
12946 accessibility check on the medium and sets the value of the <link to="#state"/>
12947 attribute accordingly; that value is also returned for convenience.
12948
12949 For all other state values, this does not perform a refresh but returns
12950 the state only.
12951
12952 The refresh, if performed, may take a long time (several seconds or even
12953 minutes, depending on the storage unit location and format) because it performs an
12954 accessibility check of the storage unit. This check may cause a significant
12955 delay if the storage unit of the given medium is, for example, a file located
12956 on a network share which is not currently accessible due to connectivity
12957 problems. In that case, the call will not return until a timeout
12958 interval defined by the host OS for this operation expires. For this reason,
12959 it is recommended to never read this attribute on the main UI thread to avoid
12960 making the UI unresponsive.
12961
12962 If the last known state of the medium is "Created" and the accessibility
12963 check fails, then the state would be set to "Inaccessible", and
12964 <link to="#lastAccessError"/> may be used to get more details about the
12965 failure. If the state of the medium is "LockedRead", then it remains the
12966 same, and a non-empty value of <link to="#lastAccessError"/> will
12967 indicate a failed accessibility check in this case.
12968
12969 Note that not all medium states are applicable to all medium types.
12970 </desc>
12971 <param name="state" type="MediumState" dir="return">
12972 <desc>
12973 New medium state.
12974 </desc>
12975 </param>
12976 </method>
12977
12978 <method name="getSnapshotIds">
12979 <desc>
12980 Returns an array of UUIDs of all snapshots of the given machine where
12981 this medium is attached to.
12982
12983 If the medium is attached to the machine in the current state, then the
12984 first element in the array will always be the ID of the queried machine
12985 (i.e. the value equal to the @c machineId argument), followed by
12986 snapshot IDs (if any).
12987
12988 If the medium is not attached to the machine in the current state, then
12989 the array will contain only snapshot IDs.
12990
12991 The returned array may be @c null if this medium is not attached
12992 to the given machine at all, neither in the current state nor in one of
12993 the snapshots.
12994 </desc>
12995 <param name="machineId" type="uuid" mod="string" dir="in">
12996 <desc>
12997 UUID of the machine to query.
12998 </desc>
12999 </param>
13000 <param name="snapshotIds" type="uuid" mod="string" safearray="yes" dir="return">
13001 <desc>
13002 Array of snapshot UUIDs of the given machine using this medium.
13003 </desc>
13004 </param>
13005 </method>
13006
13007 <method name="lockRead">
13008 <desc>
13009 Locks this medium for reading.
13010
13011 A read lock is shared: many clients can simultaneously lock the
13012 same medium for reading unless it is already locked for writing (see
13013 <link to="#lockWrite"/>) in which case an error is returned.
13014
13015 When the medium is locked for reading, it cannot be modified
13016 from within VirtualBox. This means that any method that changes
13017 the properties of this medium or contents of the storage unit
13018 will return an error (unless explicitly stated otherwise). That
13019 includes an attempt to start a virtual machine that wants to
13020 write to the the medium.
13021
13022 When the virtual machine is started up, it locks for reading all
13023 media it uses in read-only mode. If some medium cannot be locked
13024 for reading, the startup procedure will fail.
13025 A medium is typically locked for reading while it is used by a running
13026 virtual machine but has a depending differencing image that receives
13027 the actual write operations. This way one base medium can have
13028 multiple child differencing images which can be written to
13029 simultaneously. Read-only media such as DVD and floppy images are
13030 also locked for reading only (so they can be in use by multiple
13031 machines simultaneously).
13032
13033 A medium is also locked for reading when it is the source of a
13034 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
13035
13036 The medium locked for reading must be unlocked using the <link
13037 to="#unlockRead"/> method. Calls to <link to="#lockRead"/>
13038 can be nested and must be followed by the same number of paired
13039 <link to="#unlockRead"/> calls.
13040
13041 This method sets the medium state (see <link to="#state"/>) to
13042 "LockedRead" on success. The medium's previous state must be
13043 one of "Created", "Inaccessible" or "LockedRead".
13044
13045 Locking an inaccessible medium is not an error; this method performs
13046 a logical lock that prevents modifications of this medium through
13047 the VirtualBox API, not a physical file-system lock of the underlying
13048 storage unit.
13049
13050 This method returns the current state of the medium
13051 <i>before</i> the operation.
13052
13053 <result name="VBOX_E_INVALID_OBJECT_STATE">
13054 Invalid medium state (e.g. not created, locked, inaccessible,
13055 creating, deleting).
13056 </result>
13057
13058 </desc>
13059 <param name="state" type="MediumState" dir="return">
13060 <desc>
13061 State of the medium after the operation.
13062 </desc>
13063 </param>
13064 </method>
13065
13066 <method name="unlockRead">
13067 <desc>
13068 Cancels the read lock previously set by <link to="#lockRead"/>.
13069
13070 For both success and failure, this method returns the current state
13071 of the medium <i>after</i> the operation.
13072
13073 See <link to="#lockRead"/> for more details.
13074
13075 <result name="VBOX_E_INVALID_OBJECT_STATE">
13076 Medium not locked for reading.
13077 </result>
13078
13079 </desc>
13080 <param name="state" type="MediumState" dir="return">
13081 <desc>
13082 State of the medium after the operation.
13083 </desc>
13084 </param>
13085 </method>
13086
13087 <method name="lockWrite">
13088 <desc>
13089 Locks this medium for writing.
13090
13091 A write lock, as opposed to <link to="#lockRead"/>, is
13092 exclusive: there may be only one client holding a write lock,
13093 and there may be no read locks while the write lock is held.
13094 As a result, read-locking fails if a write lock is held, and
13095 write-locking fails if either a read or another write lock is held.
13096
13097 When a medium is locked for writing, it cannot be modified
13098 from within VirtualBox, and it is not guaranteed that the values
13099 of its properties are up-to-date. Any method that changes the
13100 properties of this medium or contents of the storage unit will
13101 return an error (unless explicitly stated otherwise).
13102
13103 When a virtual machine is started up, it locks for writing all
13104 media it uses to write data to. If any medium could not be locked
13105 for writing, the startup procedure will fail. If a medium has
13106 differencing images, then while the machine is running, only
13107 the last ("leaf") differencing image is locked for writing,
13108 whereas its parents are locked for reading only.
13109
13110 A medium is also locked for writing when it is the target of a
13111 write operation such as <link to="#cloneTo"/> or <link to="#mergeTo"/>.
13112
13113 The medium locked for writing must be unlocked using the <link
13114 to="#unlockWrite"/> method. Write locks <i>cannot</i> be nested.
13115
13116 This method sets the medium state (see <link to="#state"/>) to
13117 "LockedWrite" on success. The medium's previous state must be
13118 either "Created" or "Inaccessible".
13119
13120 Locking an inaccessible medium is not an error; this method performs
13121 a logical lock that prevents modifications of this medium through
13122 the VirtualBox API, not a physical file-system lock of the underlying
13123 storage unit.
13124
13125 For both, success and failure, this method returns the current
13126 state of the medium <i>before</i> the operation.
13127
13128 <result name="VBOX_E_INVALID_OBJECT_STATE">
13129 Invalid medium state (e.g. not created, locked, inaccessible,
13130 creating, deleting).
13131 </result>
13132
13133 </desc>
13134 <param name="state" type="MediumState" dir="return">
13135 <desc>
13136 State of the medium after the operation.
13137 </desc>
13138 </param>
13139 </method>
13140
13141 <method name="unlockWrite">
13142 <desc>
13143 Cancels the write lock previously set by <link to="#lockWrite"/>.
13144
13145 For both success and failure, this method returns the current
13146 state of the medium <i>after</i> the operation.
13147
13148 See <link to="#lockWrite"/> for more details.
13149
13150 <result name="VBOX_E_INVALID_OBJECT_STATE">
13151 Medium not locked for writing.
13152 </result>
13153
13154 </desc>
13155 <param name="state" type="MediumState" dir="return">
13156 <desc>
13157 State of the medium after the operation.
13158 </desc>
13159 </param>
13160 </method>
13161
13162 <method name="close">
13163 <desc>
13164 Closes this medium.
13165
13166 The medium must not be attached to any known virtual machine
13167 and must not have any known child media, otherwise the
13168 operation will fail.
13169
13170 When the medium is successfully closed, it is removed from
13171 the list of registered media, but its storage unit is not
13172 deleted. In particular, this means that this medium can
13173 later be opened again using the <link to="IVirtualBox::openMedium"/>
13174 call.
13175
13176 Note that after this method successfully returns, the given medium
13177 object becomes uninitialized. This means that any attempt
13178 to call any of its methods or attributes will fail with the
13179 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error.
13180
13181 <result name="VBOX_E_INVALID_OBJECT_STATE">
13182 Invalid medium state (other than not created, created or
13183 inaccessible).
13184 </result>
13185 <result name="VBOX_E_OBJECT_IN_USE">
13186 Medium attached to virtual machine.
13187 </result>
13188 <result name="VBOX_E_FILE_ERROR">
13189 Settings file not accessible.
13190 </result>
13191 <result name="VBOX_E_XML_ERROR">
13192 Could not parse the settings file.
13193 </result>
13194
13195 </desc>
13196 </method>
13197
13198 <!-- property methods -->
13199
13200 <method name="getProperty" const="yes">
13201 <desc>
13202 Returns the value of the custom medium property with the given name.
13203
13204 The list of all properties supported by the given medium format can
13205 be obtained with <link to="IMediumFormat::describeProperties"/>.
13206
13207 <note>If this method returns an empty string in @a value, the requested
13208 property is supported but currently not assigned any value.</note>
13209
13210 <result name="VBOX_E_OBJECT_NOT_FOUND">
13211 Requested property does not exist (not supported by the format).
13212 </result>
13213 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
13214 </desc>
13215 <param name="name" type="wstring" dir="in">
13216 <desc>Name of the property to get.</desc>
13217 </param>
13218 <param name="value" type="wstring" dir="return">
13219 <desc>Current property value.</desc>
13220 </param>
13221 </method>
13222
13223 <method name="setProperty">
13224 <desc>
13225 Sets the value of the custom medium property with the given name.
13226
13227 The list of all properties supported by the given medium format can
13228 be obtained with <link to="IMediumFormat::describeProperties"/>.
13229
13230 <note>Setting the property value to @c null or an empty string is
13231 equivalent to deleting the existing value. A default value (if it is
13232 defined for this property) will be used by the format backend in this
13233 case.</note>
13234
13235 <result name="VBOX_E_OBJECT_NOT_FOUND">
13236 Requested property does not exist (not supported by the format).
13237 </result>
13238 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
13239 </desc>
13240 <param name="name" type="wstring" dir="in">
13241 <desc>Name of the property to set.</desc>
13242 </param>
13243 <param name="value" type="wstring" dir="in">
13244 <desc>Property value to set.</desc>
13245 </param>
13246 </method>
13247
13248 <method name="getProperties" const="yes">
13249 <desc>
13250 Returns values for a group of properties in one call.
13251
13252 The names of the properties to get are specified using the @a names
13253 argument which is a list of comma-separated property names or
13254 an empty string if all properties are to be returned.
13255 <note>Currently the value of this argument is ignored and the method
13256 always returns all existing properties.</note>
13257
13258 The list of all properties supported by the given medium format can
13259 be obtained with <link to="IMediumFormat::describeProperties"/>.
13260
13261 The method returns two arrays, the array of property names corresponding
13262 to the @a names argument and the current values of these properties.
13263 Both arrays have the same number of elements with each element at the
13264 given index in the first array corresponds to an element at the same
13265 index in the second array.
13266
13267 For properties that do not have assigned values, an empty string is
13268 returned at the appropriate index in the @a returnValues array.
13269
13270 </desc>
13271 <param name="names" type="wstring" dir="in">
13272 <desc>
13273 Names of properties to get.
13274 </desc>
13275 </param>
13276 <param name="returnNames" type="wstring" safearray="yes" dir="out">
13277 <desc>Names of returned properties.</desc>
13278 </param>
13279 <param name="returnValues" type="wstring" safearray="yes" dir="return">
13280 <desc>Values of returned properties.</desc>
13281 </param>
13282 </method>
13283
13284 <method name="setProperties">
13285 <desc>
13286 Sets values for a group of properties in one call.
13287
13288 The names of the properties to set are passed in the @a names
13289 array along with the new values for them in the @a values array. Both
13290 arrays have the same number of elements with each element at the given
13291 index in the first array corresponding to an element at the same index
13292 in the second array.
13293
13294 If there is at least one property name in @a names that is not valid,
13295 the method will fail before changing the values of any other properties
13296 from the @a names array.
13297
13298 Using this method over <link to="#setProperty"/> is preferred if you
13299 need to set several properties at once since it is more efficient.
13300
13301 The list of all properties supported by the given medium format can
13302 be obtained with <link to="IMediumFormat::describeProperties"/>.
13303
13304 Setting the property value to @c null or an empty string is equivalent
13305 to deleting the existing value. A default value (if it is defined for
13306 this property) will be used by the format backend in this case.
13307 </desc>
13308 <param name="names" type="wstring" safearray="yes" dir="in">
13309 <desc>Names of properties to set.</desc>
13310 </param>
13311 <param name="values" type="wstring" safearray="yes" dir="in">
13312 <desc>Values of properties to set.</desc>
13313 </param>
13314 </method>
13315
13316 <!-- storage methods -->
13317
13318 <method name="createBaseStorage">
13319 <desc>
13320 Starts creating a hard disk storage unit (fixed/dynamic, according
13321 to the variant flags) in in the background. The previous storage unit
13322 created for this object, if any, must first be deleted using
13323 <link to="#deleteStorage"/>, otherwise the operation will fail.
13324
13325 Before the operation starts, the medium is placed in
13326 <link to="MediumState_Creating"/> state. If the create operation
13327 fails, the medium will be placed back in <link to="MediumState_NotCreated"/>
13328 state.
13329
13330 After the returned progress object reports that the operation has
13331 successfully completed, the medium state will be set to <link
13332 to="MediumState_Created"/>, the medium will be remembered by this
13333 VirtualBox installation and may be attached to virtual machines.
13334
13335 <result name="VBOX_E_NOT_SUPPORTED">
13336 The variant of storage creation operation is not supported. See <link
13337 to="IMediumFormat::capabilities"/>.
13338 </result>
13339 </desc>
13340 <param name="logicalSize" type="long long" dir="in">
13341 <desc>Maximum logical size of the medium in bytes.</desc>
13342 </param>
13343 <param name="variant" type="unsigned long" dir="in">
13344 <desc>Exact image variant which should be created (as a combination of
13345 <link to="MediumVariant" /> flags).</desc>
13346 </param>
13347 <param name="progress" type="IProgress" dir="return">
13348 <desc>Progress object to track the operation completion.</desc>
13349 </param>
13350 </method>
13351
13352 <method name="deleteStorage">
13353 <desc>
13354 Starts deleting the storage unit of this medium.
13355
13356 The medium must not be attached to any known virtual machine and must
13357 not have any known child media, otherwise the operation will fail.
13358 It will also fail if there is no storage unit to delete or if deletion
13359 is already in progress, or if the medium is being in use (locked for
13360 read or for write) or inaccessible. Therefore, the only valid state for
13361 this operation to succeed is <link to="MediumState_Created"/>.
13362
13363 Before the operation starts, the medium is placed in
13364 <link to="MediumState_Deleting"/> state and gets removed from the list
13365 of remembered hard disks (media registry). If the delete operation
13366 fails, the medium will be remembered again and placed back to
13367 <link to="MediumState_Created"/> state.
13368
13369 After the returned progress object reports that the operation is
13370 complete, the medium state will be set to
13371 <link to="MediumState_NotCreated"/> and you will be able to use one of
13372 the storage creation methods to create it again.
13373
13374 <see><link to="#close"/></see>
13375
13376 <result name="VBOX_E_OBJECT_IN_USE">
13377 Medium is attached to a virtual machine.
13378 </result>
13379 <result name="VBOX_E_NOT_SUPPORTED">
13380 Storage deletion is not allowed because neither of storage creation
13381 operations are supported. See
13382 <link to="IMediumFormat::capabilities"/>.
13383 </result>
13384
13385 <note>
13386 If the deletion operation fails, it is not guaranteed that the storage
13387 unit still exists. You may check the <link to="IMedium::state"/> value
13388 to answer this question.
13389 </note>
13390 </desc>
13391 <param name="progress" type="IProgress" dir="return">
13392 <desc>Progress object to track the operation completion.</desc>
13393 </param>
13394 </method>
13395
13396 <!-- diff methods -->
13397
13398 <method name="createDiffStorage">
13399 <desc>
13400 Starts creating an empty differencing storage unit based on this
13401 medium in the format and at the location defined by the @a target
13402 argument.
13403
13404 The target medium must be in <link to="MediumState_NotCreated"/>
13405 state (i.e. must not have an existing storage unit). Upon successful
13406 completion, this operation will set the type of the target medium to
13407 <link to="MediumType_Normal"/> and create a storage unit necessary to
13408 represent the differencing medium data in the given format (according
13409 to the storage format of the target object).
13410
13411 After the returned progress object reports that the operation is
13412 successfully complete, the target medium gets remembered by this
13413 VirtualBox installation and may be attached to virtual machines.
13414
13415 <note>
13416 The medium will be set to <link to="MediumState_LockedRead"/>
13417 state for the duration of this operation.
13418 </note>
13419 <result name="VBOX_E_OBJECT_IN_USE">
13420 Medium not in @c NotCreated state.
13421 </result>
13422 </desc>
13423 <param name="target" type="IMedium" dir="in">
13424 <desc>Target medium.</desc>
13425 </param>
13426 <param name="variant" type="unsigned long" dir="in">
13427 <desc>Exact image variant which should be created (as a combination of
13428 <link to="MediumVariant" /> flags).</desc>
13429 </param>
13430 <param name="progress" type="IProgress" dir="return">
13431 <desc>Progress object to track the operation completion.</desc>
13432 </param>
13433 </method>
13434
13435 <method name="mergeTo">
13436 <desc>
13437 Starts merging the contents of this medium and all intermediate
13438 differencing media in the chain to the given target medium.
13439
13440 The target medium must be either a descendant of this medium or
13441 its ancestor (otherwise this method will immediately return a failure).
13442 It follows that there are two logical directions of the merge operation:
13443 from ancestor to descendant (<i>forward merge</i>) and from descendant to
13444 ancestor (<i>backward merge</i>). Let us consider the following medium
13445 chain:
13446
13447 <pre>Base &lt;- Diff_1 &lt;- Diff_2</pre>
13448
13449 Here, calling this method on the <tt>Base</tt> medium object with
13450 <tt>Diff_2</tt> as an argument will be a forward merge; calling it on
13451 <tt>Diff_2</tt> with <tt>Base</tt> as an argument will be a backward
13452 merge. Note that in both cases the contents of the resulting medium
13453 will be the same, the only difference is the medium object that takes
13454 the result of the merge operation. In case of the forward merge in the
13455 above example, the result will be written to <tt>Diff_2</tt>; in case of
13456 the backward merge, the result will be written to <tt>Base</tt>. In
13457 other words, the result of the operation is always stored in the target
13458 medium.
13459
13460 Upon successful operation completion, the storage units of all media in
13461 the chain between this (source) medium and the target medium, including
13462 the source medium itself, will be automatically deleted and the
13463 relevant medium objects (including this medium) will become
13464 uninitialized. This means that any attempt to call any of
13465 their methods or attributes will fail with the
13466 <tt>"Object not ready" (E_ACCESSDENIED)</tt> error. Applied to the above
13467 example, the forward merge of <tt>Base</tt> to <tt>Diff_2</tt> will
13468 delete and uninitialize both <tt>Base</tt> and <tt>Diff_1</tt> media.
13469 Note that <tt>Diff_2</tt> in this case will become a base medium
13470 itself since it will no longer be based on any other medium.
13471
13472 Considering the above, all of the following conditions must be met in
13473 order for the merge operation to succeed:
13474 <ul>
13475 <li>
13476 Neither this (source) medium nor any intermediate
13477 differencing medium in the chain between it and the target
13478 medium is attached to any virtual machine.
13479 </li>
13480 <li>
13481 Neither the source medium nor the target medium is an
13482 <link to="MediumType_Immutable"/> medium.
13483 </li>
13484 <li>
13485 The part of the medium tree from the source medium to the
13486 target medium is a linear chain, i.e. all medium in this
13487 chain have exactly one child which is the next medium in this
13488 chain. The only exception from this rule is the target medium in
13489 the forward merge operation; it is allowed to have any number of
13490 child media because the merge operation will not change its
13491 logical contents (as it is seen by the guest OS or by children).
13492 </li>
13493 <li>
13494 None of the involved media are in
13495 <link to="MediumState_LockedRead"/> or
13496 <link to="MediumState_LockedWrite"/> state.
13497 </li>
13498 </ul>
13499
13500 <note>
13501 This (source) medium and all intermediates will be placed to <link
13502 to="MediumState_Deleting"/> state and the target medium will be
13503 placed to <link to="MediumState_LockedWrite"/> state and for the
13504 duration of this operation.
13505 </note>
13506 </desc>
13507 <param name="target" type="IMedium" dir="in">
13508 <desc>Target medium.</desc>
13509 </param>
13510 <param name="progress" type="IProgress" dir="return">
13511 <desc>Progress object to track the operation completion.</desc>
13512 </param>
13513 </method>
13514
13515 <!-- clone method -->
13516
13517 <method name="cloneTo">
13518 <desc>
13519 Starts creating a clone of this medium in the format and at the
13520 location defined by the @a target argument.
13521
13522 The target medium must be either in <link to="MediumState_NotCreated"/>
13523 state (i.e. must not have an existing storage unit) or in
13524 <link to="MediumState_Created"/> state (i.e. created and not locked, and
13525 big enough to hold the data or else the copy will be partial). Upon
13526 successful completion, the cloned medium will contain exactly the
13527 same sector data as the medium being cloned, except that in the
13528 first case a new UUID for the clone will be randomly generated, and in
13529 the second case the UUID will remain unchanged.
13530
13531 The @a parent argument defines which medium will be the parent
13532 of the clone. Passing a @c null reference indicates that the clone will
13533 be a base image, i.e. completely independent. It is possible to specify
13534 an arbitrary medium for this parameter, including the parent of the
13535 medium which is being cloned. Even cloning to a child of the source
13536 medium is possible. Note that when cloning to an existing image, the
13537 @a parent argument is ignored.
13538
13539 After the returned progress object reports that the operation is
13540 successfully complete, the target medium gets remembered by this
13541 VirtualBox installation and may be attached to virtual machines.
13542
13543 <note>
13544 This medium will be placed to <link to="MediumState_LockedRead"/>
13545 state for the duration of this operation.
13546 </note>
13547 <result name="E_NOTIMPL">
13548 The specified cloning variant is not supported at the moment.
13549 </result>
13550 </desc>
13551 <param name="target" type="IMedium" dir="in">
13552 <desc>Target medium.</desc>
13553 </param>
13554 <param name="variant" type="unsigned long" dir="in">
13555 <desc>Exact image variant which should be created (as a combination of
13556 <link to="MediumVariant" /> flags).</desc>
13557 </param>
13558 <param name="parent" type="IMedium" dir="in">
13559 <desc>Parent of the cloned medium.</desc>
13560 </param>
13561 <param name="progress" type="IProgress" dir="return">
13562 <desc>Progress object to track the operation completion.</desc>
13563 </param>
13564 </method>
13565
13566 <method name="cloneToBase">
13567 <desc>
13568 Starts creating a clone of this medium in the format and at the
13569 location defined by the @a target argument.
13570
13571 The target medium must be either in <link to="MediumState_NotCreated"/>
13572 state (i.e. must not have an existing storage unit) or in
13573 <link to="MediumState_Created"/> state (i.e. created and not locked, and
13574 big enough to hold the data or else the copy will be partial). Upon
13575 successful completion, the cloned medium will contain exactly the
13576 same sector data as the medium being cloned, except that in the
13577 first case a new UUID for the clone will be randomly generated, and in
13578 the second case the UUID will remain unchanged.
13579
13580 The @a parent argument defines which medium will be the parent
13581 of the clone. In this case the clone will be a base image, i.e.
13582 completely independent. It is possible to specify an arbitrary
13583 medium for this parameter, including the parent of the
13584 medium which is being cloned. Even cloning to a child of the source
13585 medium is possible. Note that when cloning to an existing image, the
13586 @a parent argument is ignored.
13587
13588 After the returned progress object reports that the operation is
13589 successfully complete, the target medium gets remembered by this
13590 VirtualBox installation and may be attached to virtual machines.
13591
13592 <note>
13593 This medium will be placed to <link to="MediumState_LockedRead"/>
13594 state for the duration of this operation.
13595 </note>
13596 <result name="E_NOTIMPL">
13597 The specified cloning variant is not supported at the moment.
13598 </result>
13599 </desc>
13600 <param name="target" type="IMedium" dir="in">
13601 <desc>Target medium.</desc>
13602 </param>
13603 <param name="variant" type="unsigned long" dir="in">
13604 <desc>Exact image variant which should be created (as a combination of
13605 <link to="MediumVariant" /> flags).</desc>
13606 </param>
13607 <param name="progress" type="IProgress" dir="return">
13608 <desc>Progress object to track the operation completion.</desc>
13609 </param>
13610 </method>
13611
13612 <!-- other methods -->
13613
13614 <method name="compact">
13615 <desc>
13616 Starts compacting of this medium. This means that the medium is
13617 transformed into a possibly more compact storage representation.
13618 This potentially creates temporary images, which can require a
13619 substantial amount of additional disk space.
13620
13621 This medium will be placed to <link to="MediumState_LockedWrite"/>
13622 state and all its parent media (if any) will be placed to
13623 <link to="MediumState_LockedRead"/> state for the duration of this
13624 operation.
13625
13626 Please note that the results can be either returned straight away,
13627 or later as the result of the background operation via the object
13628 returned via the @a progress parameter.
13629
13630 <result name="VBOX_E_NOT_SUPPORTED">
13631 Medium format does not support compacting (but potentially
13632 needs it).
13633 </result>
13634 </desc>
13635 <param name="progress" type="IProgress" dir="return">
13636 <desc>Progress object to track the operation completion.</desc>
13637 </param>
13638 </method>
13639
13640 <method name="resize">
13641 <desc>
13642 Starts resizing this medium. This means that the nominal size of the
13643 medium is set to the new value. Both increasing and decreasing the
13644 size is possible, and there are no safety checks, since VirtualBox
13645 does not make any assumptions about the medium contents.
13646
13647 Resizing usually needs additional disk space, and possibly also
13648 some temporary disk space. Note that resize does not create a full
13649 temporary copy of the medium, so the additional disk space requirement
13650 is usually much lower than using the clone operation.
13651
13652 This medium will be placed to <link to="MediumState_LockedWrite"/>
13653 state for the duration of this operation.
13654
13655 Please note that the results can be either returned straight away,
13656 or later as the result of the background operation via the object
13657 returned via the @a progress parameter.
13658
13659 <result name="VBOX_E_NOT_SUPPORTED">
13660 Medium format does not support resizing.
13661 </result>
13662 </desc>
13663 <param name="logicalSize" type="long long" dir="in">
13664 <desc>New nominal capacity of the medium in bytes.</desc>
13665 </param>
13666 <param name="progress" type="IProgress" dir="return">
13667 <desc>Progress object to track the operation completion.</desc>
13668 </param>
13669 </method>
13670
13671 <method name="reset">
13672 <desc>
13673 Starts erasing the contents of this differencing medium.
13674
13675 This operation will reset the differencing medium to its initial
13676 state when it does not contain any sector data and any read operation is
13677 redirected to its parent medium. This automatically gets called
13678 during VM power-up for every medium whose <link to="#autoReset" />
13679 attribute is @c true.
13680
13681 The medium will be write-locked for the duration of this operation (see
13682 <link to="#lockWrite" />).
13683
13684 <result name="VBOX_E_NOT_SUPPORTED">
13685 This is not a differencing medium.
13686 </result>
13687 <result name="VBOX_E_INVALID_OBJECT_STATE">
13688 Medium is not in <link to="MediumState_Created"/> or
13689 <link to="MediumState_Inaccessible"/> state.
13690 </result>
13691 </desc>
13692 <param name="progress" type="IProgress" dir="return">
13693 <desc>Progress object to track the operation completion.</desc>
13694 </param>
13695 </method>
13696
13697 </interface>
13698
13699
13700 <!--
13701 // IMediumFormat
13702 /////////////////////////////////////////////////////////////////////////
13703 -->
13704
13705 <enum
13706 name="DataType"
13707 uuid="d90ea51e-a3f1-4a01-beb1-c1723c0d3ba7"
13708 >
13709 <const name="Int32" value="0"/>
13710 <const name="Int8" value="1"/>
13711 <const name="String" value="2"/>
13712 </enum>
13713
13714 <enum
13715 name="DataFlags"
13716 uuid="86884dcf-1d6b-4f1b-b4bf-f5aa44959d60"
13717 >
13718 <const name="None" value="0x00"/>
13719 <const name="Mandatory" value="0x01"/>
13720 <const name="Expert" value="0x02"/>
13721 <const name="Array" value="0x04"/>
13722 <const name="FlagMask" value="0x07"/>
13723 </enum>
13724
13725 <enum
13726 name="MediumFormatCapabilities"
13727 uuid="7342ba79-7ce0-4d94-8f86-5ed5a185d9bd"
13728 >
13729 <desc>
13730 Medium format capability flags.
13731 </desc>
13732
13733 <const name="Uuid" value="0x01">
13734 <desc>
13735 Supports UUIDs as expected by VirtualBox code.
13736 </desc>
13737 </const>
13738
13739 <const name="CreateFixed" value="0x02">
13740 <desc>
13741 Supports creating fixed size images, allocating all space instantly.
13742 </desc>
13743 </const>
13744
13745 <const name="CreateDynamic" value="0x04">
13746 <desc>
13747 Supports creating dynamically growing images, allocating space on
13748 demand.
13749 </desc>
13750 </const>
13751
13752 <const name="CreateSplit2G" value="0x08">
13753 <desc>
13754 Supports creating images split in chunks of a bit less than 2 GBytes.
13755 </desc>
13756 </const>
13757
13758 <const name="Differencing" value="0x10">
13759 <desc>
13760 Supports being used as a format for differencing media (see <link
13761 to="IMedium::createDiffStorage"/>).
13762 </desc>
13763 </const>
13764
13765 <const name="Asynchronous" value="0x20">
13766 <desc>
13767 Supports asynchronous I/O operations for at least some configurations.
13768 </desc>
13769 </const>
13770
13771 <const name="File" value="0x40">
13772 <desc>
13773 The format backend operates on files (the <link to="IMedium::location"/>
13774 attribute of the medium specifies a file used to store medium
13775 data; for a list of supported file extensions see
13776 <link to="IMediumFormat::describeFileExtensions"/>).
13777 </desc>
13778 </const>
13779
13780 <const name="Properties" value="0x80">
13781 <desc>
13782 The format backend uses the property interface to configure the storage
13783 location and properties (the <link to="IMediumFormat::describeProperties"/>
13784 method is used to get access to properties supported by the given medium format).
13785 </desc>
13786 </const>
13787
13788 <const name="TcpNetworking" value="0x100">
13789 <desc>
13790 The format backend uses the TCP networking interface for network access.
13791 </desc>
13792 </const>
13793
13794 <const name="VFS" value="0x200">
13795 <desc>
13796 The format backend supports virtual filesystem functionality.
13797 </desc>
13798 </const>
13799
13800 <const name="CapabilityMask" value="0x3FF"/>
13801 </enum>
13802
13803 <interface
13804 name="IMediumFormat" extends="$unknown"
13805 uuid="9bd5b655-ea47-4637-99f3-aad0948be35b"
13806 wsmap="managed"
13807 >
13808 <desc>
13809 The IMediumFormat interface represents a medium format.
13810
13811 Each medium format has an associated backend which is used to handle
13812 media stored in this format. This interface provides information
13813 about the properties of the associated backend.
13814
13815 Each medium format is identified by a string represented by the
13816 <link to="#id"/> attribute. This string is used in calls like
13817 <link to="IVirtualBox::createHardDisk"/> to specify the desired
13818 format.
13819
13820 The list of all supported medium formats can be obtained using
13821 <link to="ISystemProperties::mediumFormats"/>.
13822
13823 <see><link to="IMedium"/></see>
13824 </desc>
13825
13826 <attribute name="id" type="wstring" readonly="yes">
13827 <desc>
13828 Identifier of this format.
13829
13830 The format identifier is a non-@c null non-empty ASCII string. Note that
13831 this string is case-insensitive. This means that, for example, all of
13832 the following strings:
13833 <pre>
13834 "VDI"
13835 "vdi"
13836 "VdI"</pre>
13837 refer to the same medium format.
13838
13839 This string is used in methods of other interfaces where it is necessary
13840 to specify a medium format, such as
13841 <link to="IVirtualBox::createHardDisk"/>.
13842 </desc>
13843 </attribute>
13844
13845 <attribute name="name" type="wstring" readonly="yes">
13846 <desc>
13847 Human readable description of this format.
13848
13849 Mainly for use in file open dialogs.
13850 </desc>
13851 </attribute>
13852
13853 <attribute name="capabilities" type="unsigned long" readonly="yes">
13854 <desc>
13855 Capabilities of the format as a set of bit flags.
13856
13857 For the meaning of individual capability flags see
13858 <link to="MediumFormatCapabilities"/>.
13859 </desc>
13860 </attribute>
13861
13862 <method name="describeFileExtensions">
13863 <desc>
13864 Returns two arrays describing the supported file extensions.
13865
13866 The first array contains the supported extensions and the seconds one
13867 the type each extension supports. Both have the same size.
13868
13869 Note that some backends do not work on files, so this array may be
13870 empty.
13871
13872 <see><link to="IMediumFormat::capabilities"/></see>
13873 </desc>
13874 <param name="extensions" type="wstring" safearray="yes" dir="out">
13875 <desc>The array of supported extensions.</desc>
13876 </param>
13877 <param name="type" type="DeviceType" safearray="yes" dir="out">
13878 <desc>The array which indicates the device type for every given extension.</desc>
13879 </param>
13880 </method>
13881
13882 <method name="describeProperties" const="yes">
13883 <desc>
13884 Returns several arrays describing the properties supported by this
13885 format.
13886
13887 An element with the given index in each array describes one
13888 property. Thus, the number of elements in each returned array is the
13889 same and corresponds to the number of supported properties.
13890
13891 The returned arrays are filled in only if the
13892 <link to="MediumFormatCapabilities_Properties"/> flag is set.
13893 All arguments must be non-@c null.
13894
13895 <see><link to="DataType"/>, <link to="DataFlags"/></see>
13896 </desc>
13897
13898 <param name="names" type="wstring" safearray="yes" dir="out">
13899 <desc>Array of property names.</desc>
13900 </param>
13901 <param name="description" type="wstring" safearray="yes" dir="out">
13902 <desc>Array of property descriptions.</desc>
13903 </param>
13904 <param name="types" type="DataType" safearray="yes" dir="out">
13905 <desc>Array of property types.</desc>
13906 </param>
13907 <param name="flags" type="unsigned long" safearray="yes" dir="out">
13908 <desc>Array of property flags.</desc>
13909 </param>
13910 <param name="defaults" type="wstring" safearray="yes" dir="out">
13911 <desc>Array of default property values.</desc>
13912 </param>
13913 </method>
13914
13915 </interface>
13916
13917
13918 <!--
13919 // IKeyboard
13920 /////////////////////////////////////////////////////////////////////////
13921 -->
13922
13923 <interface
13924 name="IKeyboard" extends="$unknown"
13925 uuid="f6916ec5-a881-4237-898f-7de58cf88672"
13926 wsmap="managed"
13927 >
13928 <desc>
13929 The IKeyboard interface represents the virtual machine's keyboard. Used
13930 in <link to="IConsole::keyboard"/>.
13931
13932 Use this interface to send keystrokes or the Ctrl-Alt-Del sequence
13933 to the virtual machine.
13934
13935 </desc>
13936 <method name="putScancode">
13937 <desc>Sends a scancode to the keyboard.
13938
13939 <result name="VBOX_E_IPRT_ERROR">
13940 Could not send scan code to virtual keyboard.
13941 </result>
13942
13943 </desc>
13944 <param name="scancode" type="long" dir="in"/>
13945 </method>
13946
13947 <method name="putScancodes">
13948 <desc>Sends an array of scancodes to the keyboard.
13949
13950 <result name="VBOX_E_IPRT_ERROR">
13951 Could not send all scan codes to virtual keyboard.
13952 </result>
13953
13954 </desc>
13955 <param name="scancodes" type="long" dir="in" safearray="yes"/>
13956 <param name="codesStored" type="unsigned long" dir="return"/>
13957 </method>
13958
13959 <method name="putCAD">
13960 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard. This
13961 function is nothing special, it is just a convenience function
13962 calling <link to="IKeyboard::putScancodes"/> with the proper scancodes.
13963
13964 <result name="VBOX_E_IPRT_ERROR">
13965 Could not send all scan codes to virtual keyboard.
13966 </result>
13967
13968 </desc>
13969 </method>
13970
13971 <attribute name="eventSource" type="IEventSource" readonly="yes">
13972 <desc>
13973 Event source for keyboard events.
13974 </desc>
13975 </attribute>
13976
13977 </interface>
13978
13979
13980 <!--
13981 // IMouse
13982 /////////////////////////////////////////////////////////////////////////
13983 -->
13984
13985 <enum
13986 name="MouseButtonState"
13987 uuid="9ee094b8-b28a-4d56-a166-973cb588d7f8"
13988 >
13989 <desc>
13990 Mouse button state.
13991 </desc>
13992
13993 <const name="LeftButton" value="0x01"/>
13994 <const name="RightButton" value="0x02"/>
13995 <const name="MiddleButton" value="0x04"/>
13996 <const name="WheelUp" value="0x08"/>
13997 <const name="WheelDown" value="0x10"/>
13998 <const name="XButton1" value="0x20"/>
13999 <const name="XButton2" value="0x40"/>
14000 <const name="MouseStateMask" value="0x7F"/>
14001 </enum>
14002
14003 <interface
14004 name="IMouse" extends="$unknown"
14005 uuid="05044a52-7811-4f00-ae3a-0ab7ff707b10"
14006 wsmap="managed"
14007 >
14008 <desc>
14009 The IMouse interface represents the virtual machine's mouse. Used in
14010 <link to="IConsole::mouse"/>.
14011
14012 Through this interface, the virtual machine's virtual mouse can be
14013 controlled.
14014 </desc>
14015
14016 <attribute name="absoluteSupported" type="boolean" readonly="yes">
14017 <desc>
14018 Whether the guest OS supports absolute mouse pointer positioning
14019 or not.
14020 <note>
14021 You can use the <link to="IMouseCapabilityChangedEvent"/>
14022 event to be instantly informed about changes of this attribute
14023 during virtual machine execution.
14024 </note>
14025 <see><link to="#putMouseEventAbsolute"/></see>
14026 </desc>
14027 </attribute>
14028
14029 <attribute name="relativeSupported" type="boolean" readonly="yes">
14030 <desc>
14031 Whether the guest OS supports relative mouse pointer positioning
14032 or not.
14033 <note>
14034 You can use the <link to="IMouseCapabilityChangedEvent"/>
14035 event to be instantly informed about changes of this attribute
14036 during virtual machine execution.
14037 </note>
14038 <see><link to="#putMouseEvent"/></see>
14039 </desc>
14040 </attribute>
14041
14042 <attribute name="needsHostCursor" type="boolean" readonly="yes">
14043 <desc>
14044 Whether the guest OS can currently switch to drawing it's own mouse
14045 cursor on demand.
14046 <note>
14047 You can use the <link to="IMouseCapabilityChangedEvent"/>
14048 event to be instantly informed about changes of this attribute
14049 during virtual machine execution.
14050 </note>
14051 <see><link to="#putMouseEvent"/></see>
14052 </desc>
14053 </attribute>
14054
14055 <method name="putMouseEvent">
14056 <desc>
14057 Initiates a mouse event using relative pointer movements
14058 along x and y axis.
14059
14060 <result name="E_ACCESSDENIED">
14061 Console not powered up.
14062 </result>
14063 <result name="VBOX_E_IPRT_ERROR">
14064 Could not send mouse event to virtual mouse.
14065 </result>
14066
14067 </desc>
14068
14069 <param name="dx" type="long" dir="in">
14070 <desc>
14071 Amount of pixels the mouse should move to the right.
14072 Negative values move the mouse to the left.
14073 </desc>
14074 </param>
14075 <param name="dy" type="long" dir="in">
14076 <desc>
14077 Amount of pixels the mouse should move downwards.
14078 Negative values move the mouse upwards.
14079 </desc>
14080 </param>
14081 <param name="dz" type="long" dir="in">
14082 <desc>
14083 Amount of mouse wheel moves.
14084 Positive values describe clockwise wheel rotations,
14085 negative values describe counterclockwise rotations.
14086 </desc>
14087 </param>
14088 <param name="dw" type="long" dir="in">
14089 <desc>
14090 Amount of horizontal mouse wheel moves.
14091 Positive values describe a movement to the left,
14092 negative values describe a movement to the right.
14093 </desc>
14094 </param>
14095 <param name="buttonState" type="long" dir="in">
14096 <desc>
14097 The current state of mouse buttons. Every bit represents
14098 a mouse button as follows:
14099 <table>
14100 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
14101 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
14102 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
14103 </table>
14104 A value of <tt>1</tt> means the corresponding button is pressed.
14105 otherwise it is released.
14106 </desc>
14107 </param>
14108 </method>
14109
14110 <method name="putMouseEventAbsolute">
14111 <desc>
14112 Positions the mouse pointer using absolute x and y coordinates.
14113 These coordinates are expressed in pixels and
14114 start from <tt>[1,1]</tt> which corresponds to the top left
14115 corner of the virtual display.
14116
14117 <result name="E_ACCESSDENIED">
14118 Console not powered up.
14119 </result>
14120 <result name="VBOX_E_IPRT_ERROR">
14121 Could not send mouse event to virtual mouse.
14122 </result>
14123
14124 <note>
14125 This method will have effect only if absolute mouse
14126 positioning is supported by the guest OS.
14127 </note>
14128
14129 <see><link to="#absoluteSupported"/></see>
14130 </desc>
14131
14132 <param name="x" type="long" dir="in">
14133 <desc>
14134 X coordinate of the pointer in pixels, starting from @c 1.
14135 </desc>
14136 </param>
14137 <param name="y" type="long" dir="in">
14138 <desc>
14139 Y coordinate of the pointer in pixels, starting from @c 1.
14140 </desc>
14141 </param>
14142 <param name="dz" type="long" dir="in">
14143 <desc>
14144 Amount of mouse wheel moves.
14145 Positive values describe clockwise wheel rotations,
14146 negative values describe counterclockwise rotations.
14147 </desc>
14148 </param>
14149 <param name="dw" type="long" dir="in">
14150 <desc>
14151 Amount of horizontal mouse wheel moves.
14152 Positive values describe a movement to the left,
14153 negative values describe a movement to the right.
14154 </desc>
14155 </param>
14156 <param name="buttonState" type="long" dir="in">
14157 <desc>
14158 The current state of mouse buttons. Every bit represents
14159 a mouse button as follows:
14160 <table>
14161 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
14162 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
14163 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
14164 </table>
14165 A value of @c 1 means the corresponding button is pressed.
14166 otherwise it is released.
14167 </desc>
14168 </param>
14169 </method>
14170
14171 <attribute name="eventSource" type="IEventSource" readonly="yes">
14172 <desc>
14173 Event source for mouse events.
14174 </desc>
14175 </attribute>
14176
14177 </interface>
14178
14179 <!--
14180 // IDisplay
14181 /////////////////////////////////////////////////////////////////////////
14182 -->
14183
14184 <enum
14185 name="FramebufferPixelFormat"
14186 uuid="7acfd5ed-29e3-45e3-8136-73c9224f3d2d"
14187 >
14188 <desc>
14189 Format of the video memory buffer. Constants represented by this enum can
14190 be used to test for particular values of <link
14191 to="IFramebuffer::pixelFormat"/>. See also <link
14192 to="IFramebuffer::requestResize"/>.
14193
14194 See also www.fourcc.org for more information about FOURCC pixel formats.
14195 </desc>
14196
14197 <const name="Opaque" value="0">
14198 <desc>
14199 Unknown buffer format (the user may not assume any particular format of
14200 the buffer).
14201 </desc>
14202 </const>
14203 <const name="FOURCC_RGB" value="0x32424752">
14204 <desc>
14205 Basic RGB format (<link to="IFramebuffer::bitsPerPixel"/> determines the
14206 bit layout).
14207 </desc>
14208 </const>
14209 </enum>
14210
14211 <interface
14212 name="IFramebuffer" extends="$unknown"
14213 uuid="b7ed347a-5765-40a0-ae1c-f543eb4ddeaf"
14214 wsmap="suppress"
14215 >
14216 <attribute name="address" type="octet" mod="ptr" readonly="yes">
14217 <desc>Address of the start byte of the frame buffer.</desc>
14218 </attribute>
14219
14220 <attribute name="width" type="unsigned long" readonly="yes">
14221 <desc>Frame buffer width, in pixels.</desc>
14222 </attribute>
14223
14224 <attribute name="height" type="unsigned long" readonly="yes">
14225 <desc>Frame buffer height, in pixels.</desc>
14226 </attribute>
14227
14228 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
14229 <desc>
14230 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
14231 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, valid values
14232 are: 8, 15, 16, 24 and 32.
14233 </desc>
14234 </attribute>
14235
14236 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
14237 <desc>
14238 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
14239 to="FramebufferPixelFormat_FOURCC_RGB">FOURCC_RGB</link>, the
14240 size of the scan line must be aligned to 32 bits.
14241 </desc>
14242 </attribute>
14243
14244 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
14245 <desc>
14246 Frame buffer pixel format. It's either one of the values defined by <link
14247 to="FramebufferPixelFormat"/> or a raw FOURCC code.
14248 <note>
14249 This attribute must never return <link
14250 to="FramebufferPixelFormat_Opaque"/> -- the format of the buffer
14251 <link to="#address"/> points to must be always known.
14252 </note>
14253 </desc>
14254 </attribute>
14255
14256 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
14257 <desc>
14258 Defines whether this frame buffer uses the virtual video card's memory
14259 buffer (guest VRAM) directly or not. See <link
14260 to="IFramebuffer::requestResize"/> for more information.
14261 </desc>
14262 </attribute>
14263
14264 <attribute name="heightReduction" type="unsigned long" readonly="yes">
14265 <desc>
14266 Hint from the frame buffer about how much of the standard
14267 screen height it wants to use for itself. This information is
14268 exposed to the guest through the VESA BIOS and VMMDev interface
14269 so that it can use it for determining its video mode table. It
14270 is not guaranteed that the guest respects the value.
14271 </desc>
14272 </attribute>
14273
14274 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
14275 <desc>
14276 An alpha-blended overlay which is superposed over the frame buffer.
14277 The initial purpose is to allow the display of icons providing
14278 information about the VM state, including disk activity, in front
14279 ends which do not have other means of doing that. The overlay is
14280 designed to controlled exclusively by IDisplay. It has no locking
14281 of its own, and any changes made to it are not guaranteed to be
14282 visible until the affected portion of IFramebuffer is updated. The
14283 overlay can be created lazily the first time it is requested. This
14284 attribute can also return @c null to signal that the overlay is not
14285 implemented.
14286 </desc>
14287 </attribute>
14288
14289 <attribute name="winId" type="long long" readonly="yes">
14290 <desc>
14291 Platform-dependent identifier of the window where context of this
14292 frame buffer is drawn, or zero if there's no such window.
14293 </desc>
14294 </attribute>
14295
14296 <method name="lock">
14297 <desc>
14298 Locks the frame buffer.
14299 Gets called by the IDisplay object where this frame buffer is
14300 bound to.
14301 </desc>
14302 </method>
14303
14304 <method name="unlock">
14305 <desc>
14306 Unlocks the frame buffer.
14307 Gets called by the IDisplay object where this frame buffer is
14308 bound to.
14309 </desc>
14310 </method>
14311
14312 <method name="notifyUpdate">
14313 <desc>
14314 Informs about an update.
14315 Gets called by the display object where this buffer is
14316 registered.
14317 </desc>
14318 <param name="x" type="unsigned long" dir="in"/>
14319 <param name="y" type="unsigned long" dir="in"/>
14320 <param name="width" type="unsigned long" dir="in"/>
14321 <param name="height" type="unsigned long" dir="in"/>
14322 </method>
14323
14324 <method name="requestResize">
14325 <desc>
14326 Requests a size and pixel format change.
14327
14328 There are two modes of working with the video buffer of the virtual
14329 machine. The <i>indirect</i> mode implies that the IFramebuffer
14330 implementation allocates a memory buffer for the requested display mode
14331 and provides it to the virtual machine. In <i>direct</i> mode, the
14332 IFramebuffer implementation uses the memory buffer allocated and owned
14333 by the virtual machine. This buffer represents the video memory of the
14334 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
14335 usually faster because the implementation gets a raw pointer to the
14336 guest VRAM buffer which it can directly use for visualizing the contents
14337 of the virtual display, as opposed to the indirect mode where the
14338 contents of guest VRAM are copied to the memory buffer provided by
14339 the implementation every time a display update occurs.
14340
14341 It is important to note that the direct mode is really fast only when
14342 the implementation uses the given guest VRAM buffer directly, for
14343 example, by blitting it to the window representing the virtual machine's
14344 display, which saves at least one copy operation comparing to the
14345 indirect mode. However, using the guest VRAM buffer directly is not
14346 always possible: the format and the color depth of this buffer may be
14347 not supported by the target window, or it may be unknown (opaque) as in
14348 case of text or non-linear multi-plane VGA video modes. In this case,
14349 the indirect mode (that is always available) should be used as a
14350 fallback: when the guest VRAM contents are copied to the
14351 implementation-provided memory buffer, color and format conversion is
14352 done automatically by the underlying code.
14353
14354 The @a pixelFormat parameter defines whether the direct mode is
14355 available or not. If @a pixelFormat is <link
14356 to="FramebufferPixelFormat_Opaque"/> then direct access to the guest
14357 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and
14358 @a bytesPerLine parameters must be ignored and the implementation must use
14359 the indirect mode (where it provides its own buffer in one of the
14360 supported formats). In all other cases, @a pixelFormat together with
14361 @a bitsPerPixel and @a bytesPerLine define the format of the video memory
14362 buffer pointed to by the @a VRAM parameter and the implementation is
14363 free to choose which mode to use. To indicate that this frame buffer uses
14364 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
14365 attribute must return @c true and <link to="#address"/> must
14366 return exactly the same address that is passed in the @a VRAM parameter
14367 of this method; otherwise it is assumed that the indirect strategy is
14368 chosen.
14369
14370 The @a width and @a height parameters represent the size of the
14371 requested display mode in both modes. In case of indirect mode, the
14372 provided memory buffer should be big enough to store data of the given
14373 display mode. In case of direct mode, it is guaranteed that the given
14374 @a VRAM buffer contains enough space to represent the display mode of the
14375 given size. Note that this frame buffer's <link to="#width"/> and <link
14376 to="#height"/> attributes must return exactly the same values as
14377 passed to this method after the resize is completed (see below).
14378
14379 The @a finished output parameter determines if the implementation has
14380 finished resizing the frame buffer or not. If, for some reason, the
14381 resize cannot be finished immediately during this call, @a finished
14382 must be set to @c false, and the implementation must call
14383 <link to="IDisplay::resizeCompleted"/> after it has returned from
14384 this method as soon as possible. If @a finished is @c false, the
14385 machine will not call any frame buffer methods until
14386 <link to="IDisplay::resizeCompleted"/> is called.
14387
14388 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
14389 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
14390 this frame buffer must return exactly the same values as specified in the
14391 parameters of this method, after the resize is completed. If the
14392 indirect mode is chosen, these attributes must return values describing
14393 the format of the implementation's own memory buffer <link
14394 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
14395 value must always correlate with <link to="#pixelFormat"/>. Note that
14396 the <link to="#pixelFormat"/> attribute must never return <link
14397 to="FramebufferPixelFormat_Opaque"/> regardless of the selected mode.
14398
14399 <note>
14400 This method is called by the IDisplay object under the
14401 <link to="#lock"/> provided by this IFramebuffer
14402 implementation. If this method returns @c false in @a finished, then
14403 this lock is not released until
14404 <link to="IDisplay::resizeCompleted"/> is called.
14405 </note>
14406 </desc>
14407 <param name="screenId" type="unsigned long" dir="in">
14408 <desc>
14409 Logical screen number. Must be used in the corresponding call to
14410 <link to="IDisplay::resizeCompleted"/> if this call is made.
14411 </desc>
14412 </param>
14413 <param name="pixelFormat" type="unsigned long" dir="in">
14414 <desc>
14415 Pixel format of the memory buffer pointed to by @a VRAM.
14416 See also <link to="FramebufferPixelFormat"/>.
14417 </desc>
14418 </param>
14419 <param name="VRAM" type="octet" mod="ptr" dir="in">
14420 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
14421 </param>
14422 <param name="bitsPerPixel" type="unsigned long" dir="in">
14423 <desc>Color depth, bits per pixel.</desc>
14424 </param>
14425 <param name="bytesPerLine" type="unsigned long" dir="in">
14426 <desc>Size of one scan line, in bytes.</desc>
14427 </param>
14428 <param name="width" type="unsigned long" dir="in">
14429 <desc>Width of the guest display, in pixels.</desc>
14430 </param>
14431 <param name="height" type="unsigned long" dir="in">
14432 <desc>Height of the guest display, in pixels.</desc>
14433 </param>
14434 <param name="finished" type="boolean" dir="return">
14435 <desc>
14436 Can the VM start using the new frame buffer immediately
14437 after this method returns or it should wait for
14438 <link to="IDisplay::resizeCompleted"/>.
14439 </desc>
14440 </param>
14441 </method>
14442
14443 <method name="videoModeSupported">
14444 <desc>
14445 Returns whether the frame buffer implementation is willing to
14446 support a given video mode. In case it is not able to render
14447 the video mode (or for some reason not willing), it should
14448 return @c false. Usually this method is called when the guest
14449 asks the VMM device whether a given video mode is supported
14450 so the information returned is directly exposed to the guest.
14451 It is important that this method returns very quickly.
14452 </desc>
14453 <param name="width" type="unsigned long" dir="in"/>
14454 <param name="height" type="unsigned long" dir="in"/>
14455 <param name="bpp" type="unsigned long" dir="in"/>
14456 <param name="supported" type="boolean" dir="return"/>
14457 </method>
14458
14459 <method name="getVisibleRegion">
14460 <desc>
14461 Returns the visible region of this frame buffer.
14462
14463 If the @a rectangles parameter is @c null then the value of the
14464 @a count parameter is ignored and the number of elements necessary to
14465 describe the current visible region is returned in @a countCopied.
14466
14467 If @a rectangles is not @c null but @a count is less
14468 than the required number of elements to store region data, the method
14469 will report a failure. If @a count is equal or greater than the
14470 required number of elements, then the actual number of elements copied
14471 to the provided array will be returned in @a countCopied.
14472
14473 <note>
14474 The address of the provided array must be in the process space of
14475 this IFramebuffer object.
14476 </note>
14477 <note>
14478 Method not yet implemented.
14479 </note>
14480 </desc>
14481 <param name="rectangles" type="octet" mod="ptr" dir="in">
14482 <desc>Pointer to the @c RTRECT array to receive region data.</desc>
14483 </param>
14484 <param name="count" type="unsigned long" dir="in">
14485 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
14486 </param>
14487 <param name="countCopied" type="unsigned long" dir="return">
14488 <desc>Number of elements copied to the @a rectangles array.</desc>
14489 </param>
14490 </method>
14491
14492 <method name="setVisibleRegion">
14493 <desc>
14494 Suggests a new visible region to this frame buffer. This region
14495 represents the area of the VM display which is a union of regions of
14496 all top-level windows of the guest operating system running inside the
14497 VM (if the Guest Additions for this system support this
14498 functionality). This information may be used by the frontends to
14499 implement the seamless desktop integration feature.
14500
14501 <note>
14502 The address of the provided array must be in the process space of
14503 this IFramebuffer object.
14504 </note>
14505 <note>
14506 The IFramebuffer implementation must make a copy of the provided
14507 array of rectangles.
14508 </note>
14509 <note>
14510 Method not yet implemented.
14511 </note>
14512 </desc>
14513 <param name="rectangles" type="octet" mod="ptr" dir="in">
14514 <desc>Pointer to the @c RTRECT array.</desc>
14515 </param>
14516 <param name="count" type="unsigned long" dir="in">
14517 <desc>Number of @c RTRECT elements in the @a rectangles array.</desc>
14518 </param>
14519 </method>
14520
14521 <method name="processVHWACommand">
14522 <desc>
14523 Posts a Video HW Acceleration Command to the frame buffer for processing.
14524 The commands used for 2D video acceleration (DDraw surface creation/destroying, blitting, scaling, color conversion, overlaying, etc.)
14525 are posted from quest to the host to be processed by the host hardware.
14526
14527 <note>
14528 The address of the provided command must be in the process space of
14529 this IFramebuffer object.
14530 </note>
14531 </desc>
14532
14533 <param name="command" type="octet" mod="ptr" dir="in">
14534 <desc>Pointer to VBOXVHWACMD containing the command to execute.</desc>
14535 </param>
14536 </method>
14537
14538 </interface>
14539
14540 <interface
14541 name="IFramebufferOverlay" extends="IFramebuffer"
14542 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
14543 wsmap="suppress"
14544 >
14545 <desc>
14546 The IFramebufferOverlay interface represents an alpha blended overlay
14547 for displaying status icons above an IFramebuffer. It is always created
14548 not visible, so that it must be explicitly shown. It only covers a
14549 portion of the IFramebuffer, determined by its width, height and
14550 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
14551 that order) format, and may be written to directly. Do re-read the
14552 width though, after setting it, as it may be adjusted (increased) to
14553 make it more suitable for the front end.
14554 </desc>
14555 <attribute name="x" type="unsigned long" readonly="yes">
14556 <desc>X position of the overlay, relative to the frame buffer.</desc>
14557 </attribute>
14558
14559 <attribute name="y" type="unsigned long" readonly="yes">
14560 <desc>Y position of the overlay, relative to the frame buffer.</desc>
14561 </attribute>
14562
14563 <attribute name="visible" type="boolean" readonly="no">
14564 <desc>
14565 Whether the overlay is currently visible.
14566 </desc>
14567 </attribute>
14568
14569 <attribute name="alpha" type="unsigned long" readonly="no">
14570 <desc>
14571 The global alpha value for the overlay. This may or may not be
14572 supported by a given front end.
14573 </desc>
14574 </attribute>
14575
14576 <method name="move">
14577 <desc>
14578 Changes the overlay's position relative to the IFramebuffer.
14579 </desc>
14580 <param name="x" type="unsigned long" dir="in"/>
14581 <param name="y" type="unsigned long" dir="in"/>
14582 </method>
14583
14584 </interface>
14585
14586 <interface
14587 name="IDisplay" extends="$unknown"
14588 uuid="b83ee395-8679-40ca-8d60-1a0cbe724930"
14589 wsmap="managed"
14590 >
14591 <desc>
14592 The IDisplay interface represents the virtual machine's display.
14593
14594 The object implementing this interface is contained in each
14595 <link to="IConsole::display"/> attribute and represents the visual
14596 output of the virtual machine.
14597
14598 The virtual display supports pluggable output targets represented by the
14599 IFramebuffer interface. Examples of the output target are a window on
14600 the host computer or an RDP session's display on a remote computer.
14601 </desc>
14602 <method name="getScreenResolution">
14603 <desc>Queries display width, height and color depth for given screen.</desc>
14604 <param name="screenId" type="unsigned long" dir="in"/>
14605 <param name="width" type="unsigned long" dir="out"/>
14606 <param name="height" type="unsigned long" dir="out"/>
14607 <param name="bitsPerPixel" type="unsigned long" dir="out"/>
14608 </method>
14609
14610 <method name="setFramebuffer">
14611 <desc>
14612 Sets the framebuffer for given screen.
14613 </desc>
14614 <param name="screenId" type="unsigned long" dir="in"/>
14615 <param name="framebuffer" type="IFramebuffer" dir="in"/>
14616 </method>
14617
14618 <method name="getFramebuffer">
14619 <desc>
14620 Queries the framebuffer for given screen.
14621 </desc>
14622 <param name="screenId" type="unsigned long" dir="in"/>
14623 <param name="framebuffer" type="IFramebuffer" dir="out"/>
14624 <param name="xOrigin" type="long" dir="out"/>
14625 <param name="yOrigin" type="long" dir="out"/>
14626 </method>
14627
14628 <method name="setVideoModeHint">
14629 <desc>
14630 Asks VirtualBox to request the given video mode from
14631 the guest. This is just a hint and it cannot be guaranteed
14632 that the requested resolution will be used. Guest Additions
14633 are required for the request to be seen by guests. The caller
14634 should issue the request and wait for a resolution change and
14635 after a timeout retry.
14636
14637 Specifying @c 0 for either @a width, @a height or @a bitsPerPixel
14638 parameters means that the corresponding values should be taken from the
14639 current video mode (i.e. left unchanged).
14640
14641 If the guest OS supports multi-monitor configuration then the @a display
14642 parameter specifies the number of the guest display to send the hint to:
14643 @c 0 is the primary display, @c 1 is the first secondary and
14644 so on. If the multi-monitor configuration is not supported, @a display
14645 must be @c 0.
14646
14647 <result name="E_INVALIDARG">
14648 The @a display is not associated with any monitor.
14649 </result>
14650
14651 </desc>
14652 <param name="display" type="unsigned long" dir="in">
14653 <desc>
14654 The number of the guest display to send the hint to.
14655 </desc>
14656 </param>
14657 <param name="enabled" type="boolean" dir="in">
14658 <desc>
14659 @c True, if this guest screen is enabled,
14660 @c False otherwise.
14661 </desc>
14662 </param>
14663 <param name="changeOrigin" type="boolean" dir="in">
14664 <desc>
14665 @c True, if the origin of the guest screen should be changed,
14666 @c False otherwise.
14667 </desc>
14668 </param>
14669 <param name="originX" type="long" dir="in">
14670 <desc>
14671 The X origin of the guest screen.
14672 </desc>
14673 </param>
14674 <param name="originY" type="long" dir="in">
14675 <desc>
14676 The Y origin of the guest screen.
14677 </desc>
14678 </param>
14679 <param name="width" type="unsigned long" dir="in"/>
14680 <param name="height" type="unsigned long" dir="in"/>
14681 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
14682 </method>
14683
14684 <method name="setSeamlessMode">
14685 <desc>
14686 Enables or disables seamless guest display rendering (seamless desktop
14687 integration) mode.
14688 <note>
14689 Calling this method has no effect if <link
14690 to="IGuest::getFacilityStatus"/> with facility @c Seamless
14691 does not return @c Active.
14692 </note>
14693 </desc>
14694 <param name="enabled" type="boolean" dir="in"/>
14695 </method>
14696
14697 <method name="takeScreenShot">
14698 <desc>
14699 Takes a screen shot of the requested size and copies it to the
14700 32-bpp buffer allocated by the caller and pointed to by @a address.
14701 A pixel consists of 4 bytes in order: B, G, R, 0.
14702
14703 <note>This API can be used only locally by a VM process through the
14704 COM/XPCOM C++ API as it requires pointer support. It is not
14705 available for scripting langages, Java or any webservice clients.
14706 Unless you are writing a new VM frontend use
14707 <link to="#takeScreenShotToArray" />.
14708 </note>
14709
14710 <result name="E_NOTIMPL">
14711 Feature not implemented.
14712 </result>
14713 <result name="VBOX_E_IPRT_ERROR">
14714 Could not take a screenshot.
14715 </result>
14716
14717 </desc>
14718 <param name="screenId" type="unsigned long" dir="in"/>
14719 <param name="address" type="octet" mod="ptr" dir="in"/>
14720 <param name="width" type="unsigned long" dir="in"/>
14721 <param name="height" type="unsigned long" dir="in"/>
14722 </method>
14723
14724 <method name="takeScreenShotToArray">
14725 <desc>
14726 Takes a guest screen shot of the requested size and returns it as
14727 an array of bytes in uncompressed 32-bit RGBA format.
14728 A pixel consists of 4 bytes in order: R, G, B, 0xFF.
14729
14730 This API is slow, but could be the only option to get guest screenshot
14731 for scriptable languages not allowed to manipulate with addresses
14732 directly.
14733
14734 <result name="E_NOTIMPL">
14735 Feature not implemented.
14736 </result>
14737 <result name="VBOX_E_IPRT_ERROR">
14738 Could not take a screenshot.
14739 </result>
14740 </desc>
14741 <param name="screenId" type="unsigned long" dir="in">
14742 <desc>
14743 Monitor to take screenshot from.
14744 </desc>
14745 </param>
14746 <param name="width" type="unsigned long" dir="in">
14747 <desc>
14748 Desired image width.
14749 </desc>
14750 </param>
14751 <param name="height" type="unsigned long" dir="in">
14752 <desc>
14753 Desired image height.
14754 </desc>
14755 </param>
14756 <param name="screenData" type="octet" dir="return" safearray="yes">
14757 <desc>
14758 Array with resulting screen data.
14759 </desc>
14760 </param>
14761 </method>
14762
14763 <method name="takeScreenShotPNGToArray">
14764 <desc>
14765 Takes a guest screen shot of the requested size and returns it as
14766 PNG image in array.
14767
14768 <result name="E_NOTIMPL">
14769 Feature not implemented.
14770 </result>
14771 <result name="VBOX_E_IPRT_ERROR">
14772 Could not take a screenshot.
14773 </result>
14774 </desc>
14775 <param name="screenId" type="unsigned long" dir="in">
14776 <desc>
14777 Monitor to take the screenshot from.
14778 </desc>
14779 </param>
14780 <param name="width" type="unsigned long" dir="in">
14781 <desc>
14782 Desired image width.
14783 </desc>
14784 </param>
14785 <param name="height" type="unsigned long" dir="in">
14786 <desc>
14787 Desired image height.
14788 </desc>
14789 </param>
14790 <param name="screenData" type="octet" dir="return" safearray="yes">
14791 <desc>
14792 Array with resulting screen data.
14793 </desc>
14794 </param>
14795 </method>
14796
14797 <method name="drawToScreen">
14798 <desc>
14799 Draws a 32-bpp image of the specified size from the given buffer
14800 to the given point on the VM display.
14801
14802 <result name="E_NOTIMPL">
14803 Feature not implemented.
14804 </result>
14805 <result name="VBOX_E_IPRT_ERROR">
14806 Could not draw to screen.
14807 </result>
14808
14809 </desc>
14810 <param name="screenId" type="unsigned long" dir="in">
14811 <desc>
14812 Monitor to take the screenshot from.
14813 </desc>
14814 </param>
14815 <param name="address" type="octet" mod="ptr" dir="in">
14816 <desc>
14817 Address to store the screenshot to
14818 </desc>
14819 </param>
14820 <param name="x" type="unsigned long" dir="in">
14821 <desc>
14822 Relative to the screen top left corner.
14823 </desc>
14824 </param>
14825 <param name="y" type="unsigned long" dir="in">
14826 <desc>
14827 Relative to the screen top left corner.
14828 </desc>
14829 </param>
14830 <param name="width" type="unsigned long" dir="in">
14831 <desc>
14832 Desired image width.
14833 </desc>
14834 </param>
14835 <param name="height" type="unsigned long" dir="in">
14836 <desc>
14837 Desired image height.
14838 </desc>
14839 </param>
14840 </method>
14841
14842 <method name="invalidateAndUpdate">
14843 <desc>
14844 Does a full invalidation of the VM display and instructs the VM
14845 to update it.
14846
14847 <result name="VBOX_E_IPRT_ERROR">
14848 Could not invalidate and update screen.
14849 </result>
14850
14851 </desc>
14852 </method>
14853
14854 <method name="resizeCompleted">
14855 <desc>
14856 Signals that a framebuffer has completed the resize operation.
14857
14858 <result name="VBOX_E_NOT_SUPPORTED">
14859 Operation only valid for external frame buffers.
14860 </result>
14861
14862 </desc>
14863 <param name="screenId" type="unsigned long" dir="in"/>
14864 </method>
14865
14866 <method name="completeVHWACommand">
14867 <desc>
14868 Signals that the Video HW Acceleration command has completed.
14869 </desc>
14870
14871 <param name="command" type="octet" mod="ptr" dir="in">
14872 <desc>Pointer to VBOXVHWACMD containing the completed command.</desc>
14873 </param>
14874 </method>
14875
14876 <method name="viewportChanged">
14877 <desc>
14878 Signals that framebuffer window viewport has changed.
14879
14880 <result name="E_INVALIDARG">
14881 The specified viewport data is invalid.
14882 </result>
14883
14884 </desc>
14885
14886 <param name="screenId" type="unsigned long" dir="in">
14887 <desc>
14888 Monitor to take the screenshot from.
14889 </desc>
14890 </param>
14891 <param name="x" type="unsigned long" dir="in">
14892 <desc>
14893 Framebuffer x offset.
14894 </desc>
14895 </param>
14896 <param name="y" type="unsigned long" dir="in">
14897 <desc>
14898 Framebuffer y offset.
14899 </desc>
14900 </param>
14901 <param name="width" type="unsigned long" dir="in">
14902 <desc>
14903 Viewport width.
14904 </desc>
14905 </param>
14906 <param name="height" type="unsigned long" dir="in">
14907 <desc>
14908 Viewport height.
14909 </desc>
14910 </param>
14911 </method>
14912 </interface>
14913
14914 <!--
14915 // INetworkAdapter
14916 /////////////////////////////////////////////////////////////////////////
14917 -->
14918
14919 <enum
14920 name="NetworkAttachmentType"
14921 uuid="2ac4bc71-6b82-417a-acd1-f7426d2570d6"
14922 >
14923 <desc>
14924 Network attachment type.
14925 </desc>
14926
14927 <const name="Null" value="0">
14928 <desc>Null value, also means "not attached".</desc>
14929 </const>
14930 <const name="NAT" value="1"/>
14931 <const name="Bridged" value="2"/>
14932 <const name="Internal" value="3"/>
14933 <const name="HostOnly" value="4"/>
14934 <const name="Generic" value="5"/>
14935 </enum>
14936
14937 <enum
14938 name="NetworkAdapterType"
14939 uuid="3c2281e4-d952-4e87-8c7d-24379cb6a81c"
14940 >
14941 <desc>
14942 Network adapter type.
14943 </desc>
14944
14945 <const name="Null" value="0">
14946 <desc>Null value (never used by the API).</desc>
14947 </const>
14948 <const name="Am79C970A" value="1">
14949 <desc>AMD PCNet-PCI II network card (Am79C970A).</desc>
14950 </const>
14951 <const name="Am79C973" value="2">
14952 <desc>AMD PCNet-FAST III network card (Am79C973).</desc>
14953 </const>
14954 <const name="I82540EM" value="3">
14955 <desc>Intel PRO/1000 MT Desktop network card (82540EM).</desc>
14956 </const>
14957 <const name="I82543GC" value="4">
14958 <desc>Intel PRO/1000 T Server network card (82543GC).</desc>
14959 </const>
14960 <const name="I82545EM" value="5">
14961 <desc>Intel PRO/1000 MT Server network card (82545EM).</desc>
14962 </const>
14963 <const name="Virtio" value="6">
14964 <desc>Virtio network device.</desc>
14965 </const>
14966 </enum>
14967
14968 <enum
14969 name="NetworkAdapterPromiscModePolicy"
14970 uuid="c963768a-376f-4c85-8d84-d8ced4b7269e"
14971 >
14972 <desc>
14973 The promiscuous mode policy of an interface.
14974 </desc>
14975
14976 <const name="Deny" value="1">
14977 <desc>Deny promiscuous mode requests.</desc>
14978 </const>
14979 <const name="AllowNetwork" value="2">
14980 <desc>
14981 Allow promicuous mode, but restrict the scope it to the internal
14982 network so that it only applies to other VMs.
14983 </desc>
14984 </const>
14985 <const name="AllowAll" value="3">
14986 <desc>
14987 Allow promicuous mode, include unrelated traffic going over the wire
14988 and internally on the host.
14989 </desc>
14990 </const>
14991 </enum>
14992
14993 <interface
14994 name="INetworkAdapter" extends="$unknown"
14995 uuid="efa0f965-63c7-4c60-afdf-b1cc9943b9c0"
14996 wsmap="managed"
14997 >
14998 <desc>
14999 Represents a virtual network adapter that is attached to a virtual machine.
15000 Each virtual machine has a fixed number of network adapter slots with one
15001 instance of this attached to each of them. Call
15002 <link to="IMachine::getNetworkAdapter" /> to get the network adapter that
15003 is attached to a given slot in a given machine.
15004
15005 Each network adapter can be in one of five attachment modes, which are
15006 represented by the <link to="NetworkAttachmentType" /> enumeration;
15007 see the <link to="#attachmentType" /> attribute.
15008 </desc>
15009
15010 <attribute name="adapterType" type="NetworkAdapterType">
15011 <desc>
15012 Type of the virtual network adapter. Depending on this value,
15013 VirtualBox will provide a different virtual network hardware
15014 to the guest.
15015 </desc>
15016 </attribute>
15017
15018 <attribute name="slot" type="unsigned long" readonly="yes">
15019 <desc>
15020 Slot number this adapter is plugged into. Corresponds to
15021 the value you pass to <link to="IMachine::getNetworkAdapter"/>
15022 to obtain this instance.
15023 </desc>
15024 </attribute>
15025
15026 <attribute name="enabled" type="boolean">
15027 <desc>
15028 Flag whether the network adapter is present in the
15029 guest system. If disabled, the virtual guest hardware will
15030 not contain this network adapter. Can only be changed when
15031 the VM is not running.
15032 </desc>
15033 </attribute>
15034
15035 <attribute name="MACAddress" type="wstring">
15036 <desc>
15037 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
15038 it to @c null or an empty string, VirtualBox will generate a unique MAC address.
15039 </desc>
15040 </attribute>
15041
15042 <attribute name="attachmentType" type="NetworkAttachmentType">
15043 <desc>
15044 Sets/Gets network attachment type of this network adapter.
15045 </desc>
15046 </attribute>
15047
15048 <attribute name="bridgedInterface" type="wstring">
15049 <desc>
15050 Name of the network interface the VM should be bridged to.
15051 </desc>
15052 </attribute>
15053
15054 <attribute name="hostOnlyInterface" type="wstring">
15055 <desc>
15056 Name of the host only network interface the VM is attached to.
15057 </desc>
15058 </attribute>
15059
15060 <attribute name="internalNetwork" type="wstring">
15061 <desc>
15062 Name of the internal network the VM is attached to.
15063 </desc>
15064 </attribute>
15065
15066 <attribute name="NATNetwork" type="wstring">
15067 <desc>
15068 Name of the NAT network the VM is attached to.
15069 </desc>
15070 </attribute>
15071
15072 <attribute name="genericDriver" type="wstring">
15073 <desc>
15074 Name of the driver to use for the "Generic" network attachment type.
15075 </desc>
15076 </attribute>
15077
15078 <attribute name="cableConnected" type="boolean">
15079 <desc>
15080 Flag whether the adapter reports the cable as connected or not.
15081 It can be used to report offline situations to a VM.
15082 </desc>
15083 </attribute>
15084
15085 <attribute name="lineSpeed" type="unsigned long">
15086 <desc>
15087 Line speed reported by custom drivers, in units of 1 kbps.
15088 </desc>
15089 </attribute>
15090
15091 <attribute name="promiscModePolicy" type="NetworkAdapterPromiscModePolicy">
15092 <desc>
15093 The promiscuous mode policy of the network adapter when attached to an
15094 internal network, host only network or a bridge.
15095 </desc>
15096 </attribute>
15097
15098 <attribute name="traceEnabled" type="boolean">
15099 <desc>
15100 Flag whether network traffic from/to the network card should be traced.
15101 Can only be toggled when the VM is turned off.
15102 </desc>
15103 </attribute>
15104
15105 <attribute name="traceFile" type="wstring">
15106 <desc>
15107 Filename where a network trace will be stored. If not set, VBox-pid.pcap
15108 will be used.
15109 </desc>
15110 </attribute>
15111
15112 <attribute name="NATEngine" type="INATEngine" readonly="yes">
15113 <desc>
15114 Points to the NAT engine which handles the network address translation
15115 for this interface. This is active only when the interface actually uses
15116 NAT.
15117 </desc>
15118 </attribute>
15119
15120 <attribute name="bootPriority" type="unsigned long">
15121 <desc>
15122 Network boot priority of the adapter. Priority 1 is highest. If not set,
15123 the priority is considered to be at the lowest possible setting.
15124 </desc>
15125 </attribute>
15126
15127 <attribute name="bandwidthGroup" type="IBandwidthGroup">
15128 <desc>The bandwidth group this network adapter is assigned to.</desc>
15129 </attribute>
15130
15131 <!-- property methods -->
15132
15133 <method name="getProperty" const="yes">
15134 <desc>
15135 Returns the value of the network attachment property with the given name.
15136
15137 If the requested data @a key does not exist, this function will
15138 succeed and return an empty string in the @a value argument.
15139
15140 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
15141 </desc>
15142 <param name="key" type="wstring" dir="in">
15143 <desc>Name of the property to get.</desc>
15144 </param>
15145 <param name="value" type="wstring" dir="return">
15146 <desc>Current property value.</desc>
15147 </param>
15148 </method>
15149
15150 <method name="setProperty">
15151 <desc>
15152 Sets the value of the network attachment property with the given name.
15153
15154 Setting the property value to @c null or an empty string is equivalent
15155 to deleting the existing value.
15156
15157 <result name="E_INVALIDARG">@a name is @c null or empty.</result>
15158 </desc>
15159 <param name="key" type="wstring" dir="in">
15160 <desc>Name of the property to set.</desc>
15161 </param>
15162 <param name="value" type="wstring" dir="in">
15163 <desc>Property value to set.</desc>
15164 </param>
15165 </method>
15166
15167 <method name="getProperties" const="yes">
15168 <desc>
15169 Returns values for a group of properties in one call.
15170
15171 The names of the properties to get are specified using the @a names
15172 argument which is a list of comma-separated property names or
15173 an empty string if all properties are to be returned.
15174 <note>Currently the value of this argument is ignored and the method
15175 always returns all existing properties.</note>
15176
15177 The method returns two arrays, the array of property names corresponding
15178 to the @a names argument and the current values of these properties.
15179 Both arrays have the same number of elements with each element at the
15180 given index in the first array corresponds to an element at the same
15181 index in the second array.
15182 </desc>
15183 <param name="names" type="wstring" dir="in">
15184 <desc>
15185 Names of properties to get.
15186 </desc>
15187 </param>
15188 <param name="returnNames" type="wstring" safearray="yes" dir="out">
15189 <desc>Names of returned properties.</desc>
15190 </param>
15191 <param name="returnValues" type="wstring" safearray="yes" dir="return">
15192 <desc>Values of returned properties.</desc>
15193 </param>
15194 </method>
15195
15196 </interface>
15197
15198
15199 <!--
15200 // ISerialPort
15201 /////////////////////////////////////////////////////////////////////////
15202 -->
15203
15204 <enum
15205 name="PortMode"
15206 uuid="533b5fe3-0185-4197-86a7-17e37dd39d76"
15207 >
15208 <desc>
15209 The PortMode enumeration represents possible communication modes for
15210 the virtual serial port device.
15211 </desc>
15212
15213 <const name="Disconnected" value="0">
15214 <desc>Virtual device is not attached to any real host device.</desc>
15215 </const>
15216 <const name="HostPipe" value="1">
15217 <desc>Virtual device is attached to a host pipe.</desc>
15218 </const>
15219 <const name="HostDevice" value="2">
15220 <desc>Virtual device is attached to a host device.</desc>
15221 </const>
15222 <const name="RawFile" value="3">
15223 <desc>Virtual device is attached to a raw file.</desc>
15224 </const>
15225 </enum>
15226
15227 <interface
15228 name="ISerialPort" extends="$unknown"
15229 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
15230 wsmap="managed"
15231 >
15232
15233 <desc>
15234 The ISerialPort interface represents the virtual serial port device.
15235
15236 The virtual serial port device acts like an ordinary serial port
15237 inside the virtual machine. This device communicates to the real
15238 serial port hardware in one of two modes: host pipe or host device.
15239
15240 In host pipe mode, the #path attribute specifies the path to the pipe on
15241 the host computer that represents a serial port. The #server attribute
15242 determines if this pipe is created by the virtual machine process at
15243 machine startup or it must already exist before starting machine
15244 execution.
15245
15246 In host device mode, the #path attribute specifies the name of the
15247 serial port device on the host computer.
15248
15249 There is also a third communication mode: the disconnected mode. In this
15250 mode, the guest OS running inside the virtual machine will be able to
15251 detect the serial port, but all port write operations will be discarded
15252 and all port read operations will return no data.
15253
15254 <see><link to="IMachine::getSerialPort"/></see>
15255 </desc>
15256
15257 <attribute name="slot" type="unsigned long" readonly="yes">
15258 <desc>
15259 Slot number this serial port is plugged into. Corresponds to
15260 the value you pass to <link to="IMachine::getSerialPort"/>
15261 to obtain this instance.
15262 </desc>
15263 </attribute>
15264
15265 <attribute name="enabled" type="boolean">
15266 <desc>
15267 Flag whether the serial port is enabled. If disabled,
15268 the serial port will not be reported to the guest OS.
15269 </desc>
15270 </attribute>
15271
15272 <attribute name="IOBase" type="unsigned long">
15273 <desc>Base I/O address of the serial port.</desc>
15274 </attribute>
15275
15276 <attribute name="IRQ" type="unsigned long">
15277 <desc>IRQ number of the serial port.</desc>
15278 </attribute>
15279
15280 <attribute name="hostMode" type="PortMode">
15281 <desc>
15282 How is this port connected to the host.
15283 <note>
15284 Changing this attribute may fail if the conditions for
15285 <link to="#path"/> are not met.
15286 </note>
15287 </desc>
15288 </attribute>
15289
15290 <attribute name="server" type="boolean">
15291 <desc>
15292 Flag whether this serial port acts as a server (creates a new pipe on
15293 the host) or as a client (uses the existing pipe). This attribute is
15294 used only when <link to="#hostMode"/> is PortMode_HostPipe.
15295 </desc>
15296 </attribute>
15297
15298 <attribute name="path" type="wstring">
15299 <desc>
15300 Path to the serial port's pipe on the host when <link to="ISerialPort::hostMode"/> is
15301 PortMode_HostPipe, or the host serial device name when
15302 <link to="ISerialPort::hostMode"/> is PortMode_HostDevice. For both
15303 cases, setting a @c null or empty string as the attribute's value
15304 is an error. Otherwise, the value of this property is ignored.
15305 </desc>
15306 </attribute>
15307
15308 </interface>
15309
15310 <!--
15311 // IParallelPort
15312 /////////////////////////////////////////////////////////////////////////
15313 -->
15314
15315 <interface
15316 name="IParallelPort" extends="$unknown"
15317 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
15318 wsmap="managed"
15319 >
15320
15321 <desc>
15322 The IParallelPort interface represents the virtual parallel port device.
15323
15324 The virtual parallel port device acts like an ordinary parallel port
15325 inside the virtual machine. This device communicates to the real
15326 parallel port hardware using the name of the parallel device on the host
15327 computer specified in the #path attribute.
15328
15329 Each virtual parallel port device is assigned a base I/O address and an
15330 IRQ number that will be reported to the guest operating system and used
15331 to operate the given parallel port from within the virtual machine.
15332
15333 <see><link to="IMachine::getParallelPort"/></see>
15334 </desc>
15335
15336 <attribute name="slot" type="unsigned long" readonly="yes">
15337 <desc>
15338 Slot number this parallel port is plugged into. Corresponds to
15339 the value you pass to <link to="IMachine::getParallelPort"/>
15340 to obtain this instance.
15341 </desc>
15342 </attribute>
15343
15344 <attribute name="enabled" type="boolean">
15345 <desc>
15346 Flag whether the parallel port is enabled. If disabled,
15347 the parallel port will not be reported to the guest OS.
15348 </desc>
15349 </attribute>
15350
15351 <attribute name="IOBase" type="unsigned long">
15352 <desc>Base I/O address of the parallel port.</desc>
15353 </attribute>
15354
15355 <attribute name="IRQ" type="unsigned long">
15356 <desc>IRQ number of the parallel port.</desc>
15357 </attribute>
15358
15359 <attribute name="path" type="wstring">
15360 <desc>
15361 Host parallel device name. If this parallel port is enabled, setting a
15362 @c null or an empty string as this attribute's value will result in
15363 an error.
15364 </desc>
15365 </attribute>
15366
15367 </interface>
15368
15369
15370 <!--
15371 // IMachineDebugger
15372 /////////////////////////////////////////////////////////////////////////
15373 -->
15374
15375 <interface
15376 name="IMachineDebugger" extends="$unknown"
15377 uuid="a9abbb7c-d678-43b2-bed2-19ec0e32303d"
15378 wsmap="suppress"
15379 >
15380 <method name="dumpGuestCore">
15381 <desc>
15382 Takes a core dump of the guest.
15383
15384 See include/VBox/dbgfcorefmt.h for details on the file format.
15385 </desc>
15386 <param name="filename" type="wstring" dir="in">
15387 <desc>
15388 The name of the output file. The file must not exist.
15389 </desc>
15390 </param>
15391 <param name="compression" type="wstring" dir="in">
15392 <desc>
15393 Reserved for future compression method indicator.
15394 </desc>
15395 </param>
15396 </method>
15397
15398 <method name="dumpHostProcessCore">
15399 <desc>
15400 Takes a core dump of the VM process on the host.
15401
15402 This feature is not implemented in the 4.0.0 release but it may show up
15403 in a dot release.
15404 </desc>
15405 <param name="filename" type="wstring" dir="in">
15406 <desc>
15407 The name of the output file. The file must not exist.
15408 </desc>
15409 </param>
15410 <param name="compression" type="wstring" dir="in">
15411 <desc>
15412 Reserved for future compression method indicator.
15413 </desc>
15414 </param>
15415 </method>
15416
15417 <method name="info">
15418 <desc>
15419 Interfaces with the info dumpers (DBGFInfo).
15420
15421 This feature is not implemented in the 4.0.0 release but it may show up
15422 in a dot release.
15423 </desc>
15424 <param name="name" type="wstring" dir="in">
15425 <desc>
15426 The name of the info item.
15427 </desc>
15428 </param>
15429 <param name="args" type="wstring" dir="in">
15430 <desc>
15431 Arguments to the info dumper.
15432 </desc>
15433 </param>
15434 <param name="info" type="wstring" dir="return">
15435 <desc>
15436 The into string.
15437 </desc>
15438 </param>
15439 </method>
15440
15441 <method name="injectNMI">
15442 <desc>
15443 Inject an NMI into a running VT-x/AMD-V VM.
15444 </desc>
15445 </method>
15446
15447 <method name="modifyLogGroups">
15448 <desc>
15449 Modifies the group settings of the debug or release logger.
15450 </desc>
15451 <param name="settings" type="wstring" dir="in">
15452 <desc>
15453 The group settings string. See iprt/log.h for details. To target the
15454 release logger, prefix the string with "release:".
15455 </desc>
15456 </param>
15457 </method>
15458
15459 <method name="modifyLogFlags">
15460 <desc>
15461 Modifies the debug or release logger flags.
15462 </desc>
15463 <param name="settings" type="wstring" dir="in">
15464 <desc>
15465 The flags settings string. See iprt/log.h for details. To target the
15466 release logger, prefix the string with "release:".
15467 </desc>
15468 </param>
15469 </method>
15470
15471 <method name="modifyLogDestinations">
15472 <desc>
15473 Modifies the debug or release logger destinations.
15474 </desc>
15475 <param name="settings" type="wstring" dir="in">
15476 <desc>
15477 The destination settings string. See iprt/log.h for details. To target the
15478 release logger, prefix the string with "release:".
15479 </desc>
15480 </param>
15481 </method>
15482
15483 <method name="readPhysicalMemory">
15484 <desc>
15485 Reads guest physical memory, no side effects (MMIO++).
15486
15487 This feature is not implemented in the 4.0.0 release but may show up
15488 in a dot release.
15489 </desc>
15490 <param name="address" type="long long" dir="in">
15491 <desc>The guest physical address.</desc>
15492 </param>
15493 <param name="size" type="unsigned long" dir="in">
15494 <desc>The number of bytes to read.</desc>
15495 </param>
15496 <param name="bytes" type="octet" safearray="yes" dir="return">
15497 <desc>The bytes read.</desc>
15498 </param>
15499 </method>
15500
15501 <method name="writePhysicalMemory">
15502 <desc>
15503 Writes guest physical memory, access handles (MMIO++) are ignored.
15504
15505 This feature is not implemented in the 4.0.0 release but may show up
15506 in a dot release.
15507 </desc>
15508 <param name="address" type="long long" dir="in">
15509 <desc>The guest physical address.</desc>
15510 </param>
15511 <param name="size" type="unsigned long" dir="in">
15512 <desc>The number of bytes to read.</desc>
15513 </param>
15514 <param name="bytes" type="octet" safearray="yes" dir="in">
15515 <desc>The bytes to write.</desc>
15516 </param>
15517 </method>
15518
15519 <method name="readVirtualMemory">
15520 <desc>
15521 Reads guest virtual memory, no side effects (MMIO++).
15522
15523 This feature is not implemented in the 4.0.0 release but may show up
15524 in a dot release.
15525 </desc>
15526 <param name="cpuId" type="unsigned long" dir="in">
15527 <desc>The identifier of the Virtual CPU.</desc>
15528 </param>
15529 <param name="address" type="long long" dir="in">
15530 <desc>The guest virtual address.</desc>
15531 </param>
15532 <param name="size" type="unsigned long" dir="in">
15533 <desc>The number of bytes to read.</desc>
15534 </param>
15535 <param name="bytes" type="octet" safearray="yes" dir="return">
15536 <desc>The bytes read.</desc>
15537 </param>
15538 </method>
15539
15540 <method name="writeVirtualMemory">
15541 <desc>
15542 Writes guest virtual memory, access handles (MMIO++) are ignored.
15543
15544 This feature is not implemented in the 4.0.0 release but may show up
15545 in a dot release.
15546 </desc>
15547 <param name="cpuId" type="unsigned long" dir="in">
15548 <desc>The identifier of the Virtual CPU.</desc>
15549 </param>
15550 <param name="address" type="long long" dir="in">
15551 <desc>The guest virtual address.</desc>
15552 </param>
15553 <param name="size" type="unsigned long" dir="in">
15554 <desc>The number of bytes to read.</desc>
15555 </param>
15556 <param name="bytes" type="octet" safearray="yes" dir="in">
15557 <desc>The bytes to write.</desc>
15558 </param>
15559 </method>
15560
15561 <method name="detectOS">
15562 <desc>
15563 Tries to (re-)detect the guest OS kernel.
15564
15565 This feature is not implemented in the 4.0.0 release but may show up
15566 in a dot release.
15567 </desc>
15568 <param name="os" type="wstring" dir="return">
15569 <desc>
15570 The detected OS kernel on success.
15571 </desc>
15572 </param>
15573 </method>
15574
15575 <method name="getRegister">
15576 <desc>
15577 Gets one register.
15578
15579 This feature is not implemented in the 4.0.0 release but may show up
15580 in a dot release.
15581 </desc>
15582 <param name="cpuId" type="unsigned long" dir="in">
15583 <desc>The identifier of the Virtual CPU.</desc>
15584 </param>
15585 <param name="name" type="wstring" dir="in">
15586 <desc>The register name, case is ignored.</desc>
15587 </param>
15588 <param name="value" type="wstring" dir="return">
15589 <desc>
15590 The register value. This is usually a hex value (always 0x prefixed)
15591 but other format may be used for floating point registers (TBD).
15592 </desc>
15593 </param>
15594 </method>
15595
15596 <method name="getRegisters">
15597 <desc>
15598 Gets all the registers for the given CPU.
15599
15600 This feature is not implemented in the 4.0.0 release but may show up
15601 in a dot release.
15602 </desc>
15603 <param name="cpuId" type="unsigned long" dir="in">
15604 <desc>The identifier of the Virtual CPU.</desc>
15605 </param>
15606 <param name="names" type="wstring" dir="out" safearray="yes">
15607 <desc>Array containing the lowercase register names.</desc>
15608 </param>
15609 <param name="values" type="wstring" dir="out" safearray="yes">
15610 <desc>
15611 Array paralell to the names holding the register values as if the
15612 register was returned by <link to="IMachineDebugger::getRegister"/>.
15613 </desc>
15614 </param>
15615 </method>
15616
15617 <method name="setRegister">
15618 <desc>
15619 Gets one register.
15620
15621 This feature is not implemented in the 4.0.0 release but may show up
15622 in a dot release.
15623 </desc>
15624 <param name="cpuId" type="unsigned long" dir="in">
15625 <desc>The identifier of the Virtual CPU.</desc>
15626 </param>
15627 <param name="name" type="wstring" dir="in">
15628 <desc>The register name, case is ignored.</desc>
15629 </param>
15630 <param name="value" type="wstring" dir="in">
15631 <desc>
15632 The new register value. Hexadecimal, decimal and octal formattings
15633 are supported in addition to any special formattings returned by
15634 the getters.
15635 </desc>
15636 </param>
15637 </method>
15638
15639 <method name="setRegisters">
15640 <desc>
15641 Sets zero or more registers atomically.
15642
15643 This feature is not implemented in the 4.0.0 release but may show up
15644 in a dot release.
15645 </desc>
15646 <param name="cpuId" type="unsigned long" dir="in">
15647 <desc>The identifier of the Virtual CPU.</desc>
15648 </param>
15649 <param name="names" type="wstring" dir="in" safearray="yes">
15650 <desc>Array containing the register names, case ignored.</desc>
15651 </param>
15652 <param name="values" type="wstring" dir="in" safearray="yes">
15653 <desc>
15654 Array paralell to the names holding the register values. See
15655 <link to="IMachineDebugger::setRegister"/> for formatting
15656 guidelines.
15657 </desc>
15658 </param>
15659 </method>
15660
15661 <method name="dumpGuestStack">
15662 <desc>
15663 Produce a simple stack dump using the current guest state.
15664
15665 This feature is not implemented in the 4.0.0 release but may show up
15666 in a dot release.
15667 </desc>
15668 <param name="cpuId" type="unsigned long" dir="in">
15669 <desc>The identifier of the Virtual CPU.</desc>
15670 </param>
15671 <param name="stack" type="wstring" dir="return">
15672 <desc>String containing the formatted stack dump.</desc>
15673 </param>
15674 </method>
15675
15676 <method name="resetStats">
15677 <desc>
15678 Reset VM statistics.
15679 </desc>
15680 <param name="pattern" type="wstring" dir="in">
15681 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15682 </param>
15683 </method>
15684
15685 <method name="dumpStats">
15686 <desc>
15687 Dumps VM statistics.
15688 </desc>
15689 <param name="pattern" type="wstring" dir="in">
15690 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15691 </param>
15692 </method>
15693
15694 <method name="getStats">
15695 <desc>
15696 Get the VM statistics in a XMLish format.
15697 </desc>
15698 <param name="pattern" type="wstring" dir="in">
15699 <desc>The selection pattern. A bit similar to filename globbing.</desc>
15700 </param>
15701 <param name="withDescriptions" type="boolean" dir="in">
15702 <desc>Whether to include the descriptions.</desc>
15703 </param>
15704 <param name="stats" type="wstring" dir="out">
15705 <desc>The XML document containing the statistics.</desc>
15706 </param>
15707 </method>
15708
15709 <attribute name="singleStep" type="boolean">
15710 <desc>Switch for enabling single-stepping.</desc>
15711 </attribute>
15712
15713 <attribute name="recompileUser" type="boolean">
15714 <desc>Switch for forcing code recompilation for user mode code.</desc>
15715 </attribute>
15716
15717 <attribute name="recompileSupervisor" type="boolean">
15718 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
15719 </attribute>
15720
15721 <attribute name="PATMEnabled" type="boolean">
15722 <desc>Switch for enabling and disabling the PATM component.</desc>
15723 </attribute>
15724
15725 <attribute name="CSAMEnabled" type="boolean">
15726 <desc>Switch for enabling and disabling the CSAM component.</desc>
15727 </attribute>
15728
15729 <attribute name="logEnabled" type="boolean">
15730 <desc>Switch for enabling and disabling the debug logger.</desc>
15731 </attribute>
15732
15733 <attribute name="logDbgFlags" type="wstring" readonly="yes">
15734 <desc>The debug logger flags.</desc>
15735 </attribute>
15736
15737 <attribute name="logDbgGroups" type="wstring" readonly="yes">
15738 <desc>The debug logger's group settings.</desc>
15739 </attribute>
15740
15741 <attribute name="logDbgDestinations" type="wstring" readonly="yes">
15742 <desc>The debug logger's destination settings.</desc>
15743 </attribute>
15744
15745 <attribute name="logRelFlags" type="wstring" readonly="yes">
15746 <desc>The release logger flags.</desc>
15747 </attribute>
15748
15749 <attribute name="logRelGroups" type="wstring" readonly="yes">
15750 <desc>The release logger's group settings.</desc>
15751 </attribute>
15752
15753 <attribute name="logRelDestinations" type="wstring" readonly="yes">
15754 <desc>The relase logger's destination settings.</desc>
15755 </attribute>
15756
15757 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
15758 <desc>
15759 Flag indicating whether the VM is currently making use of CPU hardware
15760 virtualization extensions.
15761 </desc>
15762 </attribute>
15763
15764 <attribute name="HWVirtExNestedPagingEnabled" type="boolean" readonly="yes">
15765 <desc>
15766 Flag indicating whether the VM is currently making use of the nested paging
15767 CPU hardware virtualization extension.
15768 </desc>
15769 </attribute>
15770
15771 <attribute name="HWVirtExVPIDEnabled" type="boolean" readonly="yes">
15772 <desc>
15773 Flag indicating whether the VM is currently making use of the VPID
15774 VT-x extension.
15775 </desc>
15776 </attribute>
15777
15778 <attribute name="OSName" type="wstring" readonly="yes">
15779 <desc>
15780 Query the guest OS kernel name as detected by the DBGF.
15781
15782 This feature is not implemented in the 4.0.0 release but may show up
15783 in a dot release.
15784 </desc>
15785 </attribute>
15786
15787 <attribute name="OSVersion" type="wstring" readonly="yes">
15788 <desc>
15789 Query the guest OS kernel version string as detected by the DBGF.
15790
15791 This feature is not implemented in the 4.0.0 release but may show up
15792 in a dot release.
15793 </desc>
15794 </attribute>
15795
15796 <attribute name="PAEEnabled" type="boolean" readonly="yes">
15797 <desc>
15798 Flag indicating whether the VM is currently making use of the Physical
15799 Address Extension CPU feature.
15800 </desc>
15801 </attribute>
15802
15803 <attribute name="virtualTimeRate" type="unsigned long">
15804 <desc>
15805 The rate at which the virtual time runs expressed as a percentage.
15806 The accepted range is 2% to 20000%.
15807 </desc>
15808 </attribute>
15809
15810 <attribute name="VM" type="long long" readonly="yes">
15811 <desc>
15812 Gets the VM handle. This is only for internal use while
15813 we carve the details of this interface.
15814 </desc>
15815 </attribute>
15816
15817 </interface>
15818
15819 <!--
15820 // IUSBController
15821 /////////////////////////////////////////////////////////////////////////
15822 -->
15823
15824 <interface
15825 name="IUSBController" extends="$unknown"
15826 uuid="01e6f13a-0580-452f-a40f-74e32a5e4921"
15827 wsmap="managed"
15828 >
15829 <attribute name="enabled" type="boolean">
15830 <desc>
15831 Flag whether the USB controller is present in the
15832 guest system. If disabled, the virtual guest hardware will
15833 not contain any USB controller. Can only be changed when
15834 the VM is powered off.
15835 </desc>
15836 </attribute>
15837
15838 <attribute name="enabledEHCI" type="boolean">
15839 <desc>
15840 Flag whether the USB EHCI controller is present in the
15841 guest system. If disabled, the virtual guest hardware will
15842 not contain a USB EHCI controller. Can only be changed when
15843 the VM is powered off.
15844 </desc>
15845 </attribute>
15846
15847 <attribute name="proxyAvailable" type="boolean" readonly="yes">
15848 <desc>
15849 Flag whether there is an USB proxy available.
15850 </desc>
15851 </attribute>
15852
15853 <attribute name="USBStandard" type="unsigned short" readonly="yes">
15854 <desc>
15855 USB standard version which the controller implements.
15856 This is a BCD which means that the major version is in the
15857 high byte and minor version is in the low byte.
15858 </desc>
15859 </attribute>
15860
15861 <attribute name="deviceFilters" type="IUSBDeviceFilter" readonly="yes" safearray="yes">
15862 <desc>
15863 List of USB device filters associated with the machine.
15864
15865 If the machine is currently running, these filters are activated
15866 every time a new (supported) USB device is attached to the host
15867 computer that was not ignored by global filters
15868 (<link to="IHost::USBDeviceFilters"/>).
15869
15870 These filters are also activated when the machine is powered up.
15871 They are run against a list of all currently available USB
15872 devices (in states
15873 <link to="USBDeviceState_Available"/>,
15874 <link to="USBDeviceState_Busy"/>,
15875 <link to="USBDeviceState_Held"/>) that were not previously
15876 ignored by global filters.
15877
15878 If at least one filter matches the USB device in question, this
15879 device is automatically captured (attached to) the virtual USB
15880 controller of this machine.
15881
15882 <see><link to="IUSBDeviceFilter"/>, <link to="IUSBController"/></see>
15883 </desc>
15884 </attribute>
15885
15886 <method name="createDeviceFilter">
15887 <desc>
15888 Creates a new USB device filter. All attributes except
15889 the filter name are set to empty (any match),
15890 <i>active</i> is @c false (the filter is not active).
15891
15892 The created filter can then be added to the list of filters using
15893 <link to="#insertDeviceFilter"/>.
15894
15895 <result name="VBOX_E_INVALID_VM_STATE">
15896 The virtual machine is not mutable.
15897 </result>
15898
15899 <see><link to="#deviceFilters"/></see>
15900 </desc>
15901 <param name="name" type="wstring" dir="in">
15902 <desc>
15903 Filter name. See <link to="IUSBDeviceFilter::name"/>
15904 for more info.
15905 </desc>
15906 </param>
15907 <param name="filter" type="IUSBDeviceFilter" dir="return">
15908 <desc>Created filter object.</desc>
15909 </param>
15910 </method>
15911
15912 <method name="insertDeviceFilter">
15913 <desc>
15914 Inserts the given USB device to the specified position
15915 in the list of filters.
15916
15917 Positions are numbered starting from <tt>0</tt>. If the specified
15918 position is equal to or greater than the number of elements in
15919 the list, the filter is added to the end of the collection.
15920
15921 <note>
15922 Duplicates are not allowed, so an attempt to insert a
15923 filter that is already in the collection, will return an
15924 error.
15925 </note>
15926
15927 <result name="VBOX_E_INVALID_VM_STATE">
15928 Virtual machine is not mutable.
15929 </result>
15930 <result name="E_INVALIDARG">
15931 USB device filter not created within this VirtualBox instance.
15932 </result>
15933 <result name="VBOX_E_INVALID_OBJECT_STATE">
15934 USB device filter already in list.
15935 </result>
15936
15937 <see><link to="#deviceFilters"/></see>
15938 </desc>
15939 <param name="position" type="unsigned long" dir="in">
15940 <desc>Position to insert the filter to.</desc>
15941 </param>
15942 <param name="filter" type="IUSBDeviceFilter" dir="in">
15943 <desc>USB device filter to insert.</desc>
15944 </param>
15945 </method>
15946
15947 <method name="removeDeviceFilter">
15948 <desc>
15949 Removes a USB device filter from the specified position in the
15950 list of filters.
15951
15952 Positions are numbered starting from <tt>0</tt>. Specifying a
15953 position equal to or greater than the number of elements in
15954 the list will produce an error.
15955
15956 <see><link to="#deviceFilters"/></see>
15957
15958 <result name="VBOX_E_INVALID_VM_STATE">
15959 Virtual machine is not mutable.
15960 </result>
15961 <result name="E_INVALIDARG">
15962 USB device filter list empty or invalid @a position.
15963 </result>
15964
15965 </desc>
15966 <param name="position" type="unsigned long" dir="in">
15967 <desc>Position to remove the filter from.</desc>
15968 </param>
15969 <param name="filter" type="IUSBDeviceFilter" dir="return">
15970 <desc>Removed USB device filter.</desc>
15971 </param>
15972 </method>
15973
15974 </interface>
15975
15976
15977 <!--
15978 // IUSBDevice
15979 /////////////////////////////////////////////////////////////////////////
15980 -->
15981
15982 <interface
15983 name="IUSBDevice" extends="$unknown"
15984 uuid="f8967b0b-4483-400f-92b5-8b675d98a85b"
15985 wsmap="managed"
15986 >
15987 <desc>
15988 The IUSBDevice interface represents a virtual USB device attached to the
15989 virtual machine.
15990
15991 A collection of objects implementing this interface is stored in the
15992 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
15993 attached to a running virtual machine's USB controller.
15994 </desc>
15995
15996 <attribute name="id" type="uuid" mod="string" readonly="yes">
15997 <desc>
15998 Unique USB device ID. This ID is built from #vendorId,
15999 #productId, #revision and #serialNumber.
16000 </desc>
16001 </attribute>
16002
16003 <attribute name="vendorId" type="unsigned short" readonly="yes">
16004 <desc>Vendor ID.</desc>
16005 </attribute>
16006
16007 <attribute name="productId" type="unsigned short" readonly="yes">
16008 <desc>Product ID.</desc>
16009 </attribute>
16010
16011 <attribute name="revision" type="unsigned short" readonly="yes">
16012 <desc>
16013 Product revision number. This is a packed BCD represented as
16014 unsigned short. The high byte is the integer part and the low
16015 byte is the decimal.
16016 </desc>
16017 </attribute>
16018
16019 <attribute name="manufacturer" type="wstring" readonly="yes">
16020 <desc>Manufacturer string.</desc>
16021 </attribute>
16022
16023 <attribute name="product" type="wstring" readonly="yes">
16024 <desc>Product string.</desc>
16025 </attribute>
16026
16027 <attribute name="serialNumber" type="wstring" readonly="yes">
16028 <desc>Serial number string.</desc>
16029 </attribute>
16030
16031 <attribute name="address" type="wstring" readonly="yes">
16032 <desc>Host specific address of the device.</desc>
16033 </attribute>
16034
16035 <attribute name="port" type="unsigned short" readonly="yes">
16036 <desc>
16037 Host USB port number the device is physically
16038 connected to.
16039 </desc>
16040 </attribute>
16041
16042 <attribute name="version" type="unsigned short" readonly="yes">
16043 <desc>
16044 The major USB version of the device - 1 or 2.
16045 </desc>
16046 </attribute>
16047
16048 <attribute name="portVersion" type="unsigned short" readonly="yes">
16049 <desc>
16050 The major USB version of the host USB port the device is
16051 physically connected to - 1 or 2. For devices not connected to
16052 anything this will have the same value as the version attribute.
16053 </desc>
16054 </attribute>
16055
16056 <attribute name="remote" type="boolean" readonly="yes">
16057 <desc>
16058 Whether the device is physically connected to a remote VRDE
16059 client or to a local host machine.
16060 </desc>
16061 </attribute>
16062
16063 </interface>
16064
16065
16066 <!--
16067 // IUSBDeviceFilter
16068 /////////////////////////////////////////////////////////////////////////
16069 -->
16070
16071 <interface
16072 name="IUSBDeviceFilter" extends="$unknown"
16073 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
16074 wsmap="managed"
16075 >
16076 <desc>
16077 The IUSBDeviceFilter interface represents an USB device filter used
16078 to perform actions on a group of USB devices.
16079
16080 This type of filters is used by running virtual machines to
16081 automatically capture selected USB devices once they are physically
16082 attached to the host computer.
16083
16084 A USB device is matched to the given device filter if and only if all
16085 attributes of the device match the corresponding attributes of the
16086 filter (that is, attributes are joined together using the logical AND
16087 operation). On the other hand, all together, filters in the list of
16088 filters carry the semantics of the logical OR operation. So if it is
16089 desirable to create a match like "this vendor id OR this product id",
16090 one needs to create two filters and specify "any match" (see below)
16091 for unused attributes.
16092
16093 All filter attributes used for matching are strings. Each string
16094 is an expression representing a set of values of the corresponding
16095 device attribute, that will match the given filter. Currently, the
16096 following filtering expressions are supported:
16097
16098 <ul>
16099 <li><i>Interval filters</i>. Used to specify valid intervals for
16100 integer device attributes (Vendor ID, Product ID and Revision).
16101 The format of the string is:
16102
16103 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
16104
16105 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
16106 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
16107 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
16108 is omitted before a dash (<tt>-</tt>), the minimum possible integer
16109 is assumed; if <tt>n</tt> is omitted after a dash, the maximum
16110 possible integer is assumed.
16111 </li>
16112 <li><i>Boolean filters</i>. Used to specify acceptable values for
16113 boolean device attributes. The format of the string is:
16114
16115 <tt>true|false|yes|no|0|1</tt>
16116
16117 </li>
16118 <li><i>Exact match</i>. Used to specify a single value for the given
16119 device attribute. Any string that doesn't start with <tt>int:</tt>
16120 represents the exact match. String device attributes are compared to
16121 this string including case of symbols. Integer attributes are first
16122 converted to a string (see individual filter attributes) and then
16123 compared ignoring case.
16124
16125 </li>
16126 <li><i>Any match</i>. Any value of the corresponding device attribute
16127 will match the given filter. An empty or @c null string is
16128 used to construct this type of filtering expressions.
16129
16130 </li>
16131 </ul>
16132
16133 <note>
16134 On the Windows host platform, interval filters are not currently
16135 available. Also all string filter attributes
16136 (<link to="#manufacturer"/>, <link to="#product"/>,
16137 <link to="#serialNumber"/>) are ignored, so they behave as
16138 <i>any match</i> no matter what string expression is specified.
16139 </note>
16140
16141 <see><link to="IUSBController::deviceFilters"/>,
16142 <link to="IHostUSBDeviceFilter"/></see>
16143 </desc>
16144
16145 <attribute name="name" type="wstring">
16146 <desc>
16147 Visible name for this filter.
16148 This name is used to visually distinguish one filter from another,
16149 so it can neither be @c null nor an empty string.
16150 </desc>
16151 </attribute>
16152
16153 <attribute name="active" type="boolean">
16154 <desc>Whether this filter active or has been temporarily disabled.</desc>
16155 </attribute>
16156
16157 <attribute name="vendorId" type="wstring">
16158 <desc>
16159 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
16160 The string representation for the <i>exact matching</i>
16161 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
16162 (including leading zeroes).
16163 </desc>
16164 </attribute>
16165
16166 <attribute name="productId" type="wstring">
16167 <desc>
16168 <link to="IUSBDevice::productId">Product ID</link> filter.
16169 The string representation for the <i>exact matching</i>
16170 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
16171 (including leading zeroes).
16172 </desc>
16173 </attribute>
16174
16175 <attribute name="revision" type="wstring">
16176 <desc>
16177 <link to="IUSBDevice::productId">Product revision number</link>
16178 filter. The string representation for the <i>exact matching</i>
16179 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
16180 of the integer part of the revision, and <tt>F</tt> is the
16181 decimal digit of its fractional part (including leading and
16182 trailing zeros).
16183 Note that for interval filters, it's best to use the hexadecimal
16184 form, because the revision is stored as a 16 bit packed BCD value;
16185 so the expression <tt>int:0x0100-0x0199</tt> will match any
16186 revision from <tt>1.0</tt> to <tt>1.99</tt>.
16187 </desc>
16188 </attribute>
16189
16190 <attribute name="manufacturer" type="wstring">
16191 <desc>
16192 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
16193 </desc>
16194 </attribute>
16195
16196 <attribute name="product" type="wstring">
16197 <desc>
16198 <link to="IUSBDevice::product">Product</link> filter.
16199 </desc>
16200 </attribute>
16201
16202 <attribute name="serialNumber" type="wstring">
16203 <desc>
16204 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
16205 </desc>
16206 </attribute>
16207
16208 <attribute name="port" type="wstring">
16209 <desc>
16210 <link to="IUSBDevice::port">Host USB port</link> filter.
16211 </desc>
16212 </attribute>
16213
16214 <attribute name="remote" type="wstring">
16215 <desc>
16216 <link to="IUSBDevice::remote">Remote state</link> filter.
16217 <note>
16218 This filter makes sense only for machine USB filters,
16219 i.e. it is ignored by IHostUSBDeviceFilter objects.
16220 </note>
16221 </desc>
16222 </attribute>
16223
16224 <attribute name="maskedInterfaces" type="unsigned long">
16225 <desc>
16226 This is an advanced option for hiding one or more USB interfaces
16227 from the guest. The value is a bit mask where the bits that are set
16228 means the corresponding USB interface should be hidden, masked off
16229 if you like.
16230 This feature only works on Linux hosts.
16231 </desc>
16232 </attribute>
16233
16234 </interface>
16235
16236
16237 <!--
16238 // IHostUSBDevice
16239 /////////////////////////////////////////////////////////////////////////
16240 -->
16241
16242 <enum
16243 name="USBDeviceState"
16244 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
16245 >
16246 <desc>
16247 USB device state. This enumeration represents all possible states
16248 of the USB device physically attached to the host computer regarding
16249 its state on the host computer and availability to guest computers
16250 (all currently running virtual machines).
16251
16252 Once a supported USB device is attached to the host, global USB
16253 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
16254 either ignore the device, or put it to USBDeviceState_Held state, or do
16255 nothing. Unless the device is ignored by global filters, filters of all
16256 currently running guests (<link to="IUSBController::deviceFilters"/>) are
16257 activated that can put it to USBDeviceState_Captured state.
16258
16259 If the device was ignored by global filters, or didn't match
16260 any filters at all (including guest ones), it is handled by the host
16261 in a normal way. In this case, the device state is determined by
16262 the host and can be one of USBDeviceState_Unavailable, USBDeviceState_Busy
16263 or USBDeviceState_Available, depending on the current device usage.
16264
16265 Besides auto-capturing based on filters, the device can be manually
16266 captured by guests (<link to="IConsole::attachUSBDevice"/>) if its
16267 state is USBDeviceState_Busy, USBDeviceState_Available or
16268 USBDeviceState_Held.
16269
16270 <note>
16271 Due to differences in USB stack implementations in Linux and Win32,
16272 states USBDeviceState_Busy and USBDeviceState_Unavailable are applicable
16273 only to the Linux version of the product. This also means that (<link
16274 to="IConsole::attachUSBDevice"/>) can only succeed on Win32 if the
16275 device state is USBDeviceState_Held.
16276 </note>
16277
16278 <see><link to="IHostUSBDevice"/>, <link to="IHostUSBDeviceFilter"/></see>
16279 </desc>
16280
16281 <const name="NotSupported" value="0">
16282 <desc>
16283 Not supported by the VirtualBox server, not available to guests.
16284 </desc>
16285 </const>
16286 <const name="Unavailable" value="1">
16287 <desc>
16288 Being used by the host computer exclusively,
16289 not available to guests.
16290 </desc>
16291 </const>
16292 <const name="Busy" value="2">
16293 <desc>
16294 Being used by the host computer, potentially available to guests.
16295 </desc>
16296 </const>
16297 <const name="Available" value="3">
16298 <desc>
16299 Not used by the host computer, available to guests (the host computer
16300 can also start using the device at any time).
16301 </desc>
16302 </const>
16303 <const name="Held" value="4">
16304 <desc>
16305 Held by the VirtualBox server (ignored by the host computer),
16306 available to guests.
16307 </desc>
16308 </const>
16309 <const name="Captured" value="5">
16310 <desc>
16311 Captured by one of the guest computers, not available
16312 to anybody else.
16313 </desc>
16314 </const>
16315 </enum>
16316
16317 <interface
16318 name="IHostUSBDevice" extends="IUSBDevice"
16319 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
16320 wsmap="managed"
16321 >
16322 <desc>
16323 The IHostUSBDevice interface represents a physical USB device attached
16324 to the host computer.
16325
16326 Besides properties inherited from IUSBDevice, this interface adds the
16327 <link to="#state"/> property that holds the current state of the USB
16328 device.
16329
16330 <see><link to="IHost::USBDevices"/>,
16331 <link to="IHost::USBDeviceFilters"/></see>
16332 </desc>
16333
16334 <attribute name="state" type="USBDeviceState" readonly="yes">
16335 <desc>
16336 Current state of the device.
16337 </desc>
16338 </attribute>
16339
16340 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
16341
16342 </interface>
16343
16344
16345 <!--
16346 // IHostUSBDeviceFilter
16347 /////////////////////////////////////////////////////////////////////////
16348 -->
16349
16350 <enum
16351 name="USBDeviceFilterAction"
16352 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
16353 >
16354 <desc>
16355 Actions for host USB device filters.
16356 <see><link to="IHostUSBDeviceFilter"/>, <link to="USBDeviceState"/></see>
16357 </desc>
16358
16359 <const name="Null" value="0">
16360 <desc>Null value (never used by the API).</desc>
16361 </const>
16362 <const name="Ignore" value="1">
16363 <desc>Ignore the matched USB device.</desc>
16364 </const>
16365 <const name="Hold" value="2">
16366 <desc>Hold the matched USB device.</desc>
16367 </const>
16368 </enum>
16369
16370 <interface
16371 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
16372 uuid="4cc70246-d74a-400f-8222-3900489c0374"
16373 wsmap="managed"
16374 >
16375 <desc>
16376 The IHostUSBDeviceFilter interface represents a global filter for a
16377 physical USB device used by the host computer. Used indirectly in
16378 <link to="IHost::USBDeviceFilters"/>.
16379
16380 Using filters of this type, the host computer determines the initial
16381 state of the USB device after it is physically attached to the
16382 host's USB controller.
16383
16384 <note>
16385 The <link to="IUSBDeviceFilter::remote"/> attribute is ignored by this type of
16386 filters, because it makes sense only for
16387 <link to="IUSBController::deviceFilters">machine USB filters</link>.
16388 </note>
16389
16390 <see><link to="IHost::USBDeviceFilters"/></see>
16391 </desc>
16392
16393 <attribute name="action" type="USBDeviceFilterAction">
16394 <desc>
16395 Action performed by the host when an attached USB device
16396 matches this filter.
16397 </desc>
16398 </attribute>
16399
16400 </interface>
16401
16402 <!--
16403 // IAudioAdapter
16404 /////////////////////////////////////////////////////////////////////////
16405 -->
16406
16407 <enum
16408 name="AudioDriverType"
16409 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
16410 >
16411 <desc>
16412 Host audio driver type.
16413 </desc>
16414
16415 <const name="Null" value="0">
16416 <desc>Null value, also means "dummy audio driver".</desc>
16417 </const>
16418 <const name="WinMM" value="1">
16419 <desc>Windows multimedia (Windows hosts only).</desc>
16420 </const>
16421 <const name="OSS" value="2">
16422 <desc>Open Sound System (Linux hosts only).</desc>
16423 </const>
16424 <const name="ALSA" value="3">
16425 <desc>Advanced Linux Sound Architecture (Linux hosts only).</desc>
16426 </const>
16427 <const name="DirectSound" value="4">
16428 <desc>DirectSound (Windows hosts only).</desc>
16429 </const>
16430 <const name="CoreAudio" value="5">
16431 <desc>CoreAudio (Mac hosts only).</desc>
16432 </const>
16433 <const name="MMPM" value="6">
16434 <desc>Reserved for historical reasons.</desc>
16435 </const>
16436 <const name="Pulse" value="7">
16437 <desc>PulseAudio (Linux hosts only).</desc>
16438 </const>
16439 <const name="SolAudio" value="8">
16440 <desc>Solaris audio (Solaris hosts only).</desc>
16441 </const>
16442 </enum>
16443
16444 <enum
16445 name="AudioControllerType"
16446 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
16447 >
16448 <desc>
16449 Virtual audio controller type.
16450 </desc>
16451
16452 <const name="AC97" value="0"/>
16453 <const name="SB16" value="1"/>
16454 <const name="HDA" value="2"/>
16455 </enum>
16456
16457 <interface
16458 name="IAudioAdapter" extends="$unknown"
16459 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
16460 wsmap="managed"
16461 >
16462 <desc>
16463 The IAudioAdapter interface represents the virtual audio adapter of
16464 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
16465 </desc>
16466 <attribute name="enabled" type="boolean">
16467 <desc>
16468 Flag whether the audio adapter is present in the
16469 guest system. If disabled, the virtual guest hardware will
16470 not contain any audio adapter. Can only be changed when
16471 the VM is not running.
16472 </desc>
16473 </attribute>
16474 <attribute name="audioController" type="AudioControllerType">
16475 <desc>
16476 The audio hardware we emulate.
16477 </desc>
16478 </attribute>
16479 <attribute name="audioDriver" type="AudioDriverType">
16480 <desc>
16481 Audio driver the adapter is connected to. This setting
16482 can only be changed when the VM is not running.
16483 </desc>
16484 </attribute>
16485 </interface>
16486
16487 <enum
16488 name="AuthType"
16489 uuid="7eef6ef6-98c2-4dc2-ab35-10d2b292028d"
16490 >
16491 <desc>
16492 VirtualBox authentication type.
16493 </desc>
16494
16495 <const name="Null" value="0">
16496 <desc>Null value, also means "no authentication".</desc>
16497 </const>
16498 <const name="External" value="1"/>
16499 <const name="Guest" value="2"/>
16500 </enum>
16501
16502 <!--
16503 // IVRDEServer
16504 /////////////////////////////////////////////////////////////////////////
16505 -->
16506
16507 <interface
16508 name="IVRDEServer" extends="$unknown"
16509 uuid="d38de40a-c2c1-4e95-b5a4-167b05f5694c"
16510 wsmap="managed"
16511 >
16512 <attribute name="enabled" type="boolean">
16513 <desc>VRDE server status.</desc>
16514 </attribute>
16515
16516 <attribute name="authType" type="AuthType">
16517 <desc>VRDE authentication method.</desc>
16518 </attribute>
16519
16520 <attribute name="authTimeout" type="unsigned long">
16521 <desc>Timeout for guest authentication. Milliseconds.</desc>
16522 </attribute>
16523
16524 <attribute name="allowMultiConnection" type="boolean">
16525 <desc>
16526 Flag whether multiple simultaneous connections to the VM are permitted.
16527 Note that this will be replaced by a more powerful mechanism in the future.
16528 </desc>
16529 </attribute>
16530
16531 <attribute name="reuseSingleConnection" type="boolean">
16532 <desc>
16533 Flag whether the existing connection must be dropped and a new connection
16534 must be established by the VRDE server, when a new client connects in single
16535 connection mode.
16536 </desc>
16537 </attribute>
16538
16539 <attribute name="VRDEExtPack" type="wstring">
16540 <desc>
16541 The name of Extension Pack providing VRDE for this VM. Overrides
16542 <link to="ISystemProperties::defaultVRDEExtPack"/>.
16543 </desc>
16544 </attribute>
16545
16546 <attribute name="authLibrary" type="wstring">
16547 <desc>
16548 Library used for authentication of RDP clients by this VM. Overrides
16549 <link to="ISystemProperties::VRDEAuthLibrary"/>.
16550 </desc>
16551 </attribute>
16552
16553 <attribute name="VRDEProperties" type="wstring" readonly="yes" safearray="yes">
16554 <desc>
16555 Array of names of properties, which are supported by this VRDE server.
16556 </desc>
16557 </attribute>
16558
16559 <method name="setVRDEProperty">
16560 <desc>
16561 Sets a VRDE specific property string.
16562
16563 If you pass @c null or empty string as a key @a value, the given @a key
16564 will be deleted.
16565
16566 </desc>
16567 <param name="key" type="wstring" dir="in">
16568 <desc>Name of the key to set.</desc>
16569 </param>
16570 <param name="value" type="wstring" dir="in">
16571 <desc>Value to assign to the key.</desc>
16572 </param>
16573 </method>
16574
16575 <method name="getVRDEProperty" const="yes">
16576 <desc>
16577 Returns a VRDE specific property string.
16578
16579 If the requested data @a key does not exist, this function will
16580 succeed and return an empty string in the @a value argument.
16581
16582 </desc>
16583 <param name="key" type="wstring" dir="in">
16584 <desc>Name of the key to get.</desc>
16585 </param>
16586 <param name="value" type="wstring" dir="return">
16587 <desc>Value of the requested key.</desc>
16588 </param>
16589 </method>
16590
16591 </interface>
16592
16593
16594 <!--
16595 // ISharedFolder
16596 /////////////////////////////////////////////////////////////////////////
16597 -->
16598
16599 <interface
16600 name="ISharedFolder" extends="$unknown"
16601 uuid="8388da11-b559-4574-a5b7-2bd7acd5cef8"
16602 wsmap="struct"
16603 >
16604 <desc>
16605 The ISharedFolder interface represents a folder in the host computer's
16606 file system accessible from the guest OS running inside a virtual
16607 machine using an associated logical name.
16608
16609 There are three types of shared folders:
16610 <ul>
16611 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
16612 folders available to all virtual machines.</li>
16613 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
16614 VM-specific shared folders available to the given virtual machine at
16615 startup.</li>
16616 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
16617 VM-specific shared folders created in the session context (for
16618 example, when the virtual machine is running) and automatically
16619 discarded when the session is closed (the VM is powered off).</li>
16620 </ul>
16621
16622 Logical names of shared folders must be unique within the given scope
16623 (global, permanent or transient). However, they do not need to be unique
16624 across scopes. In this case, the definition of the shared folder in a
16625 more specific scope takes precedence over definitions in all other
16626 scopes. The order of precedence is (more specific to more general):
16627 <ol>
16628 <li>Transient definitions</li>
16629 <li>Permanent definitions</li>
16630 <li>Global definitions</li>
16631 </ol>
16632
16633 For example, if MyMachine has a shared folder named
16634 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then creating a
16635 transient shared folder named <tt>C_DRIVE</tt> (that points
16636 to <tt>C:\\\\WINDOWS</tt>) will change the definition
16637 of <tt>C_DRIVE</tt> in the guest OS so
16638 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
16639 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
16640 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
16641 the previous (permanent) definition of <tt>C_DRIVE</tt> that points
16642 to <tt>C:\\</tt> if it still exists.
16643
16644 Note that permanent and transient shared folders of different machines
16645 are in different name spaces, so they don't overlap and don't need to
16646 have unique logical names.
16647
16648 <note>
16649 Global shared folders are not implemented in the current version of the
16650 product.
16651 </note>
16652 </desc>
16653
16654 <attribute name="name" type="wstring" readonly="yes">
16655 <desc>Logical name of the shared folder.</desc>
16656 </attribute>
16657
16658 <attribute name="hostPath" type="wstring" readonly="yes">
16659 <desc>Full path to the shared folder in the host file system.</desc>
16660 </attribute>
16661
16662 <attribute name="accessible" type="boolean" readonly="yes">
16663 <desc>
16664 Whether the folder defined by the host path is currently
16665 accessible or not.
16666 For example, the folder can be inaccessible if it is placed
16667 on the network share that is not available by the time
16668 this property is read.
16669 </desc>
16670 </attribute>
16671
16672 <attribute name="writable" type="boolean" readonly="yes">
16673 <desc>
16674 Whether the folder defined by the host path is writable or
16675 not.
16676 </desc>
16677 </attribute>
16678
16679 <attribute name="autoMount" type="boolean" readonly="yes">
16680 <desc>
16681 Whether the folder gets automatically mounted by the guest or not.
16682 </desc>
16683 </attribute>
16684
16685 <attribute name="lastAccessError" type="wstring" readonly="yes">
16686 <desc>
16687 Text message that represents the result of the last accessibility
16688 check.
16689
16690 Accessibility checks are performed each time the <link to="#accessible"/>
16691 attribute is read. An empty string is returned if the last
16692 accessibility check was successful. A non-empty string indicates a
16693 failure and should normally describe a reason of the failure (for
16694 example, a file read error).
16695 </desc>
16696 </attribute>
16697
16698 </interface>
16699
16700 <!--
16701 // ISession
16702 /////////////////////////////////////////////////////////////////////////
16703 -->
16704
16705 <interface
16706 name="IInternalSessionControl" extends="$unknown"
16707 uuid="3e83963a-1c3b-400d-8c5f-f2d077b0a597"
16708 internal="yes"
16709 wsmap="suppress"
16710 >
16711 <method name="getPID">
16712 <desc>PID of the process that has created this Session object.
16713 </desc>
16714 <param name="pid" type="unsigned long" dir="return"/>
16715 </method>
16716
16717 <method name="getRemoteConsole">
16718 <desc>
16719 Returns the console object suitable for remote control.
16720
16721 <result name="VBOX_E_INVALID_VM_STATE">
16722 Session state prevents operation.
16723 </result>
16724 <result name="VBOX_E_INVALID_OBJECT_STATE">
16725 Session type prevents operation.
16726 </result>
16727
16728 </desc>
16729 <param name="console" type="IConsole" dir="return"/>
16730 </method>
16731
16732 <method name="assignMachine">
16733 <desc>
16734 Assigns the machine object associated with this direct-type
16735 session or informs the session that it will be a remote one
16736 (if @a machine == @c null).
16737
16738 <result name="VBOX_E_INVALID_VM_STATE">
16739 Session state prevents operation.
16740 </result>
16741 <result name="VBOX_E_INVALID_OBJECT_STATE">
16742 Session type prevents operation.
16743 </result>
16744
16745 </desc>
16746 <param name="machine" type="IMachine" dir="in"/>
16747 <param name="lockType" type="LockType" dir="in"/>
16748 </method>
16749
16750 <method name="assignRemoteMachine">
16751 <desc>
16752 Assigns the machine and the (remote) console object associated with
16753 this remote-type session.
16754
16755 <result name="VBOX_E_INVALID_VM_STATE">
16756 Session state prevents operation.
16757 </result>
16758
16759 </desc>
16760 <param name="machine" type="IMachine" dir="in"/>
16761 <param name="console" type="IConsole" dir="in"/>
16762 </method>
16763
16764 <method name="updateMachineState">
16765 <desc>
16766 Updates the machine state in the VM process.
16767 Must be called only in certain cases
16768 (see the method implementation).
16769
16770 <result name="VBOX_E_INVALID_VM_STATE">
16771 Session state prevents operation.
16772 </result>
16773 <result name="VBOX_E_INVALID_OBJECT_STATE">
16774 Session type prevents operation.
16775 </result>
16776
16777 </desc>
16778 <param name="aMachineState" type="MachineState" dir="in"/>
16779 </method>
16780
16781 <method name="uninitialize">
16782 <desc>
16783 Uninitializes (closes) this session. Used by VirtualBox to close
16784 the corresponding remote session when the direct session dies
16785 or gets closed.
16786
16787 <result name="VBOX_E_INVALID_VM_STATE">
16788 Session state prevents operation.
16789 </result>
16790
16791 </desc>
16792 </method>
16793
16794 <method name="onNetworkAdapterChange">
16795 <desc>
16796 Triggered when settings of a network adapter of the
16797 associated virtual machine have changed.
16798
16799 <result name="VBOX_E_INVALID_VM_STATE">
16800 Session state prevents operation.
16801 </result>
16802 <result name="VBOX_E_INVALID_OBJECT_STATE">
16803 Session type prevents operation.
16804 </result>
16805
16806 </desc>
16807 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
16808 <param name="changeAdapter" type="boolean" dir="in"/>
16809 </method>
16810
16811 <method name="onSerialPortChange">
16812 <desc>
16813 Triggered when settings of a serial port of the
16814 associated virtual machine have changed.
16815
16816 <result name="VBOX_E_INVALID_VM_STATE">
16817 Session state prevents operation.
16818 </result>
16819 <result name="VBOX_E_INVALID_OBJECT_STATE">
16820 Session type prevents operation.
16821 </result>
16822
16823 </desc>
16824 <param name="serialPort" type="ISerialPort" dir="in"/>
16825 </method>
16826
16827 <method name="onParallelPortChange">
16828 <desc>
16829 Triggered when settings of a parallel port of the
16830 associated virtual machine have changed.
16831
16832 <result name="VBOX_E_INVALID_VM_STATE">
16833 Session state prevents operation.
16834 </result>
16835 <result name="VBOX_E_INVALID_OBJECT_STATE">
16836 Session type prevents operation.
16837 </result>
16838
16839 </desc>
16840 <param name="parallelPort" type="IParallelPort" dir="in"/>
16841 </method>
16842
16843 <method name="onStorageControllerChange">
16844 <desc>
16845 Triggered when settings of a storage controller of the
16846 associated virtual machine have changed.
16847
16848 <result name="VBOX_E_INVALID_VM_STATE">
16849 Session state prevents operation.
16850 </result>
16851 <result name="VBOX_E_INVALID_OBJECT_STATE">
16852 Session type prevents operation.
16853 </result>
16854
16855 </desc>
16856 </method>
16857
16858 <method name="onMediumChange">
16859 <desc>
16860 Triggered when attached media of the
16861 associated virtual machine have changed.
16862
16863 <result name="VBOX_E_INVALID_VM_STATE">
16864 Session state prevents operation.
16865 </result>
16866 <result name="VBOX_E_INVALID_OBJECT_STATE">
16867 Session type prevents operation.
16868 </result>
16869
16870 </desc>
16871
16872 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
16873 <desc>The medium attachment which changed.</desc>
16874 </param>
16875 <param name="force" type="boolean" dir="in">
16876 <desc>If the medium change was forced.</desc>
16877 </param>
16878 </method>
16879
16880 <method name="onStorageDeviceChange">
16881 <desc>
16882 Triggered when attached storage devices of the
16883 associated virtual machine have changed.
16884
16885 <result name="VBOX_E_INVALID_VM_STATE">
16886 Session state prevents operation.
16887 </result>
16888 <result name="VBOX_E_INVALID_OBJECT_STATE">
16889 Session type prevents operation.
16890 </result>
16891
16892 </desc>
16893
16894 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
16895 <desc>The medium attachment which changed.</desc>
16896 </param>
16897 <param name="remove" type="boolean" dir="in">
16898 <desc>TRUE if the device is removed, FALSE if it was added.</desc>
16899 </param>
16900 </method>
16901
16902 <method name="onClipboardModeChange">
16903 <desc>
16904 Notification when the shared clipboard mode changes.
16905 </desc>
16906 <param name="clipboardMode" type="ClipboardMode" dir="in">
16907 <desc>The new shared clipboard mode.</desc>
16908 </param>
16909 </method>
16910
16911 <method name="onDragAndDropModeChange">
16912 <desc>
16913 Notification when the drag'n'drop mode changes.
16914 </desc>
16915 <param name="dragAndDropMode" type="DragAndDropMode" dir="in">
16916 <desc>The new mode for drag'n'drop.</desc>
16917 </param>
16918 </method>
16919
16920 <method name="onCPUChange">
16921 <desc>
16922 Notification when a CPU changes.
16923 </desc>
16924 <param name="cpu" type="unsigned long" dir="in">
16925 <desc>The CPU which changed</desc>
16926 </param>
16927 <param name="add" type="boolean" dir="in">
16928 <desc>Flag whether the CPU was added or removed</desc>
16929 </param>
16930 </method>
16931
16932 <method name="onCPUExecutionCapChange">
16933 <desc>
16934 Notification when the CPU execution cap changes.
16935 </desc>
16936 <param name="executionCap" type="unsigned long" dir="in">
16937 <desc>The new CPU execution cap value. (1-100)</desc>
16938 </param>
16939 </method>
16940
16941 <method name="onVRDEServerChange">
16942 <desc>
16943 Triggered when settings of the VRDE server object of the
16944 associated virtual machine have changed.
16945
16946 <result name="VBOX_E_INVALID_VM_STATE">
16947 Session state prevents operation.
16948 </result>
16949 <result name="VBOX_E_INVALID_OBJECT_STATE">
16950 Session type prevents operation.
16951 </result>
16952
16953 </desc>
16954 <param name="restart" type="boolean" dir="in">
16955 <desc>Flag whether the server must be restarted</desc>
16956 </param>
16957 </method>
16958
16959 <method name="onUSBControllerChange">
16960 <desc>
16961 Triggered when settings of the USB controller object of the
16962 associated virtual machine have changed.
16963
16964 <result name="VBOX_E_INVALID_VM_STATE">
16965 Session state prevents operation.
16966 </result>
16967 <result name="VBOX_E_INVALID_OBJECT_STATE">
16968 Session type prevents operation.
16969 </result>
16970
16971 </desc>
16972 </method>
16973
16974 <method name="onSharedFolderChange">
16975 <desc>
16976 Triggered when a permanent (global or machine) shared folder has been
16977 created or removed.
16978 <note>
16979 We don't pass shared folder parameters in this notification because
16980 the order in which parallel notifications are delivered is not defined,
16981 therefore it could happen that these parameters were outdated by the
16982 time of processing this notification.
16983 </note>
16984
16985 <result name="VBOX_E_INVALID_VM_STATE">
16986 Session state prevents operation.
16987 </result>
16988 <result name="VBOX_E_INVALID_OBJECT_STATE">
16989 Session type prevents operation.
16990 </result>
16991
16992 </desc>
16993 <param name="global" type="boolean" dir="in"/>
16994 </method>
16995
16996 <method name="onUSBDeviceAttach">
16997 <desc>
16998 Triggered when a request to capture a USB device (as a result
16999 of matched USB filters or direct call to
17000 <link to="IConsole::attachUSBDevice"/>) has completed.
17001 A @c null @a error object means success, otherwise it
17002 describes a failure.
17003
17004 <result name="VBOX_E_INVALID_VM_STATE">
17005 Session state prevents operation.
17006 </result>
17007 <result name="VBOX_E_INVALID_OBJECT_STATE">
17008 Session type prevents operation.
17009 </result>
17010
17011 </desc>
17012 <param name="device" type="IUSBDevice" dir="in"/>
17013 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
17014 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
17015 </method>
17016
17017 <method name="onUSBDeviceDetach">
17018 <desc>
17019 Triggered when a request to release the USB device (as a result
17020 of machine termination or direct call to
17021 <link to="IConsole::detachUSBDevice"/>) has completed.
17022 A @c null @a error object means success, otherwise it
17023 describes a failure.
17024
17025 <result name="VBOX_E_INVALID_VM_STATE">
17026 Session state prevents operation.
17027 </result>
17028 <result name="VBOX_E_INVALID_OBJECT_STATE">
17029 Session type prevents operation.
17030 </result>
17031
17032 </desc>
17033 <param name="id" type="uuid" mod="string" dir="in"/>
17034 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
17035 </method>
17036
17037 <method name="onShowWindow">
17038 <desc>
17039 Called by <link to="IMachine::canShowConsoleWindow"/> and by
17040 <link to="IMachine::showConsoleWindow"/> in order to notify
17041 console listeners
17042 <link to="ICanShowWindowEvent"/>
17043 and <link to="IShowWindowEvent"/>.
17044
17045 <result name="VBOX_E_INVALID_OBJECT_STATE">
17046 Session type prevents operation.
17047 </result>
17048
17049 </desc>
17050 <param name="check" type="boolean" dir="in"/>
17051 <param name="canShow" type="boolean" dir="out"/>
17052 <param name="winId" type="long long" dir="out"/>
17053 </method>
17054
17055 <method name="onBandwidthGroupChange">
17056 <desc>
17057 Notification when one of the bandwidth groups change.
17058 </desc>
17059 <param name="bandwidthGroup" type="IBandwidthGroup" dir="in">
17060 <desc>The bandwidth group which changed.</desc>
17061 </param>
17062 </method>
17063
17064 <method name="accessGuestProperty">
17065 <desc>
17066 Called by <link to="IMachine::getGuestProperty"/> and by
17067 <link to="IMachine::setGuestProperty"/> in order to read and
17068 modify guest properties.
17069
17070 <result name="VBOX_E_INVALID_VM_STATE">
17071 Machine session is not open.
17072 </result>
17073 <result name="VBOX_E_INVALID_OBJECT_STATE">
17074 Session type is not direct.
17075 </result>
17076
17077 </desc>
17078 <param name="name" type="wstring" dir="in"/>
17079 <param name="value" type="wstring" dir="in"/>
17080 <param name="flags" type="wstring" dir="in"/>
17081 <param name="isSetter" type="boolean" dir="in"/>
17082 <param name="retValue" type="wstring" dir="out"/>
17083 <param name="retTimestamp" type="long long" dir="out"/>
17084 <param name="retFlags" type="wstring" dir="out"/>
17085 </method>
17086
17087 <method name="enumerateGuestProperties" const="yes">
17088 <desc>
17089 Return a list of the guest properties matching a set of patterns along
17090 with their values, time stamps and flags.
17091
17092 <result name="VBOX_E_INVALID_VM_STATE">
17093 Machine session is not open.
17094 </result>
17095 <result name="VBOX_E_INVALID_OBJECT_STATE">
17096 Session type is not direct.
17097 </result>
17098
17099 </desc>
17100 <param name="patterns" type="wstring" dir="in">
17101 <desc>
17102 The patterns to match the properties against as a comma-separated
17103 string. If this is empty, all properties currently set will be
17104 returned.
17105 </desc>
17106 </param>
17107 <param name="key" type="wstring" dir="out" safearray="yes">
17108 <desc>
17109 The key names of the properties returned.
17110 </desc>
17111 </param>
17112 <param name="value" type="wstring" dir="out" safearray="yes">
17113 <desc>
17114 The values of the properties returned. The array entries match the
17115 corresponding entries in the @a key array.
17116 </desc>
17117 </param>
17118 <param name="timestamp" type="long long" dir="out" safearray="yes">
17119 <desc>
17120 The time stamps of the properties returned. The array entries match
17121 the corresponding entries in the @a key array.
17122 </desc>
17123 </param>
17124 <param name="flags" type="wstring" dir="out" safearray="yes">
17125 <desc>
17126 The flags of the properties returned. The array entries match the
17127 corresponding entries in the @a key array.
17128 </desc>
17129 </param>
17130 </method>
17131
17132 <method name="onlineMergeMedium">
17133 <desc>
17134 Triggers online merging of a hard disk. Used internally when deleting
17135 a snapshot while a VM referring to the same hard disk chain is running.
17136
17137 <result name="VBOX_E_INVALID_VM_STATE">
17138 Machine session is not open.
17139 </result>
17140 <result name="VBOX_E_INVALID_OBJECT_STATE">
17141 Session type is not direct.
17142 </result>
17143
17144 </desc>
17145 <param name="mediumAttachment" type="IMediumAttachment" dir="in">
17146 <desc>The medium attachment to identify the medium chain.</desc>
17147 </param>
17148 <param name="sourceIdx" type="unsigned long" dir="in">
17149 <desc>The index of the source image in the chain.
17150 Redundant, but drastically reduces IPC.</desc>
17151 </param>
17152 <param name="targetIdx" type="unsigned long" dir="in">
17153 <desc>The index of the target image in the chain.
17154 Redundant, but drastically reduces IPC.</desc>
17155 </param>
17156 <param name="source" type="IMedium" dir="in">
17157 <desc>Merge source medium.</desc>
17158 </param>
17159 <param name="target" type="IMedium" dir="in">
17160 <desc>Merge target medium.</desc>
17161 </param>
17162 <param name="mergeForward" type="boolean" dir="in">
17163 <desc>Merge direction.</desc>
17164 </param>
17165 <param name="parentForTarget" type="IMedium" dir="in">
17166 <desc>For forward merges: new parent for target medium.</desc>
17167 </param>
17168 <param name="childrenToReparent" type="IMedium" safearray="yes" dir="in">
17169 <desc>For backward merges: list of media which need their parent UUID
17170 updated.</desc>
17171 </param>
17172 <param name="progress" type="IProgress" dir="in">
17173 <desc>
17174 Progress object for this operation.
17175 </desc>
17176 </param>
17177 </method>
17178
17179 <method name="enableVMMStatistics">
17180 <desc>
17181 Enables or disables collection of VMM RAM statistics.
17182
17183 <result name="VBOX_E_INVALID_VM_STATE">
17184 Machine session is not open.
17185 </result>
17186 <result name="VBOX_E_INVALID_OBJECT_STATE">
17187 Session type is not direct.
17188 </result>
17189
17190 </desc>
17191 <param name="enable" type="boolean" dir="in">
17192 <desc>True enables statistics collection.</desc>
17193 </param>
17194 </method>
17195
17196 </interface>
17197
17198 <interface
17199 name="ISession" extends="$unknown"
17200 uuid="12F4DCDB-12B2-4EC1-B7CD-DDD9F6C5BF4D"
17201 wsmap="managed"
17202 >
17203 <desc>
17204 The ISession interface represents a client process and allows for locking
17205 virtual machines (represented by IMachine objects) to prevent conflicting
17206 changes to the machine.
17207
17208 Any caller wishing to manipulate a virtual machine needs to create a session
17209 object first, which lives in its own process space. Such session objects are
17210 then associated with <link to="IMachine" /> objects living in the VirtualBox
17211 server process to coordinate such changes.
17212
17213 There are two typical scenarios in which sessions are used:
17214
17215 <ul>
17216 <li>To alter machine settings or control a running virtual machine, one
17217 needs to lock a machine for a given session (client process) by calling
17218 <link to="IMachine::lockMachine"/>.
17219
17220 Whereas multiple sessions may control a running virtual machine, only
17221 one process can obtain a write lock on the machine to prevent conflicting
17222 changes. A write lock is also needed if a process wants to actually run a
17223 virtual machine in its own context, such as the VirtualBox GUI or
17224 VBoxHeadless front-ends. They must also lock a machine for their own
17225 sessions before they are allowed to power up the virtual machine.
17226
17227 As a result, no machine settings can be altered while another process is
17228 already using it, either because that process is modifying machine settings
17229 or because the machine is running.
17230 </li>
17231 <li>
17232 To start a VM using one of the existing VirtualBox front-ends (e.g. the
17233 VirtualBox GUI or VBoxHeadless), one would use
17234 <link to="IMachine::launchVMProcess"/>, which also takes a session object
17235 as its first parameter. This session then identifies the caller and lets the
17236 caller control the started machine (for example, pause machine execution or
17237 power it down) as well as be notified about machine execution state changes.
17238 </li>
17239 </ul>
17240
17241 How sessions objects are created in a client process depends on whether you use
17242 the Main API via COM or via the webservice:
17243
17244 <ul>
17245 <li>When using the COM API directly, an object of the Session class from the
17246 VirtualBox type library needs to be created. In regular COM C++ client code,
17247 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
17248 This object will then act as a local session object in further calls to open
17249 a session.
17250 </li>
17251
17252 <li>In the webservice, the session manager (IWebsessionManager) instead creates
17253 a session object automatically whenever <link to="IWebsessionManager::logon" />
17254 is called. A managed object reference to that session object can be retrieved by
17255 calling <link to="IWebsessionManager::getSessionObject" />.
17256 </li>
17257 </ul>
17258 </desc>
17259
17260 <attribute name="state" type="SessionState" readonly="yes">
17261 <desc>Current state of this session.</desc>
17262 </attribute>
17263
17264 <attribute name="type" type="SessionType" readonly="yes">
17265 <desc>
17266 Type of this session. The value of this attribute is valid only
17267 if the session currently has a machine locked (i.e. its
17268 <link to="#state" /> is Locked), otherwise an error will be returned.
17269 </desc>
17270 </attribute>
17271
17272 <attribute name="machine" type="IMachine" readonly="yes">
17273 <desc>Machine object associated with this session.</desc>
17274 </attribute>
17275
17276 <attribute name="console" type="IConsole" readonly="yes">
17277 <desc>Console object associated with this session.</desc>
17278 </attribute>
17279
17280 <method name="unlockMachine">
17281 <desc>
17282 Unlocks a machine that was previously locked for the current session.
17283
17284 Calling this method is required every time a machine has been locked
17285 for a particular session using the <link to="IMachine::launchVMProcess" />
17286 or <link to="IMachine::lockMachine" /> calls. Otherwise the state of
17287 the machine will be set to <link to="MachineState_Aborted" /> on the
17288 server, and changes made to the machine settings will be lost.
17289
17290 Generally, it is recommended to unlock all machines explicitly
17291 before terminating the application (regardless of the reason for
17292 the termination).
17293
17294 <note>
17295 Do not expect the session state (<link to="ISession::state" />
17296 to return to "Unlocked" immediately after you invoke this method,
17297 particularly if you have started a new VM process. The session
17298 state will automatically return to "Unlocked" once the VM is no
17299 longer executing, which can of course take a very long time.
17300 </note>
17301
17302 <result name="E_UNEXPECTED">
17303 Session is not locked.
17304 </result>
17305
17306 </desc>
17307 </method>
17308
17309 </interface>
17310
17311 <!--
17312 // IStorageController
17313 /////////////////////////////////////////////////////////////////////////
17314 -->
17315
17316 <enum
17317 name="StorageBus"
17318 uuid="eee67ab3-668d-4ef5-91e0-7025fe4a0d7a"
17319 >
17320 <desc>
17321 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy);
17322 see <link to="IStorageController::bus" />.
17323 </desc>
17324 <const name="Null" value="0">
17325 <desc>@c null value. Never used by the API.</desc>
17326 </const>
17327 <const name="IDE" value="1"/>
17328 <const name="SATA" value="2"/>
17329 <const name="SCSI" value="3"/>
17330 <const name="Floppy" value="4"/>
17331 <const name="SAS" value="5"/>
17332 </enum>
17333
17334 <enum
17335 name="StorageControllerType"
17336 uuid="8a412b8a-f43e-4456-bd37-b474f0879a58"
17337 >
17338 <desc>
17339 The exact variant of storage controller hardware presented
17340 to the guest; see <link to="IStorageController::controllerType" />.
17341 </desc>
17342
17343 <const name="Null" value="0">
17344 <desc>@c null value. Never used by the API.</desc>
17345 </const>
17346 <const name="LsiLogic" value="1">
17347 <desc>A SCSI controller of the LsiLogic variant.</desc>
17348 </const>
17349 <const name="BusLogic" value="2">
17350 <desc>A SCSI controller of the BusLogic variant.</desc>
17351 </const>
17352 <const name="IntelAhci" value="3">
17353 <desc>An Intel AHCI SATA controller; this is the only variant for SATA.</desc>
17354 </const>
17355 <const name="PIIX3" value="4">
17356 <desc>An IDE controller of the PIIX3 variant.</desc>
17357 </const>
17358 <const name="PIIX4" value="5">
17359 <desc>An IDE controller of the PIIX4 variant.</desc>
17360 </const>
17361 <const name="ICH6" value="6">
17362 <desc>An IDE controller of the ICH6 variant.</desc>
17363 </const>
17364 <const name="I82078" value="7">
17365 <desc>A floppy disk controller; this is the only variant for floppy drives.</desc>
17366 </const>
17367 <const name="LsiLogicSas" value="8">
17368 <desc>A variant of the LsiLogic controller using SAS.</desc>
17369 </const>
17370 </enum>
17371
17372 <enum
17373 name="ChipsetType"
17374 uuid="8b4096a8-a7c3-4d3b-bbb1-05a0a51ec394"
17375 >
17376 <desc>
17377 Type of emulated chipset (mostly southbridge).
17378 </desc>
17379
17380 <const name="Null" value="0">
17381 <desc>@c null value. Never used by the API.</desc>
17382 </const>
17383 <const name="PIIX3" value="1">
17384 <desc>A PIIX3 (PCI IDE ISA Xcelerator) chipset.</desc>
17385 </const>
17386 <const name="ICH9" value="2">
17387 <desc>A ICH9 (I/O Controller Hub) chipset.</desc>
17388 </const>
17389 </enum>
17390
17391 <interface
17392 name="IStorageController" extends="$unknown"
17393 uuid="a1556333-09b6-46d9-bfb7-fc239b7fbe1e"
17394 wsmap="managed"
17395 >
17396 <desc>
17397 Represents a storage controller that is attached to a virtual machine
17398 (<link to="IMachine" />). Just as drives (hard disks, DVDs, FDs) are
17399 attached to storage controllers in a real computer, virtual drives
17400 (represented by <link to="IMediumAttachment" />) are attached to virtual
17401 storage controllers, represented by this interface.
17402
17403 As opposed to physical hardware, VirtualBox has a very generic concept
17404 of a storage controller, and for purposes of the Main API, all virtual
17405 storage is attached to virtual machines via instances of this interface.
17406 There are five types of such virtual storage controllers: IDE, SCSI, SATA,
17407 SAS and Floppy (see <link to="#bus" />). Depending on which of these four
17408 is used, certain sub-types may be available and can be selected in
17409 <link to="#controllerType" />.
17410
17411 Depending on these settings, the guest operating system might see
17412 significantly different virtual hardware.
17413 </desc>
17414
17415 <attribute name="name" type="wstring" readonly="yes">
17416 <desc>
17417 Name of the storage controller, as originally specified with
17418 <link to="IMachine::addStorageController" />. This then uniquely
17419 identifies this controller with other method calls such as
17420 <link to="IMachine::attachDevice" /> and <link to="IMachine::mountMedium" />.
17421 </desc>
17422 </attribute>
17423
17424 <attribute name="maxDevicesPerPortCount" type="unsigned long" readonly="yes">
17425 <desc>
17426 Maximum number of devices which can be attached to one port.
17427 </desc>
17428 </attribute>
17429
17430 <attribute name="minPortCount" type="unsigned long" readonly="yes">
17431 <desc>
17432 Minimum number of ports that <link to="IStorageController::portCount"/> can be set to.
17433 </desc>
17434 </attribute>
17435
17436 <attribute name="maxPortCount" type="unsigned long" readonly="yes">
17437 <desc>
17438 Maximum number of ports that <link to="IStorageController::portCount"/> can be set to.
17439 </desc>
17440 </attribute>
17441
17442 <attribute name="instance" type="unsigned long">
17443 <desc>
17444 The instance number of the device in the running VM.
17445 </desc>
17446 </attribute>
17447
17448 <attribute name="portCount" type="unsigned long">
17449 <desc>
17450 The number of currently usable ports on the controller.
17451 The minimum and maximum number of ports for one controller are
17452 stored in <link to="IStorageController::minPortCount"/>
17453 and <link to="IStorageController::maxPortCount"/>.
17454 </desc>
17455 </attribute>
17456
17457 <attribute name="bus" type="StorageBus" readonly="yes">
17458 <desc>
17459 The bus type of the storage controller (IDE, SATA, SCSI, SAS or Floppy).
17460 </desc>
17461 </attribute>
17462
17463 <attribute name="controllerType" type="StorageControllerType">
17464 <desc>
17465 The exact variant of storage controller hardware presented
17466 to the guest.
17467 Depending on this value, VirtualBox will provide a different
17468 virtual storage controller hardware to the guest.
17469 For SATA, SAS and floppy controllers, only one variant is
17470 available, but for IDE and SCSI, there are several.
17471
17472 For SCSI controllers, the default type is LsiLogic.
17473 </desc>
17474 </attribute>
17475
17476 <attribute name="useHostIOCache" type="boolean">
17477 <desc>
17478 If true, the storage controller emulation will use a dedicated I/O thread, enable the host I/O
17479 caches and use synchronous file APIs on the host. This was the only option in the API before
17480 VirtualBox 3.2 and is still the default for IDE controllers.
17481
17482 If false, the host I/O cache will be disabled for image files attached to this storage controller.
17483 Instead, the storage controller emulation will use asynchronous I/O APIs on the host. This makes
17484 it possible to turn off the host I/O caches because the emulation can handle unaligned access to
17485 the file. This should be used on OS X and Linux hosts if a high I/O load is expected or many
17486 virtual machines are running at the same time to prevent I/O cache related hangs.
17487 This option new with the API of VirtualBox 3.2 and is now the default for non-IDE storage controllers.
17488 </desc>
17489 </attribute>
17490
17491 <attribute name="bootable" type="boolean" readonly="yes">
17492 <desc>
17493 Returns whether it is possible to boot from disks attached to this controller.
17494 </desc>
17495 </attribute>
17496
17497 <method name="getIDEEmulationPort">
17498 <desc>
17499 Gets the corresponding port number which is emulated as an IDE device.
17500 Works only with SATA controllers.
17501
17502 <result name="E_INVALIDARG">
17503 The @a devicePosition is not in the range 0 to 3.
17504 </result>
17505 <result name="E_NOTIMPL">
17506 The storage controller type is not SATAIntelAhci.
17507 </result>
17508
17509 </desc>
17510 <param name="devicePosition" type="long" dir="in"/>
17511 <param name="portNumber" type="long" dir="return"/>
17512 </method>
17513
17514 <method name="setIDEEmulationPort">
17515 <desc>
17516 Sets the port number which is emulated as an IDE device.
17517 Works only with SATA controllers.
17518
17519 <result name="E_INVALIDARG">
17520 The @a devicePosition is not in the range 0 to 3 or the
17521 @a portNumber is not in the range 0 to 29.
17522 </result>
17523 <result name="E_NOTIMPL">
17524 The storage controller type is not SATAIntelAhci.
17525 </result>
17526
17527 </desc>
17528 <param name="devicePosition" type="long" dir="in"/>
17529 <param name="portNumber" type="long" dir="in"/>
17530 </method>
17531
17532 </interface>
17533
17534<if target="wsdl">
17535
17536 <!--
17537 // IManagedObjectRef
17538 /////////////////////////////////////////////////////////////////////////
17539 -->
17540
17541 <interface
17542 name="IManagedObjectRef" extends="$unknown"
17543 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
17544 internal="yes"
17545 wsmap="managed"
17546 wscpp="hardcoded"
17547 >
17548 <desc>
17549 Managed object reference.
17550
17551 Only within the webservice, a managed object reference (which is really
17552 an opaque number) allows a webservice client to address an object
17553 that lives in the address space of the webservice server.
17554
17555 Behind each managed object reference, there is a COM object that lives
17556 in the webservice server's address space. The COM object is not freed
17557 until the managed object reference is released, either by an explicit
17558 call to <link to="IManagedObjectRef::release" /> or by logging off from
17559 the webservice (<link to="IWebsessionManager::logoff" />), which releases
17560 all objects created during the webservice session.
17561
17562 Whenever a method call of the VirtualBox API returns a COM object, the
17563 webservice representation of that method will instead return a
17564 managed object reference, which can then be used to invoke methods
17565 on that object.
17566 </desc>
17567
17568 <method name="getInterfaceName">
17569 <desc>
17570 Returns the name of the interface that this managed object represents,
17571 for example, "IMachine", as a string.
17572 </desc>
17573 <param name="return" type="wstring" dir="return"/>
17574 </method>
17575
17576 <method name="release">
17577 <desc>
17578 Releases this managed object reference and frees the resources that
17579 were allocated for it in the webservice server process. After calling
17580 this method, the identifier of the reference can no longer be used.
17581 </desc>
17582 </method>
17583
17584 </interface>
17585
17586 <!--
17587 // IWebsessionManager
17588 /////////////////////////////////////////////////////////////////////////
17589 -->
17590
17591 <interface
17592 name="IWebsessionManager" extends="$unknown"
17593 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
17594 internal="yes"
17595 wsmap="global"
17596 wscpp="hardcoded"
17597 >
17598 <desc>
17599 Websession manager. This provides essential services
17600 to webservice clients.
17601 </desc>
17602 <method name="logon">
17603 <desc>
17604 Logs a new client onto the webservice and returns a managed object reference to
17605 the IVirtualBox instance, which the client can then use as a basis to further
17606 queries, since all calls to the VirtualBox API are based on the IVirtualBox
17607 interface, in one way or the other.
17608 </desc>
17609 <param name="username" type="wstring" dir="in"/>
17610 <param name="password" type="wstring" dir="in"/>
17611 <param name="return" type="IVirtualBox" dir="return"/>
17612 </method>
17613
17614 <method name="getSessionObject">
17615 <desc>
17616 Returns a managed object reference to the internal ISession object that was created
17617 for this web service session when the client logged on.
17618
17619 <see><link to="ISession"/></see>
17620 </desc>
17621 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
17622 <param name="return" type="ISession" dir="return"/>
17623 </method>
17624
17625 <method name="logoff">
17626 <desc>
17627 Logs off the client who has previously logged on with <link to="IWebsessionManager::logon" />
17628 and destroys all resources associated with the session (most importantly, all
17629 managed objects created in the server while the session was active).
17630 </desc>
17631 <param name="refIVirtualBox" type="IVirtualBox" dir="in"/>
17632 </method>
17633
17634 </interface>
17635
17636</if>
17637
17638 <!--
17639 // IPerformanceCollector & friends
17640 /////////////////////////////////////////////////////////////////////////
17641 -->
17642
17643 <interface
17644 name="IPerformanceMetric" extends="$unknown"
17645 uuid="2a1a60ae-9345-4019-ad53-d34ba41cbfe9" wsmap="managed"
17646 >
17647 <desc>
17648 The IPerformanceMetric interface represents parameters of the given
17649 performance metric.
17650 </desc>
17651
17652 <attribute name="metricName" type="wstring" readonly="yes">
17653 <desc>
17654 Name of the metric.
17655 </desc>
17656 </attribute>
17657
17658 <attribute name="object" type="$unknown" readonly="yes">
17659 <desc>
17660 Object this metric belongs to.
17661 </desc>
17662 </attribute>
17663
17664 <attribute name="description" type="wstring" readonly="yes">
17665 <desc>
17666 Textual description of the metric.
17667 </desc>
17668 </attribute>
17669
17670 <attribute name="period" type="unsigned long" readonly="yes">
17671 <desc>
17672 Time interval between samples, measured in seconds.
17673 </desc>
17674 </attribute>
17675
17676 <attribute name="count" type="unsigned long" readonly="yes">
17677 <desc>
17678 Number of recent samples retained by the performance collector for this
17679 metric.
17680
17681 When the collected sample count exceeds this number, older samples
17682 are discarded.
17683 </desc>
17684 </attribute>
17685
17686 <attribute name="unit" type="wstring" readonly="yes">
17687 <desc>
17688 Unit of measurement.
17689 </desc>
17690 </attribute>
17691
17692 <attribute name="minimumValue" type="long" readonly="yes">
17693 <desc>
17694 Minimum possible value of this metric.
17695 </desc>
17696 </attribute>
17697
17698 <attribute name="maximumValue" type="long" readonly="yes">
17699 <desc>
17700 Maximum possible value of this metric.
17701 </desc>
17702 </attribute>
17703 </interface>
17704
17705 <interface
17706 name="IPerformanceCollector" extends="$unknown"
17707 uuid="e22e1acb-ac4a-43bb-a31c-17321659b0c6"
17708 wsmap="managed"
17709 >
17710 <desc>
17711 The IPerformanceCollector interface represents a service that collects
17712 and stores performance metrics data.
17713
17714 Performance metrics are associated with objects of interfaces like IHost
17715 and IMachine. Each object has a distinct set of performance metrics. The
17716 set can be obtained with <link to="IPerformanceCollector::getMetrics"/>.
17717
17718 Metric data is collected at the specified intervals and is retained
17719 internally. The interval and the number of retained samples can be set
17720 with <link to="IPerformanceCollector::setupMetrics" />. Both metric data
17721 and collection settings are not persistent, they are discarded as soon as
17722 VBoxSVC process terminates. Moreover, metric settings and data associated
17723 with a particular VM only exist while VM is running. They disappear as
17724 soon as VM shuts down. It is not possible to set up metrics for machines
17725 that are powered off. One needs to start VM first, then set up metric
17726 collection parameters.
17727
17728 Metrics are organized hierarchically, with each level separated by a
17729 slash (/) character. Generally, the scheme for metric names is like this:
17730
17731 <tt>Category/Metric[/SubMetric][:aggregation]</tt>
17732
17733 "Category/Metric" together form the base metric name. A base metric is
17734 the smallest unit for which a sampling interval and the number of
17735 retained samples can be set. Only base metrics can be enabled and
17736 disabled. All sub-metrics are collected when their base metric is
17737 collected. Collected values for any set of sub-metrics can be queried
17738 with <link to="IPerformanceCollector::queryMetricsData" />.
17739
17740 For example "CPU/Load/User:avg" metric name stands for the "CPU"
17741 category, "Load" metric, "User" submetric, "average" aggregate. An
17742 aggregate function is computed over all retained data. Valid aggregate
17743 functions are:
17744
17745 <ul>
17746 <li>avg -- average</li>
17747 <li>min -- minimum</li>
17748 <li>max -- maximum</li>
17749 </ul>
17750
17751 When setting up metric parameters, querying metric data, enabling or
17752 disabling metrics wildcards can be used in metric names to specify a
17753 subset of metrics. For example, to select all CPU-related metrics
17754 use <tt>CPU/*</tt>, all averages can be queried using <tt>*:avg</tt> and
17755 so on. To query metric values without aggregates <tt>*:</tt> can be used.
17756
17757 The valid names for base metrics are:
17758
17759 <ul>
17760 <li>CPU/Load</li>
17761 <li>CPU/MHz</li>
17762 <li>RAM/Usage</li>
17763 <li>RAM/VMM</li>
17764 </ul>
17765
17766 The general sequence for collecting and retrieving the metrics is:
17767 <ul>
17768 <li>
17769 Obtain an instance of IPerformanceCollector with
17770 <link to="IVirtualBox::performanceCollector" />
17771 </li>
17772 <li>
17773 Allocate and populate an array with references to objects the metrics
17774 will be collected for. Use references to IHost and IMachine objects.
17775 </li>
17776 <li>
17777 Allocate and populate an array with base metric names the data will
17778 be collected for.
17779 </li>
17780 <li>
17781 Call <link to="IPerformanceCollector::setupMetrics" />. From now on
17782 the metric data will be collected and stored.
17783 </li>
17784 <li>
17785 Wait for the data to get collected.
17786 </li>
17787 <li>
17788 Allocate and populate an array with references to objects the metric
17789 values will be queried for. You can re-use the object array used for
17790 setting base metrics.
17791 </li>
17792 <li>
17793 Allocate and populate an array with metric names the data will be
17794 collected for. Note that metric names differ from base metric names.
17795 </li>
17796 <li>
17797 Call <link to="IPerformanceCollector::queryMetricsData" />. The data
17798 that have been collected so far are returned. Note that the values
17799 are still retained internally and data collection continues.
17800 </li>
17801 </ul>
17802
17803 For an example of usage refer to the following files in VirtualBox SDK:
17804 <ul>
17805 <li>
17806 Java: <tt>bindings/webservice/java/jax-ws/samples/metrictest.java</tt>
17807 </li>
17808 <li>
17809 Python: <tt>bindings/xpcom/python/sample/shellcommon.py</tt>
17810 </li>
17811 </ul>
17812 </desc>
17813
17814 <attribute name="metricNames" type="wstring" readonly="yes" safearray="yes">
17815 <desc>
17816 Array of unique names of metrics.
17817
17818 This array represents all metrics supported by the performance
17819 collector. Individual objects do not necessarily support all of them.
17820 <link to="IPerformanceCollector::getMetrics"/> can be used to get the
17821 list of supported metrics for a particular object.
17822 </desc>
17823 </attribute>
17824
17825 <method name="getMetrics">
17826 <desc>
17827 Returns parameters of specified metrics for a set of objects.
17828 <note>
17829 @c Null metrics array means all metrics. @c Null object array means
17830 all existing objects.
17831 </note>
17832 </desc>
17833 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17834 <desc>
17835 Metric name filter. Currently, only a comma-separated list of metrics
17836 is supported.
17837 </desc>
17838 </param>
17839 <param name="objects" type="$unknown" dir="in" safearray="yes">
17840 <desc>
17841 Set of objects to return metric parameters for.
17842 </desc>
17843 </param>
17844 <param name="metrics" type="IPerformanceMetric" dir="return" safearray="yes">
17845 <desc>
17846 Array of returned metric parameters.
17847 </desc>
17848 </param>
17849 </method>
17850
17851 <method name="setupMetrics">
17852 <desc>
17853 Sets parameters of specified base metrics for a set of objects. Returns
17854 an array of <link to="IPerformanceMetric" /> describing the metrics
17855 have been affected.
17856 <note>
17857 @c Null or empty metric name array means all metrics. @c Null or
17858 empty object array means all existing objects. If metric name array
17859 contains a single element and object array contains many, the single
17860 metric name array element is applied to each object array element to
17861 form metric/object pairs.
17862 </note>
17863 </desc>
17864 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17865 <desc>
17866 Metric name filter. Comma-separated list of metrics with wildcard
17867 support.
17868 </desc>
17869 </param>
17870 <param name="objects" type="$unknown" dir="in" safearray="yes">
17871 <desc>
17872 Set of objects to setup metric parameters for.
17873 </desc>
17874 </param>
17875 <param name="period" type="unsigned long" dir="in">
17876 <desc>
17877 Time interval in seconds between two consecutive samples of
17878 performance data.
17879 </desc>
17880 </param>
17881 <param name="count" type="unsigned long" dir="in">
17882 <desc>
17883 Number of samples to retain in performance data history. Older
17884 samples get discarded.
17885 </desc>
17886 </param>
17887 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17888 <desc>
17889 Array of metrics that have been modified by the call to this method.
17890 </desc>
17891 </param>
17892 </method>
17893
17894 <method name="enableMetrics">
17895 <desc>
17896 Turns on collecting specified base metrics. Returns an array of
17897 <link to="IPerformanceMetric" /> describing the metrics have been
17898 affected.
17899 <note>
17900 @c Null or empty metric name array means all metrics. @c Null or
17901 empty object array means all existing objects. If metric name array
17902 contains a single element and object array contains many, the single
17903 metric name array element is applied to each object array element to
17904 form metric/object pairs.
17905 </note>
17906 </desc>
17907 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17908 <desc>
17909 Metric name filter. Comma-separated list of metrics with wildcard
17910 support.
17911 </desc>
17912 </param>
17913 <param name="objects" type="$unknown" dir="in" safearray="yes">
17914 <desc>
17915 Set of objects to enable metrics for.
17916 </desc>
17917 </param>
17918 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17919 <desc>
17920 Array of metrics that have been modified by the call to this method.
17921 </desc>
17922 </param>
17923 </method>
17924
17925 <method name="disableMetrics">
17926 <desc>
17927 Turns off collecting specified base metrics. Returns an array of
17928 <link to="IPerformanceMetric" /> describing the metrics have been
17929 affected.
17930 <note>
17931 @c Null or empty metric name array means all metrics. @c Null or
17932 empty object array means all existing objects. If metric name array
17933 contains a single element and object array contains many, the single
17934 metric name array element is applied to each object array element to
17935 form metric/object pairs.
17936 </note>
17937 </desc>
17938 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17939 <desc>
17940 Metric name filter. Comma-separated list of metrics with wildcard
17941 support.
17942 </desc>
17943 </param>
17944 <param name="objects" type="$unknown" dir="in" safearray="yes">
17945 <desc>
17946 Set of objects to disable metrics for.
17947 </desc>
17948 </param>
17949 <param name="affectedMetrics" type="IPerformanceMetric" dir="return" safearray="yes">
17950 <desc>
17951 Array of metrics that have been modified by the call to this method.
17952 </desc>
17953 </param>
17954 </method>
17955
17956 <method name="queryMetricsData">
17957 <desc>
17958 Queries collected metrics data for a set of objects.
17959
17960 The data itself and related metric information are returned in seven
17961 parallel and one flattened array of arrays. Elements of
17962 <tt>returnMetricNames, returnObjects, returnUnits, returnScales,
17963 returnSequenceNumbers, returnDataIndices and returnDataLengths</tt> with
17964 the same index describe one set of values corresponding to a single
17965 metric.
17966
17967 The <tt>returnData</tt> parameter is a flattened array of arrays. Each
17968 start and length of a sub-array is indicated by
17969 <tt>returnDataIndices</tt> and <tt>returnDataLengths</tt>. The first
17970 value for metric <tt>metricNames[i]</tt> is at
17971 <tt>returnData[returnIndices[i]]</tt>.
17972
17973 <note>
17974 @c Null or empty metric name array means all metrics. @c Null or
17975 empty object array means all existing objects. If metric name array
17976 contains a single element and object array contains many, the single
17977 metric name array element is applied to each object array element to
17978 form metric/object pairs.
17979 </note>
17980 <note>
17981 Data collection continues behind the scenes after call to @c
17982 queryMetricsData. The return data can be seen as the snapshot of the
17983 current state at the time of @c queryMetricsData call. The internally
17984 kept metric values are not cleared by the call. This makes possible
17985 querying different subsets of metrics or aggregates with subsequent
17986 calls. If periodic querying is needed it is highly suggested to query
17987 the values with @c interval*count period to avoid confusion. This way
17988 a completely new set of data values will be provided by each query.
17989 </note>
17990 </desc>
17991 <param name="metricNames" type="wstring" dir="in" safearray="yes">
17992 <desc>
17993 Metric name filter. Comma-separated list of metrics with wildcard
17994 support.
17995 </desc>
17996 </param>
17997 <param name="objects" type="$unknown" dir="in" safearray="yes">
17998 <desc>
17999 Set of objects to query metrics for.
18000 </desc>
18001 </param>
18002 <param name="returnMetricNames" type="wstring" dir="out" safearray="yes">
18003 <desc>
18004 Names of metrics returned in @c returnData.
18005 </desc>
18006 </param>
18007 <param name="returnObjects" type="$unknown" dir="out" safearray="yes">
18008 <desc>
18009 Objects associated with metrics returned in @c returnData.
18010 </desc>
18011 </param>
18012 <param name="returnUnits" type="wstring" dir="out" safearray="yes">
18013 <desc>
18014 Units of measurement for each returned metric.
18015 </desc>
18016 </param>
18017 <param name="returnScales" type="unsigned long" dir="out" safearray="yes">
18018 <desc>
18019 Divisor that should be applied to return values in order to get
18020 floating point values. For example:
18021 <tt>(double)returnData[returnDataIndices[0]+i] / returnScales[0]</tt>
18022 will retrieve the floating point value of i-th sample of the first
18023 metric.
18024 </desc>
18025 </param>
18026 <param name="returnSequenceNumbers" type="unsigned long" dir="out" safearray="yes">
18027 <desc>
18028 Sequence numbers of the first elements of value sequences of
18029 particular metrics returned in @c returnData. For aggregate metrics
18030 it is the sequence number of the sample the aggregate started
18031 calculation from.
18032 </desc>
18033 </param>
18034 <param name="returnDataIndices" type="unsigned long" dir="out" safearray="yes">
18035 <desc>
18036 Indices of the first elements of value sequences of particular
18037 metrics returned in @c returnData.
18038 </desc>
18039 </param>
18040 <param name="returnDataLengths" type="unsigned long" dir="out" safearray="yes">
18041 <desc>
18042 Lengths of value sequences of particular metrics.
18043 </desc>
18044 </param>
18045 <param name="returnData" type="long" dir="return" safearray="yes">
18046 <desc>
18047 Flattened array of all metric data containing sequences of values for
18048 each metric.
18049 </desc>
18050 </param>
18051 </method>
18052
18053 </interface>
18054
18055 <enum
18056 name="NATAliasMode"
18057 uuid="67772168-50d9-11df-9669-7fb714ee4fa1"
18058 >
18059 <desc></desc>
18060 <const name="AliasLog" value="0x1">
18061 <desc></desc>
18062 </const>
18063 <const name="AliasProxyOnly" value="0x02">
18064 <desc></desc>
18065 </const>
18066 <const name="AliasUseSamePorts" value="0x04">
18067 <desc></desc>
18068 </const>
18069 </enum>
18070
18071 <enum
18072 name="NATProtocol"
18073 uuid="e90164be-eb03-11de-94af-fff9b1c1b19f"
18074 >
18075 <desc>Protocol definitions used with NAT port-forwarding rules.</desc>
18076 <const name="UDP" value="0">
18077 <desc>Port-forwarding uses UDP protocol.</desc>
18078 </const>
18079 <const name="TCP" value="1">
18080 <desc>Port-forwarding uses TCP protocol.</desc>
18081 </const>
18082 </enum>
18083
18084 <interface
18085 name="INATEngine" extends="$unknown"
18086 uuid="26451b99-3b2d-4dcb-8e4b-d63654218175"
18087 wsmap="managed"
18088 >
18089 <desc>Interface for managing a NAT engine which is used with a virtual machine. This
18090 allows for changing NAT behavior such as port-forwarding rules. This interface is
18091 used in the <link to="INetworkAdapter::NATEngine" /> attribute.</desc>
18092 <attribute name="network" type="wstring">
18093 <desc>The network attribute of the NAT engine (the same value is used with built-in
18094 DHCP server to fill corresponding fields of DHCP leases).</desc>
18095 </attribute>
18096 <attribute name="hostIP" type="wstring">
18097 <desc>IP of host interface to bind all opened sockets to.
18098 <note>Changing this does not change binding of port forwarding.</note>
18099 </desc>
18100 </attribute>
18101 <attribute name="TFTPPrefix" type="wstring">
18102 <desc>TFTP prefix attribute which is used with the built-in DHCP server to fill
18103 the corresponding fields of DHCP leases.</desc>
18104 </attribute>
18105 <attribute name="TFTPBootFile" type="wstring">
18106 <desc>TFTP boot file attribute which is used with the built-in DHCP server to fill
18107 the corresponding fields of DHCP leases.</desc>
18108 </attribute>
18109 <attribute name="TFTPNextServer" type="wstring">
18110 <desc>TFTP server attribute which is used with the built-in DHCP server to fill
18111 the corresponding fields of DHCP leases.
18112 <note>The preferred form is IPv4 addresses.</note>
18113 </desc>
18114 </attribute>
18115 <attribute name="aliasMode" type="unsigned long">
18116 <desc></desc>
18117 </attribute>
18118 <attribute name="DNSPassDomain" type="boolean">
18119 <desc>Whether the DHCP server should pass the DNS domain used by the host.</desc>
18120 </attribute>
18121 <attribute name="DNSProxy" type="boolean">
18122 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
18123 of the DNS proxy and process traffic using DNS servers registered on the host.</desc>
18124 </attribute>
18125 <attribute name="DNSUseHostResolver" type="boolean">
18126 <desc>Whether the DHCP server (and the DNS traffic by NAT) should pass the address
18127 of the DNS proxy and process traffic using the host resolver mechanism.</desc>
18128 </attribute>
18129 <attribute name="redirects" type="wstring" readonly="yes" safearray="yes">
18130 <desc>Array of NAT port-forwarding rules in string representation, in the following
18131 format: "name,protocol id,host ip,host port,guest ip,guest port".</desc>
18132 </attribute>
18133 <method name="setNetworkSettings">
18134 <desc>Sets network configuration of the NAT engine.</desc>
18135 <param name="mtu" type="unsigned long" dir="in">
18136 <desc>MTU (maximum transmission unit) of the NAT engine in bytes.</desc>
18137 </param>
18138 <param name="sockSnd" type="unsigned long" dir="in">
18139 <desc>Capacity of the socket send buffer in bytes when creating a new socket.</desc>
18140 </param>
18141 <param name="sockRcv" type="unsigned long" dir="in">
18142 <desc>Capacity of the socket receive buffer in bytes when creating a new socket.</desc>
18143 </param>
18144 <param name="TcpWndSnd" type="unsigned long" dir="in">
18145 <desc>Initial size of the NAT engine's sending TCP window in bytes when
18146 establishing a new TCP connection.</desc>
18147 </param>
18148 <param name="TcpWndRcv" type="unsigned long" dir="in">
18149 <desc>Initial size of the NAT engine's receiving TCP window in bytes when
18150 establishing a new TCP connection.</desc>
18151 </param>
18152 </method>
18153 <method name="getNetworkSettings">
18154 <desc>Returns network configuration of NAT engine. See <link to="#setNetworkSettings" />
18155 for parameter descriptions.</desc>
18156 <param name="mtu" type="unsigned long" dir="out" />
18157 <param name="sockSnd" type="unsigned long" dir="out" />
18158 <param name="sockRcv" type="unsigned long" dir="out" />
18159 <param name="TcpWndSnd" type="unsigned long" dir="out" />
18160 <param name="TcpWndRcv" type="unsigned long" dir="out" />
18161 </method>
18162 <method name="addRedirect">
18163 <desc>Adds a new NAT port-forwarding rule.</desc>
18164 <param name="name" type="wstring" dir="in">
18165 <desc>The name of the rule. An empty name is acceptable, in which case the NAT engine
18166 auto-generates one using the other parameters.</desc>
18167 </param>
18168 <param name="proto" type="NATProtocol" dir="in">
18169 <desc>Protocol handled with the rule.</desc>
18170 </param>
18171 <param name="hostIP" type="wstring" dir="in">
18172 <desc>IP of the host interface to which the rule should apply. An empty ip address is
18173 acceptable, in which case the NAT engine binds the handling socket to any interface.</desc>
18174 </param>
18175 <param name="hostPort" type="unsigned short" dir="in">
18176 <desc>The port number to listen on.</desc>
18177 </param>
18178 <param name="guestIP" type="wstring" dir="in">
18179 <desc>The IP address of the guest which the NAT engine will forward matching packets
18180 to. An empty IP address is acceptable, in which case the NAT engine will forward
18181 packets to the first DHCP lease (x.x.x.15).</desc>
18182 </param>
18183 <param name="guestPort" type="unsigned short" dir="in">
18184 <desc>The port number to forward.</desc>
18185 </param>
18186 </method>
18187 <method name="removeRedirect">
18188 <desc>Removes a port-forwarding rule that was previously registered.</desc>
18189 <param name="name" type="wstring" dir="in">
18190 <desc>The name of the rule to delete.</desc>
18191 </param>
18192 </method>
18193 </interface>
18194
18195 <!--
18196 // IExtPackManager
18197 /////////////////////////////////////////////////////////////////////////
18198 -->
18199
18200 <interface
18201 name="IExtPackPlugIn" extends="$unknown"
18202 uuid="58000040-e718-4746-bbce-4b86d96da461"
18203 wsmap="suppress"
18204 >
18205 <desc>
18206 Interface for keeping information about a plug-in that ships with an
18207 extension pack.
18208 </desc>
18209 <attribute name="name" type="wstring" readonly="yes">
18210 <desc>The plug-in name.</desc>
18211 </attribute>
18212 <attribute name="description" type="wstring" readonly="yes">
18213 <desc>The plug-in description.</desc>
18214 </attribute>
18215 <attribute name="frontend" type="wstring" readonly="yes">
18216 <desc>
18217 The name of the frontend or component name this plug-in plugs into.
18218 </desc>
18219 </attribute>
18220 <attribute name="modulePath" type="wstring" readonly="yes">
18221 <desc> The module path. </desc>
18222 </attribute>
18223 </interface>
18224
18225 <interface
18226 name="IExtPackBase" extends="$unknown"
18227 uuid="f79b75d8-2890-4f34-ffff-ffffa144e82c"
18228 wsmap="suppress"
18229 >
18230 <desc>
18231 Interface for querying information about an extension pack as well as
18232 accessing COM objects within it.
18233 </desc>
18234 <attribute name="name" type="wstring" readonly="yes">
18235 <desc>The extension pack name. This is unique.</desc>
18236 </attribute>
18237 <attribute name="description" type="wstring" readonly="yes">
18238 <desc>The extension pack description.</desc>
18239 </attribute>
18240 <attribute name="version" type="wstring" readonly="yes">
18241 <desc>
18242 The extension pack version string. This is restricted to the dotted
18243 version number and optionally a build indicator. No tree revision or
18244 tag will be included in the string as those things are available as
18245 separate properties. An optional publisher tag may be present like for
18246 <link to="IVirtualBox::version"/>.
18247
18248 Examples: "1.2.3", "1.2.3_BETA1" and "1.2.3_RC2".
18249 </desc>
18250 </attribute>
18251 <attribute name="revision" type="unsigned long" readonly="yes">
18252 <desc>The extension pack internal revision number.</desc>
18253 </attribute>
18254 <attribute name="edition" type="wstring" readonly="yes">
18255 <desc>
18256 Edition indicator. This is usually empty.
18257
18258 Can for instance be used to help distinguishing between two editions
18259 of the same extension pack where only the license, service contract or
18260 something differs.
18261 </desc>
18262 </attribute>
18263 <attribute name="VRDEModule" type="wstring" readonly="yes">
18264 <desc>The name of the VRDE module if the extension pack sports one.</desc>
18265 </attribute>
18266 <attribute name="plugIns" type="IExtPackPlugIn" safearray="yes" readonly="yes">
18267 <desc>Plug-ins provided by this extension pack.</desc>
18268 </attribute>
18269 <attribute name="usable" type="boolean" readonly="yes">
18270 <desc>
18271 Indicates whether the extension pack is usable or not.
18272
18273 There are a number of reasons why an extension pack might be unusable,
18274 typical examples would be broken installation/file or that it is
18275 incompatible with the current VirtualBox version.
18276 </desc>
18277 </attribute>
18278 <attribute name="whyUnusable" type="wstring" readonly="yes">
18279 <desc>
18280 String indicating why the extension pack is not usable. This is an
18281 empty string if usable and always a non-empty string if not usable.
18282 </desc>
18283 </attribute>
18284 <attribute name="showLicense" type="boolean" readonly="yes">
18285 <desc>Whether to show the license before installation</desc>
18286 </attribute>
18287 <attribute name="license" type="wstring" readonly="yes">
18288 <desc>
18289 The default HTML license text for the extension pack. Same as
18290 calling <link to="#queryLicense">queryLicense</link> with
18291 preferredLocale and preferredLanguage as empty strings and format set
18292 to html.
18293 </desc>
18294 </attribute>
18295
18296 <method name="queryLicense">
18297 <desc>
18298 Full feature version of the license attribute.
18299 </desc>
18300 <param name="preferredLocale" type="wstring" dir="in">
18301 <desc>
18302 The preferred license locale. Pass an empty string to get the default
18303 license.
18304 </desc>
18305 </param>
18306 <param name="preferredLanguage" type="wstring" dir="in">
18307 <desc>
18308 The preferred license language. Pass an empty string to get the
18309 default language for the locale.
18310 </desc>
18311 </param>
18312 <param name="format" type="wstring" dir="in">
18313 <desc>
18314 The license format: html, rtf or txt. If a license is present there
18315 will always be an HTML of it, the rich text format (RTF) and plain
18316 text (txt) versions are optional. If
18317 </desc>
18318 </param>
18319 <param name="licenseText" type="wstring" dir="return">
18320 <desc>The license text.</desc>
18321 </param>
18322 </method>
18323
18324 </interface>
18325
18326 <interface
18327 name="IExtPack" extends="IExtPackBase"
18328 uuid="431685da-3618-4ebc-b038-833ba829b4b2"
18329 wsmap="suppress"
18330 >
18331 <desc>
18332 Interface for querying information about an extension pack as well as
18333 accessing COM objects within it.
18334 </desc>
18335 <method name="queryObject">
18336 <desc>
18337 Queries the IUnknown interface to an object in the extension pack
18338 main module. This allows plug-ins and others to talk directly to an
18339 extension pack.
18340 </desc>
18341 <param name="objUuid" type="wstring" dir="in">
18342 <desc>The object ID. What exactly this is </desc>
18343 </param>
18344 <param name="returnInterface" type="$unknown" dir="return">
18345 <desc>The queried interface.</desc>
18346 </param>
18347 </method>
18348 </interface>
18349
18350 <interface
18351 name="IExtPackFile" extends="IExtPackBase"
18352 uuid="b6b49f55-efcc-4f08-b486-56e8d8afb10b"
18353 wsmap="suppress"
18354 >
18355 <desc>
18356 Extension pack file (aka tarball, .vbox-extpack) representation returned
18357 by <link to="IExtPackManager::openExtPackFile"/>. This provides the base
18358 extension pack information with the addition of the file name.
18359 </desc>
18360 <attribute name="filePath" type="wstring" readonly="yes">
18361 <desc>
18362 The path to the extension pack file.
18363 </desc>
18364 </attribute>
18365
18366 <method name="install">
18367 <desc>
18368 Install the extension pack.
18369 </desc>
18370 <param name="replace" type="boolean" dir="in">
18371 <desc>
18372 Set this to automatically uninstall any existing extension pack with
18373 the same name as the one being installed.
18374 </desc>
18375 </param>
18376 <param name="displayInfo" type="wstring" dir="in">
18377 <desc>
18378 Platform specific display information. Reserved for future hacks.
18379 </desc>
18380 </param>
18381 <param name="progess" type="IProgress" dir="return">
18382 <desc>
18383 Progress object for the operation.
18384 </desc>
18385 </param>
18386 </method>
18387 </interface>
18388
18389 <interface
18390 name="IExtPackManager" extends="$unknown"
18391 uuid="3295e6ce-b051-47b2-9514-2c588bfe7554"
18392 wsmap="suppress"
18393 >
18394 <desc>
18395 Interface for managing VirtualBox Extension Packs.
18396
18397 TODO: Describe extension packs, how they are managed and how to create
18398 one.
18399 </desc>
18400
18401 <attribute name="installedExtPacks" type="IExtPack" safearray="yes" readonly="yes">
18402 <desc>
18403 List of the installed extension packs.
18404 </desc>
18405 </attribute>
18406
18407 <method name="find">
18408 <desc>
18409 Returns the extension pack with the specified name if found.
18410
18411 <result name="VBOX_E_OBJECT_NOT_FOUND">
18412 No extension pack matching @a name was found.
18413 </result>
18414 </desc>
18415 <param name="name" type="wstring" dir="in">
18416 <desc>The name of the extension pack to locate.</desc>
18417 </param>
18418 <param name="returnData" type="IExtPack" dir="return">
18419 <desc>The extension pack if found.</desc>
18420 </param>
18421 </method>
18422
18423 <method name="openExtPackFile">
18424 <desc>
18425 Attempts to open an extension pack file in preparation for
18426 installation.
18427 </desc>
18428 <param name="path" type="wstring" dir="in">
18429 <desc>The path of the extension pack tarball. This can optionally be
18430 followed by a "::SHA-256=hex-digit" of the tarball. </desc>
18431 </param>
18432 <param name="file" type="IExtPackFile" dir="return">
18433 <desc>The interface of the extension pack file object.</desc>
18434 </param>
18435 </method>
18436
18437 <method name="uninstall">
18438 <desc>Uninstalls an extension pack, removing all related files.</desc>
18439 <param name="name" type="wstring" dir="in">
18440 <desc>The name of the extension pack to uninstall.</desc>
18441 </param>
18442 <param name="forcedRemoval" type="boolean" dir="in">
18443 <desc>
18444 Forced removal of the extension pack. This means that the uninstall
18445 hook will not be called.
18446 </desc>
18447 </param>
18448 <param name="displayInfo" type="wstring" dir="in">
18449 <desc>
18450 Platform specific display information. Reserved for future hacks.
18451 </desc>
18452 </param>
18453 <param name="progess" type="IProgress" dir="return">
18454 <desc>
18455 Progress object for the operation.
18456 </desc>
18457 </param>
18458 </method>
18459
18460 <method name="cleanup">
18461 <desc>Cleans up failed installs and uninstalls</desc>
18462 </method>
18463
18464 <method name="queryAllPlugInsForFrontend">
18465 <desc>
18466 Gets the path to all the plug-in modules for a given frontend.
18467
18468 This is a convenience method that is intended to simplify the plug-in
18469 loading process for a frontend.
18470 </desc>
18471 <param name="frontendName" type="wstring" dir="in">
18472 <desc>The name of the frontend or component.</desc>
18473 </param>
18474 <param name="plugInModules" type="wstring" dir="return" safearray="yes">
18475 <desc>Array containing the plug-in modules (full paths).</desc>
18476 </param>
18477 </method>
18478
18479 <method name="isExtPackUsable">
18480 <desc>Check if the given extension pack is loaded and usable.</desc>
18481 <param name="name" type="wstring" dir="in">
18482 <desc>The name of the extension pack to check for.</desc>
18483 </param>
18484 <param name="usable" type="boolean" dir="return">
18485 <desc>Is the given extension pack loaded and usable.</desc>
18486 </param>
18487 </method>
18488
18489 </interface>
18490
18491 <!--
18492 // BandwidthGroupType
18493 /////////////////////////////////////////////////////////////////////////
18494 -->
18495 <enum
18496 name="BandwidthGroupType"
18497 uuid="1d92b67d-dc69-4be9-ad4c-93a01e1e0c8e">
18498
18499 <desc>
18500 Type of a bandwidth control group.
18501 </desc>
18502
18503 <const name="Null" value="0">
18504 <desc>
18505 Null type, must be first.
18506 </desc>
18507 </const>
18508
18509 <const name="Disk" value="1">
18510 <desc>
18511 The bandwidth group controls disk I/O.
18512 </desc>
18513 </const>
18514
18515 <const name="Network" value="2">
18516 <desc>
18517 The bandwidth group controls network I/O.
18518 </desc>
18519 </const>
18520
18521 </enum>
18522
18523 <!--
18524 // IBandwidthGroup
18525 /////////////////////////////////////////////////////////////////////////
18526 -->
18527 <interface
18528 name="IBandwidthGroup" extends="$unknown"
18529 uuid="badea2d7-0261-4146-89f0-6a57cc34833d"
18530 wsmap="managed"
18531 >
18532 <desc>Represents one bandwidth group.</desc>
18533
18534 <attribute name="name" type="wstring" readonly="yes">
18535 <desc>Name of the group.</desc>
18536 </attribute>
18537
18538 <attribute name="type" type="BandwidthGroupType" readonly="yes">
18539 <desc>Type of the group.</desc>
18540 </attribute>
18541
18542 <attribute name="reference" type="unsigned long" readonly="yes">
18543 <desc>How many devices/medium attachements use this group.</desc>
18544 </attribute>
18545
18546 <attribute name="maxBytesPerSec" type="long long">
18547 <desc>The maximum number of bytes which can be transfered by all
18548 entities attached to this group during one second.</desc>
18549 </attribute>
18550
18551 </interface>
18552
18553 <!--
18554 // IBandwidthControl
18555 /////////////////////////////////////////////////////////////////////////
18556 -->
18557 <interface
18558 name="IBandwidthControl" extends="$unknown"
18559 uuid="e2eb3930-d2f4-4f87-be17-0707e30f019f"
18560 wsmap="managed"
18561 >
18562 <desc>
18563 Controls the bandwidth groups of one machine used to cap I/O done by a VM.
18564 This includes network and disk I/O.
18565 </desc>
18566
18567 <attribute name="numGroups" type="unsigned long" readonly="yes">
18568 <desc>
18569 The current number of existing bandwidth groups managed.
18570 </desc>
18571 </attribute>
18572
18573 <method name="createBandwidthGroup">
18574 <desc>
18575 Creates a new bandwidth group.
18576 </desc>
18577
18578 <param name="name" type="wstring" dir="in">
18579 <desc>Name of the bandwidth group.</desc>
18580 </param>
18581 <param name="type" type="BandwidthGroupType" dir="in">
18582 <desc>The type of the bandwidth group (network or disk).</desc>
18583 </param>
18584 <param name="maxBytesPerSec" type="long long" dir="in">
18585 <desc>The maximum number of bytes which can be transfered by all
18586 entities attached to this group during one second.</desc>
18587 </param>
18588 </method>
18589
18590 <method name="deleteBandwidthGroup">
18591 <desc>
18592 Deletes a new bandwidth group.
18593 </desc>
18594
18595 <param name="name" type="wstring" dir="in">
18596 <desc>Name of the bandwidth group to delete.</desc>
18597 </param>
18598 </method>
18599
18600 <method name="getBandwidthGroup" const="yes">
18601 <desc>
18602 Get a bandwidth group by name.
18603 </desc>
18604
18605 <param name="name" type="wstring" dir="in">
18606 <desc>Name of the bandwidth group to get.</desc>
18607 </param>
18608 <param name="bandwidthGroup" type="IBandwidthGroup" dir="return">
18609 <desc>Where to store the bandwidth group on success.</desc>
18610 </param>
18611 </method>
18612
18613 <method name="getAllBandwidthGroups" const="yes">
18614 <desc>
18615 Get all managed bandwidth groups.
18616 </desc>
18617
18618 <param name="bandwidthGroups" type="IBandwidthGroup" dir="return" safearray="yes">
18619 <desc>The array of managed bandwidth groups.</desc>
18620 </param>
18621 </method>
18622 </interface>
18623
18624 <!--
18625 // IVirtualBoxClient
18626 /////////////////////////////////////////////////////////////////////////
18627 -->
18628
18629 <interface
18630 name="IVirtualBoxClient" extends="$unknown"
18631 uuid="5fe0bd48-1181-40d1-991f-3b02f269a823"
18632 wsmap="suppress"
18633 >
18634 <desc>
18635 Convenience interface for client applications. Treat this as a
18636 singleton, i.e. never create more than one instance of this interface.
18637
18638 At the moment only available for clients of the local API (not usable
18639 via the webservice). Once the session logic is redesigned this might
18640 change.
18641 </desc>
18642
18643 <attribute name="virtualBox" type="IVirtualBox" readonly="yes">
18644 <desc>
18645 Reference to the server-side API root object.
18646 </desc>
18647 </attribute>
18648
18649 <attribute name="session" type="ISession" readonly="yes">
18650 <desc>
18651 Create a new session object and return the reference to it.
18652 </desc>
18653 </attribute>
18654
18655 <attribute name="eventSource" type="IEventSource" readonly="yes">
18656 <desc>
18657 Event source for VirtualBoxClient events.
18658 </desc>
18659 </attribute>
18660
18661 </interface>
18662
18663 <!--
18664 // Events
18665 /////////////////////////////////////////////////////////////////////////
18666 -->
18667 <enum
18668 name="VBoxEventType"
18669 uuid="0d67e79e-b7b1-4919-aab3-b36866075515"
18670 >
18671
18672 <desc>
18673 Type of an event.
18674 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
18675 </desc>
18676
18677 <const name="Invalid" value="0">
18678 <desc>
18679 Invalid event, must be first.
18680 </desc>
18681 </const>
18682
18683 <const name="Any" value="1">
18684 <desc>
18685 Wildcard for all events.
18686 Events of this type are never delivered, and only used in
18687 <link to="IEventSource::registerListener"/> call to simplify registration.
18688 </desc>
18689 </const>
18690
18691 <const name="Vetoable" value="2">
18692 <desc>
18693 Wildcard for all vetoable events. Events of this type are never delivered, and only
18694 used in <link to="IEventSource::registerListener"/> call to simplify registration.
18695 </desc>
18696 </const>
18697
18698 <const name="MachineEvent" value="3">
18699 <desc>
18700 Wildcard for all machine events. Events of this type are never delivered, and only used in
18701 <link to="IEventSource::registerListener"/> call to simplify registration.
18702 </desc>
18703 </const>
18704
18705 <const name="SnapshotEvent" value="4">
18706 <desc>
18707 Wildcard for all snapshot events. Events of this type are never delivered, and only used in
18708 <link to="IEventSource::registerListener"/> call to simplify registration.
18709 </desc>
18710 </const>
18711
18712 <const name="InputEvent" value="5">
18713 <desc>
18714 Wildcard for all input device (keyboard, mouse) events.
18715 Events of this type are never delivered, and only used in
18716 <link to="IEventSource::registerListener"/> call to simplify registration.
18717 </desc>
18718 </const>
18719
18720 <const name="LastWildcard" value="31">
18721 <desc>
18722 Last wildcard.
18723 </desc>
18724 </const>
18725
18726 <const name="OnMachineStateChanged" value="32">
18727 <desc>
18728 See <link to="IMachineStateChangedEvent">IMachineStateChangedEvent</link>.
18729 </desc>
18730 </const>
18731 <const name="OnMachineDataChanged" value="33">
18732 <desc>
18733 See <link to="IMachineDataChangedEvent">IMachineDataChangedEvent</link>.
18734 </desc>
18735 </const>
18736 <const name="OnExtraDataChanged" value="34">
18737 <desc>
18738 See <link to="IExtraDataChangedEvent">IExtraDataChangedEvent</link>.
18739 </desc>
18740 </const>
18741 <const name="OnExtraDataCanChange" value="35">
18742 <desc>
18743 See <link to="IExtraDataCanChangeEvent">IExtraDataCanChangeEvent</link>.
18744 </desc>
18745 </const>
18746 <const name="OnMediumRegistered" value="36">
18747 <desc>
18748 See <link to="IMediumRegisteredEvent">IMediumRegisteredEvent</link>.
18749 </desc>
18750 </const>
18751 <const name="OnMachineRegistered" value="37">
18752 <desc>
18753 See <link to="IMachineRegisteredEvent">IMachineRegisteredEvent</link>.
18754 </desc>
18755 </const>
18756 <const name="OnSessionStateChanged" value="38">
18757 <desc>
18758 See <link to="ISessionStateChangedEvent">ISessionStateChangedEvent</link>.
18759 </desc>
18760 </const>
18761 <const name="OnSnapshotTaken" value="39">
18762 <desc>
18763 See <link to="ISnapshotTakenEvent">ISnapshotTakenEvent</link>.
18764 </desc>
18765 </const>
18766 <const name="OnSnapshotDeleted" value="40">
18767 <desc>
18768 See <link to="ISnapshotDeletedEvent">ISnapshotDeletedEvent</link>.
18769 </desc>
18770 </const>
18771 <const name="OnSnapshotChanged" value="41">
18772 <desc>
18773 See <link to="ISnapshotChangedEvent">ISnapshotChangedEvent</link>.
18774 </desc>
18775 </const>
18776 <const name="OnGuestPropertyChanged" value="42">
18777 <desc>
18778 See <link to="IGuestPropertyChangedEvent">IGuestPropertyChangedEvent</link>.
18779 </desc>
18780 </const>
18781 <!-- Console events -->
18782 <const name="OnMousePointerShapeChanged" value="43">
18783 <desc>
18784 See <link to="IMousePointerShapeChangedEvent">IMousePointerShapeChangedEvent</link>.
18785 </desc>
18786 </const>
18787 <const name="OnMouseCapabilityChanged" value="44">
18788 <desc>
18789 See <link to="IMouseCapabilityChangedEvent">IMouseCapabilityChangedEvent</link>.
18790 </desc>
18791 </const>
18792 <const name="OnKeyboardLedsChanged" value="45">
18793 <desc>
18794 See <link to="IKeyboardLedsChangedEvent">IKeyboardLedsChangedEvent</link>.
18795 </desc>
18796 </const>
18797 <const name="OnStateChanged" value="46">
18798 <desc>
18799 See <link to="IStateChangedEvent">IStateChangedEvent</link>.
18800 </desc>
18801 </const>
18802 <const name="OnAdditionsStateChanged" value="47">
18803 <desc>
18804 See <link to="IAdditionsStateChangedEvent">IAdditionsStateChangedEvent</link>.
18805 </desc>
18806 </const>
18807 <const name="OnNetworkAdapterChanged" value="48">
18808 <desc>
18809 See <link to="INetworkAdapterChangedEvent">INetworkAdapterChangedEvent</link>.
18810 </desc>
18811 </const>
18812 <const name="OnSerialPortChanged" value="49">
18813 <desc>
18814 See <link to="ISerialPortChangedEvent">ISerialPortChangedEvent</link>.
18815 </desc>
18816 </const>
18817 <const name="OnParallelPortChanged" value="50">
18818 <desc>
18819 See <link to="IParallelPortChangedEvent">IParallelPortChangedEvent</link>.
18820 </desc>
18821 </const>
18822 <const name="OnStorageControllerChanged" value="51">
18823 <desc>
18824 See <link to="IStorageControllerChangedEvent">IStorageControllerChangedEvent</link>.
18825 </desc>
18826 </const>
18827 <const name="OnMediumChanged" value="52">
18828 <desc>
18829 See <link to="IMediumChangedEvent">IMediumChangedEvent</link>.
18830 </desc>
18831 </const>
18832 <const name="OnVRDEServerChanged" value="53">
18833 <desc>
18834 See <link to="IVRDEServerChangedEvent">IVRDEServerChangedEvent</link>.
18835 </desc>
18836 </const>
18837 <const name="OnUSBControllerChanged" value="54">
18838 <desc>
18839 See <link to="IUSBControllerChangedEvent">IUSBControllerChangedEvent</link>.
18840 </desc>
18841 </const>
18842 <const name="OnUSBDeviceStateChanged" value="55">
18843 <desc>
18844 See <link to="IUSBDeviceStateChangedEvent">IUSBDeviceStateChangedEvent</link>.
18845 </desc>
18846 </const>
18847 <const name="OnSharedFolderChanged" value="56">
18848 <desc>
18849 See <link to="ISharedFolderChangedEvent">ISharedFolderChangedEvent</link>.
18850 </desc>
18851 </const>
18852 <const name="OnRuntimeError" value="57">
18853 <desc>
18854 See <link to="IRuntimeErrorEvent">IRuntimeErrorEvent</link>.
18855 </desc>
18856 </const>
18857 <const name="OnCanShowWindow" value="58">
18858 <desc>
18859 See <link to="ICanShowWindowEvent">ICanShowWindowEvent</link>.
18860 </desc>
18861 </const>
18862 <const name="OnShowWindow" value="59">
18863 <desc>
18864 See <link to="IShowWindowEvent">IShowWindowEvent</link>.
18865 </desc>
18866 </const>
18867 <const name="OnCPUChanged" value="60">
18868 <desc>
18869 See <link to="ICPUChangedEvent">ICPUChangedEvent</link>.
18870 </desc>
18871 </const>
18872 <const name="OnVRDEServerInfoChanged" value="61">
18873 <desc>
18874 See <link to="IVRDEServerInfoChangedEvent">IVRDEServerInfoChangedEvent</link>.
18875 </desc>
18876 </const>
18877 <const name="OnEventSourceChanged" value="62">
18878 <desc>
18879 See <link to="IEventSourceChangedEvent">IEventSourceChangedEvent</link>.
18880 </desc>
18881 </const>
18882 <const name="OnCPUExecutionCapChanged" value="63">
18883 <desc>
18884 See <link to="ICPUExecutionCapChangedEvent">ICPUExecutionCapChangedEvent</link>.
18885 </desc>
18886 </const>
18887 <const name="OnGuestKeyboard" value="64">
18888 <desc>
18889 See <link to="IGuestKeyboardEvent">IGuestKeyboardEvent</link>.
18890 </desc>
18891 </const>
18892 <const name="OnGuestMouse" value="65">
18893 <desc>
18894 See <link to="IGuestMouseEvent">IGuestMouseEvent</link>.
18895 </desc>
18896 </const>
18897 <const name="OnNATRedirect" value="66">
18898 <desc>
18899 See <link to="INATRedirectEvent">INATRedirectEvent</link>.
18900 </desc>
18901 </const>
18902 <const name="OnHostPCIDevicePlug" value="67">
18903 <desc>
18904 See <link to="IHostPCIDevicePlugEvent">IHostPCIDevicePlugEvent</link>.
18905 </desc>
18906 </const>
18907 <const name="OnVBoxSVCAvailabilityChanged" value="68">
18908 <desc>
18909 See <link to="IVBoxSVCAvailabilityChangedEvent">IVBoxSVCAvailablityChangedEvent</link>.
18910 </desc>
18911 </const>
18912 <const name="OnBandwidthGroupChanged" value="69">
18913 <desc>
18914 See <link to="IBandwidthGroupChangedEvent">IBandwidthGroupChangedEvent</link>.
18915 </desc>
18916 </const>
18917 <const name="OnGuestMonitorChanged" value="70">
18918 <desc>
18919 See <link to="IGuestMonitorChangedEvent">IGuestMonitorChangedEvent</link>.
18920 </desc>
18921 </const>
18922 <const name="OnStorageDeviceChanged" value="71">
18923 <desc>
18924 See <link to="IStorageDeviceChangedEvent">IStorageDeviceChangedEvent</link>.
18925 </desc>
18926 </const>
18927 <const name="OnClipboardModeChanged" value="72">
18928 <desc>
18929 See <link to="IClipboardModeChangedEvent">IClipboardModeChangedEvent</link>.
18930 </desc>
18931 </const>
18932 <const name="OnDragAndDropModeChanged" value="73">
18933 <desc>
18934 See <link to="IDragAndDropModeChangedEvent">IDragAndDropModeChangedEvent</link>.
18935 </desc>
18936 </const>
18937
18938 <!-- Last event marker -->
18939 <const name="Last" value="74">
18940 <desc>
18941 Must be last event, used for iterations and structures relying on numerical event values.
18942 </desc>
18943 </const>
18944
18945 </enum>
18946
18947 <interface
18948 name="IEventSource" extends="$unknown"
18949 uuid="9b6e1aee-35f3-4f4d-b5bb-ed0ecefd8538"
18950 wsmap="managed"
18951 >
18952 <desc>
18953 Event source. Generally, any object which could generate events can be an event source,
18954 or aggregate one. To simplify using one-way protocols such as webservices running on top of HTTP(S),
18955 an event source can work with listeners in either active or passive mode. In active mode it is up to
18956 the IEventSource implementation to call <link to="IEventListener::handleEvent" />, in passive mode the
18957 event source keeps track of pending events for each listener and returns available events on demand.
18958
18959 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
18960 </desc>
18961
18962 <method name="createListener">
18963 <desc>
18964 Creates a new listener object, useful for passive mode.
18965 </desc>
18966 <param name="listener" type="IEventListener" dir="return"/>
18967 </method>
18968
18969 <method name="createAggregator">
18970 <desc>
18971 Creates an aggregator event source, collecting events from multiple sources.
18972 This way a single listener can listen for events coming from multiple sources,
18973 using a single blocking <link to="#getEvent"/> on the returned aggregator.
18974 </desc>
18975 <param name="subordinates" type="IEventSource" dir="in" safearray="yes">
18976 <desc>
18977 Subordinate event source this one aggregatres.
18978 </desc>
18979 </param>
18980 <param name="result" type="IEventSource" dir="return">
18981 <desc>
18982 Event source aggregating passed sources.
18983 </desc>
18984 </param>
18985 </method>
18986
18987 <method name="registerListener">
18988 <desc>
18989 Register an event listener.
18990
18991 <note>
18992 To avoid system overload, the VirtualBox server process checks if passive event
18993 listeners call <link to="IEventSource::getEvent"/> frequently enough. In the
18994 current implementation, if more than 500 pending events are detected for a passive
18995 event listener, it is forcefully unregistered by the system, and further
18996 <link to="#getEvent" /> calls will return @c VBOX_E_OBJECT_NOT_FOUND.
18997 </note>
18998 </desc>
18999 <param name="listener" type="IEventListener" dir="in">
19000 <desc>Listener to register.</desc>
19001 </param>
19002 <param name="interesting" type="VBoxEventType" dir="in" safearray="yes">
19003 <desc>
19004 Event types listener is interested in. One can use wildcards like -
19005 <link to="VBoxEventType_Any"/> to specify wildcards, matching more
19006 than one event.
19007 </desc>
19008 </param>
19009 <param name="active" type="boolean" dir="in">
19010 <desc>
19011 Which mode this listener is operating in.
19012 In active mode, <link to="IEventListener::handleEvent" /> is called directly.
19013 In passive mode, an internal event queue is created for this this IEventListener.
19014 For each event coming in, it is added to queues for all interested registered passive
19015 listeners. It is then up to the external code to call the listener's
19016 <link to="IEventListener::handleEvent" /> method. When done with an event, the
19017 external code must call <link to="#eventProcessed" />.
19018 </desc>
19019 </param>
19020 </method>
19021
19022 <method name="unregisterListener">
19023 <desc>
19024 Unregister an event listener. If listener is passive, and some waitable events are still
19025 in queue they are marked as processed automatically.
19026 </desc>
19027 <param name="listener" type="IEventListener" dir="in">
19028 <desc>Listener to unregister.</desc>
19029 </param>
19030 </method>
19031
19032 <method name="fireEvent">
19033 <desc>
19034 Fire an event for this source.
19035 </desc>
19036 <param name="event" type="IEvent" dir="in">
19037 <desc>Event to deliver.</desc>
19038 </param>
19039 <param name="timeout" type="long" dir="in">
19040 <desc>
19041 Maximum time to wait for event processing (if event is waitable), in ms;
19042 0 = no wait, -1 = indefinite wait.
19043 </desc>
19044 </param>
19045 <param name="result" type="boolean" dir="return">
19046 <desc>true if an event was delivered to all targets, or is non-waitable.</desc>
19047 </param>
19048 </method>
19049
19050 <method name="getEvent">
19051 <desc>
19052 Get events from this peer's event queue (for passive mode). Calling this method
19053 regularly is required for passive event listeners to avoid system overload;
19054 see <link to="IEventSource::registerListener" /> for details.
19055
19056 <result name="VBOX_E_OBJECT_NOT_FOUND">
19057 Listener is not registered, or autounregistered.
19058 </result>
19059 </desc>
19060 <param name="listener" type="IEventListener" dir="in">
19061 <desc>Which listener to get data for.</desc>
19062 </param>
19063 <param name="timeout" type="long" dir="in">
19064 <desc>
19065 Maximum time to wait for events, in ms;
19066 0 = no wait, -1 = indefinite wait.
19067 </desc>
19068 </param>
19069 <param name="event" type="IEvent" dir="return">
19070 <desc>Event retrieved, or null if none available.</desc>
19071 </param>
19072 </method>
19073
19074 <method name="eventProcessed">
19075 <desc>
19076 Must be called for waitable events after a particular listener finished its
19077 event processing. When all listeners of a particular event have called this
19078 method, the system will then call <link to="IEvent::setProcessed" />.
19079 </desc>
19080 <param name="listener" type="IEventListener" dir="in">
19081 <desc>Which listener processed event.</desc>
19082 </param>
19083 <param name="event" type="IEvent" dir="in">
19084 <desc>Which event.</desc>
19085 </param>
19086 </method>
19087
19088 </interface>
19089
19090 <interface
19091 name="IEventListener" extends="$unknown"
19092 uuid="67099191-32e7-4f6c-85ee-422304c71b90"
19093 wsmap="managed"
19094 >
19095 <desc>
19096 Event listener. An event listener can work in either active or passive mode, depending on the way
19097 it was registered.
19098 See <link to="IEvent" /> for an introduction to VirtualBox event handling.
19099 </desc>
19100
19101 <method name="handleEvent">
19102 <desc>
19103 Handle event callback for active listeners. It is not called for
19104 passive listeners. After calling <link to="#handleEvent"/> on all active listeners
19105 and having received acknowledgement from all passive listeners via
19106 <link to="IEventSource::eventProcessed"/>, the event is marked as
19107 processed and <link to="IEvent::waitProcessed"/> will return
19108 immediately.
19109 </desc>
19110 <param name="event" type="IEvent" dir="in">
19111 <desc>Event available.</desc>
19112 </param>
19113 </method>
19114
19115 </interface>
19116
19117 <interface
19118 name="IEvent" extends="$unknown"
19119 uuid="0ca2adba-8f30-401b-a8cd-fe31dbe839c0"
19120 wsmap="managed"
19121 >
19122 <desc>
19123 Abstract parent interface for VirtualBox events. Actual events will typically implement
19124 a more specific interface which derives from this (see below).
19125
19126 <b>Introduction to VirtualBox events</b>
19127
19128 Generally speaking, an event (represented by this interface) signals that something
19129 happened, while an event listener (see <link to="IEventListener" />) represents an
19130 entity that is interested in certain events. In order for this to work with
19131 unidirectional protocols (i.e. web services), the concepts of passive and active
19132 listener are used.
19133
19134 Event consumers can register themselves as listeners, providing an array of
19135 events they are interested in (see <link to="IEventSource::registerListener" />).
19136 When an event triggers, the listener is notified about the event. The exact
19137 mechanism of the notification depends on whether the listener was registered as
19138 an active or passive listener:
19139
19140 <ul>
19141 <li>An active listener is very similar to a callback: it is a function invoked
19142 by the API. As opposed to the callbacks that were used in the API before
19143 VirtualBox 4.0 however, events are now objects with an interface hierarchy.
19144 </li>
19145
19146 <li>Passive listeners are somewhat trickier to implement, but do not require
19147 a client function to be callable, which is not an option with scripting
19148 languages or web service clients. Internally the <link to="IEventSource" />
19149 implementation maintains an event queue for each passive listener, and
19150 newly arrived events are put in this queue. When the listener calls
19151 <link to="IEventSource::getEvent"/>, first element from its internal event
19152 queue is returned. When the client completes processing of an event,
19153 the <link to="IEventSource::eventProcessed" /> function must be called,
19154 acknowledging that the event was processed. It supports implementing
19155 waitable events. On passive listener unregistration, all events from its
19156 queue are auto-acknowledged.
19157 </li>
19158 </ul>
19159
19160 Waitable events are useful in situations where the event generator wants to track
19161 delivery or a party wants to wait until all listeners have completed the event. A
19162 typical example would be a vetoable event (see <link to="IVetoEvent" />) where a
19163 listeners might veto a certain action, and thus the event producer has to make
19164 sure that all listeners have processed the event and not vetoed before taking
19165 the action.
19166
19167 A given event may have both passive and active listeners at the same time.
19168
19169 <b>Using events</b>
19170
19171 Any VirtualBox object capable of producing externally visible events provides an
19172 @c eventSource read-only attribute, which is of the type <link to="IEventSource" />.
19173 This event source object is notified by VirtualBox once something has happened, so
19174 consumers may register event listeners with this event source. To register a listener,
19175 an object implementing the <link to="IEventListener" /> interface must be provided.
19176 For active listeners, such an object is typically created by the consumer, while for
19177 passive listeners <link to="IEventSource::createListener" /> should be used. Please
19178 note that a listener created with <link to="IEventSource::createListener"/> must not be used as an active listener.
19179
19180 Once created, the listener must be registered to listen for the desired events
19181 (see <link to="IEventSource::registerListener" />), providing an array of
19182 <link to="VBoxEventType" /> enums. Those elements can either be the individual
19183 event IDs or wildcards matching multiple event IDs.
19184
19185 After registration, the callback's <link to="IEventListener::handleEvent" /> method is
19186 called automatically when the event is triggered, while passive listeners have to call
19187 <link to="IEventSource::getEvent" /> and <link to="IEventSource::eventProcessed" /> in
19188 an event processing loop.
19189
19190 The IEvent interface is an abstract parent interface for all such VirtualBox events
19191 coming in. As a result, the standard use pattern inside <link to="IEventListener::handleEvent" />
19192 or the event processing loop is to check the <link to="#type" /> attribute of the event and
19193 then cast to the appropriate specific interface using @c QueryInterface().
19194 </desc>
19195
19196 <attribute name="type" readonly="yes" type="VBoxEventType">
19197 <desc>
19198 Event type.
19199 </desc>
19200 </attribute>
19201
19202 <attribute name="source" readonly="yes" type="IEventSource">
19203 <desc>
19204 Source of this event.
19205 </desc>
19206 </attribute>
19207
19208 <attribute name="waitable" readonly="yes" type="boolean">
19209 <desc>
19210 If we can wait for this event being processed. If false, <link to="#waitProcessed"/> returns immediately,
19211 and <link to="#setProcessed"/> doesn't make sense. Non-waitable events are generally better performing,
19212 as no additional overhead associated with waitability imposed.
19213 Waitable events are needed when one need to be able to wait for particular event processed,
19214 for example for vetoable changes, or if event refers to some resource which need to be kept immutable
19215 until all consumers confirmed events.
19216 </desc>
19217 </attribute>
19218
19219 <method name="setProcessed">
19220 <desc>
19221 Internal method called by the system when all listeners of a particular event have called
19222 <link to="IEventSource::eventProcessed" />. This should not be called by client code.
19223 </desc>
19224 </method>
19225
19226 <method name="waitProcessed">
19227 <desc>
19228 Wait until time outs, or this event is processed. Event must be waitable for this operation to have
19229 described semantics, for non-waitable returns true immediately.
19230 </desc>
19231 <param name="timeout" type="long" dir="in">
19232 <desc>
19233 Maximum time to wait for event processeing, in ms;
19234 0 = no wait, -1 = indefinite wait.
19235 </desc>
19236 </param>
19237 <param name="result" type="boolean" dir="return">
19238 <desc>If this event was processed before timeout.</desc>
19239 </param>
19240 </method>
19241 </interface>
19242
19243
19244 <interface
19245 name="IReusableEvent" extends="IEvent"
19246 uuid="69bfb134-80f6-4266-8e20-16371f68fa25"
19247 wsmap="managed"
19248 >
19249 <desc>Base abstract interface for all reusable events.</desc>
19250
19251 <attribute name="generation" readonly="yes" type="unsigned long">
19252 <desc>Current generation of event, incremented on reuse.</desc>
19253 </attribute>
19254
19255 <method name="reuse">
19256 <desc>
19257 Marks an event as reused, increments 'generation', fields shall no
19258 longer be considered valid.
19259 </desc>
19260 </method>
19261 </interface>
19262
19263 <interface
19264 name="IMachineEvent" extends="IEvent"
19265 uuid="92ed7b1a-0d96-40ed-ae46-a564d484325e"
19266 wsmap="managed" id="MachineEvent"
19267 >
19268 <desc>Base abstract interface for all machine events.</desc>
19269
19270 <attribute name="machineId" readonly="yes" type="uuid" mod="string">
19271 <desc>ID of the machine this event relates to.</desc>
19272 </attribute>
19273
19274 </interface>
19275
19276 <interface
19277 name="IMachineStateChangedEvent" extends="IMachineEvent"
19278 uuid="5748F794-48DF-438D-85EB-98FFD70D18C9"
19279 wsmap="managed" autogen="VBoxEvent" id="OnMachineStateChanged"
19280 >
19281 <desc>Machine state change event.</desc>
19282
19283 <attribute name="state" readonly="yes" type="MachineState">
19284 <desc>New execution state.</desc>
19285 </attribute>
19286 </interface>
19287
19288 <interface
19289 name="IMachineDataChangedEvent" extends="IMachineEvent"
19290 uuid="abe94809-2e88-4436-83d7-50f3e64d0503"
19291 wsmap="managed" autogen="VBoxEvent" id="OnMachineDataChanged"
19292 >
19293 <desc>
19294 Any of the settings of the given machine has changed.
19295 </desc>
19296
19297 <attribute name="temporary" readonly="yes" type="boolean">
19298 <desc>@c true if the settings change is temporary. All permanent
19299 settings changes will trigger an event, and only temporary settings
19300 changes for running VMs will trigger an event. Note: sending events
19301 for temporary changes is NOT IMPLEMENTED.</desc>
19302 </attribute>
19303 </interface>
19304
19305 <interface
19306 name="IMediumRegisteredEvent" extends="IEvent"
19307 uuid="53fac49a-b7f1-4a5a-a4ef-a11dd9c2a458"
19308 wsmap="managed" autogen="VBoxEvent" id="OnMediumRegistered"
19309 >
19310 <desc>
19311 The given medium was registered or unregistered
19312 within this VirtualBox installation.
19313 </desc>
19314
19315 <attribute name="mediumId" readonly="yes" type="uuid" mod="string">
19316 <desc>ID of the medium this event relates to.</desc>
19317 </attribute>
19318
19319 <attribute name="mediumType" readonly="yes" type="DeviceType">
19320 <desc>Type of the medium this event relates to.</desc>
19321 </attribute>
19322
19323 <attribute name="registered" type="boolean" readonly="yes">
19324 <desc>
19325 If @c true, the medium was registered, otherwise it was
19326 unregistered.
19327 </desc>
19328 </attribute>
19329 </interface>
19330
19331 <interface
19332 name="IMachineRegisteredEvent" extends="IMachineEvent"
19333 uuid="c354a762-3ff2-4f2e-8f09-07382ee25088"
19334 wsmap="managed" autogen="VBoxEvent" id="OnMachineRegistered"
19335 >
19336 <desc>
19337 The given machine was registered or unregistered
19338 within this VirtualBox installation.
19339 </desc>
19340
19341 <attribute name="registered" type="boolean" readonly="yes">
19342 <desc>
19343 If @c true, the machine was registered, otherwise it was
19344 unregistered.
19345 </desc>
19346 </attribute>
19347 </interface>
19348
19349 <interface
19350 name="ISessionStateChangedEvent" extends="IMachineEvent"
19351 uuid="714a3eef-799a-4489-86cd-fe8e45b2ff8e"
19352 wsmap="managed" autogen="VBoxEvent" id="OnSessionStateChanged"
19353 >
19354 <desc>
19355 The state of the session for the given machine was changed.
19356 <see><link to="IMachine::sessionState"/></see>
19357 </desc>
19358
19359 <attribute name="state" type="SessionState" readonly="yes">
19360 <desc>
19361 New session state.
19362 </desc>
19363 </attribute>
19364 </interface>
19365
19366 <interface
19367 name="IGuestPropertyChangedEvent" extends="IMachineEvent"
19368 uuid="3f63597a-26f1-4edb-8dd2-6bddd0912368"
19369 wsmap="managed" autogen="VBoxEvent" id="OnGuestPropertyChanged"
19370 >
19371 <desc>
19372 Notification when a guest property has changed.
19373 </desc>
19374
19375 <attribute name="name" readonly="yes" type="wstring">
19376 <desc>
19377 The name of the property that has changed.
19378 </desc>
19379 </attribute>
19380
19381 <attribute name="value" readonly="yes" type="wstring">
19382 <desc>
19383 The new property value.
19384 </desc>
19385 </attribute>
19386
19387 <attribute name="flags" readonly="yes" type="wstring">
19388 <desc>
19389 The new property flags.
19390 </desc>
19391 </attribute>
19392
19393 </interface>
19394
19395 <interface
19396 name="ISnapshotEvent" extends="IMachineEvent"
19397 uuid="21637b0e-34b8-42d3-acfb-7e96daf77c22"
19398 wsmap="managed" id="SnapshotEvent"
19399 >
19400 <desc>Base interface for all snapshot events.</desc>
19401
19402 <attribute name="snapshotId" readonly="yes" type="uuid" mod="string">
19403 <desc>ID of the snapshot this event relates to.</desc>
19404 </attribute>
19405
19406 </interface>
19407
19408 <interface
19409 name="ISnapshotTakenEvent" extends="ISnapshotEvent"
19410 uuid="d27c0b3d-6038-422c-b45e-6d4a0503d9f1"
19411 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotTaken"
19412 >
19413 <desc>
19414 A new snapshot of the machine has been taken.
19415 <see><link to="ISnapshot"/></see>
19416 </desc>
19417 </interface>
19418
19419 <interface
19420 name="ISnapshotDeletedEvent" extends="ISnapshotEvent"
19421 uuid="c48f3401-4a9e-43f4-b7a7-54bd285e22f4"
19422 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotDeleted"
19423 >
19424 <desc>
19425 Snapshot of the given machine has been deleted.
19426
19427 <note>
19428 This notification is delivered <b>after</b> the snapshot
19429 object has been uninitialized on the server (so that any
19430 attempt to call its methods will return an error).
19431 </note>
19432
19433 <see><link to="ISnapshot"/></see>
19434 </desc>
19435 </interface>
19436
19437 <interface
19438 name="ISnapshotChangedEvent" extends="ISnapshotEvent"
19439 uuid="07541941-8079-447a-a33e-47a69c7980db"
19440 wsmap="managed" autogen="VBoxEvent" id="OnSnapshotChanged"
19441 >
19442 <desc>
19443 Snapshot properties (name and/or description) have been changed.
19444 <see><link to="ISnapshot"/></see>
19445 </desc>
19446 </interface>
19447
19448 <interface
19449 name="IMousePointerShapeChangedEvent" extends="IEvent"
19450 uuid="a6dcf6e8-416b-4181-8c4a-45ec95177aef"
19451 wsmap="managed" autogen="VBoxEvent" id="OnMousePointerShapeChanged"
19452 >
19453 <desc>
19454 Notification when the guest mouse pointer shape has
19455 changed. The new shape data is given.
19456 </desc>
19457
19458 <attribute name="visible" type="boolean" readonly="yes">
19459 <desc>
19460 Flag whether the pointer is visible.
19461 </desc>
19462 </attribute>
19463 <attribute name="alpha" type="boolean" readonly="yes">
19464 <desc>
19465 Flag whether the pointer has an alpha channel.
19466 </desc>
19467 </attribute>
19468 <attribute name="xhot" type="unsigned long" readonly="yes">
19469 <desc>
19470 The pointer hot spot X coordinate.
19471 </desc>
19472 </attribute>
19473 <attribute name="yhot" type="unsigned long" readonly="yes">
19474 <desc>
19475 The pointer hot spot Y coordinate.
19476 </desc>
19477 </attribute>
19478 <attribute name="width" type="unsigned long" readonly="yes">
19479 <desc>
19480 Width of the pointer shape in pixels.
19481 </desc>
19482 </attribute>
19483 <attribute name="height" type="unsigned long" readonly="yes">
19484 <desc>
19485 Height of the pointer shape in pixels.
19486 </desc>
19487 </attribute>
19488 <attribute name="shape" type="octet" safearray="yes" readonly="yes">
19489 <desc>
19490 Shape buffer arrays.
19491
19492 The @a shape buffer contains a 1-bpp (bits per pixel) AND mask
19493 followed by a 32-bpp XOR (color) mask.
19494
19495 For pointers without alpha channel the XOR mask pixels are 32
19496 bit values: (lsb)BGR0(msb). For pointers with alpha channel
19497 the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
19498
19499 An AND mask is used for pointers with alpha channel, so if the
19500 callback does not support alpha, the pointer could be
19501 displayed as a normal color pointer.
19502
19503 The AND mask is a 1-bpp bitmap with byte aligned scanlines. The
19504 size of the AND mask therefore is <tt>cbAnd = (width + 7) / 8 *
19505 height</tt>. The padding bits at the end of each scanline are
19506 undefined.
19507
19508 The XOR mask follows the AND mask on the next 4-byte aligned
19509 offset: <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>.
19510 Bytes in the gap between the AND and the XOR mask are undefined.
19511 The XOR mask scanlines have no gap between them and the size of
19512 the XOR mask is: <tt>cXor = width * 4 * height</tt>.
19513
19514 <note>
19515 If @a shape is 0, only the pointer visibility is changed.
19516 </note>
19517 </desc>
19518 </attribute>
19519 </interface>
19520
19521 <interface
19522 name="IMouseCapabilityChangedEvent" extends="IEvent"
19523 uuid="d633ad48-820c-4207-b46c-6bd3596640d5"
19524 wsmap="managed" autogen="VBoxEvent" id="OnMouseCapabilityChanged"
19525 >
19526 <desc>
19527 Notification when the mouse capabilities reported by the
19528 guest have changed. The new capabilities are passed.
19529 </desc>
19530 <attribute name="supportsAbsolute" type="boolean" readonly="yes">
19531 <desc>
19532 Supports absolute coordinates.
19533 </desc>
19534 </attribute>
19535 <attribute name="supportsRelative" type="boolean" readonly="yes">
19536 <desc>
19537 Supports relative coordinates.
19538 </desc>
19539 </attribute>
19540 <attribute name="needsHostCursor" type="boolean" readonly="yes">
19541 <desc>
19542 If host cursor is needed.
19543 </desc>
19544 </attribute>
19545 </interface>
19546
19547 <interface
19548 name="IKeyboardLedsChangedEvent" extends="IEvent"
19549 uuid="6DDEF35E-4737-457B-99FC-BC52C851A44F"
19550 wsmap="managed" autogen="VBoxEvent" id="OnKeyboardLedsChanged"
19551 >
19552 <desc>
19553 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
19554 to alter the state of the keyboard LEDs.
19555 </desc>
19556 <attribute name="numLock" type="boolean" readonly="yes">
19557 <desc>
19558 NumLock status.
19559 </desc>
19560 </attribute>
19561 <attribute name="capsLock" type="boolean" readonly="yes">
19562 <desc>
19563 CapsLock status.
19564 </desc>
19565 </attribute>
19566 <attribute name="scrollLock" type="boolean" readonly="yes">
19567 <desc>
19568 ScrollLock status.
19569 </desc>
19570 </attribute>
19571 </interface>
19572
19573 <interface
19574 name="IStateChangedEvent" extends="IEvent"
19575 uuid="4376693C-CF37-453B-9289-3B0F521CAF27"
19576 wsmap="managed" autogen="VBoxEvent" id="OnStateChanged"
19577 >
19578 <desc>
19579 Notification when the execution state of the machine has changed.
19580 The new state is given.
19581 </desc>
19582 <attribute name="state" type="MachineState" readonly="yes">
19583 <desc>
19584 New machine state.
19585 </desc>
19586 </attribute>
19587 </interface>
19588
19589 <interface
19590 name="IAdditionsStateChangedEvent" extends="IEvent"
19591 uuid="D70F7915-DA7C-44C8-A7AC-9F173490446A"
19592 wsmap="managed" autogen="VBoxEvent" id="OnAdditionsStateChanged"
19593 >
19594 <desc>
19595 Notification when a Guest Additions property changes.
19596 Interested callees should query IGuest attributes to
19597 find out what has changed.
19598 </desc>
19599 </interface>
19600
19601 <interface
19602 name="INetworkAdapterChangedEvent" extends="IEvent"
19603 uuid="08889892-1EC6-4883-801D-77F56CFD0103"
19604 wsmap="managed" autogen="VBoxEvent" id="OnNetworkAdapterChanged"
19605 >
19606 <desc>
19607 Notification when a property of one of the
19608 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
19609 changes. Interested callees should use INetworkAdapter methods and
19610 attributes to find out what has changed.
19611 </desc>
19612 <attribute name="networkAdapter" type="INetworkAdapter" readonly="yes">
19613 <desc>
19614 Network adapter that is subject to change.
19615 </desc>
19616 </attribute>
19617 </interface>
19618
19619 <interface
19620 name="ISerialPortChangedEvent" extends="IEvent"
19621 uuid="3BA329DC-659C-488B-835C-4ECA7AE71C6C"
19622 wsmap="managed" autogen="VBoxEvent" id="OnSerialPortChanged"
19623 >
19624 <desc>
19625 Notification when a property of one of the
19626 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
19627 Interested callees should use ISerialPort methods and attributes
19628 to find out what has changed.
19629 </desc>
19630 <attribute name="serialPort" type="ISerialPort" readonly="yes">
19631 <desc>
19632 Serial port that is subject to change.
19633 </desc>
19634 </attribute>
19635 </interface>
19636
19637 <interface
19638 name="IParallelPortChangedEvent" extends="IEvent"
19639 uuid="813C99FC-9849-4F47-813E-24A75DC85615"
19640 wsmap="managed" autogen="VBoxEvent" id="OnParallelPortChanged"
19641 >
19642 <desc>
19643 Notification when a property of one of the
19644 virtual <link to="IMachine::getParallelPort">parallel ports</link>
19645 changes. Interested callees should use ISerialPort methods and
19646 attributes to find out what has changed.
19647 </desc>
19648 <attribute name="parallelPort" type="IParallelPort" readonly="yes">
19649 <desc>
19650 Parallel port that is subject to change.
19651 </desc>
19652 </attribute>
19653 </interface>
19654
19655 <interface
19656 name="IStorageControllerChangedEvent" extends="IEvent"
19657 uuid="715212BF-DA59-426E-8230-3831FAA52C56"
19658 wsmap="managed" autogen="VBoxEvent" id="OnStorageControllerChanged"
19659 >
19660 <desc>
19661 Notification when a
19662 <link to="IMachine::mediumAttachments">medium attachment</link>
19663 changes.
19664 </desc>
19665 </interface>
19666
19667 <interface
19668 name="IMediumChangedEvent" extends="IEvent"
19669 uuid="0FE2DA40-5637-472A-9736-72019EABD7DE"
19670 wsmap="managed" autogen="VBoxEvent" id="OnMediumChanged"
19671 >
19672 <desc>
19673 Notification when a
19674 <link to="IMachine::mediumAttachments">medium attachment</link>
19675 changes.
19676 </desc>
19677 <attribute name="mediumAttachment" type="IMediumAttachment" readonly="yes">
19678 <desc>
19679 Medium attachment that is subject to change.
19680 </desc>
19681 </attribute>
19682 </interface>
19683
19684 <interface
19685 name="IClipboardModeChangedEvent" extends="IEvent"
19686 uuid="cac21692-7997-4595-a731-3a509db604e5"
19687 wsmap="managed" autogen="VBoxEvent" id="OnClipboardModeChanged"
19688 >
19689 <desc>
19690 Notification when the shared clipboard mode changes.
19691 </desc>
19692 <attribute name="clipboardMode" type="ClipboardMode" readonly="yes">
19693 <desc>
19694 The new clipboard mode.
19695 </desc>
19696 </attribute>
19697 </interface>
19698
19699 <interface
19700 name="IDragAndDropModeChangedEvent" extends="IEvent"
19701 uuid="e90b8850-ac8e-4dff-8059-4100ae2c3c3d"
19702 wsmap="managed" autogen="VBoxEvent" id="OnDragAndDropModeChanged"
19703 >
19704 <desc>
19705 Notification when the drag'n'drop mode changes.
19706 </desc>
19707 <attribute name="dragAndDropMode" type="DragAndDropMode" readonly="yes">
19708 <desc>
19709 The new drag'n'drop mode.
19710 </desc>
19711 </attribute>
19712 </interface>
19713
19714 <interface
19715 name="ICPUChangedEvent" extends="IEvent"
19716 uuid="4da2dec7-71b2-4817-9a64-4ed12c17388e"
19717 wsmap="managed" autogen="VBoxEvent" id="OnCPUChanged"
19718 >
19719 <desc>
19720 Notification when a CPU changes.
19721 </desc>
19722 <attribute name="CPU" type="unsigned long" readonly="yes">
19723 <desc>
19724 The CPU which changed.
19725 </desc>
19726 </attribute>
19727 <attribute name="add" type="boolean" readonly="yes">
19728 <desc>
19729 Flag whether the CPU was added or removed.
19730 </desc>
19731 </attribute>
19732 </interface>
19733
19734 <interface
19735 name="ICPUExecutionCapChangedEvent" extends="IEvent"
19736 uuid="dfa7e4f5-b4a4-44ce-85a8-127ac5eb59dc"
19737 wsmap="managed" autogen="VBoxEvent" id="OnCPUExecutionCapChanged"
19738 >
19739 <desc>
19740 Notification when the CPU execution cap changes.
19741 </desc>
19742 <attribute name="executionCap" type="unsigned long" readonly="yes">
19743 <desc>
19744 The new CPU execution cap value. (1-100)
19745 </desc>
19746 </attribute>
19747 </interface>
19748
19749 <interface
19750 name="IGuestKeyboardEvent" extends="IEvent"
19751 uuid="88394258-7006-40d4-b339-472ee3801844"
19752 wsmap="managed" autogen="VBoxEvent" id="OnGuestKeyboard"
19753 >
19754 <desc>
19755 Notification when guest keyboard event happens.
19756 </desc>
19757 <attribute name="scancodes" type="long" safearray="yes" readonly="yes">
19758 <desc>
19759 Array of scancodes.
19760 </desc>
19761 </attribute>
19762 </interface>
19763
19764 <interface
19765 name="IGuestMouseEvent" extends="IReusableEvent"
19766 uuid="1f85d35c-c524-40ff-8e98-307000df0992"
19767 wsmap="managed" autogen="VBoxEvent" id="OnGuestMouse"
19768 >
19769 <desc>
19770 Notification when guest mouse event happens.
19771 </desc>
19772
19773 <attribute name="absolute" type="boolean" readonly="yes">
19774 <desc>
19775 If this event is relative or absolute.
19776 </desc>
19777 </attribute>
19778
19779 <attribute name="x" type="long" readonly="yes">
19780 <desc>
19781 New X position, or X delta.
19782 </desc>
19783 </attribute>
19784
19785 <attribute name="y" type="long" readonly="yes">
19786 <desc>
19787 New Y position, or Y delta.
19788 </desc>
19789 </attribute>
19790
19791 <attribute name="z" type="long" readonly="yes">
19792 <desc>
19793 Z delta.
19794 </desc>
19795 </attribute>
19796
19797 <attribute name="w" type="long" readonly="yes">
19798 <desc>
19799 W delta.
19800 </desc>
19801 </attribute>
19802
19803 <attribute name="buttons" type="long" readonly="yes">
19804 <desc>
19805 Button state bitmask.
19806 </desc>
19807 </attribute>
19808
19809 </interface>
19810
19811
19812 <interface
19813 name="IVRDEServerChangedEvent" extends="IEvent"
19814 uuid="a06fd66a-3188-4c8c-8756-1395e8cb691c"
19815 wsmap="managed" autogen="VBoxEvent" id="OnVRDEServerChanged"
19816 >
19817 <desc>
19818 Notification when a property of the
19819 <link to="IMachine::VRDEServer">VRDE server</link> changes.
19820 Interested callees should use IVRDEServer methods and attributes to
19821 find out what has changed.
19822 </desc>
19823 </interface>
19824
19825 <interface
19826 name="IVRDEServerInfoChangedEvent" extends="IEvent"
19827 uuid="dd6a1080-e1b7-4339-a549-f0878115596e"
19828 wsmap="managed" autogen="VBoxEvent" id="OnVRDEServerInfoChanged"
19829 >
19830 <desc>
19831 Notification when the status of the VRDE server changes. Interested callees
19832 should use <link to="IConsole::VRDEServerInfo">IVRDEServerInfo</link>
19833 attributes to find out what is the current status.
19834 </desc>
19835 </interface>
19836
19837 <interface
19838 name="IUSBControllerChangedEvent" extends="IEvent"
19839 uuid="93BADC0C-61D9-4940-A084-E6BB29AF3D83"
19840 wsmap="managed" autogen="VBoxEvent" id="OnUSBControllerChanged"
19841 >
19842 <desc>
19843 Notification when a property of the virtual
19844 <link to="IMachine::USBController">USB controller</link> changes.
19845 Interested callees should use IUSBController methods and attributes to
19846 find out what has changed.
19847 </desc>
19848 </interface>
19849
19850 <interface
19851 name="IUSBDeviceStateChangedEvent" extends="IEvent"
19852 uuid="806da61b-6679-422a-b629-51b06b0c6d93"
19853 wsmap="managed" autogen="VBoxEvent" id="OnUSBDeviceStateChanged"
19854 >
19855 <desc>
19856 Notification when a USB device is attached to or detached from
19857 the virtual USB controller.
19858
19859 This notification is sent as a result of the indirect
19860 request to attach the device because it matches one of the
19861 machine USB filters, or as a result of the direct request
19862 issued by <link to="IConsole::attachUSBDevice"/> or
19863 <link to="IConsole::detachUSBDevice"/>.
19864
19865 This notification is sent in case of both a succeeded and a
19866 failed request completion. When the request succeeds, the
19867 @a error parameter is @c null, and the given device has been
19868 already added to (when @a attached is @c true) or removed from
19869 (when @a attached is @c false) the collection represented by
19870 <link to="IConsole::USBDevices"/>. On failure, the collection
19871 doesn't change and the @a error parameter represents the error
19872 message describing the failure.
19873 </desc>
19874 <attribute name="device" type="IUSBDevice" readonly="yes">
19875 <desc>
19876 Device that is subject to state change.
19877 </desc>
19878 </attribute>
19879 <attribute name="attached" type="boolean" readonly="yes">
19880 <desc>
19881 @c true if the device was attached and @c false otherwise.
19882 </desc>
19883 </attribute>
19884 <attribute name="error" type="IVirtualBoxErrorInfo" readonly="yes">
19885 <desc>
19886 @c null on success or an error message object on failure.
19887 </desc>
19888 </attribute>
19889 </interface>
19890
19891 <interface
19892 name="ISharedFolderChangedEvent" extends="IEvent"
19893 uuid="B66349B5-3534-4239-B2DE-8E1535D94C0B"
19894 wsmap="managed" autogen="VBoxEvent" id="OnSharedFolderChanged"
19895 >
19896 <desc>
19897 Notification when a shared folder is added or removed.
19898 The @a scope argument defines one of three scopes:
19899 <link to="IVirtualBox::sharedFolders">global shared folders</link>
19900 (<link to="Scope_Global">Global</link>),
19901 <link to="IMachine::sharedFolders">permanent shared folders</link> of
19902 the machine (<link to="Scope_Machine">Machine</link>) or <link
19903 to="IConsole::sharedFolders">transient shared folders</link> of the
19904 machine (<link to="Scope_Session">Session</link>). Interested callees
19905 should use query the corresponding collections to find out what has
19906 changed.
19907 </desc>
19908 <attribute name="scope" type="Scope" readonly="yes">
19909 <desc>
19910 Scope of the notification.
19911 </desc>
19912 </attribute>
19913 </interface>
19914
19915 <interface
19916 name="IRuntimeErrorEvent" extends="IEvent"
19917 uuid="883DD18B-0721-4CDE-867C-1A82ABAF914C"
19918 wsmap="managed" autogen="VBoxEvent" id="OnRuntimeError"
19919 >
19920 <desc>
19921 Notification when an error happens during the virtual
19922 machine execution.
19923
19924 There are three kinds of runtime errors:
19925 <ul>
19926 <li><i>fatal</i></li>
19927 <li><i>non-fatal with retry</i></li>
19928 <li><i>non-fatal warnings</i></li>
19929 </ul>
19930
19931 <b>Fatal</b> errors are indicated by the @a fatal parameter set
19932 to @c true. In case of fatal errors, the virtual machine
19933 execution is always paused before calling this notification, and
19934 the notification handler is supposed either to immediately save
19935 the virtual machine state using <link to="IConsole::saveState"/>
19936 or power it off using <link to="IConsole::powerDown"/>.
19937 Resuming the execution can lead to unpredictable results.
19938
19939 <b>Non-fatal</b> errors and warnings are indicated by the
19940 @a fatal parameter set to @c false. If the virtual machine
19941 is in the Paused state by the time the error notification is
19942 received, it means that the user can <i>try to resume</i> the machine
19943 execution after attempting to solve the problem that caused the
19944 error. In this case, the notification handler is supposed
19945 to show an appropriate message to the user (depending on the
19946 value of the @a id parameter) that offers several actions such
19947 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
19948 wants to retry, the notification handler should continue
19949 the machine execution using the <link to="IConsole::resume"/>
19950 call. If the machine execution is not Paused during this
19951 notification, then it means this notification is a <i>warning</i>
19952 (for example, about a fatal condition that can happen very soon);
19953 no immediate action is required from the user, the machine
19954 continues its normal execution.
19955
19956 Note that in either case the notification handler
19957 <b>must not</b> perform any action directly on a thread
19958 where this notification is called. Everything it is allowed to
19959 do is to post a message to another thread that will then talk
19960 to the user and take the corresponding action.
19961
19962 Currently, the following error identifiers are known:
19963 <ul>
19964 <li><tt>"HostMemoryLow"</tt></li>
19965 <li><tt>"HostAudioNotResponding"</tt></li>
19966 <li><tt>"VDIStorageFull"</tt></li>
19967 <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
19968 </ul>
19969 </desc>
19970 <attribute name="fatal" type="boolean" readonly="yes">
19971 <desc>
19972 Whether the error is fatal or not.
19973 </desc>
19974 </attribute>
19975 <attribute name="id" type="wstring" readonly="yes">
19976 <desc>
19977 Error identifier.
19978 </desc>
19979 </attribute>
19980 <attribute name="message" type="wstring" readonly="yes">
19981 <desc>
19982 Optional error message.
19983 </desc>
19984 </attribute>
19985 </interface>
19986
19987
19988 <interface
19989 name="IEventSourceChangedEvent" extends="IEvent"
19990 uuid="e7932cb8-f6d4-4ab6-9cbf-558eb8959a6a"
19991 waitable="yes"
19992 wsmap="managed" autogen="VBoxEvent" id="OnEventSourceChanged"
19993 >
19994 <desc>
19995 Notification when an event source state changes (listener added or removed).
19996 </desc>
19997
19998 <attribute name="listener" type="IEventListener" readonly="yes">
19999 <desc>
20000 Event listener which has changed.
20001 </desc>
20002 </attribute>
20003
20004 <attribute name="add" type="boolean" readonly="yes">
20005 <desc>
20006 Flag whether listener was added or removed.
20007 </desc>
20008 </attribute>
20009 </interface>
20010
20011 <interface
20012 name="IExtraDataChangedEvent" extends="IEvent"
20013 uuid="024F00CE-6E0B-492A-A8D0-968472A94DC7"
20014 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataChanged"
20015 >
20016 <desc>
20017 Notification when machine specific or global extra data
20018 has changed.
20019 </desc>
20020 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
20021 <desc>
20022 ID of the machine this event relates to.
20023 Null for global extra data changes.
20024 </desc>
20025 </attribute>
20026 <attribute name="key" type="wstring" readonly="yes">
20027 <desc>
20028 Extra data key that has changed.
20029 </desc>
20030 </attribute>
20031 <attribute name="value" type="wstring" readonly="yes">
20032 <desc>
20033 Extra data value for the given key.
20034 </desc>
20035 </attribute>
20036 </interface>
20037
20038 <interface
20039 name="IVetoEvent" extends="IEvent"
20040 uuid="9a1a4130-69fe-472f-ac10-c6fa25d75007"
20041 wsmap="managed"
20042 >
20043 <desc>Base abstract interface for veto events.</desc>
20044
20045 <method name="addVeto">
20046 <desc>
20047 Adds a veto on this event.
20048 </desc>
20049 <param name="reason" type="wstring" dir="in">
20050 <desc>
20051 Reason for veto, could be null or empty string.
20052 </desc>
20053 </param>
20054 </method>
20055
20056 <method name="isVetoed">
20057 <desc>
20058 If this event was vetoed.
20059 </desc>
20060 <param name="result" type="boolean" dir="return">
20061 <desc>
20062 Reason for veto.
20063 </desc>
20064 </param>
20065 </method>
20066
20067 <method name="getVetos">
20068 <desc>
20069 Current veto reason list, if size is 0 - no veto.
20070 </desc>
20071 <param name="result" type="wstring" dir="return" safearray="yes">
20072 <desc>
20073 Array of reasons for veto provided by different event handlers.
20074 </desc>
20075 </param>
20076 </method>
20077
20078 </interface>
20079
20080 <interface
20081 name="IExtraDataCanChangeEvent" extends="IVetoEvent"
20082 uuid="245d88bd-800a-40f8-87a6-170d02249a55"
20083 wsmap="managed" autogen="VBoxEvent" id="OnExtraDataCanChange"
20084 waitable="true"
20085 >
20086 <desc>
20087 Notification when someone tries to change extra data for
20088 either the given machine or (if @c null) global extra data.
20089 This gives the chance to veto against changes.
20090 </desc>
20091 <attribute name="machineId" type="uuid" mod="string" readonly="yes">
20092 <desc>
20093 ID of the machine this event relates to.
20094 Null for global extra data changes.
20095 </desc>
20096 </attribute>
20097 <attribute name="key" type="wstring" readonly="yes">
20098 <desc>
20099 Extra data key that has changed.
20100 </desc>
20101 </attribute>
20102 <attribute name="value" type="wstring" readonly="yes">
20103 <desc>
20104 Extra data value for the given key.
20105 </desc>
20106 </attribute>
20107 </interface>
20108
20109 <interface
20110 name="ICanShowWindowEvent" extends="IVetoEvent"
20111 uuid="adf292b0-92c9-4a77-9d35-e058b39fe0b9"
20112 wsmap="managed" autogen="VBoxEvent" id="OnCanShowWindow"
20113 waitable="true"
20114 >
20115 <desc>
20116 Notification when a call to
20117 <link to="IMachine::canShowConsoleWindow"/> is made by a
20118 front-end to check if a subsequent call to
20119 <link to="IMachine::showConsoleWindow"/> can succeed.
20120
20121 The callee should give an answer appropriate to the current
20122 machine state using event veto. This answer must
20123 remain valid at least until the next
20124 <link to="IConsole::state">machine state</link> change.
20125 </desc>
20126 </interface>
20127
20128 <interface
20129 name="IShowWindowEvent" extends="IEvent"
20130 uuid="B0A0904D-2F05-4D28-855F-488F96BAD2B2"
20131 wsmap="managed" autogen="VBoxEvent" id="OnShowWindow"
20132 waitable="true"
20133 >
20134 <desc>
20135 Notification when a call to
20136 <link to="IMachine::showConsoleWindow"/>
20137 requests the console window to be activated and brought to
20138 foreground on the desktop of the host PC.
20139
20140 This notification should cause the VM console process to
20141 perform the requested action as described above. If it is
20142 impossible to do it at a time of this notification, this
20143 method should return a failure.
20144
20145 Note that many modern window managers on many platforms
20146 implement some sort of focus stealing prevention logic, so
20147 that it may be impossible to activate a window without the
20148 help of the currently active application (which is supposedly
20149 an initiator of this notification). In this case, this method
20150 must return a non-zero identifier that represents the
20151 top-level window of the VM console process. The caller, if it
20152 represents a currently active process, is responsible to use
20153 this identifier (in a platform-dependent manner) to perform
20154 actual window activation.
20155
20156 This method must set @a winId to zero if it has performed all
20157 actions necessary to complete the request and the console
20158 window is now active and in foreground, to indicate that no
20159 further action is required on the caller's side.
20160 </desc>
20161 <attribute name="winId" type="long long">
20162 <desc>
20163 Platform-dependent identifier of the top-level VM console
20164 window, or zero if this method has performed all actions
20165 necessary to implement the <i>show window</i> semantics for
20166 the given platform and/or this VirtualBox front-end.
20167 </desc>
20168 </attribute>
20169 </interface>
20170
20171 <interface
20172 name="INATRedirectEvent" extends="IMachineEvent"
20173 uuid="24eef068-c380-4510-bc7c-19314a7352f1"
20174 wsmap="managed" autogen="VBoxEvent" id="OnNATRedirect"
20175 >
20176 <desc>
20177 Notification when NAT redirect rule added or removed.
20178 </desc>
20179 <attribute name="slot" type="unsigned long" readonly="yes">
20180 <desc>
20181 Adapter which NAT attached to.
20182 </desc>
20183 </attribute>
20184 <attribute name="remove" type="boolean" readonly="yes">
20185 <desc>
20186 Whether rule remove or add.
20187 </desc>
20188 </attribute>
20189 <attribute name="name" type="wstring" readonly="yes">
20190 <desc>
20191 Name of the rule.
20192 </desc>
20193 </attribute>
20194 <attribute name="proto" type="NATProtocol" readonly="yes">
20195 <desc>
20196 Protocol (TCP or UDP) of the redirect rule.
20197 </desc>
20198 </attribute>
20199 <attribute name="hostIP" type="wstring" readonly="yes">
20200 <desc>
20201 Host ip address to bind socket on.
20202 </desc>
20203 </attribute>
20204 <attribute name="hostPort" type="long" readonly="yes">
20205 <desc>
20206 Host port to bind socket on.
20207 </desc>
20208 </attribute>
20209 <attribute name="guestIP" type="wstring" readonly="yes">
20210 <desc>
20211 Guest ip address to redirect to.
20212 </desc>
20213 </attribute>
20214 <attribute name="guestPort" type="long" readonly="yes">
20215 <desc>
20216 Guest port to redirect to.
20217 </desc>
20218 </attribute>
20219 </interface>
20220
20221 <interface
20222 name="IHostPCIDevicePlugEvent" extends="IMachineEvent"
20223 waitable="yes"
20224 uuid="a0bad6df-d612-47d3-89d4-db3992533948"
20225 wsmap="managed" autogen="VBoxEvent" id="OnHostPCIDevicePlug"
20226 >
20227 <desc>
20228 Notification when host PCI device is plugged/unplugged. Plugging
20229 usually takes place on VM startup, unplug - when
20230 <link to="IMachine::detachHostPCIDevice"/> is called.
20231
20232 <see><link to="IMachine::detachHostPCIDevice"/></see>
20233
20234 </desc>
20235
20236 <attribute name="plugged" type="boolean" readonly="yes">
20237 <desc>
20238 If device successfully plugged or unplugged.
20239 </desc>
20240 </attribute>
20241
20242 <attribute name="success" type="boolean" readonly="yes">
20243 <desc>
20244 If operation was successful, if false - 'message' attribute
20245 may be of interest.
20246 </desc>
20247 </attribute>
20248
20249 <attribute name="attachment" type="IPCIDeviceAttachment" readonly="yes">
20250 <desc>
20251 Attachment info for this device.
20252 </desc>
20253 </attribute>
20254
20255 <attribute name="message" type="wstring" readonly="yes">
20256 <desc>
20257 Optional error message.
20258 </desc>
20259 </attribute>
20260
20261 </interface>
20262
20263 <interface
20264 name="IVBoxSVCAvailabilityChangedEvent" extends="IEvent"
20265 uuid="97c78fcd-d4fc-485f-8613-5af88bfcfcdc"
20266 wsmap="managed" autogen="VBoxEvent" id="OnVBoxSVCAvailabilityChanged"
20267 >
20268 <desc>
20269 Notification when VBoxSVC becomes unavailable (due to a crash or similar
20270 unexpected circumstances) or available again.
20271 </desc>
20272
20273 <attribute name="available" type="boolean" readonly="yes">
20274 <desc>
20275 Whether VBoxSVC is available now.
20276 </desc>
20277 </attribute>
20278 </interface>
20279
20280 <interface
20281 name="IBandwidthGroupChangedEvent" extends="IEvent"
20282 uuid="334df94a-7556-4cbc-8c04-043096b02d82"
20283 wsmap="managed" autogen="VBoxEvent" id="OnBandwidthGroupChanged"
20284 >
20285 <desc>
20286 Notification when one of the bandwidth groups changed
20287 </desc>
20288 <attribute name="bandwidthGroup" type="IBandwidthGroup" readonly="yes">
20289 <desc>
20290 The changed bandwidth group.
20291 </desc>
20292 </attribute>
20293 </interface>
20294
20295 <enum
20296 name="GuestMonitorChangedEventType"
20297 uuid="ef172985-7e36-4297-95be-e46396968d66"
20298 >
20299
20300 <desc>
20301 How the guest monitor has been changed.
20302 </desc>
20303
20304 <const name="Enabled" value="0">
20305 <desc>
20306 The guest monitor has been enabled by the guest.
20307 </desc>
20308 </const>
20309
20310 <const name="Disabled" value="1">
20311 <desc>
20312 The guest monitor has been disabled by the guest.
20313 </desc>
20314 </const>
20315
20316 <const name="NewOrigin" value="2">
20317 <desc>
20318 The guest monitor origin has changed in the guest.
20319 </desc>
20320 </const>
20321 </enum>
20322
20323 <interface
20324 name="IGuestMonitorChangedEvent" extends="IEvent"
20325 uuid="0f7b8a22-c71f-4a36-8e5f-a77d01d76090"
20326 wsmap="managed" autogen="VBoxEvent" id="OnGuestMonitorChanged"
20327 >
20328 <desc>
20329 Notification when the guest enables one of its monitors.
20330 </desc>
20331
20332 <attribute name="changeType" type="GuestMonitorChangedEventType" readonly="yes">
20333 <desc>
20334 What was changed for this guest monitor.
20335 </desc>
20336 </attribute>
20337
20338 <attribute name="screenId" type="unsigned long" readonly="yes">
20339 <desc>
20340 The monitor which was changed.
20341 </desc>
20342 </attribute>
20343
20344 <attribute name="originX" type="unsigned long" readonly="yes">
20345 <desc>
20346 Physical X origin relative to the primary screen.
20347 Valid for Enabled and NewOrigin.
20348 </desc>
20349 </attribute>
20350
20351 <attribute name="originY" type="unsigned long" readonly="yes">
20352 <desc>
20353 Physical Y origin relative to the primary screen.
20354 Valid for Enabled and NewOrigin.
20355 </desc>
20356 </attribute>
20357
20358 <attribute name="width" type="unsigned long" readonly="yes">
20359 <desc>
20360 Width of the screen.
20361 Valid for Enabled.
20362 </desc>
20363 </attribute>
20364
20365 <attribute name="height" type="unsigned long" readonly="yes">
20366 <desc>
20367 Height of the screen.
20368 Valid for Enabled.
20369 </desc>
20370 </attribute>
20371
20372 </interface>
20373
20374 <interface
20375 name="IStorageDeviceChangedEvent" extends="IEvent"
20376 uuid="8a5c2dce-e341-49d4-afce-c95979f7d70c"
20377 wsmap="managed" autogen="VBoxEvent" id="OnStorageDeviceChanged"
20378 >
20379 <desc>
20380 Notification when a
20381 <link to="IMachine::mediumAttachments">storage device</link>
20382 is attached or removed.
20383 </desc>
20384 <attribute name="storageDevice" type="IMediumAttachment" readonly="yes">
20385 <desc>
20386 Storage device that is subject to change.
20387 </desc>
20388 </attribute>
20389 <attribute name="removed" type="boolean" readonly="yes">
20390 <desc>
20391 Flag whether the device was removed or added to the VM.
20392 </desc>
20393 </attribute>
20394 </interface>
20395
20396 <module name="VBoxSVC" context="LocalServer">
20397 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
20398 namespace="virtualbox.org">
20399 <interface name="IVirtualBox" default="yes"/>
20400 </class>
20401 </module>
20402
20403 <module name="VBoxC" context="InprocServer" threadingModel="Free">
20404 <class name="VirtualBoxClient" uuid="dd3fc71d-26c0-4fe1-bf6f-67f633265bba"
20405 namespace="virtualbox.org">
20406 <interface name="IVirtualBoxClient" default="yes"/>
20407 </class>
20408
20409 <class name="Session" uuid="3C02F46D-C9D2-4F11-A384-53F0CF917214"
20410 namespace="virtualbox.org">
20411 <interface name="ISession" default="yes"/>
20412 </class>
20413 </module>
20414
20415</library>
20416
20417</idl>
20418
20419<!-- 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