VirtualBox

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

Last change on this file since 9224 was 8836, checked in by vboxsync, 17 years ago

Main: API doc fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 356.8 KB
Line 
1<?xml version="1.0" ?>
2
3<!--
4 * :tabSize=2:indentSize=2:noTabs=true:
5 * :folding=explicit:collapseFolds=1:
6 *
7 * Master declaration for VirtualBox's Main API, represented
8 * by COM/XPCOM and web service interfaces.
9 *
10 * From this document, the build system generates several files
11 * via XSLT that are then used during the build process.
12 *
13 * Below is the list of XSL templates that operate on this file and
14 * output files they generate. These XSL templates must be updated
15 * whenever the schema of this file changes:
16 *
17 * 1. src/VBox/Main/idl/midl.xsl =>
18 * out/<platform>/bin/sdk/idl/VirtualBox.idl
19 * (MS COM interface definition file for Main API)
20 *
21 * 2. src/VBox/Main/idl/xpidl.xsl =>
22 * out/<platform>/bin/sdk/idl/VirtualBox_XPCOM.idl
23 * (XPCOM interface definition file for Main API)
24 *
25 * 3. src/VBox/Main/idl/doxygen.xsl =>
26 * out/<platform>/obj/src/VBox/Main/VirtualBox.idl
27 * (pseudo-IDL for Doxygen to generate the official Main API
28 * documentation)
29 *
30 * 4. src/VBox/Main/webservice/*.xsl =>
31 * a bunch of WSDL and C++ files
32 * (VirtualBox web service sources and SOAP mappers;
33 * see src/VBox/Main/webservice/Makefile.kmk for details)
34 *
35 * 5. src/VBox/Frontends/VirtualBox/include/COMWrappers.xsl =>
36 * out/<platform>/obj/src/VBox/Frontends/VirtualBox/VirtualBox/include/COMWrappers.h
37 * (smart Qt-based C++ wrapper classes for COM interfaces
38 * of the Main API)
39 *
40 * 6. src/VBox/Installer/win32/VirtualBox_TypeLib.xsl =>
41 * out/<platform>/obj/src/VBox/Installer/win32/VirtualBox_TypeLib.wxi
42 * (Main API TypeLib block for the WiX installer)
43 *
44 Copyright (C) 2006-2007 Sun Microsystems, Inc.
45
46 This file is part of VirtualBox Open Source Edition (OSE), as
47 available from http://www.virtualbox.org. This file is free software;
48 you can redistribute it and/or modify it under the terms of the GNU
49 General Public License (GPL) as published by the Free Software
50 Foundation, in version 2 as it comes in the "COPYING" file of the
51 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
52 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
53
54 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
55 Clara, CA 95054 USA or visit http://www.sun.com if you need
56 additional information or have any questions.
57-->
58
59<idl>
60
61<if target="midl">
62 <cpp line="enum {"/>
63 <cpp line=" kTypeLibraryMajorVersion = 1,"/>
64 <cpp line=" kTypeLibraryMinorVersion = 0"/>
65 <cpp line="};"/>
66</if>
67
68<if target="xpidl">
69 <!-- NS_IMPL_THREADSAFE_ISUPPORTSxx_CI macros are placed here, for convenience -->
70 <cpp>
71// currenty, nsISupportsImpl.h lacks the below-like macros
72#ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
73#define NS_IMPL_THREADSAFE_ISUPPORTS1_CI(_class, _interface) \
74 NS_IMPL_THREADSAFE_ADDREF(_class) \
75 NS_IMPL_THREADSAFE_RELEASE(_class) \
76 NS_IMPL_QUERY_INTERFACE1_CI(_class, _interface) \
77 NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
78#endif
79#ifndef NS_IMPL_THREADSAFE_ISUPPORTS2_CI
80#define NS_IMPL_THREADSAFE_ISUPPORTS2_CI(_class, _i1, _i2) \
81 NS_IMPL_THREADSAFE_ADDREF(_class) \
82 NS_IMPL_THREADSAFE_RELEASE(_class) \
83 NS_IMPL_QUERY_INTERFACE2_CI(_class, _i1, _i2) \
84 NS_IMPL_CI_INTERFACE_GETTER2(_class, _i1, _i2)
85#endif
86 </cpp>
87</if>
88
89<library
90 name="VirtualBox"
91 uuid="46137EEC-703B-4fe5-AFD4-7C9BBBBA0259"
92 version="1.3"
93 desc="innotek VirtualBox Type Library"
94 appUuid="819B4D85-9CEE-493C-B6FC-64FFE759B3C9"
95 supportsErrorInfo="yes"
96>
97
98 <!--
99 // all common enums
100 /////////////////////////////////////////////////////////////////////////
101 -->
102
103 <enum
104 name="TSBool"
105 uuid="523ff64d-842a-4b1a-80e7-c311b028cb3a"
106 >
107 <desc>
108 Boolean variable having a third state, default.
109 </desc>
110
111 <const name="False" value="0"/>
112 <const name="True" value="1"/>
113 <const name="Default" value="2"/>
114 </enum>
115
116 <enum
117 name="MachineState"
118 uuid="73bf04d0-7c4f-4684-9abf-d65a9ad74343"
119 >
120 <desc>
121 Virtual machine execution state. This enumeration represents possible
122 values of the <link to="IMachine::state"/> attribute.
123 </desc>
124
125 <const name="Null" value="0">
126 <desc><tt>null</tt> value. Never used by the API.</desc>
127 </const>
128 <const name="PoweredOff" value="1">
129 <desc>
130 The machine is not running.
131 </desc>
132 </const>
133 <const name="Saved" value="2">
134 <desc>
135 The machine is not currently running, but the execution state
136 of the machine has been saved to an external file when it
137 was running.
138 <note>
139 No any machine settings can be altered when the machine
140 is in this state.
141 </note>
142 </desc>
143 </const>
144 <const name="Aborted" value="3">
145 <desc>
146 A process that run the machine has abnormally terminated.
147 Other than that, this value is equivalent to #PoweredOff.
148 </desc>
149 </const>
150 <const name="Running" value="4">
151 <desc>
152 The machine is currently being executed.
153 <note>
154 This value can be used in comparison expressions:
155 all state values below it describe a virtual machine that is
156 not currently being executed (i.e., it is completely out of
157 action).
158 </note>
159 <note>
160 For whoever decides to touch this enum: In order to keep the
161 aforementioned comparisons valid, this state must immediately
162 preceed the Paused state.
163 </note>
164 </desc>
165 </const>
166 <const name="Paused" value="5">
167 <desc>
168 The execution of the machine has been paused.
169 <note>
170 This value can be used in comparison expressions: all state values
171 above it represent unstable states of the running virtual
172 machine. Unless explicitly stated otherwise, no machine settings can
173 be altered when it is in one of the unstable sates.
174 </note>
175 <note>
176 For whoever decides to touch this enum: In order to keep the
177 aforementioned comparisons valid, this state must immediately
178 follow the Running state.
179 </note>
180 </desc>
181 </const>
182 <const name="Stuck" value="6">
183 <desc>
184 The execution of the machine has reached the Guru Meditaion
185 condition. This condition indicates an internal VMM failure which may
186 happen as a result of either an unhandled low-level virtual hardware
187 exception or one of the recompiler exceptions (such as
188 the <i>too-many-traps</i> condition).
189 </desc>
190 </const>
191 <const name="Starting" value="7">
192 <desc>
193 The machine is being started after
194 <link to="IConsole::powerUp">powering it on</link> from a
195 zero execution state.
196 </desc>
197 </const>
198 <const name="Stopping" value="8">
199 <desc>
200 The machine is being normally stopped
201 (after explicitly <link to="IConsole::powerDown">powering it off</link>,
202 or after the guest OS has initiated a shutdown sequence).
203 </desc>
204 </const>
205 <const name="Saving" value="9">
206 <desc>
207 The machine is saving its execution state to a file as a
208 result of calling <link to="IConsole::saveState"/> or an online
209 snapshot of the machine is being taken using
210 <link to="IConsole::takeSnapshot"/>.
211 </desc>
212 </const>
213 <const name="Restoring" value="10">
214 <desc>
215 The execution state of the machine is being restored from a file
216 after <link to="IConsole::powerUp">powering it on</link> from
217 a saved execution state.
218 </desc>
219 </const>
220 <const name="Discarding" value="11">
221 <desc>
222 A snapshot of the machine is being discarded after calling
223 <link to="IConsole::discardSnapshot"/> or its current state is
224 being discarded after <link to="IConsole::discardCurrentState"/>.
225 </desc>
226 </const>
227 </enum>
228
229 <enum
230 name="SessionState"
231 uuid="CF2700C0-EA4B-47ae-9725-7810114B94D8"
232 >
233 <desc>
234 Session state. This enumeration represents possible values of
235 <link to="IMachine::sessionState"/> and <link to="ISession::state"/>
236 attributes. Idividual value descriptions contain the appropriate
237 meaning for every case.
238 </desc>
239
240 <const name="Null" value="0">
241 <desc><tt>null</tt> value. Never used by the API.</desc>
242 </const>
243 <const name="Closed" value="1">
244 <desc>
245 The machine has no open sessions (<link to="IMachine::sessionState"/>);
246 the session is closed (<link to="ISession::state"/>)
247 </desc>
248 </const>
249 <const name="Open" value="2">
250 <desc>
251 The machine has an open direct session (<link to="IMachine::sessionState"/>);
252 the session is open (<link to="ISession::state"/>)
253 </desc>
254 </const>
255 <const name="Spawning" value="3">
256 <desc>
257 A new (direct) session is being opened for the machine
258 as a result of <link to="IVirtualBox::openRemoteSession()"/>
259 call (<link to="IMachine::sessionState"/>);
260 the session is currently being opened
261 as a result of <link to="IVirtualBox::openRemoteSession()"/>
262 call (<link to="ISession::state"/>)
263 </desc>
264 </const>
265 <const name="Closing" value="4">
266 <desc>
267 The direct session is being closed (<link to="IMachine::sessionState"/>);
268 the session is being closed (<link to="ISession::state"/>)
269 </desc>
270 </const>
271 </enum>
272
273 <enum
274 name="SessionType"
275 uuid="A13C02CB-0C2C-421E-8317-AC0E8AAA153A"
276 >
277 <desc>
278 Session type. This enumeration represents possible values of the
279 <link to="ISession::type"/> attribute.
280 </desc>
281
282 <const name="Null" value="0">
283 <desc><tt>null</tt> value. Never used by the API.</desc>
284 </const>
285 <const name="Direct" value="1">
286 <desc>
287 Direct session
288 (opened by <link to="IVirtualBox::openSession()"/>)
289 </desc>
290 </const>
291 <const name="Remote" value="2">
292 <desc>
293 Remote session
294 (opened by <link to="IVirtualBox::openRemoteSession()"/>)
295 </desc>
296 </const>
297 <const name="Existing" value="3">
298 <desc>
299 Existing session
300 (opened by <link to="IVirtualBox::openExistingSession()"/>)
301 </desc>
302 </const>
303 </enum>
304
305 <enum
306 name="DeviceType"
307 uuid="6d9420f7-0b56-4636-99f9-7346f1b01e57"
308 >
309 <desc>
310 Device type.
311 </desc>
312 <const name="Null" value="0">
313 <desc>
314 <tt>null</tt> value which may also mean "no device".
315 <note>
316 This value is not allowed for
317 <link to="IConsole::getDeviceActivity"/>
318 </note>
319 </desc>
320 </const>
321 <const name="Floppy" value="1">
322 <desc>Floppy device.</desc>
323 </const>
324 <const name="DVD" value="2">
325 <desc>CD/DVD-ROM device.</desc>
326 </const>
327 <const name="HardDisk" value="3">
328 <desc>Hard disk device.</desc>
329 </const>
330 <const name="Network" value="4">
331 <desc>Network device.</desc>
332 </const>
333 <const name="USB" value="5">
334 <desc>USB device.</desc>
335 </const>
336 <const name="SharedFolder" value="6">
337 <desc>Shared folder device.</desc>
338 </const>
339 </enum>
340
341 <enum
342 name="DeviceActivity"
343 uuid="6FC8AEAA-130A-4eb5-8954-3F921422D707"
344 >
345 <desc>
346 Device activity for <link to="IConsole::getDeviceActivity"/>.
347 </desc>
348
349 <const name="Null" value="0"/>
350 <const name="Idle" value="1"/>
351 <const name="Reading" value="2"/>
352 <const name="Writing" value="3"/>
353 </enum>
354
355 <enum
356 name="ResourceUsage"
357 uuid="FC56E4B6-B195-48e2-A5E1-A667B0D9F809"
358 >
359 <desc>
360 Usage type constants for
361 <link to="IVirtualBox::getDVDImageUsage"/> and
362 <link to="IVirtualBox::getFloppyImageUsage"/>.
363 </desc>
364
365 <const name="Null" value="0">
366 <desc><tt>null</tt> value. Never used by the API.</desc>
367 </const>
368 <const name="Permanent" value="1">
369 <desc>
370 Scopes the VMs that use the resource permanently
371 (the information about this usage is stored in the VM
372 settings file).
373 </desc>
374 </const>
375 <const name="Temporary" value="2">
376 <desc>
377 Scopes the VMs that are temporarily using the resource
378 (the information about the usage is not yet saved in the VM
379 settings file). Temporary usage can take place only in the
380 context of an open session.
381 </desc>
382 </const>
383 <const name="All" value="3">
384 <desc>
385 Combines Permanent and Temporary.
386 </desc>
387 </const>
388 </enum>
389
390 <enum
391 name="StorageBus"
392 uuid="715984a5-093c-43bb-aa42-a16ed16828dd"
393 >
394 <desc>Interface bus type for storage devices.</desc>
395
396 <const name="Null" value="0">
397 <desc><tt>null</tt> value. Never used by the API.</desc>
398 </const>
399
400 <const name="IDE" value="1"/>
401 <const name="SATA" value="2"/>
402 </enum>
403
404 <enum
405 name="ClipboardMode"
406 uuid="33364716-4008-4701-8f14-be0fa3d62950"
407 >
408 <desc>
409 Host-Guest clipboard interchange mode.
410 </desc>
411
412 <const name="Disabled" value="0"/>
413 <const name="HostToGuest" value="1"/>
414 <const name="GuestToHost" value="2"/>
415 <const name="Bidirectional" value="3"/>
416 </enum>
417
418 <enum
419 name="Scope"
420 uuid="7c91096e-499e-4eca-9f9b-9001438d7855"
421 >
422 <desc>
423 Scope of the operation.
424
425 A generic enumeration used in various methods to define the action or
426 argument scope.
427 </desc>
428
429 <const name="Global" value="0"/>
430 <const name="Machine" value="1"/>
431 <const name="Session" value="2"/>
432 </enum>
433
434 <enum
435 name="GuestStatisticType"
436 uuid="aa7c1d71-aafe-47a8-9608-27d2d337cf55"
437 >
438 <desc>
439 Statistics type for <link to="IGuest::getStatistic"/>.
440 </desc>
441
442 <const name="CPULoad_Idle" value="0">
443 <desc>
444 Idle CPU load (0-100%) for last interval.
445 </desc>
446 </const>
447 <const name="CPULoad_Kernel" value="1">
448 <desc>
449 Kernel CPU load (0-100%) for last interval.
450 </desc>
451 </const>
452 <const name="CPULoad_User" value="2">
453 <desc>
454 User CPU load (0-100%) for last interval.
455 </desc>
456 </const>
457 <const name="Threads" value="3">
458 <desc>
459 Total number of threads in the system.
460 </desc>
461 </const>
462 <const name="Processes" value="4">
463 <desc>
464 Total number of processes in the system.
465 </desc>
466 </const>
467 <const name="Handles" value="5">
468 <desc>
469 Total number of handles in the system.
470 </desc>
471 </const>
472 <const name="MemoryLoad" value="6">
473 <desc>
474 Memory load (0-100%).
475 </desc>
476 </const>
477 <const name="PhysMemTotal" value="7">
478 <desc>
479 Total physical memory in megabytes.
480 </desc>
481 </const>
482 <const name="PhysMemAvailable" value="8">
483 <desc>
484 Free physical memory in megabytes.
485 </desc>
486 </const>
487 <const name="PhysMemBalloon" value="9">
488 <desc>
489 Ballooned physical memory in megabytes.
490 </desc>
491 </const>
492 <const name="MemCommitTotal" value="10">
493 <desc>
494 Total amount of memory in the committed state in megabytes.
495 </desc>
496 </const>
497 <const name="MemKernelTotal" value="11">
498 <desc>
499 Total amount of memory used by the guest OS's kernel in megabytes.
500 </desc>
501 </const>
502 <const name="MemKernelPaged" value="12">
503 <desc>
504 Total amount of paged memory used by the guest OS's kernel in megabytes.
505 </desc>
506 </const>
507 <const name="MemKernelNonpaged" value="13">
508 <desc>
509 Total amount of nonpaged memory used by the guest OS's kernel in megabytes.
510 </desc>
511 </const>
512 <const name="MemSystemCache" value="14">
513 <desc>
514 Total amount of memory used by the guest OS's system cache in megabytes.
515 </desc>
516 </const>
517 <const name="PageFileSize" value="15">
518 <desc>
519 Pagefile size in megabytes.
520 </desc>
521 </const>
522 <const name="SampleNumber" value="16">
523 <desc>
524 Statistics sample number
525 </desc>
526 </const>
527 <const name="MaxVal" value="17"/>
528 </enum>
529
530 <enum
531 name="BIOSBootMenuMode"
532 uuid="ae4fb9f7-29d2-45b4-b2c7-d579603135d5"
533 >
534 <desc>
535 BIOS boot menu mode.
536 </desc>
537
538 <const name="Disabled" value="0"/>
539 <const name="MenuOnly" value="1"/>
540 <const name="MessageAndMenu" value="2"/>
541 </enum>
542
543 <enum
544 name="IDEControllerType"
545 uuid="445330e3-202a-4dab-854f-ce22e6cb9715"
546 >
547 <desc>
548 IDE controller type.
549 </desc>
550
551 <const name="Null" value="0">
552 <desc><tt>null</tt> value. Never used by the API.</desc>
553 </const>
554 <const name="PIIX3" value="1"/>
555 <const name="PIIX4" value="2"/>
556 </enum>
557
558 <enum
559 name="DriveState"
560 uuid="cb7233b7-c519-42a5-8310-1830953cacbc"
561 >
562 <const name="Null" value="0">
563 <desc><tt>null</tt> value. Never used by the API.</desc>
564 </const>
565 <const name="NotMounted" value="1"/>
566 <const name="ImageMounted" value="2"/>
567 <const name="HostDriveCaptured" value="3"/>
568 </enum>
569
570 <!--
571 // IVirtualBoxErrorInfo
572 /////////////////////////////////////////////////////////////////////////
573 -->
574
575 <interface
576 name="IVirtualBoxErrorInfo" extends="$errorinfo"
577 uuid="e98b5376-8eb4-4eea-812a-3964bf3bb26f"
578 supportsErrorInfo="no"
579 wsmap="suppress"
580 >
581 <desc>
582 The IVirtualBoxErrorInfo interface represents extended error information.
583
584 Extended error information can be set by VirtualBox components after
585 unsuccessful or partially successful method invocation. This information
586 can be retrievefd by the calling party as an IVirtualBoxErrorInfo object
587 and then shown to the client in addition to the plain 32-bit result code.
588
589 In MS COM, this interface extends the IErrorInfo interface,
590 in XPCOM, it extends the nsIException interface. In both cases,
591 it provides a set of common attributes to retrieve error
592 information.
593
594 Sometimes invocation of some component's method may involve methods of
595 other components that may also fail (independently of this method's
596 failure), or a series of non-fatal errors may precede a fatal error that
597 causes method failure. In cases like that, it may be desirable to preserve
598 information about all errors happened during method invocation and deliver
599 it to the caller. The <link to="#next"/> attribute is intended
600 specifically for this purpose and allows to represent a chain of errors
601 through a single IVirtualBoxErrorInfo object set after method invocation.
602
603 Note that errors are stored to a chain in the reverse order, i.e. the
604 initial error object you query right after method invocation is the last
605 error set by the callee, the object it points to in the @a next attribute
606 is the previous error and so on, up to the first error (which is the last
607 in the chain).
608 </desc>
609
610 <attribute name="resultCode" type="result" readonly="yes">
611 <desc>
612 Result code of the error.
613 Usually, it will be the same as the result code returned
614 by the method that provided this error information, but not
615 always. For example, on Win32, CoCreateInstance() will most
616 likely return E_NOINTERFACE upon unsuccessful component
617 instantiation attempt, but not the value the component factory
618 returned.
619 <note>
620 In MS COM, there is no equivalent.
621 In XPCOM, it is the same as nsIException::result.
622 </note>
623 </desc>
624 </attribute>
625
626 <attribute name="interfaceID" type="uuid" readonly="yes">
627 <desc>
628 UUID of the interface that defined the error.
629 <note>
630 In MS COM, it is the same as IErrorInfo::GetGUID.
631 In XPCOM, there is no equivalent.
632 </note>
633 </desc>
634 </attribute>
635
636 <attribute name="component" type="wstring" readonly="yes">
637 <desc>
638 Name of the component that generated the error.
639 <note>
640 In MS COM, it is the same as IErrorInfo::GetSource.
641 In XPCOM, there is no equivalent.
642 </note>
643 </desc>
644 </attribute>
645
646 <attribute name="text" type="wstring" readonly="yes">
647 <desc>
648 Text description of the error.
649 <note>
650 In MS COM, it is the same as IErrorInfo::GetDescription.
651 In XPCOM, it is the same as nsIException::message.
652 </note>
653 </desc>
654 </attribute>
655
656 <attribute name="next" type="IVirtualBoxErrorInfo" readonly="yes">
657 <desc>
658 Next error object if there is any, or @c null otherwise.
659 <note>
660 In MS COM, there is no equivalent.
661 In XPCOM, it is the same as nsIException::inner.
662 </note>
663 </desc>
664 </attribute>
665
666 </interface>
667
668
669 <!--
670 // IVirtualBox
671 /////////////////////////////////////////////////////////////////////////
672 -->
673
674 <interface
675 name="IVirtualBoxCallback" extends="$unknown"
676 uuid="ee95ffc2-b6c6-4ce8-9e9e-ceadbb5019fe"
677 wsmap="suppress"
678 >
679 <method name="onMachineStateChange">
680 <desc>
681 The execution state of the given machine has changed.
682 <see>IMachine::state</see>
683 </desc>
684 <param name="machineId" type="uuid" dir="in">
685 <desc>ID of the machine this event relates to.</desc>
686 </param>
687 <param name="state" type="MachineState" dir="in">
688 <desc>New execution state.</desc>
689 </param>
690 </method>
691
692 <method name="onMachineDataChange">
693 <desc>
694 Any of the settings of the given machine has changed.
695 </desc>
696 <param name="machineId" type="uuid" dir="in">
697 <desc>ID of the machine this event relates to.</desc>
698 </param>
699 </method>
700
701 <method name="onExtraDataCanChange">
702 <desc>
703 Notification when someone tries to change extra data for
704 either the given machine or (if null) global extra data.
705 This gives the chance to veto against changes.
706 </desc>
707 <param name="machineId" type="uuid" dir="in">
708 <desc>
709 ID of the machine this event relates to
710 (null ID for global extra data change requests).
711 </desc>
712 </param>
713 <param name="key" type="wstring" dir="in">
714 <desc>
715 Extra data key for the attempted write.
716 </desc>
717 </param>
718 <param name="value" type="wstring" dir="in">
719 <desc>
720 Extra data value for the given key.
721 </desc>
722 </param>
723 <param name="error" type="wstring" dir="out">
724 <desc>
725 Optional error message describing the reason of the
726 veto (ignored if this notification returns @c true).
727 </desc>
728 </param>
729 <param name="allowChange" type="boolean" dir="return">
730 <desc>
731 Flag to indicate whether the callee agrees (@ true)
732 or vetoes against the change (@ false).
733 </desc>
734 </param>
735 </method>
736
737 <method name="onExtraDataChange">
738 <desc>
739 Notification when machine specific or global extra data
740 has changed.
741 </desc>
742 <param name="machineId" type="uuid" dir="in">
743 <desc>
744 ID of the machine this event relates to.
745 Null for global extra data changes.
746 </desc>
747 </param>
748 <param name="key" type="wstring" dir="in">
749 <desc>
750 Extra data key that has changed.
751 </desc>
752 </param>
753 <param name="value" type="wstring" dir="in">
754 <desc>
755 Extra data value for the given key.
756 </desc>
757 </param>
758 </method>
759
760 <method name="onMediaRegistered">
761 <desc>
762 The given media was registered or unregistered
763 within this VirtualBox installation.
764
765 The @a mediaType parameter describes what type of
766 media the specified @a mediaId refers to. Possible
767 values are:
768
769 - <link to="DeviceType::HardDisk"/>: the media is a hard disk
770 that, if registered, can be obtained using the
771 <link to="IVirtualBox::getHardDisk"/> call.
772 - <link to="DeviceType::DVD"/>: the media is a CD/DVD image
773 that, if registered, can be obtained using the
774 <link to="IVirtualBox::getDVDImage"/> call.
775 - <link to="DeviceType::Floppy"/>: the media is a Floppy image
776 that, if registered, can be obtained using the
777 <link to="IVirtualBox::getFloppyImage"/> call.
778
779 Note that if this is a deregistration notification,
780 there is no way to access the object representing the
781 unregistered media. It is supposed that the
782 application will do required cleanup based on the @a
783 mediaId value.
784 </desc>
785 <param name="mediaId" type="uuid" dir="in">
786 <desc>ID of the media this event relates to.</desc>
787 </param>
788 <param name="mediaType" type="DeviceType" dir="in">
789 <desc>Type of the media this event relates to.</desc>
790 </param>
791 <param name="registered" type="boolean" dir="in">
792 <desc>
793 If true, the media was registered, otherwise it was
794 unregistered.
795 </desc>
796 </param>
797 </method>
798
799 <method name="onMachineRegistered">
800 <desc>
801 The given machine was registered or unregistered
802 within this VirtualBox installation.
803 </desc>
804 <param name="machineId" type="uuid" dir="in">
805 <desc>ID of the machine this event relates to.</desc>
806 </param>
807 <param name="registered" type="boolean" dir="in">
808 <desc>
809 If true, the machine was registered, otherwise it was
810 unregistered.
811 </desc>
812 </param>
813 </method>
814
815 <method name="onSessionStateChange">
816 <desc>
817 The state of the session for the given machine was changed.
818 <see>IMachine::sessionState</see>
819 </desc>
820 <param name="machineId" type="uuid" dir="in">
821 <desc>ID of the machine this event relates to.</desc>
822 </param>
823 <param name="state" type="SessionState" dir="in">
824 <desc>New session state.</desc>
825 </param>
826 </method>
827
828 <method name="onSnapshotTaken">
829 <desc>
830 A new snapshot of the machine has been taken.
831 <see>ISnapshot</see>
832 </desc>
833 <param name="machineId" type="uuid" dir="in">
834 <desc>ID of the machine this event relates to.</desc>
835 </param>
836 <param name="snapshotId" type="uuid" dir="in">
837 <desc>ID of the new snapshot.</desc>
838 </param>
839 </method>
840
841 <method name="onSnapshotDiscarded">
842 <desc>
843 Snapshot of the given machine has been discarded.
844
845 <note>
846 This notification is delivered <b>after</b> the snapshot
847 object has been uninitialized on the server (so that any
848 attempt to call its methods will return an error).
849 </note>
850
851 <see>ISnapshot</see>
852 </desc>
853 <param name="machineId" type="uuid" dir="in">
854 <desc>ID of the machine this event relates to.</desc>
855 </param>
856 <param name="snapshotId" type="uuid" dir="in">
857 <desc>
858 ID of the discarded snapshot. <tt>null</tt> means the
859 current machine state has been discarded (restored from
860 the current snapshot).
861 </desc>
862 </param>
863 </method>
864
865 <method name="onSnapshotChange">
866 <desc>
867 Snapshot properties (name and/or description) have been changed.
868 <see>ISnapshot</see>
869 </desc>
870 <param name="machineId" type="uuid" dir="in">
871 <desc>ID of the machine this event relates to.</desc>
872 </param>
873 <param name="snapshotId" type="uuid" dir="in">
874 <desc>ID of the changed snapshot.</desc>
875 </param>
876 </method>
877
878 </interface>
879
880 <interface
881 name="IVirtualBox" extends="$dispatched"
882 uuid="2d3b9ea7-25f5-4f07-a8e1-7dd7e0dcf667"
883 wsmap="managed"
884 >
885 <desc>
886 The IVirtualBox interface represents the main interface exposed by the
887 product that provides virtual machine management.
888
889 An instance of IVirtualBox is required for the product to do anything
890 useful. Even though the interface does not expose this, internally,
891 IVirtualBox is implemented as a singleton and actually lives in the
892 process of the VirtualBox server (VBoxSVC.exe). This makes sure that
893 IVirtualBox can track the state of all virtual machines on a particular
894 host, regardless of which frontend started them.
895
896 To enumerate all the virtual machines on the host, use the
897 <link to="IVirtualBox::machines"/> attribute.
898 </desc>
899
900 <attribute name="version" type="wstring" readonly="yes">
901 <desc>
902 A string representing the version number of the product. The
903 format is 3 integer numbers divided by dots (e.g. 1.0.1). The
904 last number represents the build number and will frequently change.
905 </desc>
906 </attribute>
907
908 <attribute name="homeFolder" type="wstring" readonly="yes">
909 <desc>
910 Full path to the directory where the global settings file,
911 <tt>VirtualBox.xml</tt>, is stored.
912
913 In this version of VirtualBox, the value of this property is
914 always <tt>&lt;user_dir&gt;/.VirtualBox</tt> (where
915 <tt>&lt;user_dir&gt;</tt> is the path to the user directory,
916 as determined by the host OS), and cannot be changed.
917
918 This path is also used as the base to resolve relative paths in
919 places where relative paths are allowed (unless otherwise
920 expressly indicated).
921 </desc>
922 </attribute>
923
924 <attribute name="settingsFilePath" type="wstring" readonly="yes">
925 <desc>
926 Full name of the global settings file.
927 The value of this property corresponds to the value of
928 <link to="#homeFolder"/> plus <tt>/VirtualBox.xml</tt>.
929 </desc>
930 </attribute>
931
932 <attribute name="settingsFileVersion" type="wstring" readonly="yes">
933 <desc>
934 Current version of the format of the global VirtualBox settings file
935 (<tt>VirtualBox.xml</tt>).
936
937 The version string has the following format:
938 <pre>
939 x.y-platform
940 </pre>
941 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
942 versions, and <tt>platform</tt> is the platform identifier.
943
944 The current version usually matches the value of the
945 <link to="#settingsFormatVersion"/> attribute unless the
946 settings file was created by an older version of VirtualBox and there
947 was a change of the settings file format since then.
948
949 Note that VirtualBox automatically converts settings files from older
950 versions to the most recent version when reading them (usually at
951 VirtualBox startup) but it doesn't save the changes back until
952 you call a method that implicitly saves settings (such as
953 <link to="#setExtraData()"/>) or call <link to="#saveSettings()"/>
954 explicitly. Therefore, if the value of this attribute differs from the
955 value of <link to="#settingsFormatVersion"/>, then it
956 means that the settings file was converted but the result of the
957 conversion is not yet saved to disk.
958
959 The above feature may be used by interactive front-ends to inform users
960 about the settings file format change and offer them to explicitly save
961 all converted settings files (the global and VM-specific ones),
962 optionally create bacup copies of the old settings files before saving,
963 etc.
964
965 <see>settingsFormatVersion, saveSettingsWithBackup()</see>
966 </desc>
967 </attribute>
968
969 <attribute name="settingsFormatVersion" type="wstring" readonly="yes">
970 <desc>
971 Most recent version of the settings file format.
972
973 The version string has the following format:
974 <pre>
975 x.y-platform
976 </pre>
977 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
978 versions, and <tt>platform</tt> is the platform identifier.
979
980 VirtualBox uses this version of the format when saving settings files
981 (either as a result of method calls that require to save settings or as
982 a result of an explicit call to <link to="#saveSettings()"/>).
983
984 <see>settingsFileVersion</see>
985 </desc>
986 </attribute>
987
988 <attribute name="host" type="IHost" readonly="yes">
989 <desc>Associated host object.</desc>
990 </attribute>
991
992 <attribute name="systemProperties" type="ISystemProperties" readonly="yes">
993 <desc>Associated system information object.</desc>
994 </attribute>
995
996 <attribute name="machines" type="IMachineCollection" readonly="yes">
997 <desc>
998 Collection of machine objects registered within this VirtualBox
999 instance.
1000 </desc>
1001 </attribute>
1002
1003 <attribute name="machines2" type="IMachine" readonly="yes" safearray="yes">
1004 <desc>
1005 Array of machine objects registered within this VirtualBox instance.
1006 </desc>
1007 </attribute>
1008
1009 <attribute name="hardDisks" type="IHardDiskCollection" readonly="yes">
1010 <desc>
1011 Collection of hard disk objects registered within this VirtualBox
1012 instance.
1013
1014 This collection contains only "top-level" (basic or independent) hard
1015 disk images, but not differencing ones. All differencing images of the
1016 given top-level image (i.e. all its children) can be enumerated using
1017 <link to="IHardDisk::children"/>.
1018 </desc>
1019 </attribute>
1020
1021 <attribute name="DVDImages" type="IDVDImageCollection" readonly="yes"/>
1022
1023 <attribute name="FloppyImages" type="IFloppyImageCollection" readonly="yes"/>
1024
1025 <attribute name="progressOperations" type="IProgressCollection" readonly="yes"/>
1026
1027 <attribute name="guestOSTypes" type="IGuestOSTypeCollection" readonly="yes"/>
1028
1029 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
1030 <desc>
1031 Collection of global shared folders. Global shared folders are
1032 available to all virtual machines.
1033
1034 New shared folders are added to the collection using
1035 <link to="#createSharedFolder"/>. Existing shared folders can be
1036 removed using <link to="#removeSharedFolder"/>.
1037
1038 <note>
1039 In the current version of the product, global shared folders are not
1040 implemented and therefore this collection is always empty.
1041 </note>
1042 </desc>
1043 </attribute>
1044
1045 <method name="createMachine">
1046 <desc>
1047 Creates a new virtual machine.
1048
1049 The new machine will have "empty" default settings and will not
1050 yet be registered. The typical sequence to create a virtual machine
1051 is therefore something like this:
1052
1053 <ol>
1054 <li>Call this method (IVirtualBox::createMachine) to have a new
1055 machine created. The machine object returned is "mutable", i.e.
1056 automatically locked for the current session, as if
1057 <link to="#openSession" /> had been called on it.</li>
1058
1059 <li>Assign meaningful settings to the new machine by calling the
1060 respective methods.</li>
1061
1062 <li>Call <link to="IMachine::saveSettings" /> to have the settings written
1063 to the machine's XML settings file. The configuration of the newly
1064 created machine will not be saved to disk (and the settings subfolder
1065 and file, as described below, will not be created) until this method
1066 is called.</li>
1067
1068 <li>Call <link to="#registerMachine" /> to have the
1069 machine show up in the list of machines registered with VirtualBox.</li>
1070 </ol>
1071
1072 Every machine has a <i>settings file</i> that is used to store
1073 the machine configuration. This file is stored in the directory
1074 called <i>machine settings subfolder</i>. Unless specified otherwise,
1075 both the subfolder and the settings file will have a name that
1076 corresponds to the name of the virtual machine. You can specify
1077 where to create the machine settings subfolder using the @a
1078 baseFolder argument. The base folder can be absolute (full path)
1079 or relative to the <link to="IVirtualBox::homeFolder">
1080 VirtualBox home directory</link>.
1081
1082 If a null or empty string is given as the base folder (which is
1083 recommended), the <link to="ISystemProperties::defaultMachineFolder">
1084 default machine settings folder</link> will be used as the base
1085 folder to create the machine settings subfolder and file. In
1086 any case, the full path to the settings file will look like:
1087 <pre>
1088 &lt;base_folder&gt;/&lt;machine_name&gt;/&lt;machine_name&gt;.xml
1089 </pre>
1090
1091 Optionally the UUID of the machine can be predefined. If this is
1092 not desired (i.e. a new UUID should be generated), pass just an
1093 empty or null UUID.
1094
1095 You should also specify a valid name for the machine.
1096 See the <link to="IMachine::name"/> property
1097 description for more details about the machine name.
1098
1099 The created machine remains
1100 unregistered until you call <link to="#registerMachine()"/>.
1101
1102 <note>
1103 There is no way to change the name of the settings file or
1104 subfolder of the created machine directly.
1105 </note>
1106 </desc>
1107 <param name="baseFolder" type="wstring" dir="in">
1108 <desc>
1109 Name of the folder where to create the machine settings
1110 subfolder containing the settings file.
1111 </desc>
1112 </param>
1113 <param name="name" type="wstring" dir="in">
1114 <desc>Machine name.</desc>
1115 </param>
1116 <param name="id" type="uuid" dir="in">
1117 <desc>
1118 UUID of the newly created VM, when non-null or non-empty.
1119 Otherwise a UUID is automatically generated.
1120 </desc>
1121 </param>
1122 <param name="machine" type="IMachine" dir="return">
1123 <desc>Created machine object.</desc>
1124 </param>
1125 </method>
1126
1127 <method name="createLegacyMachine">
1128 <desc>
1129 Creates a new virtual machine in "legacy" mode, using the
1130 specified settings file to store machine settings.
1131
1132 As opposed to machines created by <link to="#createMachine()"/>,
1133 the settings file of the machine created in "legacy" mode
1134 is not automatically renamed when the machine name is
1135 changed -- it will always remain the same as specified in this
1136 method call.
1137
1138 The specified settings file name can be absolute
1139 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1140 VirtualBox home directory</link>. If the file name doesn't
1141 contain an extension, the default extension (.xml) will be
1142 appended.
1143
1144 Optionally the UUID of the machine can be predefined. If this is
1145 not desired (i.e. a new UUID should be generated), pass just an
1146 empty or null UUID.
1147
1148 Note that the configuration of the newly created machine is not
1149 saved to disk (and therefore no settings file is created)
1150 until <link to="IMachine::saveSettings()"/> is called. If the
1151 specified settings file already exists,
1152 <link to="IMachine::saveSettings()"/> will return an error.
1153
1154 You should also specify a valid name for the machine.
1155 See the <link to="IMachine::name"/> property
1156 description for more details about the machine name.
1157
1158 The created machine remains
1159 unregistered until you call <link to="#registerMachine()"/>.
1160
1161 @deprecated This method may be removed later. It is better
1162 to use <link to="IVirtualBox::createMachine()"/>.
1163
1164 <note>
1165 There is no way to change the name of the settings file
1166 of the created machine.
1167 </note>
1168 </desc>
1169 <param name="settingsFile" type="wstring" dir="in">
1170 <desc>
1171 Name of the file where to store machine settings.
1172 </desc>
1173 </param>
1174 <param name="name" type="wstring" dir="in">
1175 <desc>Machine name.</desc>
1176 </param>
1177 <param name="id" type="uuid" dir="in">
1178 <desc>
1179 UUID of the newly created VM, when non-null or non-empty.
1180 Otherwise a UUID is automatically generated.
1181 </desc>
1182 </param>
1183 <param name="machine" type="IMachine" dir="return">
1184 <desc>Created machine object.</desc>
1185 </param>
1186 </method>
1187
1188 <method name="openMachine">
1189 <desc>
1190 Opens a virtual machine from the existing settings file.
1191 The opened machine remains unregistered until you call
1192 <link to="#registerMachine()"/>.
1193
1194 The specified settings file name can be absolute
1195 (full path) or relative to the <link to="IVirtualBox::homeFolder">
1196 VirtualBox home directory</link>. This file must exist
1197 and must be a valid machine settings file whose contents
1198 will be used to construct the machine object.
1199
1200 @deprecated Will be removed soon.
1201 </desc>
1202 <param name="settingsFile" type="wstring" dir="in">
1203 <desc>
1204 Name of the machine settings file.
1205 </desc>
1206 </param>
1207 <param name="machine" type="IMachine" dir="return">
1208 <desc>Opened machine object.</desc>
1209 </param>
1210 <note>
1211 <link to="IMachine::settingsModified"/> will return
1212 false for the created machine, until any of machine settigs
1213 are changed.
1214 </note>
1215 </method>
1216
1217 <method name="registerMachine">
1218 <desc>
1219
1220 Registers the machine previously created using
1221 <link to="#createMachine()"/> or opened using
1222 <link to="#openMachine()"/> within this VirtualBox installation. After
1223 successful method invocation, the
1224 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1225 to all registered callbacks.
1226
1227 <note>
1228 This method implicitly calls <link to="IMachine::saveSettings"/>
1229 to save all current machine settings before registering it.
1230 </note>
1231
1232 </desc>
1233 <param name="machine" type="IMachine" dir="in"/>
1234 </method>
1235
1236 <method name="getMachine">
1237 <desc>
1238 Attempts to find a virtual machine given its UUID.
1239 To look up a machine by name, use <link to="IVirtualBox::findMachine" /> instead.
1240 </desc>
1241 <param name="id" type="uuid" dir="in"/>
1242 <param name="machine" type="IMachine" dir="return"/>
1243 </method>
1244
1245 <method name="findMachine">
1246 <desc>
1247 Attempts to find a virtual machine given its name.
1248 To look up a machine by UUID, use <link to="IVirtualBox::getMachine" /> instead.
1249 </desc>
1250 <param name="name" type="wstring" dir="in"/>
1251 <param name="machine" type="IMachine" dir="return"/>
1252 </method>
1253
1254 <method name="unregisterMachine">
1255 <desc>
1256
1257 Unregisters the machine previously registered using
1258 <link to="#registerMachine"/>. After successful method invocation, the
1259 <link to="IVirtualBoxCallback::onMachineRegistered"/> signal is sent
1260 to all registered callbacks.
1261
1262 <note>
1263 The specified machine must not be in the Saved state, have an open
1264 (or a spawning) direct session associated with it, have snapshots or
1265 have hard disks attached.
1266 </note>
1267
1268 <note>
1269 This method implicitly calls <link to="IMachine::saveSettings"/> to
1270 save all current machine settings before unregistering it.
1271 </note>
1272
1273 <note>
1274 If the given machine is inaccessible (see
1275 <link to="IMachine::accessible"/>), it will be unregistered and
1276 fully uninitialized right afterwards. As a result, the returned
1277 machine object will be unusable and an attempt to call
1278 <b>any</b> method will return the "Object not ready" error.
1279 </note>
1280
1281 </desc>
1282 <param name="id" type="uuid" dir="in">
1283 <desc>UUID of the machine to unregister.</desc>
1284 </param>
1285 <param name="machine" type="IMachine" dir="return">
1286 <desc>Unregistered machine object.</desc>
1287 </param>
1288 </method>
1289
1290 <method name="createHardDisk">
1291 <desc>
1292
1293 Creates a new unregistered hard disk that will use the given
1294 storage type.
1295
1296 Most properties of the created hard disk object are
1297 uninitialized. Valid values must be assigned to them (and probalby
1298 some actions performed) to make the actual usage of this hard disk
1299 (<link to="#registerHardDisk()">register</link>, attach to a virtual
1300 machine, etc.). See the description of <link to="IHardDisk"/> and
1301 descriptions of storage type specific interfaces for more information.
1302
1303 <note>
1304 For hard disks using
1305 the <link
1306 to="HardDiskStorageType::VirtualDiskImage">VirtualDiskImage</link>
1307 storage type, an image file is not actually created until you call
1308 <link to="IVirtualDiskImage::createDynamicImage()"/> or
1309 <link to="IVirtualDiskImage::createFixedImage()"/>.
1310 </note>
1311
1312 </desc>
1313
1314 <param name="storageType" type="HardDiskStorageType" dir="in">
1315 <desc>Storage type of the hard disk image to create.</desc>
1316 </param>
1317 <param name="hardDisk" type="IHardDisk" dir="return">
1318 <desc>Created hard disk object of the given storage type.</desc>
1319 </param>
1320
1321 </method>
1322
1323 <method name="openHardDisk">
1324 <desc>
1325
1326 Opens a hard disk from an existing location.
1327
1328 This method tries to guess the
1329 <link to="HardDiskStorageType">hard disk storage type</link> from the
1330 format of the location string and from the contents of the resource the
1331 location points to. Currently, a <i>file path</i> is the only
1332 supported format for the location string which must point to either a
1333 VDI file or to a VMDK file. On success, an IHardDisk object will be
1334 returned that also implements the corresponding interface
1335 (IVirtualDiskImage or IVMDKImage, respectively). The
1336 <link to="IHardDisk::storageType"/> property may also be used to
1337 determine the storage type of the returned object (instead of trying
1338 to query one of these interfaces).
1339
1340 <note>
1341 The specified file path can be absolute (full path) or relative to
1342 the <link to="IVirtualBox::homeFolder">VirtualBox home
1343 directory</link>. If only a file name without any path is given,
1344 the <link to="ISystemProperties::defaultVDIFolder"> default VDI
1345 folder</link> will be used as a path to the image file.
1346 </note>
1347
1348 The opened hard disk remains unregistered
1349 until <link to="#registerHardDisk()"/> is called.
1350
1351 </desc>
1352
1353 <param name="location" type="wstring" dir="in">
1354 <desc>
1355 Location of the resource that contains a valid hard disk.
1356 </desc>
1357 </param>
1358 <param name="hardDisk" type="IHardDisk" dir="return">
1359 <desc>Opened hard disk object.</desc>
1360 </param>
1361 </method>
1362
1363 <method name="openVirtualDiskImage">
1364 <desc>
1365
1366 Opens a hard disk from an existing Virtual Disk Image file.
1367 The opened hard disk remains unregistered
1368 until <link to="#registerHardDisk()"/> is called.
1369
1370 @deprecated Use <link to="IVirtualBox::openHardDisk()"/> instead.
1371
1372 <note>Opening differencing images is not supported.</note>
1373
1374 <note>The specified file path can be absolute (full path) or
1375 relative to the <link to="IVirtualBox::homeFolder"> VirtualBox
1376 home directory</link>. If only a file name without any path is
1377 given, the <link to="ISystemProperties::defaultVDIFolder">
1378 default VDI folder</link> will be used as a path to the image
1379 file.</note>
1380
1381 </desc>
1382
1383 <param name="filePath" type="wstring" dir="in">
1384 <desc>
1385 Name of the file that contains a valid Virtual Disk Image.
1386 </desc>
1387 </param>
1388 <param name="image" type="IVirtualDiskImage" dir="return">
1389 <desc>Opened hard disk object.</desc>
1390 </param>
1391 </method>
1392
1393 <method name="registerHardDisk">
1394 <desc>
1395
1396 Registers the given hard disk within this VirtualBox
1397 installation. The hard disk must not be registered, must be
1398 <link to="IHardDisk::accessible"/> and must not be a
1399 differencing hard disk, otherwise the registration will fail.
1400
1401 </desc>
1402 <param name="hardDisk" type="IHardDisk" dir="in">
1403 <desc>Hard disk object to register.</desc>
1404 </param>
1405 </method>
1406
1407 <method name="getHardDisk" const="yes">
1408 <desc>
1409 Returns the registered hard disk with the given UUID.
1410 </desc>
1411 <param name="id" type="uuid" dir="in">
1412 <desc>UUID of the hard disk to look for.</desc>
1413 </param>
1414 <param name="hardDisk" type="IHardDisk" dir="return">
1415 <desc>Found hard disk object.</desc>
1416 </param>
1417 </method>
1418
1419 <method name="findHardDisk">
1420 <desc>
1421
1422 Returns a registered hard disk that uses the given location to
1423 store data. The search is done by comparing the
1424 value of the @a location argument to the
1425 <link to="IHardDisk::location"/> attribute of each registered
1426 hard disk.
1427
1428 For locations repesented by file paths (such as VDI and VMDK
1429 images), the specified location can be either an absolute file
1430 path or a path relative to
1431 the <link to="IVirtualBox::homeFolder"> VirtualBox home
1432 directory</link>. If only a file name without any path is
1433 given, the <link to="ISystemProperties::defaultVDIFolder">
1434 default VDI folder</link> will be used as a path to construct
1435 the absolute image file name to search for. Note that on host
1436 systems with case sensitive filesystems, a case sensitive
1437 comparison is performed, otherwise the case of symbols in the
1438 file path is ignored.
1439
1440 </desc>
1441 <param name="location" type="wstring" dir="in">
1442 <desc>Hard disk location specification to search for.</desc>
1443 </param>
1444 <param name="hardDisk" type="IHardDisk" dir="return">
1445 <desc>Found hard disk object.</desc>
1446 </param>
1447 </method>
1448
1449 <method name="findVirtualDiskImage">
1450 <desc>
1451
1452 Returns a registered hard disk that uses the given image file.
1453
1454 @deprecated Use <link to="IVirtualBox::findHardDisk()"/> instead.
1455
1456 <note>The specified file path can be absolute (full path) or
1457 relative to the <link to="IVirtualBox::homeFolder"> VirtualBox
1458 home directory</link>. If only a file name without any path is
1459 given, the <link to="ISystemProperties::defaultVDIFolder">
1460 default VDI folder</link> will be used as a path to the image
1461 file.</note>
1462
1463 <note>On host systems with case sensitive filesystems, a case
1464 sensitive comparison is performed, otherwise the case of symbols
1465 in the file path is ignored.</note>
1466
1467 </desc>
1468 <param name="filePath" type="wstring" dir="in">
1469 <desc>Virtual Disk Image file path to look for.</desc>
1470 </param>
1471 <param name="image" type="IVirtualDiskImage" dir="return">
1472 <desc>Found hard disk object.</desc>
1473 </param>
1474 </method>
1475
1476 <method name="unregisterHardDisk">
1477 <desc>
1478 Unregisters a hard disk previously registered using
1479 <link to="#registerHardDisk()"/>.
1480 <note>
1481 The specified hard disk must not be attached to any of
1482 the existing virtual machines and must not have children
1483 (differencing) hard disks.
1484 </note>
1485 </desc>
1486 <param name="id" type="uuid" dir="in">
1487 <desc>UUID of the hard disk to unregister.</desc>
1488 </param>
1489 <param name="hardDisk" type="IHardDisk" dir="return">
1490 <desc>Unregistered hard disk object.</desc>
1491 </param>
1492 </method>
1493
1494 <method name="openDVDImage">
1495 <desc>
1496 Opens the CD/DVD image contained in the specified file of
1497 the supported format and assigns it the given UUID. The opened
1498 image remains unregistered
1499 until <link to="#registerDVDImage()"/> is called.
1500 </desc>
1501 <param name="filePath" type="wstring" dir="in">
1502 <desc>
1503 Full name of the file that contains a valid
1504 CD/DVD image. Currently, only ISO images are supported.
1505 <note>
1506 The specified file name can be absolute or relative
1507 to the <link to="IVirtualBox::homeFolder">
1508 VirtualBox home directory</link>.
1509 </note>
1510 </desc>
1511 </param>
1512 <param name="id" type="uuid" dir="in">
1513 <desc>
1514 UUID to assign to the given image file within this
1515 VirtualBox installation. If an empty (null) UUID is
1516 specified, the system will randomly generate an UUID.
1517 </desc>
1518 </param>
1519 <param name="image" type="IDVDImage" dir="return">
1520 <desc>Opened CD/DVD image object.</desc>
1521 </param>
1522 </method>
1523
1524 <method name="registerDVDImage">
1525 <desc>
1526 Registers a CD/DVD image within this VirtualBox
1527 installation. The image must not be registered and must not
1528 be associated with the same image file as any of the already
1529 registered images, otherwise the registration will fail.
1530 </desc>
1531 <param name="image" type="IDVDImage" dir="in">
1532 <desc>CD/DVD image object to register.</desc>
1533 </param>
1534 </method>
1535
1536 <method name="getDVDImage">
1537 <desc>
1538 Returns a registered CD/DVD image with the given UUID.
1539 </desc>
1540 <param name="id" type="uuid" dir="in">
1541 <desc>UUID of the image to look for.</desc>
1542 </param>
1543 <param name="image" type="IDVDImage" dir="return">
1544 <desc>Found CD/DVD image object.</desc>
1545 </param>
1546 </method>
1547
1548 <method name="findDVDImage">
1549 <desc>
1550 Returns a registered CD/DVD image with the given image file.
1551 <note>
1552 On host systems with case sensitive filesystems, a case
1553 sensitive comparison is performed, otherwise the case of
1554 symbols in the file path is ignored.
1555 </note>
1556 </desc>
1557 <param name="filePath" type="wstring" dir="in">
1558 <desc>CD/DVD image file path to look for.</desc>
1559 </param>
1560 <param name="image" type="IDVDImage" dir="return">
1561 <desc>Found CD/DVD image object.</desc>
1562 </param>
1563 </method>
1564
1565 <method name="getDVDImageUsage">
1566 <desc>
1567 Returns the list of of UUIDs of all virtual machines that use
1568 the given CD/DVD image.
1569 </desc>
1570 <param name="id" type="uuid" dir="in">
1571 <desc>UUID of the image to get the usage information for.</desc>
1572 </param>
1573 <param name="usage" type="ResourceUsage" dir="in">
1574 <desc>Type of the usage (permanent, temporary or all).</desc>
1575 </param>
1576 <param name="machineIDs" type="wstring" dir="return">
1577 <desc>
1578 List of UUIDs of all machines that use the given image
1579 in the way specified by the usage parameter.
1580 The list is returned as a string containing UUIDs separated
1581 by spaces. A null string means that the image is not used.
1582 <note>
1583 When the usage type is <link to="ResourceUsage::All"/> and the image
1584 is used by the VM both permanently and temporarily, the VM's UUID
1585 will be present only once in the list.
1586 </note>
1587 </desc>
1588 </param>
1589 </method>
1590
1591 <method name="unregisterDVDImage">
1592 <desc>
1593 Unregisters the CD/DVD image previously registered using
1594 <link to="#registerDVDImage()"/>.
1595 <note>
1596 The specified image must not be mounted to any of
1597 the existing virtual machines.
1598 </note>
1599 </desc>
1600 <param name="id" type="uuid" dir="in">
1601 <desc>UUID of the CD/DVD image to unregister.</desc>
1602 </param>
1603 <param name="image" type="IDVDImage" dir="return">
1604 <desc>Unregistered image object.</desc>
1605 </param>
1606 </method>
1607
1608 <method name="openFloppyImage">
1609 <desc>
1610 Opens a floppy image contained in the specified file of
1611 the supported format and assigns it the given UUID. The opened
1612 image remains unregistered
1613 until <link to="#registerFloppyImage()"/> is called.
1614 </desc>
1615 <param name="filePath" type="wstring" dir="in">
1616 <desc>
1617 Full name of the file that contains a valid
1618 floppy image.
1619 <note>
1620 The specified file name can be absolute or relative
1621 to the <link to="IVirtualBox::homeFolder">
1622 VirtualBox home directory</link>.
1623 </note>
1624 </desc>
1625 </param>
1626 <param name="id" type="uuid" dir="in">
1627 <desc>
1628 UUID to assign to the given image file within this
1629 VirtualBox installation. If an empty (null) UUID is
1630 specified, the system will randomly generate an UUID.
1631 </desc>
1632 </param>
1633 <param name="image" type="IFloppyImage" dir="return">
1634 <desc>Opened CD/DVD image object.</desc>
1635 </param>
1636 </method>
1637
1638 <method name="registerFloppyImage">
1639 <desc>
1640 Registers a floppy image within this VirtualBox
1641 installation. The image must not be registered and must not
1642 be associated with the same image file as any of the already
1643 registered images, otherwise the registration will fail.
1644 </desc>
1645 <param name="image" type="IFloppyImage" dir="in">
1646 <desc>Floppy image object to register.</desc>
1647 </param>
1648 </method>
1649
1650 <method name="getFloppyImage">
1651 <desc>
1652 Returns a registered floppy image with the given UUID.
1653 </desc>
1654 <param name="id" type="uuid" dir="in">
1655 <desc>UUID of the image to look for.</desc>
1656 </param>
1657 <param name="image" type="IFloppyImage" dir="return">
1658 <desc>Found floppy image object.</desc>
1659 </param>
1660 </method>
1661
1662 <method name="findFloppyImage">
1663 <desc>
1664 Returns a registered floppy image with the given image file.
1665 <note>
1666 On host systems with case sensitive filesystems, a case
1667 sensitive comparison is performed, otherwise the case of
1668 symbols in the file path is ignored.
1669 </note>
1670 </desc>
1671 <param name="filePath" type="wstring" dir="in">
1672 <desc>Floppy image file path to look for.</desc>
1673 </param>
1674 <param name="image" type="IFloppyImage" dir="return">
1675 <desc>Found floppy image object.</desc>
1676 </param>
1677 </method>
1678
1679 <method name="getFloppyImageUsage">
1680 <desc>
1681 Returns the list of of UUIDs of all virtual machines that use
1682 the given floppy image.
1683 </desc>
1684 <param name="id" type="uuid" dir="in">
1685 <desc>UUID of the image to get the usage information for.</desc>
1686 </param>
1687 <param name="usage" type="ResourceUsage" dir="in">
1688 <desc>Type of the usage (permanent, temporary or all).</desc>
1689 </param>
1690 <param name="machineIDs" type="wstring" dir="return">
1691 <desc>
1692 List of UUIDs of all machines that use the given image
1693 in the way specified by the usage parameter.
1694 The list is returned as a string containing UUIDs separated
1695 by spaces. A null string means that the image is not used.
1696 <note>
1697 When the usage type is <link to="ResourceUsage::All"/> and the image
1698 is used by the VM both permanently and temporarily, the VM's UUID
1699 will be present only once in the list.
1700 </note>
1701 </desc>
1702 </param>
1703 </method>
1704
1705 <method name="unregisterFloppyImage">
1706 <desc>
1707 Unregisters the floppy image previously registered using
1708 <link to="#registerFloppyImage()"/>.
1709 <note>
1710 The specified image must not be mounted to any of
1711 the existing virtual machines.
1712 </note>
1713 </desc>
1714 <param name="id" type="uuid" dir="in">
1715 <desc>UUID of the floppy image to unregister.</desc>
1716 </param>
1717 <param name="image" type="IFloppyImage" dir="return">
1718 <desc>Unregistered image object.</desc>
1719 </param>
1720 </method>
1721
1722 <method name="getGuestOSType">
1723 <param name="id" type="wstring" dir="in"/>
1724 <param name="type" type="IGuestOSType" dir="return"/>
1725 </method>
1726
1727 <method name="createSharedFolder">
1728 <desc>
1729 Creates a new global shared folder by associating the given logical
1730 name with the given host path, adds it to the collection of shared
1731 folders and starts sharing it. Refer to the description of
1732 <link to="ISharedFolder"/> to read more about logical names.
1733 </desc>
1734 <param name="name" type="wstring" dir="in">
1735 <desc>Unique logical name of the shared folder.</desc>
1736 </param>
1737 <param name="hostPath" type="wstring" dir="in">
1738 <desc>Full path to the shared folder in the host file system.</desc>
1739 </param>
1740 <param name="writable" type="boolean" dir="in">
1741 <desc>Whether the share is writable or readonly</desc>
1742 </param>
1743 </method>
1744
1745 <method name="removeSharedFolder">
1746 <desc>
1747 Removes the global shared folder with the given name previously
1748 created by <link to="#createSharedFolder"/> from the collection of
1749 shared folders and stops sharing it.
1750 </desc>
1751 <param name="name" type="wstring" dir="in">
1752 <desc>Logical name of the shared folder to remove.</desc>
1753 </param>
1754 </method>
1755
1756 <method name="getNextExtraDataKey">
1757 <desc>
1758 Returns the global extra data key name following the supplied key.
1759
1760 An error is returned if the supplied @a key does not exist. @c NULL is
1761 returned in @a nextKey if the supplied key is the last key. When
1762 supplying @c NULL for the @a key, the first key item is returned in @a
1763 nextKey (if there is any). @a nextValue is an optional parameter and
1764 if supplied, the next key's value is returned in it.
1765 </desc>
1766 <param name="key" type="wstring" dir="in">
1767 <desc>Name of the data key to follow.</desc>
1768 </param>
1769 <param name="nextKey" type="wstring" dir="out">
1770 <desc>Name of the next data key.</desc>
1771 </param>
1772 <param name="nextValue" type="wstring" dir="out">
1773 <desc>Value of the next data key.</desc>
1774 </param>
1775 </method>
1776
1777 <method name="getExtraData">
1778 <desc>
1779 Returns associated global extra data.
1780
1781 If the reuqested data @a key does not exist, this function will
1782 succeed and return @c NULL in the @a value argument.
1783 </desc>
1784 <param name="key" type="wstring" dir="in">
1785 <desc>Name of the data key to get.</desc>
1786 </param>
1787 <param name="value" type="wstring" dir="return">
1788 <desc>Value of the requested data key.</desc>
1789 </param>
1790 </method>
1791
1792 <method name="setExtraData">
1793 <desc>
1794 Sets associated global extra data.
1795
1796 If you pass @c NULL as a key @a vaule, the given @a key will be
1797 deleted.
1798
1799 <note>
1800 Before performing the actual data change, this method will ask all
1801 registered callbacks using the
1802 <link to="IVirtualBoxCallback::onExtraDataCanChange()"/>
1803 notification for a permission. If one of the callbacks refuses the
1804 new value, the change will not be performed.
1805 </note>
1806 <note>
1807 On success, the
1808 <link to="IVirtualBoxCallback::onExtraDataChange()"/> notification
1809 is called to inform all registered callbacks about a successful data
1810 change.
1811 </note>
1812 </desc>
1813 <param name="key" type="wstring" dir="in">
1814 <desc>Name of the data key to set.</desc>
1815 </param>
1816 <param name="value" type="wstring" dir="in">
1817 <desc>Value to assign to the key.</desc>
1818 </param>
1819 </method>
1820
1821 <method name="openSession">
1822 <desc>
1823 Opens a new direct session with the given virtual machine.
1824
1825 Within the direct session context, it is possible to change
1826 all VM settings, as well as to execute the VM in the process
1827 space of the session object. There can be only one direct
1828 session open at a time for every virtual machine. In VirtualBox
1829 terminology, the machine becomes "mutable" after a session has
1830 been opened.
1831
1832 Upon successful return, the session object can be used to
1833 get access to the machine and to the VM console.
1834
1835 Note that the "mutable" machine object, on which you may want
1836 to invoke IMachine methods to change its settings, will be a
1837 different object from the immutable IMachine objects returned
1838 by various IVirtualBox methods. To obtain a mutable
1839 IMachine object, upon which you can invoke settings methods,
1840 use the "machine" attribute of the ISession object which represents
1841 your open session.
1842
1843 In other words, to change settings on a machine, the following
1844 sequence is typically performed:
1845
1846 <ol>
1847 <li>Call this method (openSession) to have a machine locked for
1848 the current session.</li>
1849
1850 <li>Obtain a mutable IMachine object from ISession::machine.</li>
1851
1852 <li>Change the settings of the machine.</li>
1853
1854 <li>Call IMachine::saveSettings.</li>
1855
1856 <li>Close the session by calling <link to="#close" />.</li>
1857 </ol>
1858 </desc>
1859 <param name="session" type="ISession" dir="in">
1860 <desc>
1861 Session object that will represent the opened session after
1862 successful method invocation. This object must not represent
1863 the already open session.
1864 <note>
1865 This session will be automatically closed if the
1866 VirtualBox server is terminated for some reason.
1867 </note>
1868 </desc>
1869 </param>
1870 <param name="machineId" type="uuid" dir="in">
1871 <desc>ID of the virtual machine to open a session with.</desc>
1872 </param>
1873 </method>
1874
1875 <method name="openRemoteSession">
1876 <desc>
1877 Opens a new remote session with the given virtual machine.
1878
1879 Opening a remote session causes the VirtualBox server to start a new
1880 process that opens a direct session with the given VM. The remote
1881 session provides some level of control over the VM execution to the
1882 caller (using the IConsole interface); however, within the remote
1883 session context, not all VM settings are available for modification.
1884
1885 This operation can take some time (a new VM is started in a new process,
1886 for which memory and other resources need to be set up, which can take
1887 a few seconds). Because of this, a progress object is returned to allow the
1888 caller to wait for this asynchronous operation to be completed. Until then,
1889 the remote session object remains in the closed state and accessing the
1890 machine or its console through it is invalid. It is recommended to use
1891 <link to="IProgress::waitForCompletion" /> or similar calls to wait for
1892 completion.
1893
1894 Currently supported session types (values of the @a type
1895 argument) are:
1896 <ul>
1897 <li><tt>gui</tt>: VirtualBox Qt GUI session</li>
1898 <li><tt>vrdp</tt>: VirtualBox VRDP Server session</li>
1899 </ul>
1900
1901 The @a environment argument is a string containing definitions of
1902 environment variables in the following format:
1903 @code
1904 NAME[=VALUE]\n
1905 NAME[=VALUE]\n
1906 ...
1907 @endcode
1908 where <tt>\\n</tt> is the new line character. These environment
1909 variables will be appended to the environment of the VirtualBox server
1910 process. If an environment variable exists both in the server process
1911 and in this list, the value from this list takes precedence over the
1912 server's variable. If the value of the environment variable is
1913 omitted, this variable will be removed from the resulting environment.
1914 If the environment string is @c null, the server environment is
1915 inherited by the started process as is.
1916
1917 <note>
1918 It is an error to open a remote session with the machine
1919 that already has an open direct session or waits until the
1920 previous request to open the remote session is completed
1921 (see <link to="IMachine::sessionState"/>).
1922 </note>
1923
1924 <note>
1925 The opened @a session will be automatically closed when
1926 the corresponding direct session dies or gets closed.
1927 </note>
1928
1929 <see>openExistingSession</see>
1930 </desc>
1931 <param name="session" type="ISession" dir="in">
1932 <desc>
1933 Session object that will represent the opened remote session
1934 after successful method invocation (this object must not
1935 represent an already open session).
1936 </desc>
1937 </param>
1938 <param name="machineId" type="uuid" dir="in">
1939 <desc>ID of the virtual machine to open a session with.</desc>
1940 </param>
1941 <param name="type" type="wstring" dir="in">
1942 <desc>
1943 Type of the remote session (case sensitive).
1944 </desc>
1945 </param>
1946 <param name="environment" type="wstring" dir="in">
1947 <desc>
1948 Environment to pass to the opened session (may be @c null).
1949 </desc>
1950 </param>
1951 <param name="progress" type="IProgress" dir="return">
1952 <desc>Progress object to track the operation completion.</desc>
1953 </param>
1954 </method>
1955
1956 <method name="openExistingSession">
1957 <desc>
1958 Opens a new remote session with the virtual machine for
1959 which a direct session is already open.
1960
1961 The remote session provides some level of control over the VM
1962 execution (using the IConsole interface) to the caller; however,
1963 within the remote session context, not all VM settings are available
1964 for modification.
1965
1966 As opposed to <link to="#openRemoteSession()"/>, the number of
1967 remote sessions opened this way is not limited by the API
1968
1969 <note>
1970 It is an error to open a remote session with the machine that
1971 doesn't have an open direct session.
1972 </note>
1973
1974 <see>openRemoteSession</see>
1975 </desc>
1976 <param name="session" type="ISession" dir="in">
1977 <desc>
1978 Session object that will represent the open remote session
1979 after successful method invocation. This object must not
1980 represent an already open session.
1981 <note>
1982 This session will be automatically closed when the peer
1983 (direct) session dies or gets closed.
1984 </note>
1985 </desc>
1986 </param>
1987 <param name="machineId" type="uuid" dir="in">
1988 <desc>ID of the virtual machine to open a session with.</desc>
1989 </param>
1990 </method>
1991
1992 <method name="registerCallback">
1993 <desc>
1994 Registers a new global VirtualBox callback. The methods of the given
1995 callback object will be called by VirtualBox when an appropriate
1996 event occurs.
1997 </desc>
1998 <param name="callback" type="IVirtualBoxCallback" dir="in">
1999 <desc>Callback object to register.</desc>
2000 </param>
2001 </method>
2002
2003 <method name="unregisterCallback">
2004 <desc>
2005 Unregisters the previously registered global VirtualBox callback.
2006 </desc>
2007 <param name="callback" type="IVirtualBoxCallback" dir="in">
2008 <desc>Callback object to unregister.</desc>
2009 </param>
2010 </method>
2011
2012 <method name="waitForPropertyChange">
2013 <desc>
2014 Blocks the caller until any of the properties represented by the @a
2015 what argument changes the value or until the given timeout interval
2016 expires.
2017
2018 The @a what argument is a comma separated list of propertiy masks that
2019 describe properties the caller is interested in. The property mask is
2020 a string in the following format:
2021
2022 @code
2023 [[group.]subgroup.]name
2024 @endcode
2025
2026 where @c name is the property name and @c group, @c subgroup are zero
2027 or or more property group specifiers. Each element (group or name) in
2028 the property mask may be either a latin string or an asterisk symbol
2029 (@c "*") which is used to match any string for the given element. A
2030 property mask that doesn't contain asterisk symbols represents a
2031 single fully qualified property name.
2032
2033 Groups in the fully qualified property name go from more generic (the
2034 left-most part) to more specific (the right-most part). The first
2035 element is usually a name of the object the property belongs to. The
2036 second element may be either a property name, or a child object name,
2037 or an index if the preceeding element names an object which is one of
2038 many objects of the same type. This way, property names form a
2039 hierarchy of properties. Here are some examples of property names:
2040
2041 <table>
2042 <tr>
2043 <td><tt>VirtualBox.version</tt></td>
2044 <td><link to="IVirtualBox::version"/> property</td>
2045 </tr>
2046 <tr>
2047 <td><tt>Machine.&lt;UUID&gt;.name</tt></td>
2048 <td><link to="IMachine::name"/> property of the machine with the
2049 given UUID</td>
2050 </tr>
2051 </table>
2052
2053 Most property names directly correspond to the properties of objects
2054 (components) provided by the VirtualBox library and may be used to
2055 track changes to these properties. However, there may be
2056 pseudo-property names that don't correspond to any existing object's
2057 property directly, as well as there may be object properties that
2058 don't have a corresponding property name that is understood by this
2059 method, and therefore changes to such properties cannot be
2060 tracked. See individual object's property descrcriptions to get a
2061 fully qualified property name that can be used with this method (if
2062 any).
2063
2064 There is a special property mask @c "*" (i.e. a string consisting of a
2065 single asterisk symbol) that can be used to match all properties.
2066 Below are more examples of property masks:
2067
2068 <table>
2069 <tr>
2070 <td><tt>VirtualBox.*</tt></td>
2071 <td>Track all properties of the VirtualBox object</td>
2072 </tr>
2073 <tr>
2074 <td><tt>Machine.*.name</tt></td>
2075 <td>Track changes to the <link to="IMachine::name"/> property of
2076 all registered virtual machines</td>
2077 </tr>
2078 </table>
2079
2080 </desc>
2081 <param name="what" type="wstring" dir="in">
2082 <desc>Comma separated list of property masks.</desc>
2083 </param>
2084 <param name="timeout" type="unsigned long" dir="in">
2085 <desc>
2086 Wait timeout in milliseconds.
2087 Specify -1 for an indefinite wait.
2088 </desc>
2089 </param>
2090 <param name="changed" type="wstring" dir="out">
2091 <desc>
2092 Comma separated list of properties that have been changed and caused
2093 this method to return to the caller.
2094 </desc>
2095 </param>
2096 <param name="values" type="wstring" dir="out">
2097 <desc>Reserved, not currently used.</desc>
2098 </param>
2099 </method>
2100
2101 <method name="saveSettings">
2102 <desc>
2103 Saves the global settings to the global settings file
2104 (<link to="#settingsFilePath"/>).
2105
2106 This method is only useful for explicitly saving the global settings
2107 file after it has been auto-converted from the old format to the most
2108 recent format (see <link to="#settingsFileVersion"/> for details).
2109 Normally, the global settings file is implicitly saved when a global
2110 setting is changed.
2111 </desc>
2112 </method>
2113
2114 <method name="saveSettingsWithBackup">
2115 <desc>
2116 Creates a backup copy of the global settings file
2117 (<link to="#settingsFilePath"/>) in case of auto-conversion, and then
2118 calls <link to="#saveSettings()"/>.
2119
2120 Note that the backup copy is created <b>only</b> if the settings file
2121 auto-conversion took place (see <link to="#settingsFileVersion"/> for
2122 details). Otherwise, this call is fully equivalent to
2123 <link to="#saveSettings()"/> and no backup copying is done.
2124
2125 The backup copy is created in the same directory where the original
2126 settings file is located. It is given the following file name:
2127 <pre>
2128 original.xml.x.y-platform.bak
2129 </pre>
2130 where <tt>original.xml</tt> is the original settings file name
2131 (excluding path), and <tt>x.y-platform</tt> is the version of the old
2132 format of the settings file (before auto-conversion).
2133
2134 If the given backup file already exists, this method will try to add the
2135 <tt>.N</tt> suffix to the backup file name (where <tt>N</tt> counts from
2136 0 to 9) and copy it again until it succeeds. If all suffixes are
2137 occupied, or if any other copy error occurs, this method will return a
2138 failure.
2139
2140 If the copy operation succeeds, the @a bakFileName return argument will
2141 receive a full path to the created backup file (for informational
2142 purposes). Note that this will happen even if the subsequent
2143 <link to="#saveSettings()"/> call performed by this method after the
2144 copy operation, fails.
2145
2146 <note>
2147 The VirtualBox API never calls this method. It is intended purely for
2148 the purposes of creating backup copies of the settings files by
2149 front-ends before saving the results of the automatically performed
2150 settings conversion to disk.
2151 </note>
2152
2153 <see>settingsFileVersion</see>
2154 </desc>
2155 <param name="bakFileName" type="wstring" dir="return">
2156 <desc>Full path to the created backup copy.</desc>
2157 </param>
2158 </method>
2159
2160 </interface>
2161
2162 <!--
2163 // IMachine
2164 /////////////////////////////////////////////////////////////////////////
2165 -->
2166
2167 <enumerator
2168 name="IMachineEnumerator" type="IMachine"
2169 uuid="1b554149-be0a-4465-9252-9ff8f420af55"
2170 />
2171
2172 <collection
2173 name="IMachineCollection" type="IMachine" enumerator="IMachineEnumerator"
2174 uuid="FD443EC1-3007-4F5B-9282-D72760A66916"
2175 readonly="yes"
2176 />
2177
2178 <interface
2179 name="IInternalMachineControl" extends="$unknown"
2180 uuid="1063893c-4c38-4304-aee9-73e072c181cc"
2181 internal="yes"
2182 wsmap="suppress"
2183 >
2184 <method name="updateState">
2185 <desc>
2186 Updates the VM state.
2187 <note>
2188 This operation will also update the settings file with
2189 the correct information about the saved state file
2190 and delete this file from disk when appropriate.
2191 </note>
2192 </desc>
2193 <param name="state" type="MachineState" dir="in"/>
2194 </method>
2195
2196 <method name="getIPCId">
2197 <param name="id" type="wstring" dir="return"/>
2198 </method>
2199
2200 <method name="runUSBDeviceFilters">
2201 <desc>
2202 Asks the server to run USB devices filters of the associated
2203 machine against the given USB device and tell if there is
2204 a match.
2205 <note>
2206 Intended to be used only for remote USB devices. Local
2207 ones don't require to call this method (this is done
2208 implicitly by the Host and USBProxyService).
2209 </note>
2210 </desc>
2211 <param name="device" type="IUSBDevice" dir="in"/>
2212 <param name="matched" type="boolean" dir="out"/>
2213 <param name="maskedInterfaces" type="unsigned long" dir="out"/>
2214 </method>
2215
2216 <method name="captureUSBDevice">
2217 <desc>
2218 Requests a capture of the given host USB device.
2219 When the request is completed, the VM process will
2220 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
2221 notification.
2222 </desc>
2223 <param name="id" type="uuid" dir="in"/>
2224 </method>
2225
2226 <method name="detachUSBDevice">
2227 <desc>
2228 Notification that a VM is going to detach (done = false) or has
2229 already detached (done = true) the given USB device.
2230 When the done = true request is completed, the VM process will
2231 get a <link to="IInternalSessionControl::onUSBDeviceDetach"/>
2232 notification.
2233 <note>
2234 In the done = true case, the server must run its own filters
2235 and filters of all VMs but this one on the detached device
2236 as if it were just attached to the host computer.
2237 </note>
2238 </desc>
2239 <param name="id" type="uuid" dir="in"/>
2240 <param name="done" type="boolean" dir="in"/>
2241 </method>
2242
2243 <method name="autoCaptureUSBDevices">
2244 <desc>
2245 Requests a capture all matching USB devices attached to the host.
2246 When the request is completed, the VM process will
2247 get a <link to="IInternalSessionControl::onUSBDeviceAttach"/>
2248 notification per every captured device.
2249 </desc>
2250 </method>
2251
2252 <method name="detachAllUSBDevices">
2253 <desc>
2254 Notification that a VM that is being powered down. The done
2255 parameter indicates whether which stage of the power down
2256 we're at. When done = false the VM is announcing its
2257 intentions, while when done = true the VM is reporting
2258 what it has done.
2259 <note>
2260 In the done = true case, the server must run its own filters
2261 and filters of all VMs but this one on all detach devices as
2262 if they were just attached to the host computer.
2263 </note>
2264 </desc>
2265 <param name="done" type="boolean" dir="in"/>
2266 </method>
2267
2268 <method name="onSessionEnd">
2269 <desc>
2270 Triggered by the given session object when the session is about
2271 to close normally.
2272 </desc>
2273 <param name="session" type="ISession" dir="in">
2274 <desc>Session that is being closed</desc>
2275 </param>
2276 <param name="progress" type="IProgress" dir="return">
2277 <desc>
2278 Used to wait until the corresponding machine is actually
2279 deassociated from the given session on the server.
2280 Returned only when this session is a direct one.
2281 </desc>
2282 </param>
2283 </method>
2284
2285 <method name="beginSavingState">
2286 <desc>
2287 Called by the VM process to inform the server it wants to
2288 save the current state and stop the VM execution.
2289 </desc>
2290 <param name="progress" type="IProgress" dir="in">
2291 <desc>
2292 Progress object created by the VM process to wait until
2293 the state is saved.
2294 </desc>
2295 </param>
2296 <param name="stateFilePath" type="wstring" dir="out">
2297 <desc>
2298 File path the VM process must save the execution state to.
2299 </desc>
2300 </param>
2301 </method>
2302
2303 <method name="endSavingState">
2304 <desc>
2305 Called by the VM process to inform the server that saving
2306 the state previously requested by #beginSavingState is either
2307 successfully finished or there was a failure.
2308 </desc>
2309
2310 <param name="success" type="boolean" dir="in">
2311 <desc><tt>true</tt> to indicate success and <tt>false</tt> otherwise</desc>
2312 </param>
2313 </method>
2314
2315 <method name="adoptSavedState">
2316 <desc>
2317 Gets called by IConsole::adoptSavedState.
2318 </desc>
2319 <param name="savedStateFile" type="wstring" dir="in">
2320 <desc>Path to the saved state file to adopt.</desc>
2321 </param>
2322 </method>
2323
2324 <method name="beginTakingSnapshot">
2325 <desc>
2326 Called by the VM process to inform the server it wants to
2327 take a snapshot.
2328 </desc>
2329 <param name="initiator" type="IConsole" dir="in">
2330 <desc>The console object that initiated this call.</desc>
2331 </param>
2332 <param name="name" type="wstring" dir="in">
2333 <desc>Snapshot name</desc>
2334 </param>
2335 <param name="description" type="wstring" dir="in">
2336 <desc>Snapshot description</desc>
2337 </param>
2338 <param name="progress" type="IProgress" dir="in">
2339 <desc>
2340 Progress object created by the VM process to wait until
2341 the state is saved (only for online snapshots).
2342 </desc>
2343 </param>
2344 <param name="stateFilePath" type="wstring" dir="out">
2345 <desc>
2346 File path the VM process must save the execution state to.
2347 </desc>
2348 </param>
2349 <param name="serverProgress" type="IProgress" dir="out">
2350 <desc>
2351 Progress object created by the server process to wait until
2352 the snapshot is taken (VDI diff creation, etc.).
2353 </desc>
2354 </param>
2355 </method>
2356
2357 <method name="endTakingSnapshot">
2358 <desc>
2359 Called by the VM process to inform the server that the snapshot
2360 previously requested by #beginTakingSnapshot is either
2361 successfully taken or there was a failure.
2362 </desc>
2363
2364 <param name="success" type="boolean" dir="in">
2365 <desc><tt>true</tt> to indicate success and <tt>false</tt> otherwise</desc>
2366 </param>
2367 </method>
2368
2369 <method name="discardSnapshot">
2370 <desc>
2371 Gets called by IConsole::discardSnapshot.
2372 </desc>
2373 <param name="initiator" type="IConsole" dir="in">
2374 <desc>The console object that initiated this call.</desc>
2375 </param>
2376 <param name="id" type="uuid" dir="in">
2377 <desc>UUID of the snapshot to discard.</desc>
2378 </param>
2379 <param name="machineState" type="MachineState" dir="out">
2380 <desc>New machine state after this operation is started.</desc>
2381 </param>
2382 <param name="progress" type="IProgress" dir="return">
2383 <desc>Progress object to track the operation completion.</desc>
2384 </param>
2385 </method>
2386
2387 <method name="discardCurrentState">
2388 <desc>
2389 Gets called by IConsole::discardCurrentState.
2390 </desc>
2391 <param name="initiator" type="IConsole" dir="in">
2392 <desc>The console object that initiated this call.</desc>
2393 </param>
2394 <param name="machineState" type="MachineState" dir="out">
2395 <desc>New machine state after this operation is started.</desc>
2396 </param>
2397 <param name="progress" type="IProgress" dir="return">
2398 <desc>Progress object to track the operation completion.</desc>
2399 </param>
2400 </method>
2401
2402 <method name="discardCurrentSnapshotAndState">
2403 <desc>
2404 Gets called by IConsole::discardCurrentSnapshotAndState.
2405 </desc>
2406 <param name="initiator" type="IConsole" dir="in">
2407 <desc>The console object that initiated this call.</desc>
2408 </param>
2409 <param name="machineState" type="MachineState" dir="out">
2410 <desc>New machine state after this operation is started.</desc>
2411 </param>
2412 <param name="progress" type="IProgress" dir="return">
2413 <desc>Progress object to track the operation completion.</desc>
2414 </param>
2415 </method>
2416
2417 </interface>
2418
2419 <interface
2420 name="IBIOSSettings" extends="$unknown"
2421 uuid="38b54279-dc35-4f5e-a431-835b867c6b5e"
2422 wsmap="struct"
2423 >
2424 <desc>
2425 The IBIOSSettings interface represents BIOS settings of the virtual
2426 machine. This is used only in the <link to="IMachine::BIOSSettings" /> attribute.
2427
2428 <note>With the COM API, this is an interface like all the others. With the webservice,
2429 this is mapped to a structure, so querying the attribute will not return an object,
2430 but a complete structure.</note>
2431 </desc>
2432 <attribute name="logoFadeIn" type="boolean">
2433 <desc>Fade in flag for BIOS logo animation.</desc>
2434 </attribute>
2435
2436 <attribute name="logoFadeOut" type="boolean">
2437 <desc>Fade out flag for BIOS logo animation.</desc>
2438 </attribute>
2439
2440 <attribute name="logoDisplayTime" type="unsigned long">
2441 <desc>BIOS logo display time in milliseconds (0 = default).</desc>
2442 </attribute>
2443
2444 <attribute name="logoImagePath" type="wstring">
2445 <desc>Local file system path for external BIOS image.</desc>
2446 </attribute>
2447
2448 <attribute name="bootMenuMode" type="BIOSBootMenuMode">
2449 <desc>Mode of the BIOS boot device menu.</desc>
2450 </attribute>
2451
2452 <attribute name="ACPIEnabled" type="boolean">
2453 <desc>ACPI support flag.</desc>
2454 </attribute>
2455
2456 <attribute name="IOAPICEnabled" type="boolean">
2457 <desc>
2458 IO APIC support flag. If set, VirtualBox will provide an IO APIC
2459 and support IRQs above 15.
2460 </desc>
2461 </attribute>
2462
2463 <attribute name="timeOffset" type="long long">
2464 <desc>
2465 Offset in milliseconds from the host system time. This allows for
2466 guests running with a different system date/time than the host.
2467 It is equivalent to setting the system date/time in the BIOS other
2468 than it's not an absolute value but a relative one. Guest Additions
2469 time synchronization also honors this offset.
2470 </desc>
2471 </attribute>
2472
2473 <attribute name="PXEDebugEnabled" type="boolean">
2474 <desc>
2475 PXE debug logging flag. If set, VirtualBox will write extensive
2476 PXE trace information to the release log.
2477 </desc>
2478 </attribute>
2479
2480 <attribute name="IDEControllerType" type="IDEControllerType">
2481 <desc>
2482 Type of the virtual IDE controller. Depending on this value,
2483 VirtualBox will provide different virtual IDE hardware
2484 devices to the guest.
2485 </desc>
2486 </attribute>
2487
2488 </interface>
2489
2490 <interface
2491 name="IMachine" extends="$unknown"
2492 uuid="f95c0793-7737-49a1-85d9-6da81097173b"
2493 wsmap="managed"
2494 >
2495 <desc>
2496 The IMachine interface represents a virtual machine, or guest, created
2497 in VirtualBox.
2498
2499 This interface is used in two contexts. First of all, a collection of
2500 objects implementing this interface is stored in the
2501 <link to="IVirtualBox::machines"/> attribute which lists all the virtual
2502 machines that are currently registered with this VirtualBox
2503 installation. Also, once a session has been opened for the given virtual
2504 machine (e.g. the virtual machine is running), the machine object
2505 associated with the open session can be queried from the session object;
2506 see <link to="ISession"/> for details.
2507
2508 The main role of this interface is to expose the settings of the virtual
2509 machine and provide methods to change various aspects of the virtual
2510 machine's configuration. For machine objects stored in the
2511 <link to="IVirtualBox::machines"/> collection, all attributes are
2512 read-only unless explicitely stated otherwise in individual attribute
2513 and method descriptions. In order to change a machine setting, a session
2514 for this machine must be opened using one of
2515 <link to="IVirtualBox::openSession"/>,
2516 <link to="IVirtualBox::openRemoteSession"/> or
2517 <link to="IVirtualBox::openExistingSession"/> methdods. After the
2518 session has been successfully opened, a mutable machine object needs to
2519 be queried from the session object and then the desired settings changes
2520 can be applied to the returned object using IMachine attributes and
2521 methods. See the ISession interface description for more information
2522 about sessions.
2523
2524 Note that the IMachine interface does not provide methods to control
2525 virtual machine execution (such as start the machine, or power it
2526 down) -- these methods are grouped in a separate IConsole
2527 interface. Refer to the IConsole interface description to get more
2528 information about this topic.
2529
2530 <see>ISession, IConsole</see>
2531 </desc>
2532
2533 <attribute name="parent" type="IVirtualBox" readonly="yes">
2534 <desc>Associated parent obect.</desc>
2535 </attribute>
2536
2537 <attribute name="accessible" type="boolean" readonly="yes">
2538 <desc>
2539 Whether this virtual machine is currently accessible or not.
2540
2541 The machine is considered to be inaccessible when:
2542 <ul>
2543 <li>It is a registered virtual machine, and
2544 </li>
2545 <li>Its settings file is inaccessible (for example, it is
2546 located on a network share that is not accessible during
2547 VirtualBox startup, or becomes inaccessible later, or if
2548 the settings file can be read but is invalid).
2549 </li>
2550 </ul>
2551
2552 Otherwise, the value of this property is always <tt>true</tt>.
2553
2554 Every time this property is read, the accessibility state of
2555 this machine is re-evaluated. If the returned value is |false|,
2556 the <link to="#accessError"/> property may be used to get the
2557 detailed error information describing the reason of
2558 inaccessibility.
2559
2560 When the machine is inaccessible, only the following properties
2561 can be used on it:
2562 <ul>
2563 <li><link to="#parent"/></li>
2564 <li><link to="#id"/></li>
2565 <li><link to="#settingsFilePath"/></li>
2566 <li><link to="#accessible"/></li>
2567 <li><link to="#accessError"/></li>
2568 </ul>
2569
2570 An attempt to access any other property or method will return
2571 an error.
2572
2573 The only possible action you can perform on an inaccessible
2574 machine is to unregister it using the
2575 <link to="IVirtualBox::unregisterMachine"/> call (or, to check
2576 for the accessibility state once more by querying this
2577 property).
2578
2579 <note>
2580 In the current implementation, once this property returns
2581 <tt>true</tt>, the machine will never become inaccessible
2582 later, even if its settings file cannot be successfully
2583 read/written any more (at least, until the VirtualBox
2584 server is restarted). This limitation may be removed in
2585 future releases.
2586 </note>
2587 </desc>
2588 </attribute>
2589
2590 <attribute name="accessError" type="IVirtualBoxErrorInfo" readonly="yes">
2591 <desc>
2592 Error information describing the reason of machine
2593 inaccessibility.
2594
2595 Reading this property is only valid after the last call to
2596 <link to="#accessible"/> returned <tt>false</tt> (i.e. the
2597 machine is currently unaccessible). Otherwise, a null
2598 IVirtualBoxErrorInfo object will be returned.
2599 </desc>
2600 </attribute>
2601
2602 <attribute name="name" type="wstring">
2603 <desc>
2604 Name of the virtual machine.
2605
2606 Besides being used for human-readable identification purposes
2607 everywhere in VirtualBox, the virtual machine name is also used
2608 as a name of the machine's settings file and as a name of the
2609 subdirectory this settings file resides in. Thus, every time you
2610 change the value of this property, the settings file will be
2611 renamed once you call <link to="#saveSettings()"/> to confirm the
2612 change. The containing subdirectory will be also renamed, but
2613 only if it has exactly the same name as the settings file
2614 itself prior to changing this property (for backward compatibility
2615 with previous API releases). The above implies the following
2616 limitations:
2617 <ul>
2618 <li>The machine name cannot be empty.</li>
2619 <li>The machine name can contain only characters that are valid
2620 file name characters according to the rules of the file
2621 system used to store VirtualBox configuration.</li>
2622 <li>You cannot have two or more machines with the same name
2623 if they use the same subdirectory for storing the machine
2624 settings files.</li>
2625 <li>You cannot change the name of the machine if it is running,
2626 or if any file in the directory containing the settings file
2627 is being used by another running machine or by any other
2628 process in the host operating system at a time when
2629 <link to="#saveSettings()"/> is called.
2630 </li>
2631 </ul>
2632 If any of the above limitations are hit, <link to="#saveSettings()"/>
2633 will return an appropriate error message explaining the exact
2634 reason and the changes you made to this machine will not be
2635 saved.
2636 <note>
2637 For "legacy" machines created using the
2638 <link to="IVirtualBox::createLegacyMachine()"/> call,
2639 the above naming limitations do not apply because the
2640 machine name does not affect the settings file name.
2641 The settings file name remains the same as it was specified
2642 during machine creation and never changes.
2643 </note>
2644 </desc>
2645 </attribute>
2646
2647 <attribute name="description" type="wstring">
2648 <desc>
2649 Description of the virtual machine.
2650
2651 The description attribute can contain any text and is
2652 typically used to describe the hardware and software
2653 configuration of the virtual machine in detail (i.e. network
2654 settings, versions of the installed software and so on).
2655 </desc>
2656 </attribute>
2657
2658 <attribute name="id" type="uuid" readonly="yes">
2659 <desc>UUID of the virtual machine.</desc>
2660 </attribute>
2661
2662 <attribute name="OSTypeId" type="wstring">
2663 <desc>
2664 User-defined identifier of the Guest OS type.
2665 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
2666 an IGuestOSType object representing details about the given
2667 Guest OS type.
2668 <note>
2669 This value may differ from the value returned by
2670 <link to="IGuest::OSTypeId"/> if Guest Additions are
2671 installed to the guest OS.
2672 </note>
2673 </desc>
2674 </attribute>
2675
2676 <attribute name="memorySize" type="unsigned long">
2677 <desc>System memory size in megabytes.</desc>
2678 </attribute>
2679
2680 <attribute name="memoryBalloonSize" type="unsigned long">
2681 <desc>Initial memory balloon size in megabytes.</desc>
2682 </attribute>
2683
2684 <attribute name="statisticsUpdateInterval" type="unsigned long">
2685 <desc>Initial interval to update guest statistics in seconds.</desc>
2686 </attribute>
2687
2688 <attribute name="VRAMSize" type="unsigned long">
2689 <desc>Video memory size in megabytes.</desc>
2690 </attribute>
2691
2692 <attribute name="MonitorCount" type="unsigned long">
2693 <desc>
2694 Number of virtual monitors.
2695 <note>
2696 Only effective on Windows XP and later guests with
2697 Guest Additions installed.
2698 </note>
2699 </desc>
2700 </attribute>
2701
2702 <attribute name="BIOSSettings" type="IBIOSSettings" readonly="yes">
2703 <desc>Object containing all BIOS settings.</desc>
2704 </attribute>
2705
2706 <attribute name="HWVirtExEnabled" type="TSBool">
2707 <desc>
2708 This setting determines whether VirtualBox will try to make use of
2709 the host CPU's hardware virtualization extensions such as Intel VT-x
2710 and AMD-V. Note that in case such extensions are not available,
2711 they will not be used.
2712 </desc>
2713 </attribute>
2714
2715 <attribute name="PAEEnabled" type="boolean" default="false">
2716 <desc>
2717 This setting determines whether VirtualBox will expose the Physical Address
2718 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE
2719 is not available, it will not be reported.
2720 </desc>
2721 </attribute>
2722
2723 <attribute name="snapshotFolder" type="wstring">
2724 <desc>
2725 Full path to the directory used to store snapshot data
2726 (difrerencing hard disks and saved state files) of this machine.
2727
2728 The initial value of this property is
2729 <tt>&lt;</tt><link to="#settingsFilePath">
2730 path_to_settings_file</link><tt>&gt;/&lt;</tt>
2731 <link to="#id">machine_uuid</link>
2732 <tt>&gt;</tt>.
2733
2734 Currently, it is an error to try to change this property on
2735 a machine that has snapshots (because this would require to
2736 move possibly large files to a different location).
2737 A separate method will be available for this purpose later.
2738
2739 <note>
2740 Setting this property to <tt>null</tt> will restore the
2741 initial value.
2742 </note>
2743 <note>
2744 When setting this property, the specified path can be
2745 absolute (full path) or relative to the directory where the
2746 <link to="#settingsFilePath">machine settings file</link>
2747 is located. When reading this property, a full path is
2748 always returned.
2749 </note>
2750 <note>
2751 The specified path may not exist, it will be created
2752 when necessary.
2753 </note>
2754 </desc>
2755 </attribute>
2756
2757 <attribute name="VRDPServer" type="IVRDPServer" readonly="yes">
2758 <desc>VRDP server object.</desc>
2759 </attribute>
2760
2761 <attribute name="hardDiskAttachments" type="IHardDiskAttachmentCollection" readonly="yes">
2762 <desc>Collection of hard disks attached to the machine.</desc>
2763 </attribute>
2764
2765 <attribute name="DVDDrive" type="IDVDDrive" readonly="yes">
2766 <desc>Associated DVD drive object.</desc>
2767 </attribute>
2768
2769 <attribute name="FloppyDrive" type="IFloppyDrive" readonly="yes">
2770 <desc>Associated floppy drive object.</desc>
2771 </attribute>
2772
2773 <attribute name="USBController" type="IUSBController" readonly="yes">
2774 <desc>
2775 Associated USB controller object.
2776
2777 <note>
2778 This method may set a @ref com_warnings "warning result code".
2779 </note>
2780 <note>
2781 If USB functionality is not avaliable in the given edition of
2782 VirtualBox, this method will set the result code to @c E_NOTIMPL.
2783 </note>
2784 </desc>
2785 </attribute>
2786
2787 <attribute name="audioAdapter" type="IAudioAdapter" readonly="yes">
2788 <desc>Associated audio adapter, always present.</desc>
2789 </attribute>
2790
2791 <attribute name="SATAController" type="ISATAController" readonly="yes">
2792 <desc>
2793 Associated SATA controller object.
2794 </desc>
2795 </attribute>
2796
2797 <attribute name="settingsFilePath" type="wstring" readonly="yes">
2798 <desc>
2799 Full name of the file containing machine settings data.
2800 </desc>
2801 </attribute>
2802
2803 <attribute name="settingsFileVersion" type="wstring" readonly="yes">
2804 <desc>
2805 Current version of the format of the settings file of this machine
2806 (<link to="#settingsFilePath"/>).
2807
2808 The version string has the following format:
2809 <pre>
2810 x.y-platform
2811 </pre>
2812 where <tt>x</tt> and <tt>y</tt> are the major and the minor format
2813 versions, and <tt>platform</tt> is the platform identifier.
2814
2815 The current version usually matches the value of the
2816 <link to="IVirtualBox::settingsFormatVersion"/> attribute unless the
2817 settings file was created by an older version of VirtualBox and there
2818 was a change of the settings file format since then.
2819
2820 Note that VirtualBox automatically converts settings files from older
2821 versions to the most recent version when reading them (usually at
2822 VirtualBox startup) but it doesn't save the changes back until
2823 you call a method that implicitly saves settings (such as
2824 <link to="#setExtraData()"/>) or call <link to="#saveSettings()"/>
2825 explicitly. Therefore, if the value of this attribute differs from the
2826 value of <link to="IVirtualBox::settingsFormatVersion"/>, then it
2827 means that the settings file was converted but the result of the
2828 conversion is not yet saved to disk.
2829
2830 The above feature may be used by interactive front-ends to inform users
2831 about the settings file format change and offer them to explicitly save
2832 all converted settings files (the global and VM-specific ones),
2833 optionally create bacup copies of the old settings files before saving,
2834 etc.
2835
2836 <see>IVirtualBox::settingsFormatVersion, saveSettingsWithBackup()</see>
2837 </desc>
2838 </attribute>
2839
2840 <attribute name="settingsModified" type="boolean" readonly="yes">
2841 <desc>
2842 Whether the settings of this machine have been modified
2843 (but neither yet saved nor discarded).
2844 <note>
2845 Reading this property is only valid on instances returned
2846 by <link to="ISession::machine"/> and on new machines
2847 created by <link to="IVirtualBox::createMachine"/> or opened
2848 by <link to="IVirtualBox::openMachine"/> but not
2849 yet registered, or on unregistered machines after calling
2850 <link to="IVirtualBox::unregisterMachine"/>. For all other
2851 cases, the settigs can never be modified.
2852 </note>
2853 <note>
2854 For newly created unregistered machines, the value of this
2855 property is always TRUE until <link to="#saveSettings()"/>
2856 is called (no matter if any machine settings have been
2857 changed after the creation or not). For opened machines
2858 the value is set to FALSE (and then follows to normal rules).
2859 </note>
2860 </desc>
2861 </attribute>
2862
2863 <attribute name="sessionState" type="SessionState" readonly="yes">
2864 <desc>Current session state for this machine.</desc>
2865 </attribute>
2866
2867 <attribute name="sessionType" type="wstring" readonly="yes">
2868 <desc>
2869 Type of the session. If <link to="#sessionState"/> is
2870 SessionSpawning or SessionOpen, this attribute contains the
2871 same value as passed to the
2872 <link to="IVirtualBox::openRemoteSession()"/> method in the @a
2873 type parameter. If the session was opened directly using
2874 <link to="IVirtualBox::openSession()"/>, or if
2875 <link to="#sessionState"/> is SessionClosed, the value of this
2876 attribute is @c null.
2877 </desc>
2878 </attribute>
2879
2880 <attribute name="sessionPid" type="unsigned long" readonly="yes">
2881 <desc>
2882 Identifier of the session process. This attribute contains the
2883 platform-dependent identifier of the process that has opened a
2884 direct session for this machine using the
2885 <link to="IVirtualBox::openSession()"/> call. The returned value
2886 is only valid if <link to="#sessionState"/> is SessionOpen or
2887 SessionClosing (i.e. a session is currently open or being
2888 closed) by the time this property is read.
2889 </desc>
2890 </attribute>
2891
2892 <attribute name="state" type="MachineState" readonly="yes">
2893 <desc>Current execution state of this machine.</desc>
2894 </attribute>
2895
2896 <attribute name="lastStateChange" type="long long" readonly="yes">
2897 <desc>
2898 Time stamp of the last execution state change,
2899 in milliseconds since 1970-01-01 UTC.
2900 </desc>
2901 </attribute>
2902
2903 <attribute name="stateFilePath" type="wstring" readonly="yes">
2904 <desc>
2905 Full path to the file that stores the execution state of
2906 the machine when it is in the <link to="MachineState::Saved"/>
2907 state.
2908 <note>
2909 When the machine is not in the Saved state, this attribute
2910 <tt>null</tt>.
2911 </note>
2912 </desc>
2913 </attribute>
2914
2915 <attribute name="logFolder" type="wstring" readonly="yes">
2916 <desc>
2917 Full path to the folder that stores a set of rotated log files
2918 recorded during machine execution. The most recent log file is
2919 named <tt>VBox.log</tt>, the previous log file is
2920 named <tt>VBox.log.1</tt> and so on (upto <tt>VBox.log.3</tt>
2921 in the current version).
2922 </desc>
2923 </attribute>
2924
2925 <attribute name="currentSnapshot" type="ISnapshot" readonly="yes">
2926 <desc>
2927 Current snapshot of this machine.
2928 <note>
2929 A <tt>null</tt> object is returned if the machine doesn't
2930 have snapshots.
2931 </note>
2932 <see><link to="ISnapshot"/></see>
2933 </desc>
2934 </attribute>
2935
2936 <attribute name="snapshotCount" type="unsigned long" readonly="yes">
2937 <desc>
2938 Number of snapshots taken on this machine. Zero means the
2939 machine doesn't have any snapshots.
2940 </desc>
2941 </attribute>
2942
2943 <attribute name="currentStateModified" type="boolean" readonly="yes">
2944 <desc>
2945 Returns <tt>true</tt> if the current state of the machine is not
2946 identical to the state stored in the current snapshot.
2947
2948 The current state is identical to the current snapshot right
2949 after one of the following calls are made:
2950 <ul>
2951 <li><link to="IConsole::discardCurrentState"/> or
2952 <link to="IConsole::discardCurrentSnapshotAndState"/>
2953 </li>
2954 <li><link to="IConsole::takeSnapshot"/> (issued on a
2955 powered off or saved machine, for which
2956 <link to="#settingsModified"/> returns <tt>false</tt>)
2957 </li>
2958 <li><link to="IMachine::setCurrentSnapshot"/>
2959 </li>
2960 </ul>
2961
2962 The current state remains identical until one of the following
2963 happens:
2964 <ul>
2965 <li>settings of the machine are changed</li>
2966 <li>the saved state is discarded</li>
2967 <li>the current snapshot is discarded</li>
2968 <li>an attempt to execute the machine is made</li>
2969 </ul>
2970
2971 <note>
2972 For machines that don't have snapshots, this property is
2973 always <tt>false</tt>.
2974 </note>
2975 </desc>
2976 </attribute>
2977
2978 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
2979 <desc>
2980 Collection of shared folders for this machine (permanent shared
2981 folders). These folders are shared automatically at machine startup
2982 and available only to the guest OS installed within this machine.
2983
2984 New shared folders are added to the collection using
2985 <link to="#createSharedFolder"/>. Existing shared folders can be
2986 removed using <link to="#removeSharedFolder"/>.
2987 </desc>
2988 </attribute>
2989
2990 <attribute name="clipboardMode" type="ClipboardMode">
2991 <desc>
2992 Synchronization mode between the host OS clipboard
2993 and the guest OS clipboard.
2994 </desc>
2995 </attribute>
2996
2997 <method name="setBootOrder">
2998 <desc>
2999 Puts the given device to the specified position in
3000 the boot order.
3001
3002 To indicate that no device is associated with the given position,
3003 <link to="DeviceType::Null"/> should be used.
3004
3005 @todo setHardDiskBootOrder(), setNetworkBootOrder()
3006 </desc>
3007 <param name="position" type="unsigned long" dir="in">
3008 <desc>
3009 Position in the boot order (<tt>1</tt> to the total number of
3010 devices the machine can boot from, as returned by
3011 <link to="ISystemProperties::maxBootPosition"/>).
3012 </desc>
3013 </param>
3014 <param name="device" type="DeviceType" dir="in">
3015 <desc>
3016 The type of the device used to boot at the given position.
3017 </desc>
3018 </param>
3019 </method>
3020
3021 <method name="getBootOrder" const="yes">
3022 <desc>
3023 Returns the device type that occupies the specified
3024 position in the boot order.
3025
3026 @todo [remove?]
3027 If the machine can have more than one device of the returned type
3028 (such as hard disks), then a separate method should be used to
3029 retrieve the individual device that occupies the given position.
3030
3031 If here are no devices at the given position, then
3032 <link to="DeviceType::Null"/> is returned.
3033
3034 @todo getHardDiskBootOrder(), getNetworkBootOrder()
3035 </desc>
3036 <param name="order" type="unsigned long" dir="in">
3037 <desc>
3038 Position in the boot order (<tt>1</tt> to the total number of
3039 devices the machine can boot from, as returned by
3040 <link to="ISystemProperties::maxBootPosition"/>).
3041 </desc>
3042 </param>
3043 <param name="device" type="DeviceType" dir="return">
3044 <desc>
3045 Device at the given position.
3046 </desc>
3047 </param>
3048 </method>
3049
3050 <method name="attachHardDisk">
3051 <desc>
3052
3053 Attaches a virtual hard disk identified by the given UUID to the
3054 given device slot of the given channel on the given bus. The
3055 specified device slot must not have another disk attached and the
3056 given hard disk must not be already attached to this machine.
3057
3058 See <link to="IHardDisk"/> for detailed information about
3059 attaching hard disks.
3060
3061 <note>You cannot attach a hard disk to a running machine. Also,
3062 you cannot attach a hard disk to a newly created machine until
3063 it is registered.</note>
3064
3065 <note>Attaching a hard disk to a machine creates a <i>lazy</i>
3066 attachment. In particular, no differeincing images are
3067 actually created until <link to="#saveSettings()"/> is called to
3068 commit all changed settings.</note>
3069
3070 </desc>
3071 <param name="id" type="uuid" dir="in">
3072 <desc>UUID of the hard disk to attach.</desc>
3073 </param>
3074 <param name="bus" type="StorageBus" dir="in">
3075 <desc>Type of storage bus to use (IDE or SATA).</desc>
3076 </param>
3077 <param name="channel" type="long" dir="in">
3078 <desc>Channel to attach the hard disk to. For IDE controllers,
3079 this can either be 0 or 1, for the primary or secondary controller,
3080 respectively.</desc>
3081 </param>
3082 <param name="device" type="long" dir="in">
3083 <desc>Device slot in the given channel to attach the hard disk to.
3084 For IDE devices, within each channel (0 or 1), this can again be
3085 0 or 1, for master or slave, respectively.</desc>
3086 </param>
3087 </method>
3088
3089 <method name="getHardDisk" const="yes">
3090 <desc>
3091 Returns the hard disk attached to the
3092 given controller under the specified device number.
3093 </desc>
3094 <param name="bus" type="StorageBus" dir="in"/>
3095 <param name="channel" type="long" dir="in"/>
3096 <param name="device" type="long" dir="in"/>
3097 <param name="hardDisk" type="IHardDisk" dir="return"/>
3098 </method>
3099
3100 <method name="detachHardDisk">
3101 <desc>
3102
3103 Detaches the hard disk drive attached to the given device slot
3104 of the given controller.
3105
3106 See <link to="IHardDisk"/> for detailed information about
3107 attaching hard disks.
3108
3109 <note>You cannot detach a hard disk from a running
3110 machine.</note>
3111
3112 <note>
3113 Detaching a hard disk from a machine creates a <i>lazy</i>
3114 detachment. In particular, if the detached hard disk is a
3115 differencing hard disk, it is not actually deleted until
3116 <link to="#saveSettings()"/> is called to commit all changed settings.
3117 Keep in mind, that doing <link to="#saveSettings()"/> will
3118 <b>physically delete</b> all detached differencing hard disks,
3119 so be careful.
3120 </note>
3121
3122 </desc>
3123 <param name="bus" type="StorageBus" dir="in">
3124 <desc>Bus to dettach the hard disk from.</desc>
3125 </param>
3126 <param name="channel" type="long" dir="in">
3127 <desc>Channel number to dettach the hard disk from.</desc>
3128 </param>
3129 <param name="device" type="long" dir="in">
3130 <desc>Device slot number to dettach the hard disk from.</desc>
3131 </param>
3132 </method>
3133
3134 <method name="getNetworkAdapter" const="yes">
3135 <desc>
3136 Returns the network adapter associated with the given slot.
3137 Slots are numbered sequentially, starting with zero. The total
3138 number of adapters per every machine is defined by the
3139 <link to="ISystemProperties::networkAdapterCount"/> property,
3140 so the maximum slot number is one less than that property's value.
3141 </desc>
3142 <param name="slot" type="unsigned long" dir="in"/>
3143 <param name="adapter" type="INetworkAdapter" dir="return"/>
3144 </method>
3145
3146 <method name="getSerialPort" const="yes">
3147 <desc>
3148 Returns the serial port associated with the given slot.
3149 Slots are numbered sequentially, starting with zero. The total
3150 number of serial ports per every machine is defined by the
3151 <link to="ISystemProperties::serialPortCount"/> property,
3152 so the maximum slot number is one less than that property's value.
3153 </desc>
3154 <param name="slot" type="unsigned long" dir="in"/>
3155 <param name="port" type="ISerialPort" dir="return"/>
3156 </method>
3157
3158 <method name="getParallelPort" const="yes">
3159 <desc>
3160 Returns the parallel port associated with the given slot.
3161 Slots are numbered sequentially, starting with zero. The total
3162 number of parallel ports per every machine is defined by the
3163 <link to="ISystemProperties::parallelPortCount"/> property,
3164 so the maximum slot number is one less than that property's value.
3165 </desc>
3166 <param name="slot" type="unsigned long" dir="in"/>
3167 <param name="port" type="IParallelPort" dir="return"/>
3168 </method>
3169
3170 <method name="getNextExtraDataKey">
3171 <desc>
3172 Returns the machine-specific extra data key name following the
3173 supplied key.
3174
3175 An error is returned if the supplied @a key does not exist. @c NULL is
3176 returned in @a nextKey if the supplied key is the last key. When
3177 supplying @c NULL for the @a key, the first key item is returned in @a
3178 nextKey (if there is any). @a nextValue is an optional parameter and
3179 if supplied, the next key's value is returned in it.
3180 </desc>
3181 <param name="key" type="wstring" dir="in">
3182 <desc>Name of the data key to follow.</desc>
3183 </param>
3184 <param name="nextKey" type="wstring" dir="out">
3185 <desc>Name of the next data key.</desc>
3186 </param>
3187 <param name="nextValue" type="wstring" dir="out">
3188 <desc>Value of the next data key.</desc>
3189 </param>
3190 </method>
3191
3192 <method name="getExtraData">
3193 <desc>
3194 Returns associated machine-specific extra data.
3195
3196 If the reuqested data @a key does not exist, this function will
3197 succeed and return @c NULL in the @a value argument.
3198 </desc>
3199 <param name="key" type="wstring" dir="in">
3200 <desc>Name of the data key to get.</desc>
3201 </param>
3202 <param name="value" type="wstring" dir="return">
3203 <desc>Value of the requested data key.</desc>
3204 </param>
3205 </method>
3206
3207 <method name="setExtraData">
3208 <desc>
3209 Sets associated machine-specific extra data.
3210
3211 If you pass @c NULL as a key @a vaule, the given @a key will be
3212 deleted.
3213
3214 <note>
3215 Before performing the actual data change, this method will ask all
3216 registered callbacks using the
3217 <link to="IVirtualBoxCallback::onExtraDataCanChange()"/>
3218 notification for a permission. If one of the callbacks refuses the
3219 new value, the change will not be performed.
3220 </note>
3221 <note>
3222 On success, the
3223 <link to="IVirtualBoxCallback::onExtraDataChange()"/> notification
3224 is called to inform all registered callbacks about a successful data
3225 change.
3226 </note>
3227 <note>
3228 This method can be called outside the machine session and therefore
3229 it's a caller's responsibility to handle possible race conditions
3230 when several clients change the same key at the same time.
3231 </note>
3232 </desc>
3233 <param name="key" type="wstring" dir="in">
3234 <desc>Name of the data key to set.</desc>
3235 </param>
3236 <param name="value" type="wstring" dir="in">
3237 <desc>Value to assign to the key.</desc>
3238 </param>
3239 </method>
3240
3241 <method name="saveSettings">
3242 <desc>
3243 Saves any changes to machine settings made since the session
3244 has been opened or a new machine has been created, or since the
3245 last call to <link to="#saveSettings()"/> or <link to="#discardSettings()"/>.
3246 For registered machines, new settings become visible to all
3247 other VirtualBox clients after successful invocation of this
3248 method.
3249 <note>
3250 The method sends <link to="IVirtualBoxCallback::onMachineDataChange()"/>
3251 notification event after the configuration has been successfully
3252 saved (only for registered machines).
3253 </note>
3254 <note>
3255 Calling this method is only valid on instances returned
3256 by <link to="ISession::machine"/> and on new machines
3257 created by <link to="IVirtualBox::createMachine"/> but not
3258 yet registered, or on unregistered machines after calling
3259 <link to="IVirtualBox::unregisterMachine"/>.
3260 </note>
3261 </desc>
3262 </method>
3263
3264 <method name="saveSettingsWithBackup">
3265 <desc>
3266 Creates a backup copy of the machine settings file (<link
3267 to="#settingsFilePath"/>) in case of auto-conversion, and then calls
3268 <link to="#saveSettings()"/>.
3269
3270 Note that the backup copy is created <b>only</b> if the settings file
3271 auto-conversion took place (see <link to="#settingsFileVersion"/> for
3272 details). Otherwise, this call is fully equivalent to
3273 <link to="#saveSettings()"/> and no backup copying is done.
3274
3275 The backup copy is created in the same directory where the original
3276 settings file is located. It is given the following file name:
3277 <pre>
3278 original.xml.x.y-platform.bak
3279 </pre>
3280 where <tt>original.xml</tt> is the original settings file name
3281 (excluding path), and <tt>x.y-platform</tt> is the version of the old
3282 format of the settings file (before auto-conversion).
3283
3284 If the given backup file already exists, this method will try to add the
3285 <tt>.N</tt> suffix to the backup file name (where <tt>N</tt> counts from
3286 0 to 9) and copy it again until it succeeds. If all suffixes are
3287 occupied, or if any other copy error occurs, this method will return a
3288 failure.
3289
3290 If the copy operation succeeds, the @a bakFileName return argument will
3291 receive a full path to the created backup file (for informational
3292 purposes). Note that this will happen even if the subsequent
3293 <link to="#saveSettings()"/> call performed by this method after the
3294 copy operation, fails.
3295
3296 <note>
3297 The VirtualBox API never calls this method. It is intended purely for
3298 the purposes of creating backup copies of the settings files by
3299 front-ends before saving the results of the automatically performed
3300 settings conversion to disk.
3301 </note>
3302
3303 <see>settingsFileVersion</see>
3304 </desc>
3305 <param name="bakFileName" type="wstring" dir="return">
3306 <desc>Full path to the created backup copy.</desc>
3307 </param>
3308 </method>
3309
3310 <method name="discardSettings">
3311 <desc>
3312 Discards any changes to the machine settings made since the session
3313 has been opened or since the last call to <link to="#saveSettings()"/>
3314 or <link to="#discardSettings"/>.
3315 <note>
3316 Calling this method is only valid on instances returned
3317 by <link to="ISession::machine"/> and on new machines
3318 created by <link to="IVirtualBox::createMachine"/> or
3319 opened by <link to="IVirtualBox::openMachine"/> but not
3320 yet registered, or on unregistered machines after calling
3321 <link to="IVirtualBox::unregisterMachine"/>.
3322 </note>
3323 </desc>
3324 </method>
3325
3326 <method name="deleteSettings">
3327 <desc>
3328 Deletes the settings file of this machine from disk.
3329 The machine must not be registered in order for this operation
3330 to succeed.
3331 <note>
3332 <link to="#settingsModified"/> will return TRUE after this
3333 method successfully returns.
3334 </note>
3335 <note>
3336 Calling this method is only valid on instances returned
3337 by <link to="ISession::machine"/> and on new machines
3338 created by <link to="IVirtualBox::createMachine"/> or
3339 opened by <link to="IVirtualBox::openMachine"/> but not
3340 yet registered, or on unregistered machines after calling
3341 <link to="IVirtualBox::unregisterMachine"/>.
3342 </note>
3343 <note>
3344 The deleted machine settings file can be restored (saved again)
3345 by calling <link to="#saveSettings()"/>.
3346 </note>
3347 </desc>
3348 </method>
3349
3350 <method name="getSnapshot">
3351 <desc>
3352 Returns a snapshot of this machine with the given UUID.
3353 A <tt>null</tt> UUID can be used to obtain the first snapshot
3354 taken on this machine. This is useful if you want to traverse
3355 the whole tree of snapshots starting from the root.
3356 </desc>
3357 <param name="id" type="uuid" dir="in">
3358 <desc>UUID of the snapshot to get</desc>
3359 </param>
3360 <param name="snapshot" type="ISnapshot" dir="return">
3361 <desc>Snapshot object with the given UUID.</desc>
3362 </param>
3363 </method>
3364
3365 <method name="findSnapshot">
3366 <desc>
3367 Returns a snapshot of this machine with the given name.
3368 </desc>
3369 <param name="name" type="wstring" dir="in">
3370 <desc>Name of the snapshot to find</desc>
3371 </param>
3372 <param name="snapshot" type="ISnapshot" dir="return">
3373 <desc>Snapshot object with the given name.</desc>
3374 </param>
3375 </method>
3376
3377 <method name="setCurrentSnapshot">
3378 <desc>
3379 Sets the current snapshot of this machine.
3380 <note>
3381 In the current implementation, this operation is not
3382 implemented.
3383 </note>
3384 </desc>
3385 <param name="id" type="uuid" dir="in">
3386 <desc>UUID of the snapshot to set as the current snapshot.</desc>
3387 </param>
3388 </method>
3389
3390 <method name="createSharedFolder">
3391 <desc>
3392 Creates a new permanent shared folder by associating the given logical
3393 name with the given host path, adds it to the collection of shared
3394 folders and starts sharing it. Refer to the description of
3395 <link to="ISharedFolder"/> to read more about logical names.
3396 </desc>
3397 <param name="name" type="wstring" dir="in">
3398 <desc>Unique logical name of the shared folder.</desc>
3399 </param>
3400 <param name="hostPath" type="wstring" dir="in">
3401 <desc>Full path to the shared folder in the host file system.</desc>
3402 </param>
3403 <param name="writable" type="boolean" dir="in">
3404 <desc>Whether the share is writable or readonly</desc>
3405 </param>
3406 </method>
3407
3408 <method name="removeSharedFolder">
3409 <desc>
3410 Removes the permanent shared folder with the given name previously
3411 created by <link to="#createSharedFolder"/> from the collection of
3412 shared folders and stops sharing it.
3413 </desc>
3414 <param name="name" type="wstring" dir="in">
3415 <desc>Logical name of the shared folder to remove.</desc>
3416 </param>
3417 </method>
3418
3419 <method name="canShowConsoleWindow">
3420 <desc>
3421 Returns @c true if the VM console process can activate the
3422 console window and bring it to foreground on the desktop of
3423 the host PC.
3424 <note>
3425 This method will fail if a session for this machine is not
3426 currently open.
3427 </note>
3428 </desc>
3429 <param name="canShow" type="boolean" dir="return">
3430 <desc>
3431 @c true if the console window can be shown and @c
3432 false otherwise.
3433 </desc>
3434 </param>
3435 </method>
3436
3437 <method name="showConsoleWindow">
3438 <desc>
3439 Activates the console window and brings it to foreground on
3440 the desktop of the host PC. Many modern window managers on
3441 many platforms implement some sort of focus stealing
3442 prevention logic, so that it may be impossible to activate
3443 a window without the help of the currently active
3444 application. In this case, this method will return a non-zero
3445 identifier that represents the top-level window of the VM
3446 console process. The caller, if it represents a currently
3447 active process, is responsible to use this identifier (in a
3448 platform-dependent manner) to perform actual window
3449 activation.
3450 <note>
3451 This method will fail if a session for this machine is not
3452 currently open.
3453 </note>
3454 </desc>
3455 <param name="winId" type="unsigned long long" dir="return">
3456 <desc>
3457 Platform-dependent identifier of the top-level VM console
3458 window, or zero if this method has performed all actions
3459 necessary to implement the <i>show window</i> semantics for
3460 the given platform and/or VirtualBox front-end.
3461 </desc>
3462 </param>
3463 </method>
3464
3465 </interface>
3466
3467 <!--
3468 // IConsole
3469 /////////////////////////////////////////////////////////////////////////
3470 -->
3471
3472 <interface
3473 name="IConsoleCallback" extends="$unknown"
3474 uuid="13dfbef3-b74d-487d-bada-2304529aefa6"
3475 wsmap="suppress"
3476 >
3477
3478 <method name="onMousePointerShapeChange">
3479 <desc>
3480 Notification when the guest mouse pointer shape has
3481 changed. The new shape data is given.
3482 </desc>
3483 <param name="visible" type="boolean" dir="in">
3484 <desc>
3485 Flag whether the pointer is visible.
3486 </desc>
3487 </param>
3488 <param name="alpha" type="boolean" dir="in">
3489 <desc>
3490 Flag whether the pointer has an alpha channel.
3491 </desc>
3492 </param>
3493 <param name="xHot" type="unsigned long" dir="in">
3494 <desc>
3495 The pointer hot spot x coordinate.
3496 </desc>
3497 </param>
3498 <param name="yHot" type="unsigned long" dir="in">
3499 <desc>
3500 The pointer hot spot y coordinate.
3501 </desc>
3502 </param>
3503 <param name="width" type="unsigned long" dir="in">
3504 <desc>
3505 Width of the pointer shape in pixels.
3506 </desc>
3507 </param>
3508 <param name="height" type="unsigned long" dir="in">
3509 <desc>
3510 Height of the pointer shape in pixels.
3511 </desc>
3512 </param>
3513 <param name="shape" type="octet" mod="ptr" dir="in">
3514 <desc>
3515 Address of the shape buffer.
3516
3517 The buffer contains 1 bpp (bits per pixel) AND mask followed by 32 bpp XOR (color) mask.
3518
3519 For pointers without alpha channel the XOR mask pixels are 32 bit values: (lsb)BGR0(msb).
3520 For pointers with alpha channel the XOR mask consists of (lsb)BGRA(msb) 32 bit values.
3521
3522 AND mask presents for pointers with alpha channel, so if the callback does not
3523 support alpha, the pointer could be displayed as a normal color pointer.
3524
3525 The AND mask is 1 bpp bitmap with byte aligned scanlines. Size of AND mask,
3526 therefore, is <tt>cbAnd = (width + 7) / 8 * height</tt>. The padding bits at the
3527 end of any scanline are undefined.
3528
3529 The XOR mask follows the AND mask on the next 4 bytes aligned offset:
3530 <tt>uint8_t *pXor = pAnd + (cbAnd + 3) &amp; ~3</tt>
3531 Bytes in the gap between the AND and the XOR mask are undefined.
3532 XOR mask scanlines have no gap between them and size of XOR mask is:
3533 <tt>cXor = width * 4 * height</tt>.
3534
3535 <note>
3536 If 'shape' is equal to 0, only pointer visibility is being changed.
3537 </note>
3538 </desc>
3539 </param>
3540 </method>
3541
3542 <method name="onMouseCapabilityChange">
3543 <desc>
3544 Notification when the mouse capabilities reported by the
3545 guest have changed. The new capabilities are passed.
3546 </desc>
3547 <param name="supportsAbsolute" type="boolean" dir="in"/>
3548 <param name="needsHostCursor" type="boolean" dir="in"/>
3549 </method>
3550
3551 <method name="onKeyboardLedsChange">
3552 <desc>
3553 Notification when the guest OS executes the KBD_CMD_SET_LEDS command
3554 to alter the state of the keyboard LEDs.
3555 </desc>
3556 <param name="numLock" type="boolean" dir="in"/>
3557 <param name="capsLock" type="boolean" dir="in"/>
3558 <param name="scrollLock" type="boolean" dir="in"/>
3559 </method>
3560
3561 <method name="onStateChange">
3562 <desc>
3563 Notification when the execution state of the machine has changed.
3564 The new state will be given.
3565 </desc>
3566 <param name="state" type="MachineState" dir="in"/>
3567 </method>
3568
3569 <method name="onAdditionsStateChange">
3570 <desc>
3571 Notification when a Guest Additions property changes.
3572 Interested callees should query IGuest attributes to
3573 find out what has changed.
3574 </desc>
3575 </method>
3576
3577 <method name="onDVDDriveChange">
3578 <desc>
3579 Notification when a property of the
3580 virtual <link to="IMachine::DVDDrive">DVD drive</link> changes.
3581 Interested callees should use IDVDDrive methods to find out what has
3582 changed.
3583 </desc>
3584 </method>
3585
3586 <method name="onFloppyDriveChange">
3587 <desc>
3588 Notification when a property of the
3589 virtual <link to="IMachine::FloppyDrive">floppy drive</link> changes.
3590 Interested callees should use IFloppyDrive methods to find out what
3591 has changed.
3592 </desc>
3593 </method>
3594
3595 <method name="onNetworkAdapterChange">
3596 <desc>
3597 Notification when a property of one of the
3598 virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
3599 changes. Interested callees should use INetworkAdapter methods and
3600 attributes to find out what has changed.
3601 </desc>
3602 <param name="networkAdapter" type="INetworkAdapter" dir="in">
3603 <desc>Network adapter that is subject to change.</desc>
3604 </param>
3605 </method>
3606
3607 <method name="onSerialPortChange">
3608 <desc>
3609 Notification when a property of one of the
3610 virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
3611 Interested callees should use ISerialPort methods and attributes
3612 to find out what has changed.
3613 </desc>
3614 <param name="serialPort" type="ISerialPort" dir="in">
3615 <desc>Serial port that is subject to change.</desc>
3616 </param>
3617 </method>
3618
3619 <method name="onParallelPortChange">
3620 <desc>
3621 Notification when a property of one of the
3622 virtual <link to="IMachine::getParallelPort">parallel ports</link>
3623 changes. Interested callees should use ISerialPort methods and
3624 attributes to find out what has changed.
3625 </desc>
3626 <param name="parallelPort" type="IParallelPort" dir="in">
3627 <desc>Parallel port that is subject to change.</desc>
3628 </param>
3629 </method>
3630
3631 <method name="onVRDPServerChange">
3632 <desc>
3633 Notification when a property of the
3634 <link to="IMachine::VRDPServer">VRDP server</link> changes.
3635 Interested callees should use IVRDPServer methods and attributes to
3636 find out what has changed.
3637 </desc>
3638 </method>
3639
3640 <method name="onUSBControllerChange">
3641 <desc>
3642 Notification when a property of the virtual
3643 <link to="IMachine::USBController">USB controller</link> changes.
3644 Interested callees should use IUSBController methods and attributes to
3645 find out what has changed.
3646 </desc>
3647 </method>
3648
3649 <method name="onUSBDeviceStateChange">
3650 <desc>
3651 Notification when a USB device is attached to or detached from
3652 the virtual USB controller.
3653
3654 This notification is sent as a result of the indirect
3655 request to attach the device because it matches one of the
3656 machine USB filters, or as a result of the direct request
3657 issued by <link to="IConsole::attachUSBDevice"/> or
3658 <link to="IConsole::detachUSBDevice"/>.
3659
3660 This notification is sent in case of both a succeeded and a
3661 failed request completion. When the request succeeds, the @a
3662 error parameter is @c null, and the given device has been
3663 already added to (when @a attached is @c true) or removed from
3664 (when @a attached is @c false) the collection represented by
3665 <link to="IConsole::USBDevices"/>. On failure, the collection
3666 doesn't change and the @a error perameter represents the error
3667 message describing the failure.
3668
3669 </desc>
3670 <param name="device" type="IUSBDevice" dir="in">
3671 <desc>Device that is subject to state change.</desc>
3672 </param>
3673 <param name="attached" type="boolean" dir="in">
3674 <desc>
3675 <tt>true</tt> if the device was attached
3676 and <tt>false</tt> otherwise.
3677 </desc>
3678 </param>
3679 <param name="error" type="IVirtualBoxErrorInfo" dir="in">
3680 <desc>
3681 <tt>null</tt> on success or an error message object on
3682 failure.
3683 </desc>
3684 </param>
3685 </method>
3686
3687 <method name="onSharedFolderChange">
3688 <desc>
3689 Notification when a shared folder is added or removed.
3690 The @a scope argument defines one of three scopes:
3691 <link to="IVirtualBox::sharedFolders">global shared folders</link>
3692 (<link to="Scope::Global">Global</link>),
3693 <link to="IMachine::sharedFolders">permanent shared folders</link> of
3694 the machine (<link to="Scope::Machine">Machine</link>) or <link
3695 to="IConsole::sharedFolders">transient shared folders</link> of the
3696 machine (<link to="Scope::Session">Session</link>). Interested callees
3697 should use query the corresponding collections to find out what has
3698 changed.
3699 </desc>
3700 <param name="scope" type="Scope" dir="in">
3701 <desc>Sope of the notification.</desc>
3702 </param>
3703 </method>
3704
3705 <method name="onRuntimeError">
3706 <desc>
3707 Notification when an error happens during the virtual
3708 machine execution.
3709
3710 There are three kinds of runtime errors:
3711 <ul>
3712 <li><i>fatal</i></li>
3713 <li><i>non-fatal with retry</i></li>
3714 <li><i>non-fatal warnings</i></li>
3715 </ul>
3716
3717 <b>Fatal</b> errors are indicated by the @a fatal parameter set
3718 to <tt>true</tt>. In case of fatal errors, the virtual machine
3719 execution is always paused before calling this notification, and
3720 the notification handler is supposed either to immediately save
3721 the virtual machine state using <link to="IConsole::saveState()"/>
3722 or power it off using <link to="IConsole::powerDown()"/>.
3723 Resuming the execution can lead to unpredictable results.
3724
3725 <b>Non-fatal</b> errors and warnings are indicated by the
3726 @a fatal parameter set to <tt>false</tt>. If the virtual machine
3727 is in the Paused state by the time the error notification is
3728 received, it means that the user can <i>try to resume</i> the machine
3729 execution after attempting to solve the probem that caused the
3730 error. In this case, the notification handler is supposed
3731 to show an appropriate message to the user (depending on the
3732 value of the @a id parameter) that offers several actions such
3733 as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
3734 wants to retry, the notification handler should continue
3735 the machine execution using the <link to="IConsole::resume()"/>
3736 call. If the machine execution is not Paused during this
3737 notification, then it means this notification is a <i>warning</i>
3738 (for example, about a fatal condition that can happen very soon);
3739 no immediate action is required from the user, the machine
3740 continues its normal execution.
3741
3742 Note that in either case the notification handler
3743 <b>must not</b> perform any action directly on a thread
3744 where this notification is called. Everything it is allowed to
3745 do is to post a message to another thread that will then talk
3746 to the user and take the corresponding action.
3747
3748 Currently, the following error identificators are known:
3749 <ul>
3750 <li><tt>"HostMemoryLow"</tt></li>
3751 <li><tt>"HostAudioNotResponding"</tt></li>
3752 <li><tt>"VDIStorageFull"</tt></li>
3753 </ul>
3754
3755 <note>
3756 This notification is not designed to be implemented by
3757 more than one callback at a time. If you have multiple
3758 IConsoleCallback instances registered on the given
3759 IConsole object, make sure you simply do nothing but
3760 return @c S_OK from all but one of them that does actual
3761 user notification and performs necessary actions.
3762 </note>
3763
3764 </desc>
3765 <param name="fatal" type="boolean" dir="in">
3766 <desc>Whether the error is fatal or not</desc>
3767 </param>
3768 <param name="id" type="wstring" dir="in">
3769 <desc>Error identificator</desc>
3770 </param>
3771 <param name="message" type="wstring" dir="in">
3772 <desc>Optional error message</desc>
3773 </param>
3774 </method>
3775
3776 <method name="onCanShowWindow">
3777 <desc>
3778 Notification when a call to
3779 <link to="IMachine::canShowConsoleWindow()"/> is made by a
3780 front-end to check if a subsequent call to
3781 <link to="IMachine::showConsoleWindow()"/> can succeed.
3782
3783 The callee should give an answer appropriate to the current
3784 machine state in the @a canShow argument. This answer must
3785 remain valid at least until the next
3786 <link to="IConsole::state">machine state</link> change.
3787
3788 <note>
3789 This notification is not designed to be implemented by
3790 more than one callback at a time. If you have multiple
3791 IConsoleCallback instances registered on the given
3792 IConsole object, make sure you simply do nothing but
3793 return @c true and @c S_OK from all but one of them that
3794 actually manages console window activation.
3795 </note>
3796 </desc>
3797 <param name="canShow" type="boolean" dir="return">
3798 <desc>
3799 @c true if the console window can be shown and @c
3800 false otherwise.
3801 </desc>
3802 </param>
3803 </method>
3804
3805 <method name="onShowWindow">
3806 <desc>
3807 Notification when a call to
3808 <link to="IMachine::showConsoleWindow()"/>
3809 requests the console window to be activated and brought to
3810 foreground on the desktop of the host PC.
3811
3812 This notification should cause the VM console process to
3813 perform the requested action as described above. If it is
3814 impossible to do it at a time of this notification, this
3815 method should return a failure.
3816
3817 Note that many modern window managers on many platforms
3818 implement some sort of focus stealing prevention logic, so
3819 that it may be impossible to activate a window without the
3820 help of the currently active application (which is supposedly
3821 an initiator of this notification). In this case, this method
3822 must return a non-zero identifier that represents the
3823 top-level window of the VM console process. The caller, if it
3824 represents a currently active process, is responsible to use
3825 this identifier (in a platform-dependent manner) to perform
3826 actual window activation.
3827
3828 This method must set @a winId to zero if it has performed all
3829 actions necessary to complete the request and the console
3830 window is now active and in foreground, to indicate that no
3831 further action is required on the caller's side.
3832
3833 <note>
3834 This notification is not designed to be implemented by
3835 more than one callback at a time. If you have multiple
3836 IConsoleCallback instances registered on the given
3837 IConsole object, make sure you simply do nothing but
3838 return@c S_OK from all but one of them that actually
3839 manages console window activation.
3840 </note>
3841 </desc>
3842 <param name="winId" type="unsigned long long" dir="return">
3843 <desc>
3844 Platform-dependent identifier of the top-level VM console
3845 window, or zero if this method has performed all actions
3846 necessary to implement the <i>show window</i> semantics for
3847 the given platform and/or this VirtualBox front-end.
3848 </desc>
3849 </param>
3850 </method>
3851
3852 </interface>
3853
3854 <interface
3855 name="IRemoteDisplayInfo" extends="$unknown"
3856 uuid="550104cd-2dfd-4a6c-857d-f6f8e088e62c"
3857 wsmap="struct"
3858 >
3859 <desc>
3860 Contains information about the remote display (VRDP) capabilities and status.
3861 This is used in the <link to="IConsole::remoteDisplayInfo" /> attribute.
3862
3863 <note>With the COM API, this is an interface like all the others. With the webservice,
3864 this is mapped to a structure, so querying the attribute will not return an object,
3865 but a complete structure.</note>
3866 </desc>
3867
3868 <attribute name="active" type="boolean" readonly="yes">
3869 <desc>
3870 Whether the remote display connection is active.
3871 </desc>
3872 </attribute>
3873
3874 <attribute name="numberOfClients" type="unsigned long" readonly="yes">
3875 <desc>
3876 How many times a client connected.
3877 </desc>
3878 </attribute>
3879
3880 <attribute name="beginTime" type="long long" readonly="yes">
3881 <desc>
3882 When the last connection was established, in milliseconds since 1970-01-01 UTC.
3883 </desc>
3884 </attribute>
3885
3886 <attribute name="endTime" type="long long" readonly="yes">
3887 <desc>
3888 When the last connection was terminated or the current time, if
3889 connection is still active, in milliseconds since 1970-01-01 UTC.
3890 </desc>
3891 </attribute>
3892
3893 <attribute name="bytesSent" type="unsigned long long" readonly="yes">
3894 <desc>
3895 How many bytes were sent in last or current, if still active, connection.
3896 </desc>
3897 </attribute>
3898
3899 <attribute name="bytesSentTotal" type="unsigned long long" readonly="yes">
3900 <desc>
3901 How many bytes were sent in all connections.
3902 </desc>
3903 </attribute>
3904
3905 <attribute name="bytesReceived" type="unsigned long long" readonly="yes">
3906 <desc>
3907 How many bytes were received in last or current, if still active, connection.
3908 </desc>
3909 </attribute>
3910
3911 <attribute name="bytesReceivedTotal" type="unsigned long long" readonly="yes">
3912 <desc>
3913 How many bytes were received in all connections.
3914 </desc>
3915 </attribute>
3916
3917 <attribute name="user" type="wstring" readonly="yes">
3918 <desc>
3919 Login user name supplied by the client.
3920 </desc>
3921 </attribute>
3922
3923 <attribute name="domain" type="wstring" readonly="yes">
3924 <desc>
3925 Login domain name supplied by the client.
3926 </desc>
3927 </attribute>
3928
3929 <attribute name="clientName" type="wstring" readonly="yes">
3930 <desc>
3931 The client name supplied by the client.
3932 </desc>
3933 </attribute>
3934
3935 <attribute name="clientIP" type="wstring" readonly="yes">
3936 <desc>
3937 The IP address of the client.
3938 </desc>
3939 </attribute>
3940
3941 <attribute name="clientVersion" type="unsigned long" readonly="yes">
3942 <desc>
3943 The client software version number.
3944 </desc>
3945 </attribute>
3946
3947 <attribute name="encryptionStyle" type="unsigned long" readonly="yes">
3948 <desc>
3949 Public key exchange method used when connection was established.
3950 Values: 0 - RDP4 public key exchange scheme.
3951 1 - X509 sertificates were sent to client.
3952 </desc>
3953 </attribute>
3954
3955 </interface>
3956
3957 <interface
3958 name="IConsole" extends="$unknown"
3959 uuid="d5a1cbda-f5d7-4824-9afe-d640c94c7dcf"
3960 wsmap="managed"
3961 >
3962 <desc>
3963 The IConsole interface represents an interface to control virtual
3964 machine execution.
3965
3966 The console object that implements the IConsole interface is obtained
3967 from a session object after the session for the given machine has been
3968 opened using one of <link to="IVirtualBox::openSession"/>,
3969 <link to="IVirtualBox::openRemoteSession"/> or
3970 <link to="IVirtualBox::openExistingSession"/> methdods.
3971
3972 Methods of the IConsole interface allow the caller to query the current
3973 virtual machine execution state, pause the machine or power it down, save
3974 the machine state or take a snapshot, attach and detach removable media
3975 and so on.
3976
3977 <see>ISession</see>
3978 </desc>
3979
3980 <attribute name="machine" type="IMachine" readonly="yes">
3981 <desc>
3982 Machine object this console is sessioned with.
3983 <note>
3984 This is a convenience property, it has the same value as
3985 <link to="ISession::machine"/> of the corresponding session
3986 object.
3987 </note>
3988 </desc>
3989 </attribute>
3990
3991 <attribute name="state" type="MachineState" readonly="yes">
3992 <desc>
3993 Current execution state of the machine.
3994 <note>
3995 This property always returns the same value as the corresponding
3996 property of the IMachine object this console is sessioned with.
3997 For the process that owns (executes) the VM, this is the
3998 preferable way of querying the VM state, because no IPC
3999 calls are made.
4000 </note>
4001 </desc>
4002 </attribute>
4003
4004 <attribute name="guest" type="IGuest" readonly="yes">
4005 <desc>Guest object.</desc>
4006 </attribute>
4007
4008 <attribute name="keyboard" type="IKeyboard" readonly="yes">
4009 <desc>
4010 Virtual keyboard object.
4011 <note>
4012 If the machine is not running, any attempt to use
4013 the returned object will result in an error.
4014 </note>
4015 </desc>
4016 </attribute>
4017
4018 <attribute name="mouse" type="IMouse" readonly="yes">
4019 <desc>
4020 Virtual mouse object.
4021 <note>
4022 If the machine is not running, any attempt to use
4023 the returned object will result in an error.
4024 </note>
4025 </desc>
4026 </attribute>
4027
4028 <attribute name="display" type="IDisplay" readonly="yes">
4029 <desc>Virtual display object.
4030 <note>
4031 If the machine is not running, any attempt to use
4032 the returned object will result in an error.
4033 </note>
4034 </desc>
4035 </attribute>
4036
4037 <attribute name="debugger" type="IMachineDebugger" readonly="yes">
4038 <desc>Debugging interface.</desc>
4039 </attribute>
4040
4041 <attribute name="USBDevices" type="IUSBDeviceCollection" readonly="yes">
4042 <desc>
4043 Collection of USB devices currently attached to the virtual
4044 USB controller.
4045 <note>
4046 The collection is empty if the machine is not running.
4047 </note>
4048 </desc>
4049 </attribute>
4050
4051 <attribute name="remoteUSBDevices" type="IHostUSBDeviceCollection" readonly="yes">
4052 <desc>
4053 List of USB devices currently attached to the remote VRDP client.
4054 Once a new device is physically attached to the remote host computer,
4055 it appears in this list and remains there until detached.
4056 </desc>
4057 </attribute>
4058
4059 <attribute name="sharedFolders" type="ISharedFolderCollection" readonly="yes">
4060 <desc>
4061 Collection of shared folders for the current session. These folders
4062 are called transient shared folders because they are available to the
4063 guest OS running inside the associated virtual machine only for the
4064 duration of the session (as opposed to
4065 <link to="IMachine::sharedFolders"/> which represent permanent shared
4066 folders). When the session is closed (e.g. the machine is powered down),
4067 these folders are automatically discarded.
4068
4069 New shared folders are added to the collection using
4070 <link to="#createSharedFolder"/>. Existing shared folders can be
4071 removed using <link to="#removeSharedFolder"/>.
4072 </desc>
4073 </attribute>
4074
4075 <attribute name="remoteDisplayInfo" type="IRemoteDisplayInfo" readonly="yes">
4076 <desc>
4077 Interface that provides information on Remote Display (VRDP) connection.
4078 </desc>
4079 </attribute>
4080
4081 <method name="powerUp">
4082 <desc>
4083 Starts the virtual machine execution using the current machine
4084 state (i.e. its current execution state, current settings and
4085 current hard disks).
4086
4087 If the machine is powered off or aborted, the execution will
4088 start from the beginning (as if the real hardware were just
4089 powered on).
4090
4091 If the machine is in the <link to="MachineState::Saved"/> state,
4092 it will continue its execution the point where the state has
4093 been saved.
4094
4095 <note>
4096 Unless you are trying to write a new VirtualBox front-end that
4097 performs direct machine execution (like the VirtualBox or VBoxSDL
4098 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
4099 session opened by <link to="IVirtualBox::openSession"/> and use this
4100 session only to change virtual machine settings. If you simply want to
4101 start virtual machine execution using one of the existing front-ends
4102 (for example the VirtualBox GUI or headless server), simply use
4103 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
4104 will power up the machine automatically for you.
4105 </note>
4106
4107 <see>#saveState</see>
4108 </desc>
4109 <param name="progress" type="IProgress" dir="return">
4110 <desc>Progress object to track the operation completion.</desc>
4111 </param>
4112 </method>
4113
4114 <method name="powerDown">
4115 <desc>
4116 Stops the virtual machine execution.
4117 After this operation completes, the machine will go to the
4118 PoweredOff state.
4119 </desc>
4120 </method>
4121
4122 <method name="reset">
4123 <desc>Resets the virtual machine.</desc>
4124 </method>
4125
4126 <method name="pause">
4127 <desc>Pauses the virtual machine execution.</desc>
4128 </method>
4129
4130 <method name="resume">
4131 <desc>Resumes the virtual machine execution.</desc>
4132 </method>
4133
4134 <method name="powerButton">
4135 <desc>Send the ACPI power button event to the guest.</desc>
4136 </method>
4137
4138 <method name="sleepButton">
4139 <desc>Send the ACPI sleep button event to the guest.</desc>
4140 </method>
4141
4142 <method name="getPowerButtonHandled">
4143 <desc>Check if the last power button event was handled by guest.</desc>
4144 <param name="handled" type="boolean" dir="return"/>
4145 </method>
4146
4147 <method name="saveState">
4148 <desc>
4149 Saves the current execution state of a running virtual machine
4150 and stops its execution.
4151
4152 After this operation completes, the machine will go to the
4153 Saved state. Next time it is powered up, this state will
4154 be restored and the machine will continue its execution from
4155 the place where it was saved.
4156
4157 This operation differs from taking a snapshot to the effect
4158 that it doesn't create new differencing hard disks. Also, once
4159 the machine is powered up from the state saved using this method,
4160 the saved state is deleted, so it will be impossible to return
4161 to this state later.
4162
4163 <note>
4164 On success, this method implicitly calls
4165 <link to="IMachine::saveSettings()"/> to save all current machine
4166 settings (including runtime changes to the DVD drive, etc.).
4167 Together with the impossibility to change any VM settings when it is
4168 in the Saved state, this guarantees the adequate hardware
4169 configuration of the machine when it is restored from the saved
4170 state file.
4171 </note>
4172
4173 <note>
4174 The machine must be in the Running or Paused state, otherwise
4175 the operation will fail.
4176 </note>
4177
4178 <see><link to="#takeSnapshot"/></see>
4179 </desc>
4180 <param name="progress" type="IProgress" dir="return">
4181 <desc>Progress object to track the operation completion.</desc>
4182 </param>
4183 </method>
4184
4185 <method name="adoptSavedState">
4186 <desc>
4187 Associates the given saved state file to the virtual machine.
4188
4189 On success, the machine will go to the Saved state. Next time it is
4190 powered up, it will be restored from the adopted saved state and
4191 continue execution from the place where the saved state file was
4192 created.
4193
4194 The specified saved state file path may be full or relative to the
4195 folder the VM normally saves the state to (usually,
4196 <link to="IMachine::snapshotFolder"/>).
4197
4198 <note>
4199 It's a caller's responsibility to make sure the given saved state
4200 file is compatible with the settings of this virtual machine that
4201 represent its virtual hardware (memory size, hard disk configuration
4202 etc.). If there is a mismatch, the behavior of the virtual machine
4203 is undefined.
4204 </note>
4205 </desc>
4206 <param name="savedStateFile" type="wstring" dir="in">
4207 <desc>Path to the saved state file to adopt.</desc>
4208 </param>
4209 </method>
4210
4211 <method name="discardSavedState">
4212 <desc>
4213 Discards (deletes) the saved state of the virtual machine
4214 previously created by <link to="#saveState"/>. Next time the
4215 machine is powered up, a clean boot will occur.
4216 <note>
4217 This operation is equivalent to resetting or powering off
4218 the machine without doing a proper shutdown in the guest OS.
4219 </note>
4220 </desc>
4221 </method>
4222
4223 <method name="getDeviceActivity">
4224 <desc>
4225 Gets the current activity type of a given device or device group.
4226 </desc>
4227 <param name="type" type="DeviceType" dir="in"/>
4228 <param name="activity" type="DeviceActivity" dir="return"/>
4229 </method>
4230
4231 <method name="attachUSBDevice">
4232 <desc>
4233 Attaches a host USB device with the given UUID to the
4234 USB controller of the virtual machine.
4235
4236 The device needs to be in one of the following states:
4237 <link to="USBDeviceState::Busy">Busy</link>,
4238 <link to="USBDeviceState::Available">Available</link> or
4239 <link to="USBDeviceState::Held">Held</link>,
4240 otherwise an error is immediately returned.
4241
4242 When the device state is
4243 <link to="USBDeviceState::Busy">Busy</link>, an error may also
4244 be returned if the host computer refuses to release it for some reason.
4245
4246 <see>IUSBController::deviceFilters, USBDeviceState</see>
4247 </desc>
4248 <param name="id" type="uuid" dir="in">
4249 <desc>UUID of the host USB device to attach.</desc>
4250 </param>
4251 </method>
4252
4253 <method name="detachUSBDevice">
4254 <desc>
4255 Detaches an USB device with the given UUID from the USB controller
4256 oif the virtual machine.
4257
4258 After this method succeeds, the VirtualBox server reinitiates
4259 all USB filters as if the device were just physically attached
4260 to the host, but filters of this machine are ignored to avoid
4261 a possible automatic reattachment.
4262
4263 <see>IUSBController::deviceFilters, USBDeviceState</see>
4264 </desc>
4265 <param name="id" type="uuid" dir="in">
4266 <desc>UUID of the USB device to detach.</desc>
4267 </param>
4268 <param name="device" type="IUSBDevice" dir="return">
4269 <desc>Detached USB device.</desc>
4270 </param>
4271 </method>
4272
4273 <method name="createSharedFolder">
4274 <desc>
4275 Creates a transient new shared folder by associating the given logical
4276 name with the given host path, adds it to the collection of shared
4277 folders and starts sharing it. Refer to the description of
4278 <link to="ISharedFolder"/> to read more about logical names.
4279 </desc>
4280 <param name="name" type="wstring" dir="in">
4281 <desc>Unique logical name of the shared folder.</desc>
4282 </param>
4283 <param name="hostPath" type="wstring" dir="in">
4284 <desc>Full path to the shared folder in the host file system.</desc>
4285 </param>
4286 <param name="writable" type="boolean" dir="in">
4287 <desc>Whether the share is writable or readonly</desc>
4288 </param>
4289 </method>
4290
4291 <method name="removeSharedFolder">
4292 <desc>
4293 Removes a transient shared folder with the given name previously
4294 created by <link to="#createSharedFolder"/> from the collection of
4295 shared folders and stops sharing it.
4296 </desc>
4297 <param name="name" type="wstring" dir="in">
4298 <desc>Logical name of the shared folder to remove.</desc>
4299 </param>
4300 </method>
4301
4302 <method name="takeSnapshot">
4303 <desc>
4304 Saves the current execution state and all settings of the
4305 machine and creates differencing images for all
4306 normal (non-independent) hard disks.
4307
4308 This method can be called for a PoweredOff, Saved, Running or
4309 Paused virtual machine. When the machine is PoweredOff, an
4310 offline <link to="ISnapshot">snapshot</link> is created,
4311 in all other cases -- an online snapshot.
4312
4313 The taken snapshot is always based on the
4314 <link to="IMachine::currentSnapshot">current
4315 snapshot</link> of the associated virtual machine and becomes
4316 a new current snapshot.
4317
4318 <note>
4319 This method implicitly calls <link to="IMachine::saveSettings()"/> to
4320 save all current machine settings before taking an offline snapshot.
4321 </note>
4322
4323 <see>ISnapshot, <link to="#saveState"/></see>
4324 </desc>
4325 <param name="name" type="wstring" dir="in">
4326 <desc>Short name for the snapshot.</desc>
4327 </param>
4328 <param name="description" type="wstring" dir="in">
4329 <desc>Optional description of the snapshot.</desc>
4330 </param>
4331 <param name="progress" type="IProgress" dir="return">
4332 <desc>Progress object to track the operation completion.</desc>
4333 </param>
4334 </method>
4335
4336 <method name="discardSnapshot">
4337 <desc>
4338
4339 Starts discarding the specified snapshot. The execution state
4340 and settings of the associated machine stored in the snapshot
4341 will be deleted. The contents of all differencing hard disks of
4342 this snapshot will be merged with the contents of their
4343 dependent child hard disks to keep the, disks valid (in other
4344 words, all changes represented by hard disks being discarded
4345 will be propagated to their child hard disks). After that, this
4346 snapshot's differencing hard disks will be deleted. The parent
4347 of this snapshot will become a new parent for all its child
4348 snapshots.
4349
4350 If the discarded snapshot is the current one, its parent
4351 snapshot will become a new current snapshot. The current machine
4352 state is not directly affected in this case, except that
4353 currently attached differencing hard disks based on hard disks
4354 of the discarded snapshot will be also merged as described
4355 above.
4356
4357 If the discarded snapshot is the first one (the root snapshot)
4358 and it has exactly one child snapshot, this child snapshot will
4359 become the first snapshot after discarding. If there are no
4360 children at all (i.e. the first snapshot is the only snapshot of
4361 the machine), both the current and the first snapshot of the
4362 machine will be set to null. In all other cases, the first
4363 snapshot cannot be discarded.
4364
4365 You cannot discard the snapshot if it
4366 stores <link to="HardDiskType::Normal">normal</link> (non-differencing)
4367 hard disks that have differencing hard disks based on them. Snapshots of
4368 such kind can be discarded only when every normal hard disk has either
4369 no children at all or exactly one child. In the former case, the normal
4370 hard disk simply becomes unused (i.e. not attached to any VM). In the
4371 latter case, it receives all the changes strored in the child hard disk,
4372 and then it replaces the child hard disk in the configuration of the
4373 corresponding snapshot or machine.
4374
4375 Also, you cannot discard the snapshot if it stores hard disks
4376 (of any type) having differencing child hard disks that belong
4377 to other machines. Such snapshots can be only discarded after
4378 you discard all snapshots of other machines containing "foreign"
4379 child disks, or detach these "foreign" child disks from machines
4380 they are attached to.
4381
4382 One particular example of the snapshot storing normal hard disks
4383 is the first snapshot of a virtual machine that had normal hard
4384 disks attached when taking the snapshot. Be careful when
4385 discarding such snapshots because this implicitly commits
4386 changes (made since the snapshot being discarded has been taken)
4387 to normal hard disks (as described above), which may be not what
4388 you want.
4389
4390 The virtual machine is put to
4391 the <link to="MachineState::Discarding">Discarding</link> state until
4392 the discard operation is completed.
4393
4394 <note>
4395 The machine must not be running, otherwise the operation
4396 will fail.
4397 </note>
4398
4399 <note>
4400 Child hard disks of all normal hard disks of the discarded snapshot
4401 must be <link to="IHardDisk::accessible">accessible</link> for this
4402 operation to succeed. In particular, this means that all virtual
4403 machines, whose hard disks are directly or indirectly based on the
4404 hard disks of discarded snapshot, must be powered off.
4405 </note>
4406 <note>
4407 Merging hard disk contents can be very time and disk space
4408 consuming, if these disks are big in size and have many
4409 children. However, if the snapshot being discarded is the last
4410 (head) snapshot on the branch, the operation will be rather
4411 quick.
4412 </note>
4413 <note>
4414 Note that discarding the current snapshot
4415 will imlicitly call <link to="IMachine::saveSettings()"/> to
4416 make all current machine settings permanent.
4417 </note>
4418 </desc>
4419 <param name="id" type="uuid" dir="in">
4420 <desc>UUID of the snapshot to discard.</desc>
4421 </param>
4422 <param name="progress" type="IProgress" dir="return">
4423 <desc>Progress object to track the operation completion.</desc>
4424 </param>
4425 </method>
4426
4427 <method name="discardCurrentState">
4428 <desc>
4429 This operation is similar to <link to="#discardSnapshot()"/> but
4430 affects the current machine state. This means that the state stored in
4431 the current snapshot will become a new current state, and all current
4432 settings of the machine and changes stored in differencing hard disks
4433 will be lost.
4434
4435 After this operation is successfully completed, new empty differencing
4436 hard disks are created for all normal hard disks of the machine.
4437
4438 If the current snapshot of the machine is an online snapshot, the
4439 machine will go to the <link to="MachineState::Saved"> saved
4440 state</link>, so that the next time it is powered on, the execution
4441 state will be restored from the current snapshot.
4442
4443 <note>
4444 The machine must not be running, otherwise the operation will fail.
4445 </note>
4446
4447 <note>
4448 If the machine state is <link to="MachineState::Saved">Saved</link>
4449 prior to this operation, the saved state file will be implicitly
4450 discarded (as if <link to="IConsole::discardSavedState()"/> were
4451 called).
4452 </note>
4453
4454 </desc>
4455 <param name="progress" type="IProgress" dir="return">
4456 <desc>Progress object to track the operation completion.</desc>
4457 </param>
4458 </method>
4459
4460 <method name="discardCurrentSnapshotAndState">
4461 <desc>
4462
4463 This method is equivalent to
4464 doing <link to="#discardSnapshot">discardSnapshot</link>
4465 (<link
4466 to="IMachine::currentSnapshot">currentSnapshot</link>.<link
4467 to="ISnapshot::id">id()</link>, ...) followed by
4468 <link to="#discardCurrentState()"/>.
4469
4470 As a result, the machine will be fully restored from the
4471 snapshot preceeding the current snapshot, while both the current
4472 snapshot and the current machine state will be discarded.
4473
4474 If the current snapshot is the first snapshot of the machine (i.e. it
4475 has the only snapshot), the current machine state will be
4476 discarded <b>before</b> discarding the snapshot. In other words, the
4477 machine will be restored from its last snapshot, before discarding
4478 it. This differs from performing a single
4479 <link to="#discardSnapshot()"/> call (note that no
4480 <link to="#discardCurrentState()"/> will be possible after it) to the
4481 effect that the latter will preserve the current state instead of
4482 discarding it.
4483
4484 Unless explicitly mentioned otherwise, all remarks and
4485 limitations of the above two methods also apply to this method.
4486
4487 <note>
4488 The machine must not be running, otherwise the operation
4489 will fail.
4490 </note>
4491
4492 <note>
4493 If the machine state is <link to="MachineState::Saved">Saved</link>
4494 prior to this operation, the saved state file will be implicitly
4495 discarded (as if <link to="IConsole::discardSavedState()"/> were
4496 called).</note>
4497
4498 <note>
4499 This method is more efficient than calling two above
4500 methods separately: it requires less IPC calls and provides
4501 a single progress object.
4502 </note>
4503
4504 </desc>
4505 <param name="progress" type="IProgress" dir="return">
4506 <desc>Progress object to track the operation completion.</desc>
4507 </param>
4508 </method>
4509
4510 <method name="registerCallback">
4511 <desc>
4512 Registers a new console callback on this instance. The methods of the
4513 callback interface will be called by this instance when the appropriate
4514 event occurs.
4515 </desc>
4516 <param name="callback" type="IConsoleCallback" dir="in"/>
4517 </method>
4518
4519 <method name="unregisterCallback">
4520 <desc>
4521 Unregisters the console callback previously registered using
4522 <link to="#registerCallback"/>.
4523 </desc>
4524 <param name="callback" type="IConsoleCallback" dir="in"/>
4525 </method>
4526
4527 </interface>
4528
4529 <!--
4530 // IHost
4531 /////////////////////////////////////////////////////////////////////////
4532 -->
4533
4534 <interface
4535 name="IHostDVDDrive" extends="$unknown"
4536 uuid="21f86694-202d-4ce4-8b05-a63ff82dbf4c"
4537 wsmap="managed"
4538 >
4539 <desc>
4540 The IHostDVDDrive interface represents the physical CD/DVD drive
4541 hardware on the host. Used indirectly in <link to="IHost::DVDDrives"/>.
4542 </desc>
4543
4544 <attribute name="name" type="wstring" readonly="yes">
4545 <desc>
4546 Returns the platform-specific device identifier.
4547 On DOS-like platforms, it is a drive name (e.g. R:).
4548 On Unix-like platforms, it is a device name (e.g. /dev/hdc).
4549 </desc>
4550 </attribute>
4551 <attribute name="description" type="wstring" readonly="yes">
4552 <desc>
4553 Returns a human readable description for the drive. This
4554 description usually contains the product and vendor name. A
4555 @c null string is returned if the description is not available.
4556 </desc>
4557 </attribute>
4558 <attribute name="udi" type="wstring" readonly="yes">
4559 <desc>
4560 Returns the unique device identifier for the drive. This
4561 attribute is reserved for future use instead of
4562 <link to="#name"/>. Currently it is not used and may return
4563 @c null on some platforms.
4564 </desc>
4565 </attribute>
4566
4567 </interface>
4568
4569 <enumerator
4570 name="IHostDVDDriveEnumerator" type="IHostDVDDrive"
4571 uuid="1ed7cfaf-c363-40df-aa4e-89c1afb7d96b"
4572 />
4573
4574 <collection
4575 name="IHostDVDDriveCollection" type="IHostDVDDrive"
4576 enumerator="IHostDVDDriveEnumerator"
4577 uuid="1909c533-1a1e-445f-a4e1-a267cffc30ed"
4578 readonly="yes"
4579 >
4580 <method name="findByName">
4581 <desc>
4582 Searches this collection for a host drive with the given name.
4583 <note>
4584 The method returns an error if the given name does not
4585 correspond to any host drive in the collection.
4586 </note>
4587 </desc>
4588 <param name="name" type="wstring" dir="in">
4589 <desc>Name of the host drive to search for</desc>
4590 </param>
4591 <param name="drive" type="IHostDVDDrive" dir="return">
4592 <desc>Found host drive object</desc>
4593 </param>
4594 </method>
4595 </collection>
4596
4597 <interface
4598 name="IHostFloppyDrive" extends="$unknown"
4599 uuid="b6a4d1a9-4221-43c3-bd52-021a5daa9ed2"
4600 wsmap="managed"
4601 >
4602 <desc>
4603 The IHostFloppyDrive interface represents the physical floppy drive
4604 hardware on the host. Used indirectly in <link to="IHost::floppyDrives"/>.
4605 </desc>
4606 <attribute name="name" type="wstring" readonly="yes">
4607 <desc>
4608 Returns the platform-specific device identifier.
4609 On DOS-like platforms, it is a drive name (e.g. A:).
4610 On Unix-like platforms, it is a device name (e.g. /dev/fd0).
4611 </desc>
4612 </attribute>
4613 <attribute name="description" type="wstring" readonly="yes">
4614 <desc>
4615 Returns a human readable description for the drive. This
4616 description usually contains the product and vendor name. A
4617 @c null string is returned if the description is not available.
4618 </desc>
4619 </attribute>
4620 <attribute name="udi" type="wstring" readonly="yes">
4621 <desc>
4622 Returns the unique device identifier for the drive. This
4623 attribute is reserved for future use instead of
4624 <link to="#name"/>. Currently it is not used and may return
4625 @c null on some platforms.
4626 </desc>
4627 </attribute>
4628 </interface>
4629
4630 <enumerator
4631 name="IHostFloppyDriveEnumerator" type="IHostFloppyDrive"
4632 uuid="ce04c924-4f54-432a-9dec-11fddc3ea875"
4633 />
4634
4635 <collection
4636 name="IHostFloppyDriveCollection" type="IHostFloppyDrive"
4637 enumerator="IHostFloppyDriveEnumerator"
4638 uuid="fd84bb86-c59a-4037-a557-755ff263a460"
4639 readonly="yes"
4640 >
4641 <method name="findByName">
4642 <desc>
4643 Searches this collection for a host drive with the given name.
4644 <note>
4645 The method returns an error if the given name does not
4646 correspond to any host drive in the collection.
4647 </note>
4648 </desc>
4649 <param name="name" type="wstring" dir="in">
4650 <desc>Name of the host drive to search for</desc>
4651 </param>
4652 <param name="drive" type="IHostFloppyDrive" dir="return">
4653 <desc>Found host drive object</desc>
4654 </param>
4655 </method>
4656 </collection>
4657
4658<if target="midl">
4659 <interface
4660 name="IHostNetworkInterface" extends="$unknown"
4661 uuid="F4512D7C-B074-4e97-99B8-6D2BD27C3F5A"
4662 wsmap="managed"
4663 >
4664 <attribute name="name" type="wstring" readonly="yes">
4665 <desc>Returns the host network interface name.</desc>
4666 </attribute>
4667
4668 <attribute name="id" type="uuid" readonly="yes">
4669 <desc>Returns the interface UUID.</desc>
4670 </attribute>
4671 </interface>
4672
4673 <enumerator
4674 name="IHostNetworkInterfaceEnumerator" type="IHostNetworkInterface"
4675 uuid="7B52FEF7-56E8-4aec-92F5-15E6D11EC630"
4676 />
4677
4678 <collection
4679 name="IHostNetworkInterfaceCollection" type="IHostNetworkInterface"
4680 enumerator="IHostNetworkInterfaceEnumerator"
4681 uuid="BF1D41F2-B97B-4314-A0FB-D4823AF42FB5"
4682 readonly="yes"
4683 >
4684 <method name="findByName">
4685 <desc>
4686 Searches this collection for a host network interface with the given name.
4687 <note>
4688 The method returns an error if the given name does not
4689 correspond to any host network interface in the collection.
4690 </note>
4691 </desc>
4692 <param name="name" type="wstring" dir="in">
4693 <desc>Name of the host network interface to search for.</desc>
4694 </param>
4695 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
4696 <desc>Found host network interface object.</desc>
4697 </param>
4698 </method>
4699 <method name="findById">
4700 <desc>
4701 Searches this collection for a host network interface with the given GUID.
4702 <note>
4703 The method returns an error if the given GUID does not
4704 correspond to any host network interface in the collection.
4705 </note>
4706 </desc>
4707 <param name="id" type="uuid" dir="in">
4708 <desc>GUID of the host network interface to search for.</desc>
4709 </param>
4710 <param name="networkInterface" type="IHostNetworkInterface" dir="return">
4711 <desc>Found host network interface object.</desc>
4712 </param>
4713 </method>
4714 </collection>
4715</if>
4716
4717 <interface
4718 name="IHost" extends="$unknown"
4719 uuid="81729c26-1aec-46f5-b7c0-cc7364738fdb"
4720 wsmap="managed"
4721 >
4722 <desc>
4723 The IHost interface represents the physical machine that this VirtualBox
4724 installation runs on.
4725
4726 An object implementing this interface is returned by the
4727 <link to="IVirtualBox::host" /> attribute. This interface contains
4728 read-only information about the host's physical hardware (such as what
4729 processors, and disks are available, what the host operating system is,
4730 and so on) and also allows for manipulating some of the host's hardware,
4731 such as global USB device filters and host interface networking.
4732
4733 </desc>
4734 <attribute name="DVDDrives" type="IHostDVDDriveCollection" readonly="yes">
4735 <desc>List of DVD drives available on the host.</desc>
4736 </attribute>
4737
4738 <attribute name="floppyDrives" type="IHostFloppyDriveCollection" readonly="yes">
4739 <desc>List of floppy drives available on the host.</desc>
4740 </attribute>
4741
4742 <attribute name="USBDevices" type="IHostUSBDeviceCollection" readonly="yes">
4743 <desc>
4744 List of USB devices currently attached to the host.
4745 Once a new device is physically attached to the host computer,
4746 it appears in this list and remains there until detached.
4747
4748 <note>
4749 This method may set a @ref com_warnings "warning result code".
4750 </note>
4751 <note>
4752 If USB functionality is not avaliable in the given edition of
4753 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4754 </note>
4755 </desc>
4756 </attribute>
4757
4758 <attribute name="USBDeviceFilters" type="IHostUSBDeviceFilterCollection" readonly="yes">
4759 <desc>
4760 List of USB device filters in action.
4761 When a new device is physically attached to the host computer,
4762 filters from this list are applied to it (in order they are stored
4763 in the list). The first matched filter will determine the
4764 <link to="IHostUSBDeviceFilter::action">action</link>
4765 performed on the device.
4766
4767 Unless the device is ignored by these filters, filters of all
4768 currently running virtual machines
4769 (<link to="IUSBController::deviceFilters"/>) are applied to it.
4770
4771 <note>
4772 This method may set a @ref com_warnings "warning result code".
4773 </note>
4774 <note>
4775 If USB functionality is not avaliable in the given edition of
4776 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4777 </note>
4778
4779 <see>IHostUSBDeviceFilter, USBDeviceState</see>
4780 </desc>
4781 </attribute>
4782
4783<if target="midl">
4784 <attribute name="networkInterfaces" type="IHostNetworkInterfaceCollection" readonly="yes">
4785 <desc>List of host network interfaces currently defined on the host.</desc>
4786 </attribute>
4787</if>
4788
4789 <attribute name="processorCount" type="unsigned long" readonly="yes">
4790 <desc>Number of (logical) CPUs installed in the host system.</desc>
4791 </attribute>
4792
4793 <attribute name="processorSpeed" type="unsigned long" readonly="yes">
4794 <desc>(Approximate) speed of the host CPU in Megahertz.</desc>
4795 </attribute>
4796
4797 <attribute name="processorDescription" type="wstring" readonly="yes">
4798 <desc>Description string of the host CPU.</desc>
4799 </attribute>
4800
4801 <attribute name="memorySize" type="unsigned long" readonly="yes">
4802 <desc>Amount of system memory in megabytes installed in the host system.</desc>
4803 </attribute>
4804
4805 <attribute name="memoryAvailable" type="unsigned long" readonly="yes">
4806 <desc>Available system memory in the host system.</desc>
4807 </attribute>
4808
4809 <attribute name="operatingSystem" type="wstring" readonly="yes">
4810 <desc>Name of the host system's operating system.</desc>
4811 </attribute>
4812
4813 <attribute name="OSVersion" type="wstring" readonly="yes">
4814 <desc>Host operating system's version string.</desc>
4815 </attribute>
4816
4817 <attribute name="UTCTime" type="long long" readonly="yes">
4818 <desc>Returns the current host time in milliseconds since 1970-01-01 UTC.</desc>
4819 </attribute>
4820
4821<if target="midl">
4822 <method name="createHostNetworkInterface">
4823 <desc>
4824 Creates a new adapter for Host Interface Networking.
4825 </desc>
4826 <param name="name" type="wstring" dir="in">
4827 <desc>
4828 Adapter name.
4829 </desc>
4830 </param>
4831 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
4832 <desc>
4833 Created host interface object.
4834 </desc>
4835 </param>
4836 <param name="progress" type="IProgress" dir="return">
4837 <desc>
4838 Progress object to track the operation completion.
4839 </desc>
4840 </param>
4841 </method>
4842 <method name="removeHostNetworkInterface">
4843 <desc>
4844 Removes the given host network interface.
4845 </desc>
4846 <param name="id" type="uuid" dir="in">
4847 <desc>
4848 Adapter GUID.
4849 </desc>
4850 </param>
4851 <param name="hostInterface" type="IHostNetworkInterface" dir="out">
4852 <desc>
4853 Removed host interface object.
4854 </desc>
4855 </param>
4856 <param name="progress" type="IProgress" dir="return">
4857 <desc>
4858 Progress object to track the operation completion.
4859 </desc>
4860 </param>
4861 </method>
4862</if>
4863
4864 <method name="createUSBDeviceFilter">
4865 <desc>
4866 Creates a new USB device filter. All attributes except
4867 the filter name are set to <tt>null</tt> (any match),
4868 <i>active</i> is <tt>false</tt> (the filter is not active).
4869
4870 The created filter can be added to the list of filters using
4871 <link to="#insertUSBDeviceFilter()"/>.
4872
4873 <see>#USBDeviceFilters</see>
4874 </desc>
4875 <param name="name" type="wstring" dir="in">
4876 <desc>
4877 Filter name. See <link to="IHostUSBDeviceFilter::name"/>
4878 for more info.
4879 </desc>
4880 </param>
4881 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
4882 <desc>Created filter object.</desc>
4883 </param>
4884 </method>
4885
4886 <method name="insertUSBDeviceFilter">
4887 <desc>
4888 Inserts the given USB device to the specified position
4889 in the list of filters.
4890
4891 Positions are numbered starting from <tt>0</tt>. If the specified
4892 position is equal to or greater than the number of elements in
4893 the list, the filter is added to the end of the collection.
4894
4895 <note>
4896 Duplicates are not allowed, so an attempt to insert a
4897 filter that is already in the list, will return an
4898 error.
4899 </note>
4900 <note>
4901 This method may set a @ref com_warnings "warning result code".
4902 </note>
4903 <note>
4904 If USB functionality is not avaliable in the given edition of
4905 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4906 </note>
4907
4908 <see>#USBDeviceFilters</see>
4909 </desc>
4910 <param name="position" type="unsigned long" dir="in">
4911 <desc>Position to insert the filter to.</desc>
4912 </param>
4913 <param name="filter" type="IHostUSBDeviceFilter" dir="in">
4914 <desc>USB device filter to insert.</desc>
4915 </param>
4916 </method>
4917
4918 <method name="removeUSBDeviceFilter">
4919 <desc>
4920 Removes a USB device filter from the specified position in the
4921 list of filters.
4922
4923 Positions are numbered starting from <tt>0</tt>. Specifying a
4924 position equal to or greater than the number of elements in
4925 the list will produce an error.
4926
4927 <note>
4928 This method may set a @ref com_warnings "warning result code".
4929 </note>
4930 <note>
4931 If USB functionality is not avaliable in the given edition of
4932 VirtualBox, this method will set the result code to @c E_NOTIMPL.
4933 </note>
4934
4935 <see>#USBDeviceFilters</see>
4936 </desc>
4937 <param name="position" type="unsigned long" dir="in">
4938 <desc>Position to remove the filter from.</desc>
4939 </param>
4940 <param name="filter" type="IHostUSBDeviceFilter" dir="return">
4941 <desc>Removed USB device filter.</desc>
4942 </param>
4943 </method>
4944
4945 </interface>
4946
4947 <!--
4948 // ISystemProperties
4949 /////////////////////////////////////////////////////////////////////////
4950 -->
4951
4952 <interface
4953 name="ISystemProperties"
4954 extends="$unknown"
4955 uuid="12c2e31e-247f-4d51-82e5-5b9d4a6c7d5b"
4956 wsmap="managed"
4957 >
4958 <desc>
4959 The ISystemProperties interface represents global properties
4960 of the given VirtualBox installation.
4961
4962 These properties define limits and default values for various
4963 attributes and parameters. Most of the properties are read-only, but some can be
4964 changed by a user.
4965 </desc>
4966
4967 <attribute name="minGuestRAM" type="unsigned long" readonly="yes">
4968 <desc>Minium guest system memory in Megabytes.</desc>
4969 </attribute>
4970
4971 <attribute name="maxGuestRAM" type="unsigned long" readonly="yes">
4972 <desc>Maximum guest system memory in Megabytes.</desc>
4973 </attribute>
4974
4975 <attribute name="minGuestVRAM" type="unsigned long" readonly="yes">
4976 <desc>Minimum guest video memory in Megabytes.</desc>
4977 </attribute>
4978
4979 <attribute name="maxGuestVRAM" type="unsigned long" readonly="yes">
4980 <desc>Maximum guest video memory in Megabytes.</desc>
4981 </attribute>
4982
4983 <attribute name="maxVDISize" type="unsigned long long" readonly="yes">
4984 <desc>Maximum size of a virtual disk image in Megabytes.</desc>
4985 </attribute>
4986
4987 <attribute name="networkAdapterCount" type="unsigned long" readonly="yes">
4988 <desc>
4989 Number of network adapters associated with every
4990 <link to="IMachine"/> instance.
4991 </desc>
4992 </attribute>
4993
4994 <attribute name="serialPortCount" type="unsigned long" readonly="yes">
4995 <desc>
4996 Number of serial ports associated with every
4997 <link to="IMachine"/> instance.
4998 </desc>
4999 </attribute>
5000
5001 <attribute name="parallelPortCount" type="unsigned long" readonly="yes">
5002 <desc>
5003 Number of parallel ports associated with every
5004 <link to="IMachine"/> instance.
5005 </desc>
5006 </attribute>
5007
5008 <attribute name="maxBootPosition" type="unsigned long" readonly="yes">
5009 <desc>
5010 Maximum device position in the boot order. This value corresponds
5011 to the total number of devices a machine can boot from, to make it
5012 possible to include all possible devices to the boot list.
5013 <see><link to="IMachine::setBootOrder()"/></see>
5014 </desc>
5015 </attribute>
5016
5017 <attribute name="defaultVDIFolder" type="wstring">
5018 <desc>
5019 Full path to the default directory used to create new or open
5020 existing virtual disk images when an image file name contains no
5021 path.
5022
5023 The initial value of this property is
5024 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
5025 VirtualBox_home</link><tt>&gt;/VDI</tt>.
5026
5027 <note>
5028 Setting this property to <tt>null</tt> will restore the
5029 initial value.
5030 </note>
5031 <note>
5032 When settings this property, the specified path can be
5033 absolute (full path) or relative
5034 to the <link to="IVirtualBox::homeFolder">
5035 VirtualBox home directory</link>.
5036 When reading this property, a full path is
5037 always returned.
5038 </note>
5039 <note>
5040 The specified path may not exist, it will be created
5041 when necessary.
5042 </note>
5043
5044 <see>
5045 <link to="IVirtualBox::createHardDisk()"/>,
5046 <link to="IVirtualBox::openVirtualDiskImage()"/>
5047 </see>
5048 </desc>
5049 </attribute>
5050
5051 <attribute name="defaultMachineFolder" type="wstring">
5052 <desc>
5053 Full path to the default directory used to create new or open
5054 existing machines when a settings file name contains no
5055 path.
5056
5057 The initial value of this property is
5058 <tt>&lt;</tt><link to="IVirtualBox::homeFolder">
5059 VirtualBox_home</link><tt>&gt;/Machines</tt>.
5060
5061 <note>
5062 Setting this property to <tt>null</tt> will restore the
5063 initial value.
5064 </note>
5065 <note>
5066 When settings this property, the specified path can be
5067 absolute (full path) or relative
5068 to the <link to="IVirtualBox::homeFolder">
5069 VirtualBox home directory</link>.
5070 When reading this property, a full path is
5071 always returned.
5072 </note>
5073 <note>
5074 The specified path may not exist, it will be created
5075 when necessary.
5076 </note>
5077
5078 <see>
5079 <link to="IVirtualBox::createMachine()"/>,
5080 <link to="IVirtualBox::openMachine()"/>
5081 </see>
5082 </desc>
5083 </attribute>
5084
5085 <attribute name="remoteDisplayAuthLibrary" type="wstring">
5086 <desc>
5087 Library that provides authentication for VRDP clients. The library
5088 is used if a virtual machine's authentication type is set to "external"
5089 in the VM RemoteDisplay configuration.
5090
5091 The system library extension (".DLL" or ".so") must be omitted.
5092 A full path can be specified; if not, then the library must reside on the
5093 system's default library path.
5094
5095 The default value of this property is <tt>VRDPAuth</tt>. There is a library
5096 of that name in one of the default VirtualBox library directories.
5097
5098 For details about VirtualBox authentication libraries and how to implement
5099 them, please refer to the VirtualBox manual.
5100
5101 <note>
5102 Setting this property to <tt>null</tt> will restore the
5103 initial value.
5104 </note>
5105 </desc>
5106 </attribute>
5107
5108 <attribute name="webServiceAuthLibrary" type="wstring">
5109 <desc>
5110 Library that provides authentication for webservice clients. The library
5111 is used if a virtual machine's authentication type is set to "external"
5112 in the VM RemoteDisplay configuration and will be called from
5113 within the <link to="IWebsessionManager::logon" /> implementation.
5114
5115 As opposed to <link to="ISystemProperties::remoteDisplayAuthLibrary" />,
5116 there is no per-VM setting for this, as the webservice is a global
5117 resource (if it is running). Only for this setting (for the webservice),
5118 setting this value to a literal "null" string disables authentication,
5119 meaning that <link to="IWebsessionManager::logon" /> will always succeed,
5120 no matter what user name and password are supplied.
5121
5122 The initial value of this property is <tt>VRDPAuth</tt>,
5123 meaning that the webservice will use the same authentication
5124 library that is used by default for VBoxVRDP (again, see
5125 <link to="ISystemProperties::remoteDisplayAuthLibrary" />).
5126 The format and calling convetion of authentication libraries
5127 is the same for the webservice as it is for VBoxVRDP.
5128
5129 </desc>
5130 </attribute>
5131
5132 <attribute name="HWVirtExEnabled" type="boolean">
5133 <desc>
5134 This specifies the default value for hardware virtualization
5135 extensions. If enabled, virtual machines will make use of
5136 hardware virtualization extensions such as Intel VT-x and
5137 AMD-V by default. This value can be overridden by each VM
5138 using their <link to="IMachine::HWVirtExEnabled" /> property.
5139 </desc>
5140 </attribute>
5141
5142 <attribute name="LogHistoryCount" type="unsigned long">
5143 <desc>
5144 This value specifies how many old release log files are kept.
5145 </desc>
5146 </attribute>
5147 </interface>
5148
5149 <!--
5150 // IGuest
5151 /////////////////////////////////////////////////////////////////////////
5152 -->
5153
5154 <interface
5155 name="IGuestOSType" extends="$unknown"
5156 uuid="da94f478-1f37-4726-b750-2235950dc2fe"
5157 wsmap="struct"
5158 >
5159 <desc>
5160 <note>With the COM API, this is an interface like all the others. With the webservice,
5161 this is mapped to a structure, so querying the attribute will not return an object,
5162 but a complete structure.</note>
5163 </desc>
5164
5165 <attribute name="id" type="wstring" readonly="yes">
5166 <desc>Guest OS identifier string.</desc>
5167 </attribute>
5168
5169 <attribute name="description" type="wstring" readonly="yes">
5170 <desc>Human readable description of the guest OS.</desc>
5171 </attribute>
5172
5173 <attribute name="recommendedRAM" type="unsigned long" readonly="yes">
5174 <desc>Recommended RAM size in Megabytes.</desc>
5175 </attribute>
5176
5177 <attribute name="recommendedVRAM" type="unsigned long" readonly="yes">
5178 <desc>Recommended video RAM size in Megabytes.</desc>
5179 </attribute>
5180
5181 <attribute name="recommendedHDD" type="unsigned long" readonly="yes">
5182 <desc>Recommended hard disk size in Megabytes.</desc>
5183 </attribute>
5184 </interface>
5185
5186
5187 <enumerator
5188 name="IGuestOSTypeEnumerator" type="IGuestOSType"
5189 uuid="a3335e02-4669-4e3c-80c7-c4dc7056a07c"
5190 />
5191
5192 <collection
5193 name="IGuestOSTypeCollection" type="IGuestOSType" enumerator="IGuestOSTypeEnumerator"
5194 uuid="a5e36749-a610-498b-9f29-2e36c1042d65"
5195 readonly="yes"
5196 />
5197
5198 <interface
5199 name="IGuest" extends="$unknown"
5200 uuid="d8556fca-81bc-12af-fca3-365528fa38ca"
5201
5202 wsmap="suppress"
5203 >
5204 <desc>
5205 The IGuest interface represents information about the operating system
5206 running inside the virtual machine. Used in
5207 <link to="IConsole::guest"/>.
5208
5209 IGuest provides information about the guest operating system, whether
5210 Guest Additions are installed and other OS-specific virtual machine
5211 properties.
5212 </desc>
5213
5214 <attribute name="OSTypeId" type="wstring" readonly="yes">
5215 <desc>
5216 Identifier of the Guest OS type as reported by the Guest
5217 Additions.
5218 You may use <link to="IVirtualBox::getGuestOSType"/> to obtain
5219 an IGuestOSType object representing details about the given
5220 Guest OS type.
5221 <note>
5222 If Guest Additions are not installed, this value will be
5223 the same as <link to="IMachine::OSTypeId"/>.
5224 </note>
5225 </desc>
5226 </attribute>
5227
5228 <attribute name="additionsActive" type="boolean" readonly="yes">
5229 <desc>
5230 Flag whether the Guest Additions are installed and active
5231 in which case their version will be returned by the
5232 <link to="#additionsVersion"/> property.
5233 </desc>
5234 </attribute>
5235
5236 <attribute name="additionsVersion" type="wstring" readonly="yes">
5237 <desc>
5238 Version of the Guest Additions (3 decimal numbers separated
5239 by dots) or empty when the Additions are not installed. The
5240 Additions may also report a version but yet not be active as
5241 the version might be refused by VirtualBox (incompatible) or
5242 other failures occured.
5243 </desc>
5244 </attribute>
5245
5246 <attribute name="supportsSeamless" type="boolean" readonly="yes">
5247 <desc>
5248 Flag whether seamless guest display rendering (seamless desktop
5249 integration) is supported.
5250 </desc>
5251 </attribute>
5252
5253 <attribute name="supportsGraphics" type="boolean" readonly="yes">
5254 <desc>
5255 Flag whether the guest is in graphics mode. If it is not, then
5256 seamless rendering will not work, resize hints are not immediately
5257 acted on and guest display resizes are probably not initiated by
5258 the guest additions.
5259 </desc>
5260 </attribute>
5261
5262 <attribute name="memoryBalloonSize" type="unsigned long">
5263 <desc>Guest system memory balloon size in megabytes.</desc>
5264 </attribute>
5265
5266 <attribute name="statisticsUpdateInterval" type="unsigned long">
5267 <desc>Interval to update guest statistics in seconds.</desc>
5268 </attribute>
5269
5270 <method name="setCredentials">
5271 <desc>
5272 Store login credentials that can be queried by guest operating
5273 systems with Additions installed. The credentials are transient
5274 to the session and the guest may also choose to erase them. Note
5275 that the caller cannot determine whether the guest operating system
5276 has queried or made use of the credentials.
5277 </desc>
5278 <param name="userName" type="wstring" dir="in">
5279 <desc>User name string, can be empty</desc>
5280 </param>
5281 <param name="password" type="wstring" dir="in">
5282 <desc>Password string, can be empty</desc>
5283 </param>
5284 <param name="domain" type="wstring" dir="in">
5285 <desc>Domain name (guest logon scheme specific), can be emtpy</desc>
5286 </param>
5287 <param name="allowInteractiveLogon" type="boolean" dir="in">
5288 <desc>
5289 Flag whether the guest should alternatively allow the user to
5290 interactively specify different credentials. This flag might
5291 not be supported by all versions of the Additions.
5292 </desc>
5293 </param>
5294 </method>
5295
5296 <method name="getStatistic">
5297 <desc>
5298 Query specified guest statistics as reported by the VirtualBox Additions.
5299 </desc>
5300 <param name="cpuId" type="unsigned long" dir="in">
5301 <desc>Virtual CPU id; not relevant for all statistic types</desc>
5302 </param>
5303 <param name="statistic" type="GuestStatisticType" dir="in">
5304 <desc>Statistic type.</desc>
5305 </param>
5306 <param name="statVal" type="unsigned long" dir="out">
5307 <desc>Statistics value</desc>
5308 </param>
5309 </method>
5310
5311 </interface>
5312
5313
5314 <!--
5315 // IProgress
5316 /////////////////////////////////////////////////////////////////////////
5317 -->
5318
5319 <enumerator
5320 name="IProgressEnumerator" type="IProgress"
5321 uuid="e0380522-4ef1-48f4-856c-e455177ccb2d"
5322 />
5323
5324 <collection
5325 name="IProgressCollection" type="IProgress" enumerator="IProgressEnumerator"
5326 uuid="78B76A7C-F0F2-467c-9F0E-F089A54EE957"
5327 readonly="yes"
5328 />
5329
5330 <interface
5331 name="IProgress" extends="$unknown"
5332 uuid="10CC03A1-717E-429b-992D-C67B56175A51"
5333 wsmap="managed"
5334 >
5335 <desc>
5336 The IProgress interface represents a task progress object that allows
5337 to wait for the completion of some asynchronous task.
5338
5339 The task consists of one or more operations that run sequentially,
5340 one after one. There is an individual percent of completion of the
5341 current operation and the percent of completion of the task as a
5342 whole. Similarly, you can wait for the completion of a particular
5343 operation or for the completion of the whole task.
5344
5345 Every operation is identified by a number (starting from 0)
5346 and has a separate description.
5347 </desc>
5348
5349 <attribute name="id" type="uuid" readonly="yes">
5350 <desc>ID of the task.</desc>
5351 </attribute>
5352
5353 <attribute name="description" type="wstring" readonly="yes">
5354 <desc>Description of the task.</desc>
5355 </attribute>
5356
5357 <attribute name="initiator" type="$unknown" readonly="yes">
5358 <desc>Initiator of the task.</desc>
5359 </attribute>
5360
5361 <attribute name="cancelable" type="boolean" readonly="yes">
5362 <desc>Whether the task can be interrupted.</desc>
5363 </attribute>
5364
5365 <attribute name="percent" type="long" readonly="yes">
5366 <desc>
5367 Current task progress value in percent.
5368 This value depends on how many operations are already complete.
5369 </desc>
5370 </attribute>
5371
5372 <attribute name="completed" type="boolean" readonly="yes">
5373 <desc>Whether the task has been completed.</desc>
5374 </attribute>
5375
5376 <attribute name="canceled" type="boolean" readonly="yes">
5377 <desc>Whether the task has been canceled.</desc>
5378 </attribute>
5379
5380 <attribute name="resultCode" type="result" readonly="yes">
5381 <desc>
5382 Result code of the progress task.
5383 Valid only if <link to="#completed"/> is true.
5384 </desc>
5385 </attribute>
5386
5387 <attribute name="errorInfo" type="IVirtualBoxErrorInfo" readonly="yes">
5388 <desc>
5389 Extended information about the unsuccessful result of the
5390 progress operation. May be NULL when no extended information
5391 is available.
5392 Valid only if <link to="#completed"/> is true and
5393 <link to="#resultCode"/> indicates a failure.
5394 </desc>
5395 </attribute>
5396
5397 <attribute name="operationCount" type="unsigned long" readonly="yes">
5398 <desc>
5399 Number of operations this task is divided into.
5400 Every task consists of at least one operation.
5401 </desc>
5402 </attribute>
5403
5404 <attribute name="operation" type="unsigned long" readonly="yes">
5405 <desc>Number of the operation being currently executed.</desc>
5406 </attribute>
5407
5408 <attribute name="operationDescription" type="wstring" readonly="yes">
5409 <desc>
5410 Description of the operation being currently executed.
5411 </desc>
5412 </attribute>
5413
5414 <attribute name="operationPercent" type="long" readonly="yes">
5415 <desc>Current operation progress value in percent.</desc>
5416 </attribute>
5417
5418 <method name="waitForCompletion">
5419 <desc>
5420 Waits until the task is done (including all operations) with a
5421 given timeout.
5422 </desc>
5423 <param name="timeout" type="long" dir="in">
5424 <desc>
5425 Timeout value in milliseconds.
5426 Specify -1 for an indefinite wait.
5427 </desc>
5428 </param>
5429 </method>
5430
5431 <method name="waitForOperationCompletion">
5432 <desc>
5433 Waits until the given operation is done with a given timeout.
5434 </desc>
5435 <param name="operation" type="unsigned long" dir="in">
5436 <desc>
5437 Number of the operation to wait for.
5438 Must be less than <link to="#operationCount"/>.
5439 </desc>
5440 </param>
5441 <param name="timeout" type="long" dir="in">
5442 <desc>
5443 Timeout value in milliseconds.
5444 Specify -1 for an indefinite wait.
5445 </desc>
5446 </param>
5447 </method>
5448
5449 <method name="cancel">
5450 <desc>
5451 Cancels the task.
5452 <note>
5453 If <link to="#cancelable"/> is <tt>false</tt>, then
5454 this method will fail.
5455 </note>
5456 </desc>
5457 </method>
5458
5459 </interface>
5460
5461
5462 <!--
5463 // ISnapshot
5464 /////////////////////////////////////////////////////////////////////////
5465 -->
5466
5467 <enumerator
5468 name="ISnapshotEnumerator" type="ISnapshot"
5469 uuid="25cfa2a4-1f1d-4f05-9658-b7a5894ef1a3"
5470 />
5471
5472 <collection
5473 name="ISnapshotCollection" type="ISnapshot"
5474 enumerator="ISnapshotEnumerator"
5475 uuid="23852e3c-94cd-4801-ab05-ed35675b3894"
5476 readonly="yes"
5477 />
5478
5479 <interface
5480 name="ISnapshot" extends="$unknown"
5481 uuid="9f1bbf79-13b0-4da2-abba-4a992c65c083"
5482 wsmap="managed"
5483 >
5484 <desc>
5485 The ISnapshot interface represents a snapshot of the virtual
5486 machine.
5487
5488 The <i>snapshot</i> stores all the information about a virtual
5489 machine necessary to bring it to exactly the same state as it was at
5490 the time of taking the snapshot. The snapshot includes:
5491
5492 <ul>
5493 <li>all settings of the virtual machine (i.e. its hardware
5494 configuration: RAM size, attached hard disks, etc.)
5495 </li>
5496 <li>the execution state of the virtual machine (memory contents,
5497 CPU state, etc.).
5498 </li>
5499 </ul>
5500
5501 Snapshots can be <i>offline</i> (taken when the VM is powered off)
5502 or <i>online</i> (taken when the VM is running). The execution
5503 state of the offline snapshot is called a <i>zero execution state</i>
5504 (it doesn't actually contain any information about memory contents
5505 or the CPU state, assuming that all hardware is just powered off).
5506
5507 <h3>Snapshot branches</h3>
5508
5509 Snapshots can be chained. Chained snapshots form a branch where
5510 every next snapshot is based on the previous one. This chaining is
5511 mostly related to hard disk branching (see <link to="IHardDisk"/>
5512 description). This means that every time a new snapshot is created,
5513 a new differencing hard disk is implicitly created for all normal
5514 hard disks attached to the given virtual machine. This allows to
5515 fully restore hard disk contents when the machine is later reverted
5516 to a particular snapshot.
5517
5518 In the current implelemtation, multiple snapshot branches within one
5519 virtual machine are not allowed. Every machine has a signle branch,
5520 and <link to="IConsole::takeSnapshot()"/> operation adds a new
5521 snapshot to the top of that branch.
5522
5523 Existings snapshots can be discarded using
5524 <link to="IConsole::discardSnapshot()"/>.
5525
5526 <h3>Current snapshot</h3>
5527
5528 Every virtual machine has a current snapshot, identified by
5529 <link to="IMachine::currentSnapshot"/>. This snapshot is used as
5530 a base for the <i>current machine state</i> (see below), to the effect
5531 that all normal hard disks of the machine and its execution
5532 state are based on this snapshot.
5533
5534 In the current implementation, the current snapshot is always the
5535 last taken snapshot (i.e. the head snapshot on the branch) and it
5536 cannot be changed.
5537
5538 The current snapshot is <tt>null</tt> if the machine doesn't have
5539 snapshots at all; in this case the current machine state is just
5540 current settings of this machine plus its current execution state.
5541
5542 <h3>Current machine state</h3>
5543
5544 The current machine state is what represened by IMachine instances got
5545 directly from IVirtualBox
5546 using <link
5547 to="IVirtualBox::getMachine()">getMachine()</link>, <link
5548 to="IVirtualBox::findMachine()">findMachine()</link>, etc. (as opposed
5549 to instances returned by <link to="ISnapshot::machine"/>). This state
5550 is always used when the machine is <link to="IConsole::powerUp"> powered
5551 on</link>.
5552
5553 The current machine state also includes the current execution state.
5554 If the machine is being currently executed
5555 (<link to="IMachine::state"/> is <link to="MachineState::Running"/>
5556 and above), its execution state is just what's happening now.
5557 If it is powered off (<link to="MachineState::PoweredOff"/> or
5558 <link to="MachineState::Aborted"/>), it has a zero execution state.
5559 If the machine is saved (<link to="MachineState::Saved"/>), its
5560 execution state is what saved in the execution state file
5561 (<link to="IMachine::stateFilePath"/>).
5562
5563 If the machine is in the saved state, then, next time it is powered
5564 on, its execution state will be fully restored from the saved state
5565 file and the execution will continue from the point where the state
5566 was saved.
5567
5568 Similarly to snapshots, the current machine state can be discarded
5569 using <link to="IConsole::discardCurrentState()"/>.
5570
5571 <h3>Taking and discarding snapshots</h3>
5572
5573 The table below briefly explains the meaning of every snapshot
5574 operation:
5575
5576 <table>
5577 <tr><th>Operation</th><th>Meaning</th><th>Remarks</th></tr>
5578
5579 <tr><td><link to="IConsole::takeSnapshot()"/></td>
5580
5581 <td>Save the current state of the virtual machine, including all
5582 settings, contents of normal hard disks and the current modifications
5583 to immutable hard disks (for online snapshots)</td>
5584
5585 <td>The current state is not changed (the machine will continue
5586 execution if it is being executed when the snapshot is
5587 taken)</td></tr>
5588
5589 <tr><td><link to="IConsole::discardSnapshot()"/></td>
5590
5591 <td>Forget the state of the virtual machine stored in the snapshot:
5592 dismiss all saved settings and delete the saved execution state (for
5593 online snapshots)</td>
5594
5595 <td>Other snapshots (including child snapshots, if any) and the
5596 current state are not directly affected</td></tr>
5597
5598 <tr><td><link to="IConsole::discardCurrentState()"/></td>
5599
5600 <td>Restore the current state of the virtual machine from the state
5601 stored in the current snapshot, including all settings and hard disk
5602 contents</td>
5603
5604 <td>The current state of the machine existed prior to this operation
5605 is lost</td></tr>
5606
5607 <tr><td><link to="IConsole::discardCurrentSnapshotAndState()"/></td>
5608
5609 <td>Completely revert the virtual machine to the state it was in
5610 before the current snapshot has been taken</td>
5611
5612 <td>The current state, as well as the current snapshot, are
5613 lost</td></tr>
5614
5615 </table>
5616
5617 </desc>
5618
5619 <attribute name="id" type="uuid" readonly="yes">
5620 <desc>UUID of the snapshot.</desc>
5621 </attribute>
5622
5623 <attribute name="name" type="wstring">
5624 <desc>Short name of the snapshot.</desc>
5625 </attribute>
5626
5627 <attribute name="description" type="wstring">
5628 <desc>Optional description of the snapshot.</desc>
5629 </attribute>
5630
5631 <attribute name="timeStamp" type="long long" readonly="yes">
5632 <desc>
5633 Time stamp of the snapshot, in milliseconds since 1970-01-01 UTC.
5634 </desc>
5635 </attribute>
5636
5637 <attribute name="online" type="boolean" readonly="yes">
5638 <desc>
5639 <tt>true</tt> if this snapshot is an online snapshot and
5640 <tt>false</tt> otherwise.
5641
5642 <note>
5643 When this attribute is <tt>true</tt>, the
5644 <link to="IMachine::stateFilePath"/> attribute of the
5645 <link to="#machine"/> object associated with this snapshot
5646 will point to the saved state file. Otherwise, it will be
5647 <tt>null</tt>.
5648 </note>
5649 </desc>
5650 </attribute>
5651
5652 <attribute name="machine" type="IMachine" readonly="yes">
5653 <desc>
5654 Virtual machine this snapshot is taken on. This object
5655 stores all settings the machine had when taking this snapshot.
5656 <note>
5657 The returned machine object is immutable, i.e. no
5658 any settings can be changed.
5659 </note>
5660 </desc>
5661 </attribute>
5662
5663 <attribute name="parent" type="ISnapshot" readonly="yes">
5664 <desc>
5665 Parent snapshot (a snapshot this one is based on).
5666 <note>
5667 It's not an error to read this attribute on a snapshot
5668 that doesn't have a parent -- a null object will be
5669 returned to indicate this.
5670 </note>
5671 </desc>
5672 </attribute>
5673
5674 <attribute name="children" type="ISnapshotCollection" readonly="yes">
5675 <desc>
5676 Child snapshots (all snapshots having this one as a parent).
5677 <note>
5678 In the current implementation, there can be only one
5679 child snapshot, or no children at all, meaning this is the
5680 last (head) snapshot.
5681 </note>
5682 </desc>
5683 </attribute>
5684
5685 </interface>
5686
5687 <!--
5688 // IHardDisk
5689 /////////////////////////////////////////////////////////////////////////
5690 -->
5691
5692 <enum
5693 name="HardDiskStorageType"
5694 uuid="48138584-ad99-479d-a36f-eb82a7663685"
5695 >
5696 <desc>
5697 Virtual hard disk storage type.
5698 <see>IHardDisk</see>
5699 </desc>
5700
5701 <const name="VirtualDiskImage" value="0">
5702 <desc>
5703 Virtual Disk Image, VDI (a regular file in the file
5704 system of the host OS, see <link to="IVirtualDiskImage"/>)
5705 </desc>
5706 </const>
5707 <const name="ISCSIHardDisk" value="1">
5708 <desc>
5709 iSCSI Remote Disk (a disk accessed via the Internet
5710 SCSI protocol over a TCP/IP network, see
5711 <link to="IISCSIHardDisk"/>)
5712 </desc>
5713 </const>
5714 <const name="VMDKImage" value="2">
5715 <desc>
5716 VMware Virtual Machine Disk image (a regular file in the file
5717 system of the host OS, see <link to="IVMDKImage"/>)
5718 </desc>
5719 </const>
5720 <const name="CustomHardDisk" value="3">
5721 <desc>
5722 Disk formats supported through plugins (see
5723 <link to="ICustomHardDisk"/>)
5724 </desc>
5725 </const>
5726 <const name="VHDImage" value="4">
5727 <desc>
5728 Virtual PC Virtual Machine Disk image (a regular file in the file
5729 system of the host OS, see <link to="IVHDImage"/>)
5730 </desc>
5731 </const>
5732 </enum>
5733
5734 <enum
5735 name="HardDiskType"
5736 uuid="a348fafd-a64e-4643-ba65-eb3896bd7e0a"
5737 >
5738 <desc>
5739 Virtual hard disk type.
5740 <see>IHardDisk</see>
5741 </desc>
5742
5743 <const name="Normal" value="0">
5744 <desc>
5745 Normal hard disk (attached directly or indirectly, preserved
5746 when taking snapshots).
5747 </desc>
5748 </const>
5749 <const name="Immutable" value="1">
5750 <desc>
5751 Immutable hard disk (attached indirectly, changes are wiped out
5752 after powering off the virtual machine).
5753 </desc>
5754 </const>
5755 <const name="Writethrough" value="2">
5756 <desc>
5757 Write through hard disk (attached directly, ignored when
5758 taking snapshots).
5759 </desc>
5760 </const>
5761 </enum>
5762
5763 <interface
5764 name="IHardDiskAttachment" extends="$unknown"
5765 uuid="c0ffe596-21c6-4797-8d8a-b47b66881e7a"
5766 wsmap="struct"
5767 >
5768 <desc>
5769 <note>With the COM API, this is an interface like all the others. With the webservice,
5770 this is mapped to a structure, so querying the attribute will not return an object,
5771 but a complete structure.</note>
5772 </desc>
5773 <attribute name="hardDisk" type="IHardDisk" readonly="yes">
5774 <desc>Harddisk object this attachment is about.</desc>
5775 </attribute>
5776
5777 <attribute name="bus" type="StorageBus" readonly="yes">
5778 <desc>Disk controller ID of this attachment.</desc>
5779 </attribute>
5780
5781 <attribute name="channel" type="long" readonly="yes">
5782 <desc>Channel number of the attachment.</desc>
5783 </attribute>
5784
5785 <attribute name="device" type="long" readonly="yes">
5786 <desc>Device slot number of the attachment.</desc>
5787 </attribute>
5788
5789 </interface>
5790
5791 <enumerator
5792 name="IHardDiskAttachmentEnumerator" type="IHardDiskAttachment"
5793 uuid="9955e486-2f0b-432a-99e4-0ebbd338875e"
5794 />
5795
5796 <collection
5797 name="IHardDiskAttachmentCollection" type="IHardDiskAttachment"
5798 enumerator="IHardDiskAttachmentEnumerator"
5799 uuid="8f727842-bb77-45d4-92de-4ec14bf613c9"
5800 readonly="yes"
5801 />
5802
5803 <enumerator
5804 name="IHardDiskEnumerator" type="IHardDisk"
5805 uuid="b976f97b-cdb8-47e3-9860-084031cbd533"
5806 />
5807
5808 <collection
5809 name="IHardDiskCollection" type="IHardDisk"
5810 enumerator="IHardDiskEnumerator"
5811 uuid="43EAC2BC-5C61-40fa-BC38-46DE2C7DB6BB"
5812 readonly="yes"
5813 />
5814
5815 <interface
5816 name="IHardDisk" extends="$unknown"
5817 uuid="FD443EC1-000F-4F5B-9282-D72760A66916"
5818 wsmap="managed"
5819 >
5820 <desc>
5821 The IHardDisk interface represents a virtual hard disk drive
5822 used by virtual machines.
5823
5824 The virtual hard disk drive virtualizes the hard disk hardware and
5825 looks like a regular hard disk inside the virtual machine and
5826 the guest OS.
5827
5828 <h3>Storage Types</h3>
5829
5830 The <link to="HardDiskStorageType">storage type</link> of the
5831 virtual hard disk determines where and how it stores its data
5832 (sectors). Currently, the following storage types are supported:
5833
5834 <ul>
5835
5836 <li>
5837 <i>Virtual Disk Image (VDI)</i>, a regular file in the file system
5838 of the host OS (represented by the <link to="IVirtualDiskImage"/>
5839 interface). This file has a special format optimized so that unused
5840 sectors of data occupy much less space than on a physical hard disk.
5841 </li>
5842
5843 <li>
5844 <i>iSCSI Remote Disk</i>, a disk accessed via the Internet SCSI
5845 protocol over a TCP/IP network link (represented by the
5846 <link to="IISCSIHardDisk"/> interface).
5847 </li>
5848
5849 <li>
5850 <i>VMware VMDK image</i>, a regular file in the file system of the
5851 host OS (represented by the <link to="IVMDKImage"/> interface).
5852 Note that the regular file may be just a descriptor referring to
5853 further files, so don't make assumptions about the OS representation
5854 of a VMDK image.
5855 </li>
5856
5857 <li>
5858 <i>Custom HardDisk</i>, a disk accessed via a plugin which is loaded
5859 when the disk is accessed (represented by the
5860 <link to="ICustomHardDisk"/> interface).
5861 </li>
5862
5863 <li>
5864 <i>Virtual PC VHD Image</i>, a regular file in the file system of the
5865 host OS (represented by the <link to="IVHDImage"/> interface).
5866 </li>
5867
5868 </ul>
5869
5870 The storage type of the particular hard disk object is indicated by
5871 the <link to="#storageType"/> property.
5872
5873 Each storage type is represented by its own interface (as shown
5874 above), that allows to query and set properties and perform
5875 operations specific to that storage type. When an IHardDisk object
5876 reports it uses some particular storage type, it also guaranteed to
5877 support the corresponding interface which you can query. And vice
5878 versa, every object that supports a storage-specific interface, also
5879 supports IHardDisk.
5880
5881 <h3>Virtual Hard Disk Types</h3>
5882
5883 The <link to="HardDiskType">type</link> of the virtual hard disk
5884 determines how it is attached to the virtual machine when you call
5885 <link to="IMachine::attachHardDisk()"/> and what happens to it when
5886 a <link to="ISnapshot">snapshot</link> of the virtual machine is
5887 taken.
5888
5889 There are three types of virtual hard disks:
5890
5891 <ul>
5892 <li><i>Normal</i></li>
5893 <li><i>Immutable</i></li>
5894 <li><i>Writethrough</i></li>
5895 </ul>
5896
5897 The virtual disk type is indicated by the <link to="#type"/>
5898 property. Each of the above types is described in detail further
5899 down.
5900
5901 There is also a forth, "hidden" virtual disk type:
5902 <i>Differencing</i>. It is "hidden" because you cannot directly
5903 create hard disks of this type -- they are automatically created by
5904 VirtualBox when necessary.
5905
5906 <b>Differencing Hard Disks</b>
5907
5908 Unlike disks of other types (that are similar to real hard disks),
5909 the differencing hard disk does not store the full range of data
5910 sectors. Instead, it stores only a subset of sectors of some other
5911 disk that were changed since the differencing hard disk has been
5912 created. Thus, every differencing hard disk has a parent hard disk
5913 it is linked to, and represents the difference between the initial
5914 and the current hard disk state. A differencing hard disk can be
5915 linked to another differencing hard disk -- this way, differencing
5916 hard disks can form a branch of changes. More over, a given virtual
5917 hard disk can have more than one differencing hard disk linked to
5918 it.
5919
5920 A disk the differencing hard disk is linked to (or, in other words,
5921 based on) is called a <i>parent</i> hard disk and is accessible through
5922 the <link to="#parent"/> property. Similarly, all existing differencing
5923 hard disks for a given parent hard disk are called its <i>child</i> hard
5924 disks (and accessible through the <link to="#children"/> property).
5925
5926 All differencing hard disks use Virtual Disk Image files to store
5927 changed sectors. They have the <link to="#type"/> property set to
5928 Normal, but can be easily distinguished from normal hard disks using
5929 the <link to="#parent"/> property: all differencing hard disks have
5930 a parent, while all normal hard disks don't.
5931
5932 When the virtual machine makes an attempt to read a sector that is
5933 missing in a differencing hard disk, its parent is accessed to
5934 resolve the sector in question. This process continues until the
5935 sector is found, or until the root hard disk is encountered, which
5936 always contains all sectors. As a consequence,
5937
5938 <ul>
5939
5940 <li>
5941 The virtual hard disk geometry seen by the guest OS is
5942 always defined by the root hard disk.
5943 </li>
5944
5945 <li>
5946 All hard disks on a branch, up to the root, must be
5947 <link to="#accessible"/> for a given differencing hard disk in order
5948 to let it function properly when the virtual machine is
5949 running.
5950 </li>
5951
5952 </ul>
5953
5954 Differencing hard disks can be implicitly created by VirtualBox in
5955 the following cases:
5956
5957 <ul>
5958
5959 <li>
5960 When a hard disk is <i>indirectly</i> attached to the virtual
5961 machine using <link to="IMachine::attachHardDisk()"/>. In this
5962 case, all disk writes performed by the guest OS will go to the
5963 created diffferencing hard disk, as opposed to the
5964 <i>direct</i> attachment, where all changes are written to the
5965 attached hard disk itself.
5966 </li>
5967
5968 <li>
5969 When a <link to="ISnapshot">snapshot</link> of the virtual machine
5970 is taken. After that, disk writes to hard disks the differencing
5971 ones have been created for, will be directed to those differencing
5972 hard disks, to preserve the contents of the original disks.
5973 </li>
5974
5975 </ul>
5976
5977 Whether to create a differencing hard disk or not depends on the
5978 type of the hard disk attached to the virtual machine. This is
5979 explained below.
5980
5981 Note that in the current implementation, only the
5982 <link to="VirtualDiskImage"/> storage type is used to
5983 represent differencing hard disks. In other words, all
5984 differencing hard disks are <link to="IVirtualDiskImage"/>
5985 objects.
5986
5987 <b>Normal Hard Disks</b>
5988
5989 Normal hard disks are the most commonly used virtual hard disk. A
5990 normal hard disk is attached to the machine directly if it is not
5991 already attached to some other machine. Otherwise, an attempt to
5992 make an indirect attachment through a differencing hard disk will be
5993 made. This attempt will fail if the hard disk is attached to a
5994 virtual machine without snapshots (because it's impossible to create
5995 a differencing hard disk based on a hard disk that is subject to
5996 change).
5997
5998 When an indirect attachment takes place, in the simplest case, where
5999 the machine the hard disk is being attached to doesn't have
6000 snapshots, the differencing hard disk will be based on the normal
6001 hard disk being attached. Otherwise, the first (i.e. the most
6002 recent) descendant of the given normal hard disk found in the
6003 current snapshot branch (starting from the current snapshot and
6004 going up to the root) will be actually used as a base.
6005
6006 Note that when you detach an indirectly attached hard disk from the
6007 machine, the created differencing hard disk image is simply
6008 <b>deleted</b>, so <b>all changes are lost</b>. If you attach the
6009 same disk again, a clean differencing disk will be created based on
6010 the most recent child, as described above.
6011
6012 When taking a snapshot, the contents of all normal hard disks (and
6013 all differencing disks whose roots are normal hard disks) currently
6014 attached to the virtual machine is preserved by creating
6015 differencing hard disks based on them.
6016
6017 <b>Immutable Hard Disks</b>
6018
6019 Immutable hard disks can be used to provide a sort of read-only
6020 access. An immutable hard disk is always attached indirectly. The
6021 created differencing hard disk is automatically wiped out (recreated
6022 from scratch) every time you power off the virtual machine. Thus,
6023 the contents of the immutable disk remains unchanged between runs.
6024
6025 Detaching an immutable hard disk deletes the differencing disk
6026 created for it, with the same effect as in case with normal hard
6027 disks.
6028
6029 When taking a snapshot, the differencing part of the immutable
6030 hard disk is cloned (i.e. copied to a separate Virtual Disk Image
6031 file) without any changes. This is necessary to preserve the exact
6032 virtual machine state when you create an online snapshot.
6033
6034 <b>Writethrough Hard Disks</b>
6035
6036 Hard disks of this type are always attached directly. This means
6037 that every given writethrough hard disk can be attached only to one
6038 virtual machine at a time.
6039
6040 It is impossible to take a snapshot of a virtual machine with the
6041 writethrough hard disk attached, because taking a snapshot implies
6042 saving the execution state and preserving the contents of all hard
6043 disks, but writethrough hard disks cannot be preserved. Preserving
6044 hard disk contents is necessary to ensure the guest OS stored in the
6045 snapshot will get the same hard disk state when restored, which is
6046 especially important when it has open file handles or when there are
6047 cached files and directories stored in memory.
6048
6049 <h3>Creating, Opening and Registering Hard Disks</h3>
6050
6051 Non-differencing hard disks are either created from scratch using
6052 <link to="IVirtualBox::createHardDisk()"/> or opened from a VDI file
6053 using <link to="IVirtualBox::openVirtualDiskImage()"/> (only for hard
6054 disks using the VirtualDiskImage storage type). Once a hard disk is
6055 created or opened, it needs to be registered using
6056 <link to="IVirtualBox::registerHardDisk()"/> to make it available for
6057 attaching to virtual machines. See the documentation of individual
6058 interfaces for various storage types to get more information.
6059
6060 Differencing hard disks are never created explicitly and cannot
6061 be registered or unregistered; they are automatically registered
6062 upon creation and deregistered when deleted.
6063
6064 <h3>More about Indirect Hard Disk Attachments</h3>
6065
6066 Normally, when you attach a hard disk to the virtual machine, and then
6067 query the corresponding attachment using
6068 <link to="IMachine::getHardDisk()"/> or
6069 <link to="IMachine::hardDiskAttachments"/> you will get the same hard
6070 disk object, whose UUID you passed earlier to
6071 <link to="IMachine::attachHardDisk()"/>. However, when an indirect
6072 attachment takes place, calling <link to="IMachine::getHardDisk()"/>
6073 will return a differencing hard disk object, that is either based on the
6074 attached hard disk or on another differencing hard disk, the attached
6075 hard disk is eventually a root for (as described above). In both cases
6076 the returned hard disk object is the object the virtual machine actually
6077 uses to perform disk writes to.
6078
6079 Regardless of whether the attachment is direct or indirect, the
6080 <link to="#machineId"/> property of the attached disk will contain an
6081 UUID of the machine object <link to="IMachine::attachHardDisk()"/>
6082 has been called on.
6083
6084 Note that both <link to="IMachine::attachHardDisk()"/> and
6085 <link to="IMachine::detachHardDisk()"/> are <i>lazy</i> operations. In
6086 particular, this means that when an indirect attachment is made,
6087 differencing hard disks are not created until machine settings are
6088 committed using <link to="IMachine::saveSettings()"/>. Similarly, when a
6089 differencing hard disk is detached, it is not deleted until
6090 <link to="IMachine::saveSettings()"/> is called. Calling
6091 <link to="IMachine::discardSettings()"/> cancels all lazy attachments or
6092 detachments made since the last commit and effectively restores the
6093 previous set of hard disks.
6094
6095 <h3>Hard Disk Accessibility</h3>
6096
6097 The <link to="#accessible"/> attribute of the hard disk object
6098 defines the accessibility state of the respective hard disk storage
6099 (for example, the VDI file for IVirtualDiskImage objects). If the
6100 value of this attribute is <tt>false</tt> then some hard disk
6101 attributes may contain invalid or outdated values (for example, the
6102 virtual or the actual hard disk size) until a new accessibility
6103 check is done that returns <tt>true</tt> (see the attribute
6104 description for more details).
6105
6106 <note>
6107 Because of the possible slowness of the accessibility check,
6108 it is not implicitly performed upon the VirtualBox server startup
6109 (to prevent the application freeze). In partcular, this means that
6110 if you try to read hard disk properties that depend on the
6111 accessibility state without first reading the value of the
6112 <link to="#accessible"/> attribute and ensuring it's value is
6113 <tt>true</tt>, you will get wrong (zero) values.
6114 </note>
6115
6116 </desc>
6117
6118 <attribute name="id" type="uuid" readonly="yes">
6119 <desc>
6120
6121 UUID of the hard disk. For newly created hard disk objects,
6122 this value is a randomly generated UUID.
6123
6124 </desc>
6125 </attribute>
6126
6127 <attribute name="description" type="wstring">
6128 <desc>
6129
6130 Optional description of the hard disk. For a newly created hard
6131 disk, this value is <tt>null</tt>.
6132
6133 <note>For some storage types, reading this property is
6134 meaningless when <link to="#accessible"/> is <tt>false</tt>.
6135 Also, you cannot assign it a new value in this case.</note>
6136
6137 </desc>
6138 </attribute>
6139
6140 <attribute name="storageType" type="HardDiskStorageType" readonly="yes">
6141 <desc>
6142
6143 Storage type of this hard disk.
6144
6145 Storage type is defined when you open or create a new hard disk
6146 object.
6147
6148 </desc>
6149 </attribute>
6150
6151 <attribute name="location" type="wstring" readonly="yes">
6152 <desc>
6153
6154 Storage location of this hard disk. The returned string serves
6155 for informational purposes only. To access detailed information
6156 about the storage, query the appropriate storage-specific
6157 interface.
6158
6159 </desc>
6160 </attribute>
6161
6162 <attribute name="type" type="HardDiskType">
6163 <desc>
6164
6165 Type (behavior) of this hard disk. For a newly created or opened hard
6166 disk, this value is <link to="HardDiskType::Normal"/>.
6167
6168 <note>
6169 In the current implementation, this property can be
6170 changed only on an unregistered hard disk object. This may be
6171 changed later.
6172 </note>
6173
6174 </desc>
6175 </attribute>
6176
6177 <attribute name="parent" type="IHardDisk" readonly="yes">
6178 <desc>
6179
6180 Parent of this hard disk (a hard disk this one is directly based
6181 on).
6182
6183 Only differencing hard disks have parents, so a <tt>null</tt>
6184 object is returned for a hard disk of any other type.
6185 </desc>
6186 </attribute>
6187
6188 <attribute name="children" type="IHardDiskCollection" readonly="yes">
6189 <desc>
6190
6191 Children of this hard disk (all differencing hard disks for
6192 those this one is a parent). An empty collection is returned, if
6193 this hard disk doesn't have any children.
6194
6195 </desc>
6196 </attribute>
6197
6198 <attribute name="root" type="IHardDisk" readonly="yes">
6199 <desc>
6200
6201 Root hard disk of this hard disk. If this hard disk is a
6202 differencing hard disk, its root hard disk is the first disk on
6203 the branch. For all other types of hard disks, this property
6204 returns the hard disk object itself (i.e. the same object you
6205 read this property on).
6206
6207 </desc>
6208 </attribute>
6209
6210 <attribute name="accessible" type="boolean" readonly="yes">
6211 <desc>
6212
6213 Whether the hard disk storage is currently accessible or not.
6214 The storage, for example, can be unaccessible if it doesn't exist
6215 or if it is placed on a network resource that is not available
6216 by the time this attribute is read.
6217
6218 In the current implementation, the value of this property is
6219 also <tt>false</tt> if this hard disk is attached to a running
6220 virtual machine.
6221
6222 The accessibility check is performed automatically every time
6223 this attribute is read. You should keep it in mind that this check
6224 may be slow and can block the calling thread for a long time (for
6225 example, if the network resourse where the hard disk storage is
6226 located is down).
6227
6228 The following attributes of the hard disk object are considered
6229 to be invalid when this attribute is <tt>false</tt>:
6230 <ul>
6231 <li><link to="#size"/></li>
6232 <li><link to="#actualSize"/></li>
6233 </ul>
6234 Individual hard disk storage type interfaces may define
6235 additional attributes that depend on the accessibility state.
6236 </desc>
6237 </attribute>
6238
6239 <attribute name="allAccessible" type="boolean" readonly="yes">
6240 <desc>
6241
6242 Whether the whole hard disk branch, starting from this image and
6243 going through its ancestors up to the root, is accessible or
6244 not.
6245
6246 This property makes sense only for differencing hard disks. For
6247 all other types of hard disks it returns the same value as
6248 <link to="#accessible"/>.
6249
6250 </desc>
6251 </attribute>
6252
6253 <attribute name="lastAccessError" type="wstring" readonly="yes">
6254 <desc>
6255
6256 String describing the reason of inaccessibility of this hard
6257 disk after the last call to <link to="#accessible"/> that
6258 returned <tt>false</tt>. A <tt>null</tt> value of this property
6259 means that the last accessibility check returned <tt>true</tt>.
6260
6261 </desc>
6262 </attribute>
6263
6264 <attribute name="size" type="unsigned long long" readonly="yes">
6265 <desc>
6266
6267 Logical size of this hard disk (in megabytes), as reported to the
6268 guest OS running inside the vurtual machine this disk is
6269 attached to. The logical size is defined when the hard disk is
6270 created.
6271
6272 <note>Reading this property on a differencing hard disk will
6273 return the size of its root hard disk.</note>
6274
6275 <note>Reading this property is meaningless when
6276 <link to="#accessible"/> is <tt>false</tt></note>
6277
6278 </desc>
6279 </attribute>
6280
6281 <attribute name="actualSize" type="unsigned long long" readonly="yes">
6282 <desc>
6283
6284 Physical size of the storage used to store hard disk data (in
6285 bytes). This size is usually less than the logical size of the
6286 hard disk, depending on the storage type and on the size
6287 optimization method used for that storage.
6288
6289 <note>Reading this property is meaningless when
6290 <link to="#accessible"/> is <tt>false</tt></note>
6291
6292 </desc>
6293 </attribute>
6294
6295 <attribute name="machineId" type="uuid" readonly="yes">
6296 <desc>
6297
6298 UUID of the machine this hard disk is attached to (or a
6299 <tt>null</tt> UUID if it is not attached).
6300
6301 <note>Immutable hard disks are never attached directly, so this
6302 attribute is always <tt>null</tt> in this case.</note>
6303
6304 </desc>
6305 </attribute>
6306
6307 <attribute name="snapshotId" type="uuid" readonly="yes">
6308 <desc>
6309
6310 UUID of the <link to="ISnapshot">snapshot</link> this hard disk
6311 is associated with (or <tt>null</tt> UUID if it is not
6312 associated with any snapshot).
6313
6314 <note>
6315 This attribute is always <tt>null</tt> if <link to="#machineId"/>
6316 is <tt>null</tt>.
6317 </note>
6318
6319 <note>
6320 Writethrough hard disks are always attached directly and cannot be
6321 involved when taking snapshots, so this attribute is meaningless and
6322 therefore always <tt>null</tt>.
6323 </note>
6324
6325 </desc>
6326 </attribute>
6327
6328 <method name="cloneToImage">
6329
6330 <desc>
6331
6332 Starts creating a clone of this hard disk. The cloned hard disk
6333 will use the specified Virtual Disk Image file as a storage and
6334 will contain exactly the same sector data as the hard disk being
6335 cloned, except that a new UUID for the clone will be randomly
6336 generated.
6337
6338 The specified image file path can be absolute (full path) or
6339 relative to the <link to="IVirtualBox::homeFolder"> VirtualBox
6340 home directory</link>. If only a file name without any path is
6341 given, the <link to="ISystemProperties::defaultVDIFolder">
6342 default VDI folder</link> will be used as a path to the image
6343 file.
6344
6345 It is an error to use the object returned in the @a image
6346 parameter until the returned @a progress object reports success.
6347
6348 <note>In the current implementation, only non-differencing hard
6349 disks can be cloned.</note>
6350
6351 </desc>
6352
6353 <param name="filePath" type="wstring" dir="in">
6354 <desc>Path to a file where to store the cloned hard disk.</desc>
6355 </param>
6356 <param name="image" type="IVirtualDiskImage" dir="out">
6357 <desc>Cloned hard disk object.</desc>
6358 </param>
6359 <param name="progress" type="IProgress" dir="return">
6360 <desc>Progress object to track the operation completion.</desc>
6361 </param>
6362
6363 </method>
6364
6365 </interface>
6366
6367 <!--
6368 // IVirtualDiskImage
6369 /////////////////////////////////////////////////////////////////////////
6370 -->
6371
6372 <interface
6373 name="IVirtualDiskImage" extends="$unknown"
6374 uuid="a8265b5a-0d20-4a46-a02f-65693a4e8239"
6375 wsmap="managed"
6376 >
6377
6378 <desc>
6379 The IVirtualDiskImage interface represent a specific type of
6380 <link to="IHardDisk" /> that uses VDI image files.
6381
6382 The Virtual Disk Image (VDI) format is VirtualBox's native format for
6383 hard disk containers.
6384
6385 Objects that support this interface also support the
6386 <link to="IHardDisk"/> interface.
6387
6388 Hard disks using virtual disk images can be either opened using
6389 <link to="IVirtualBox::openHardDisk()"/> or created from
6390 scratch using <link to="IVirtualBox::createHardDisk()"/>.
6391
6392 When a new hard disk object is created from scratch, an image file for it
6393 is not automatically created. To do it, you need to specify a
6394 valid <link to="#filePath">file path</link>, and call
6395 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>.
6396 When it is done, the hard disk object can be registered by calling
6397 <link to="IVirtualBox::registerHardDisk()"/> and then
6398 <link to="IMachine::attachHardDisk()">attached</link> to
6399 virtual machines.
6400
6401 The <link to="IHardDisk::description">description</link> of the
6402 Virtual Disk Image is stored in the image file. For this reason,
6403 changing the value of this property requires the hard disk to be
6404 <link to="IHardDisk::accessible">accessible</link>. The description
6405 of a registered hard disk can be changed only if a virtual machine
6406 using it is not running.
6407
6408 </desc>
6409
6410 <attribute name="filePath" type="wstring">
6411 <desc>
6412
6413 Full file name of the virtual disk image of this hard disk. For
6414 newly created hard disk objects, this value is <tt>null</tt>.
6415
6416 When assigning a new path, it can be absolute (full path) or relative
6417 to the <link to="IVirtualBox::homeFolder"> VirtualBox home
6418 directory</link>. If only a file name without any path is given,
6419 the <link to="ISystemProperties::defaultVDIFolder"> default VDI
6420 folder</link> will be used as a path to the image file.
6421
6422 When reading this propery, a full path is always returned.
6423
6424 <note>
6425 This property cannot be changed when <link to="#created"/>
6426 returns <tt>true</tt>.
6427 </note>
6428
6429 </desc>
6430 </attribute>
6431
6432 <attribute name="created" type="boolean" readonly="yes">
6433 <desc>
6434
6435 Whether the virual disk image is created or not. For newly
6436 created hard disk objects or after a successful invocation of
6437 <link to="#deleteImage()"/>, this value is <tt>false</tt> until
6438 <link to="#createFixedImage()"/> or <link
6439 to="#createDynamicImage()"/> is called.
6440
6441 </desc>
6442 </attribute>
6443
6444 <method name="createDynamicImage">
6445
6446 <desc>
6447
6448 Starts creating a dymically expanding hard disk image in the
6449 background. The previous image associated with this object, if
6450 any, must be deleted using <link to="#deleteImage"/>, otherwise
6451 the operation will fail.
6452
6453 <note>After the returned progress object reports that the
6454 operation is complete, this hard disk object can be
6455 <link to="IVirtualBox::registerHardDisk()">registered</link>
6456 within this VirtualBox installation.</note>
6457
6458 </desc>
6459
6460 <param name="size" type="unsigned long long" dir="in">
6461 <desc>Maximum logical size of the hard disk in megabytes.</desc>
6462 </param>
6463 <param name="progress" type="IProgress" dir="return">
6464 <desc>Progress object to track the operation completion.</desc>
6465 </param>
6466
6467 </method>
6468
6469 <method name="createFixedImage">
6470 <desc>
6471
6472 Starts creating a fixed-size hard disk image in the background. The
6473 previous image, if any, must be deleted using
6474 <link to="#deleteImage"/>, otherwise the operation will fail.
6475
6476 <note>
6477 After the returned progress object reports that the
6478 operation is complete, this hard disk object can be
6479 <link to="IVirtualBox::registerHardDisk()">registered</link>
6480 within this VirtualBox installation.
6481 </note>
6482
6483 </desc>
6484
6485 <param name="size" type="unsigned long long" dir="in">
6486 <desc>Logical size of the hard disk in megabytes.</desc>
6487 </param>
6488 <param name="progress" type="IProgress" dir="return">
6489 <desc>Progress object to track the operation completion.</desc>
6490 </param>
6491
6492 </method>
6493
6494 <method name="deleteImage">
6495 <desc>
6496
6497 Deletes the existing hard disk image. The hard disk must not be
6498 registered within this VirtualBox installation, otherwise the
6499 operation will fail.
6500
6501 <note>
6502 After this operation succeeds, it will be impossible to
6503 register the hard disk until the image file is created
6504 again.
6505 </note>
6506
6507 <note>
6508 This operation is valid only for non-differencing hard disks, after
6509 they are unregistered using
6510 <link to="IVirtualBox::unregisterHardDisk()"/>.
6511 </note>
6512
6513 </desc>
6514 </method>
6515
6516 </interface>
6517
6518 <!--
6519 // IISCSIHardDisk
6520 /////////////////////////////////////////////////////////////////////////
6521 -->
6522
6523 <interface
6524 name="IISCSIHardDisk" extends="$unknown"
6525 uuid="003f6ca9-3257-4ef9-99c9-c66ce44576cb"
6526 wsmap="managed"
6527 >
6528
6529 <desc>
6530 THe IISCSIHardDisk interface represents a specific type of
6531 <link to="IHardDisk"/> that uses iSCSI.
6532
6533 The IISCSIHardDisk interface represents <link to="IHardDisk">virtual
6534 hard disks</link> that use the Internet SCSI (iSCSI) protocol to store
6535 hard disk data on remote machines.
6536
6537 Objects that support this interface also support the
6538 <link to="IHardDisk"/> interface.
6539
6540 iSCSI hard disks can be created using
6541 <link to="IVirtualBox::createHardDisk()"/>. When a new hard disk object
6542 is created, all its properties are uninitialized. After you assign some
6543 meaningful values to them, the hard disk object can be registered by
6544 calling <link to="IVirtualBox::registerHardDisk()"/> and
6545 then <link to="IMachine::attachHardDisk()">attached</link> to virtual
6546 machines.
6547
6548 The <link to="IHardDisk::description">description</link>
6549 of the iSCSI hard disk is stored in the VirtualBox
6550 configuration file, so it can be changed (at appropriate
6551 times) even when
6552 <link to="IHardDisk::accessible">accessible</link> returns
6553 <tt>false</tt>. However, the hard disk must not be
6554 attached to a running virtual machine.
6555
6556 <note>
6557 In the current imlementation, the type of all iSCSI hard disks
6558 is <link to="HardDiskType::Writethrough">Writethrough</link>
6559 and cannot be changed.
6560 </note>
6561
6562 </desc>
6563
6564 <attribute name="server" type="wstring">
6565 <desc>
6566
6567 iSCSI Server name (either a host name or an IP address). For
6568 newly created hard disk objects, this value is <tt>null</tt>.
6569
6570 </desc>
6571 </attribute>
6572
6573 <attribute name="port" type="unsigned short">
6574 <desc>
6575
6576 iSCSI Server port. For newly created hard disk objects, this
6577 value is <tt>0</tt>, which means the default port.
6578
6579 </desc>
6580 </attribute>
6581
6582 <attribute name="target" type="wstring">
6583 <desc>
6584
6585 iSCSI target name. For newly created hard disk objects, this
6586 value is <tt>null</tt>.
6587
6588 </desc>
6589 </attribute>
6590
6591 <attribute name="lun" type="unsigned long long">
6592 <desc>
6593
6594 Logical unit number for this iSCSI disk. For newly created hard
6595 disk objects, this value is <tt>0</tt>.
6596
6597 </desc>
6598 </attribute>
6599
6600 <attribute name="userName" type="wstring">
6601 <desc>
6602
6603 User name for accessing this iSCSI disk. For newly created hard
6604 disk objects, this value is <tt>null</tt>.
6605
6606 </desc>
6607 </attribute>
6608
6609 <attribute name="password" type="wstring">
6610 <desc>
6611
6612 User password for accessing this iSCSI disk. For newly created
6613 hard disk objects, this value is <tt>null</tt>.
6614
6615 </desc>
6616 </attribute>
6617
6618 </interface>
6619
6620 <!--
6621 // IVMDKImage
6622 /////////////////////////////////////////////////////////////////////////
6623 -->
6624
6625 <interface
6626 name="IVMDKImage" extends="$unknown"
6627 uuid="178398f5-8559-4fee-979e-420af5b53eef"
6628 wsmap="managed"
6629 >
6630 <desc>
6631 The IVMDKImage interface represents a specific type of
6632 <link to="IHardDisk"/> that uses VMDK image files.
6633
6634 The Virtual Machine Disk (VMDK) format is the industry standard format
6635 for virtual hard disk image files, which VirtualBox supports besides its
6636 own native VDI format.
6637
6638 Objects that support this interface also support the
6639 <link to="IHardDisk"/> interface.
6640
6641 Hard disks using VMDK images can be either opened using
6642 <link to="IVirtualBox::openHardDisk()"/> or created from
6643 scratch using <link to="IVirtualBox::createHardDisk()"/>.
6644
6645 When a new hard disk object is created from scratch, an image file for it
6646 is not automatically created. To do it, you need to specify a
6647 valid <link to="#filePath">file path</link>, and call
6648 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>.
6649 When it is done, the hard disk object can be registered by calling
6650 <link to="IVirtualBox::registerHardDisk()"/> and then
6651 <link to="IMachine::attachHardDisk()">attached</link> to
6652 virtual machines.
6653
6654 The <link to="IHardDisk::description">description</link>
6655 of the VMDK hard disk is stored in the VirtualBox
6656 configuration file, so it can be changed (at appropriate
6657 times) even when
6658 <link to="IHardDisk::accessible">accessible</link> returns
6659 <tt>false</tt>. However, the hard disk must not be
6660 attached to a running virtual machine.
6661
6662 <note>
6663 In the current imlementation, the type of all VMDK hard disks
6664 is <link to="HardDiskType::Writethrough">Writethrough</link> and cannot
6665 be changed.
6666 </note>
6667
6668 </desc>
6669
6670 <attribute name="filePath" type="wstring">
6671 <desc>
6672
6673 Full file name of the VMDK image of this hard disk. For
6674 newly created hard disk objects, this value is <tt>null</tt>.
6675
6676 When assigning a new path, it can be absolute (full path) or relative
6677 to the <link to="IVirtualBox::homeFolder"> VirtualBox home
6678 directory</link>. If only a file name without any path is given,
6679 the <link to="ISystemProperties::defaultVDIFolder"> default VDI
6680 folder</link> will be used as a path to the image file.
6681
6682 When reading this propery, a full path is always returned.
6683
6684 <note>
6685 This property cannot be changed when <link to="#created"/>
6686 returns <tt>true</tt>.
6687 </note>
6688
6689 </desc>
6690 </attribute>
6691
6692 <attribute name="created" type="boolean" readonly="yes">
6693 <desc>
6694
6695 Whether the virual disk image is created or not. For newly created
6696 hard disk objects or after a successful invocation of
6697 <link to="#deleteImage()"/>, this value is <tt>false</tt> until
6698 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>
6699 is called.
6700
6701 </desc>
6702 </attribute>
6703
6704 <method name="createDynamicImage">
6705
6706 <desc>
6707
6708 Starts creating a dymically expanding hard disk image in the
6709 background. The previous image associated with this object, if
6710 any, must be deleted using <link to="#deleteImage"/>, otherwise
6711 the operation will fail.
6712
6713 <note>
6714 After the returned progress object reports that the
6715 operation is complete, this hard disk object can be
6716 <link to="IVirtualBox::registerHardDisk()">registered</link> within
6717 this VirtualBox installation.
6718 </note>
6719
6720 </desc>
6721
6722 <param name="size" type="unsigned long long" dir="in">
6723 <desc>Maximum logical size of the hard disk in megabytes.</desc>
6724 </param>
6725 <param name="progress" type="IProgress" dir="return">
6726 <desc>Progress object to track the operation completion.</desc>
6727 </param>
6728
6729 </method>
6730
6731 <method name="createFixedImage">
6732 <desc>
6733
6734 Starts creating a fixed-size hard disk image in the background. The
6735 previous image, if any, must be deleted using
6736 <link to="#deleteImage"/>, otherwise the operation will fail.
6737
6738 <note>
6739 After the returned progress object reports that the
6740 operation is complete, this hard disk object can be
6741 <link to="IVirtualBox::registerHardDisk()">registered</link> within
6742 this VirtualBox installation.
6743 </note>
6744
6745 </desc>
6746
6747 <param name="size" type="unsigned long long" dir="in">
6748 <desc>Logical size of the hard disk in megabytes.</desc>
6749 </param>
6750 <param name="progress" type="IProgress" dir="return">
6751 <desc>Progress object to track the operation completion.</desc>
6752 </param>
6753
6754 </method>
6755
6756 <method name="deleteImage">
6757 <desc>
6758
6759 Deletes the existing hard disk image. The hard disk must not be
6760 registered within this VirtualBox installation, otherwise the
6761 operation will fail.
6762
6763 <note>
6764 After this operation succeeds, it will be impossible to register the
6765 hard disk until the image file is created again.
6766 </note>
6767
6768 <note>
6769 This operation is valid only for non-differencing hard disks, after
6770 they are unregistered using
6771 <link to="IVirtualBox::unregisterHardDisk()"/>.
6772 </note>
6773
6774 </desc>
6775 </method>
6776
6777 </interface>
6778
6779 <!--
6780 // ICustomHardDisk
6781 /////////////////////////////////////////////////////////////////////////
6782 -->
6783
6784 <interface
6785 name="ICustomHardDisk" extends="$unknown"
6786 uuid="a7b0236d-3ff4-47c0-a4aa-ddc4ddc1141a"
6787 wsmap="managed"
6788 >
6789 <desc>
6790 The ICustomHardDisk interface represents a specific type of
6791 <link to="IHardDisk" /> that is supported through a third-party plugin.
6792
6793 This interface allows to add support for custom hard disk formats to
6794 VirtualBox.
6795
6796 Objects that support this interface also support the
6797 <link to="IHardDisk"/> interface.
6798
6799 Hard disks using custom hard disk formats can be either opened using
6800 <link to="IVirtualBox::openHardDisk()"/> or created from scratch using
6801 <link to="IVirtualBox::createHardDisk()"/>.
6802
6803 When a new hard disk object is created from scratch, an image file for
6804 it is not automatically created. To do it, you need to specify a
6805 valid <link to="#location">location</link>, and call
6806 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>.
6807 When it is done, the hard disk object can be registered by calling
6808 <link to="IVirtualBox::registerHardDisk()"/> and then
6809 <link to="IMachine::attachHardDisk()">attached</link> to
6810 virtual machines.
6811
6812 The <link to="IHardDisk::description">description</link>
6813 of the hard disk is stored in the VirtualBox
6814 configuration file, so it can be changed (at appropriate
6815 times) even when
6816 <link to="IHardDisk::accessible">accessible</link> returns
6817 <tt>false</tt>. However, the hard disk must not be
6818 attached to a running virtual machine.
6819
6820 </desc>
6821
6822 <attribute name="location" type="wstring">
6823 <desc>
6824
6825 Location of this custom hard disk. For
6826 newly created hard disk objects, this value is <tt>null</tt>.
6827
6828 The format of the location string is plugin-dependent. In case if the
6829 plugin uses a regular file in the local file system to store hard disk
6830 data, then the location is a file path and the following rules apply:
6831 <ul>
6832 <li>
6833 when assigning a new path, it must be absolute (full path) or
6834 relative to the <link to="IVirtualBox::homeFolder"> VirtualBox
6835 home directory</link>. If only a file name without any path is
6836 given, the <link to="ISystemProperties::defaultVDIFolder"> default
6837 VDI folder</link> will be used as a path to the image file.
6838 </li>
6839 <li>
6840 When reading this propery, a full path is always returned.
6841 </li>
6842 </ul>
6843
6844 <note>
6845 This property cannot be changed when <link to="#created"/>
6846 returns <tt>true</tt>.
6847 </note>
6848
6849 </desc>
6850 </attribute>
6851
6852 <attribute name="format" type="wstring" readonly="yes">
6853 <desc>
6854
6855 The plugin name of the image file.
6856
6857 </desc>
6858 </attribute>
6859
6860 <attribute name="created" type="boolean" readonly="yes">
6861 <desc>
6862
6863 Whether the virual disk image is created or not. For newly created
6864 hard disk objects or after a successful invocation of
6865 <link to="#deleteImage()"/>, this value is <tt>false</tt> until
6866 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>
6867 is called.
6868
6869 </desc>
6870 </attribute>
6871
6872 <method name="createDynamicImage">
6873
6874 <desc>
6875
6876 Starts creating a dymically expanding hard disk image in the
6877 background. The previous image associated with this object, if
6878 any, must be deleted using <link to="#deleteImage"/>, otherwise
6879 the operation will fail.
6880
6881 <note>
6882 After the returned progress object reports that the
6883 operation is complete, this hard disk object can be
6884 <link to="IVirtualBox::registerHardDisk()">registered</link> within
6885 this VirtualBox installation.
6886 </note>
6887
6888 </desc>
6889
6890 <param name="size" type="unsigned long long" dir="in">
6891 <desc>Maximum logical size of the hard disk in megabytes.</desc>
6892 </param>
6893 <param name="progress" type="IProgress" dir="return">
6894 <desc>Progress object to track the operation completion.</desc>
6895 </param>
6896
6897 </method>
6898
6899 <method name="createFixedImage">
6900 <desc>
6901
6902 Starts creating a fixed-size hard disk image in the background. The
6903 previous image, if any, must be deleted using
6904 <link to="#deleteImage"/>, otherwise the operation will fail.
6905
6906 <note>
6907 After the returned progress object reports that the
6908 operation is complete, this hard disk object can be
6909 <link to="IVirtualBox::registerHardDisk()">registered</link> within
6910 this VirtualBox installation.
6911 </note>
6912
6913 </desc>
6914
6915 <param name="size" type="unsigned long long" dir="in">
6916 <desc>Logical size of the hard disk in megabytes.</desc>
6917 </param>
6918 <param name="progress" type="IProgress" dir="return">
6919 <desc>Progress object to track the operation completion.</desc>
6920 </param>
6921
6922 </method>
6923
6924 <method name="deleteImage">
6925 <desc>
6926
6927 Deletes the existing hard disk image. The hard disk must not be
6928 registered within this VirtualBox installation, otherwise the
6929 operation will fail.
6930
6931 <note>
6932 After this operation succeeds, it will be impossible to register the
6933 hard disk until the image file is created again.
6934 </note>
6935
6936 <note>
6937 This operation is valid only for non-differencing hard disks, after
6938 they are unregistered using
6939 <link to="IVirtualBox::unregisterHardDisk()"/>.
6940 </note>
6941
6942 </desc>
6943 </method>
6944
6945 </interface>
6946
6947 <!--
6948 // IVHDImage
6949 /////////////////////////////////////////////////////////////////////////
6950 -->
6951
6952 <interface
6953 name="IVHDImage" extends="$unknown"
6954 uuid="163b88c3-7552-424a-8205-daf17a004747"
6955 wsmap="managed"
6956 >
6957 <desc>
6958
6959 The IVHDImage interface represents <link to="IHardDisk">virtual hard
6960 disks</link> that use Virtual PC Virtual Machine Disk image files to store
6961 hard disk data.
6962
6963 Hard disks using VHD images can be either opened using
6964 <link to="IVirtualBox::openHardDisk()"/> or created from
6965 scratch using <link to="IVirtualBox::createHardDisk()"/>.
6966
6967 Objects that support this interface also support the
6968 <link to="IHardDisk"/> interface.
6969
6970 When a new hard disk object is created from scatch, an image file for it
6971 is not automatically created. To do it, you need to specify a
6972 valid <link to="#filePath">file path</link>, and call
6973 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>.
6974 When it is done, the hard disk object can be registered by calling
6975 <link to="IVirtualBox::registerHardDisk()"/> and then
6976 <link to="IMachine::attachHardDisk()">attached</link> to
6977 virtual machines.
6978
6979 The <link to="IHardDisk::description">description</link>
6980 of the VHD hard disk is stored in the VirtualBox
6981 configuration file, so it can be changed (at appropriate
6982 times) even when
6983 <link to="IHardDisk::accessible">accessible</link> returns
6984 <tt>false</tt>. However, the hard disk must not be
6985 attached to a running virtual machine.
6986
6987 <note>
6988 In the current imlementation, the type of all VHD hard disks
6989 is <link to="HardDiskType::Writethrough">Writethrough</link> and cannot
6990 be changed.
6991 </note>
6992
6993 </desc>
6994
6995 <attribute name="filePath" type="wstring">
6996 <desc>
6997
6998 Full file name of the VHD image of this hard disk. For
6999 newly created hard disk objects, this value is <tt>null</tt>.
7000
7001 When assigning a new path, it can be absolute (full path) or relative
7002 to the <link to="IVirtualBox::homeFolder"> VirtualBox home
7003 directory</link>. If only a file name without any path is given,
7004 the <link to="ISystemProperties::defaultVDIFolder"> default VDI
7005 folder</link> will be used as a path to the image file.
7006
7007 When reading this propery, a full path is always returned.
7008
7009 <note>
7010 This property cannot be changed when <link to="#created"/>
7011 returns <tt>true</tt>. In this case, the specified file name can be
7012 absolute (full path) or relative to
7013 the <link to="IVirtualBox::homeFolder"> VirtualBox home
7014 directory</link>. If only a file name without any path is given,
7015 the <link to="ISystemProperties::defaultVDIFolder"> default VDI
7016 folder</link> will be used as a path to the image file.
7017 </note>
7018
7019 </desc>
7020 </attribute>
7021
7022 <attribute name="created" type="boolean" readonly="yes">
7023 <desc>
7024
7025 Whether the virual disk image is created or not. For newly created
7026 hard disk objects or after a successful invocation of
7027 <link to="#deleteImage()"/>, this value is <tt>false</tt> until
7028 <link to="#createFixedImage()"/> or <link to="#createDynamicImage()"/>
7029 is called.
7030
7031 </desc>
7032 </attribute>
7033
7034 <method name="createDynamicImage">
7035
7036 <desc>
7037
7038 Starts creating a dymically expanding hard disk image in the
7039 background. The previous image associated with this object, if
7040 any, must be deleted using <link to="#deleteImage"/>, otherwise
7041 the operation will fail.
7042
7043 <note>
7044 After the returned progress object reports that the
7045 operation is complete, this hard disk object can be
7046 <link to="IVirtualBox::registerHardDisk()">registered</link> within
7047 this VirtualBox installation.
7048 </note>
7049
7050 </desc>
7051
7052 <param name="size" type="unsigned long long" dir="in">
7053 <desc>Maximum logical size of the hard disk in megabytes.</desc>
7054 </param>
7055 <param name="progress" type="IProgress" dir="return">
7056 <desc>Progress object to track the operation completion.</desc>
7057 </param>
7058
7059 </method>
7060
7061 <method name="createFixedImage">
7062 <desc>
7063
7064 Starts creating a fixed-size hard disk image in the background. The
7065 previous image, if any, must be deleted using
7066 <link to="#deleteImage"/>, otherwise the operation will fail.
7067
7068 <note>
7069 After the returned progress object reports that the
7070 operation is complete, this hard disk object can be
7071 <link to="IVirtualBox::registerHardDisk()">registered</link> within
7072 this VirtualBox installation.
7073 </note>
7074
7075 </desc>
7076
7077 <param name="size" type="unsigned long long" dir="in">
7078 <desc>Logical size of the hard disk in megabytes.</desc>
7079 </param>
7080 <param name="progress" type="IProgress" dir="return">
7081 <desc>Progress object to track the operation completion.</desc>
7082 </param>
7083
7084 </method>
7085
7086 <method name="deleteImage">
7087 <desc>
7088
7089 Deletes the existing hard disk image. The hard disk must not be
7090 registered within this VirtualBox installation, otherwise the
7091 operation will fail.
7092
7093 <note>
7094 After this operation succeeds, it will be impossible to register the
7095 hard disk until the image file is created again.
7096 </note>
7097
7098 <note>
7099 This operation is valid only for non-differencing hard disks, after
7100 they are unregistered using
7101 <link to="IVirtualBox::unregisterHardDisk()"/>.
7102 </note>
7103
7104 </desc>
7105 </method>
7106
7107 </interface>
7108
7109 <!--
7110 // IDVDImage
7111 /////////////////////////////////////////////////////////////////////////
7112 -->
7113
7114 <enumerator
7115 name="IDVDImageEnumerator" type="IDVDImage"
7116 uuid="9BE77C8D-E1BE-4bf2-A67B-B4DD3D2B0F28"
7117 />
7118
7119 <collection
7120 name="IDVDImageCollection" type="IDVDImage"
7121 enumerator="IDVDImageEnumerator"
7122 uuid="AE7053FA-ADD2-4ea4-AFCF-24D5F8DDED64"
7123 readonly="yes"
7124 >
7125 <method name="findByPath">
7126 <desc>
7127 Searches this collection for a DVD image with the given disk path.
7128 <note>
7129 The method returns an error if the given name does not
7130 correspond to any DVD image in the collection.
7131 </note>
7132 </desc>
7133 <param name="path" type="wstring" dir="in">
7134 <desc>Name of the DVD image's file system location.</desc>
7135 </param>
7136 <param name="image" type="IDVDImage" dir="return">
7137 <desc>Found DVD image object</desc>
7138 </param>
7139 </method>
7140 </collection>
7141
7142 <interface
7143 name="IDVDImage" extends="$unknown"
7144 uuid="140FFF03-E479-4194-8562-ABC4F8171009"
7145 wsmap="managed"
7146 >
7147 <desc>
7148
7149 The IDVDImage interface represents a file containing the image
7150 of the DVD or CD disk.
7151
7152 <h3>Image Accessibility</h3>
7153
7154 The <link to="#accessible"/> attribute of the image object
7155 defines the accessibility state of the image file. If the
7156 value of this attribute is <tt>false</tt> then some image
7157 attributes may contain invalid or outdated values (for example, the
7158 the image file size) until a new accessibility
7159 check is done that returns <tt>true</tt>.
7160
7161 <note>
7162 Because of the possible slowness of the accessibility check,
7163 it is not implicitly performed upon the VirtualBox server startup
7164 (to prevent the application freeze). In partcular, this means that
7165 if you try to read image properties that depend on the
7166 accessibility state without first reading the value of the
7167 <link to="#accessible"/> attribute and ensuring it's value is
7168 <tt>true</tt>, you will get wrong (zero) values.
7169 </note>
7170
7171 </desc>
7172 <attribute name="id" type="uuid" readonly="yes">
7173 <desc>UUID of the CD/DVD image.</desc>
7174 </attribute>
7175
7176 <attribute name="filePath" type="wstring" readonly="yes">
7177 <desc>Full file name of the CD/DVD image.</desc>
7178 </attribute>
7179
7180 <attribute name="accessible" type="boolean" readonly="yes">
7181 <desc>
7182
7183 Whether the CD/DVD image is currently accessible or not.
7184 The image, for example, can be unaccessible if it is placed
7185 on a network share that is not available by the time
7186 this property is read.
7187
7188 The accessibility check is performed automatically every time
7189 this attribute is read. You should keep it in mind that this check
7190 may be slow and can block the calling thread for a long time (for
7191 example, if the network share where the image is located is down).
7192
7193 The following attributes of the image object are considered
7194 to be invalid when this attribute is <tt>false</tt>:
7195 <ul>
7196 <li><link to="#size"/></li>
7197 </ul>
7198
7199 </desc>
7200 </attribute>
7201
7202 <attribute name="size" type="unsigned long long" readonly="yes">
7203 <desc>Size of the ISO image in bytes.</desc>
7204 </attribute>
7205
7206 </interface>
7207
7208
7209 <!--
7210 // IDVDDrive
7211 /////////////////////////////////////////////////////////////////////////
7212 -->
7213
7214 <interface
7215 name="IDVDDrive" extends="$unknown"
7216 uuid="d9bd101a-8079-4fb9-bad1-31bf32482b75"
7217 wsmap="managed"
7218 >
7219 <desc>
7220 The IDVDDrive interface represents the virtual CD/DVD drive of the
7221 virtual machine. Used in <link to="IMachine::DVDDrive"/>.
7222 </desc>
7223 <attribute name="state" type="DriveState" readonly="yes">
7224 <desc>Current drive state.</desc>
7225 </attribute>
7226
7227 <attribute name="passthrough" type="boolean">
7228 <desc>
7229 When a host drive is mounted and passthrough is enabled
7230 the guest will be able to directly send SCSI commands to
7231 the host drive. This enables the guest to use CD/DVD writers
7232 but is potentially dangerous.
7233 </desc>
7234 </attribute>
7235
7236 <method name="mountImage">
7237 <desc>Mounts the specified image.</desc>
7238 <param name="imageId" type="uuid" dir="in"/>
7239 </method>
7240
7241 <method name="captureHostDrive">
7242 <desc>Captures the specified host drive.</desc>
7243 <param name="drive" type="IHostDVDDrive" dir="in"/>
7244 </method>
7245
7246 <method name="unmount">
7247 <desc>Unmounts the currently mounted image/device.</desc>
7248 </method>
7249
7250 <method name="getImage">
7251 <desc>Gets the currently mounted image ID.</desc>
7252 <param name="image" type="IDVDImage" dir="return"/>
7253 </method>
7254
7255 <method name="getHostDrive">
7256 <desc>Gets the currently mounted image ID.</desc>
7257 <param name="drive" type="IHostDVDDrive" dir="return"/>
7258 </method>
7259
7260 </interface>
7261
7262 <!--
7263 // IFloppyImage
7264 /////////////////////////////////////////////////////////////////////////
7265 -->
7266
7267 <enumerator
7268 name="IFloppyImageEnumerator" type="IFloppyImage"
7269 uuid="902C4089-76B7-41f1-91E8-49A261A28A2C"
7270 />
7271
7272 <collection
7273 name="IFloppyImageCollection" type="IFloppyImage"
7274 enumerator="IFloppyImageEnumerator"
7275 uuid="327A8928-8572-446e-AD9A-18FE30E81F3F"
7276 readonly="yes">
7277 <method name="findByPath">
7278 <desc>
7279 Searches this collection for a floppy image with the given disk path.
7280 <note>
7281 The method returns an error if the given name does not
7282 correspond to any floppy image in the collection.
7283 </note>
7284 </desc>
7285 <param name="path" type="wstring" dir="in">
7286 <desc>Name of the floppy image's file system location.</desc>
7287 </param>
7288 <param name="image" type="IFloppyImage" dir="return">
7289 <desc>Found Floppy image object</desc>
7290 </param>
7291 </method>
7292 </collection>
7293
7294 <interface
7295 name="IFloppyImage" extends="$unknown"
7296 uuid="CC696755-EA98-4ffe-9DC5-C003047034AB"
7297 wsmap="managed"
7298 >
7299 <desc>
7300
7301 The IFloppyImage interface represents a file containing the image
7302 of a floppy disk.
7303
7304 <h3>Image Accessibility</h3>
7305
7306 The <link to="#accessible"/> attribute of the image object
7307 defines the accessibility state of the image file. If the
7308 value of this attribute is <tt>false</tt> then some image
7309 attributes may contain invalid or outdated values (for example, the
7310 the image file size) until a new accessibility
7311 check is done that returns <tt>true</tt>.
7312
7313 <note>
7314 Because of the possible slowness of the accessibility check,
7315 it is not implicitly performed upon the VirtualBox server startup
7316 (to prevent the application freeze). In partcular, this means that
7317 if you try to read image properties that depend on the
7318 accessibility state without first reading the value of the
7319 <link to="#accessible"/> attribute and ensuring it's value is
7320 <tt>true</tt>, you will get wrong (zero) values.
7321 </note>
7322
7323 </desc>
7324 <attribute name="id" type="uuid" readonly="yes">
7325 <desc>UUID of the floppy image.</desc>
7326 </attribute>
7327
7328 <attribute name="filePath" type="wstring" readonly="yes">
7329 <desc>Full file name of the floppy image.</desc>
7330 </attribute>
7331
7332 <attribute name="accessible" type="boolean" readonly="yes">
7333 <desc>
7334
7335 Whether the floppy image is currently accessible or not.
7336 The image, for example, can be unaccessible if it is placed
7337 on a network share that is not available by the time
7338 this property is read.
7339
7340 The accessibility check is performed automatically every time
7341 this attribute is read. You should keep it in mind that this check
7342 may be slow and can block the calling thread for a long time (for
7343 example, if the network share where the image is located is down).
7344
7345 The following attributes of the image object are considered
7346 to be invalid when this attribute is <tt>false</tt>:
7347 <ul>
7348 <li><link to="#size"/></li>
7349 </ul>
7350
7351 </desc>
7352 </attribute>
7353
7354 <attribute name="size" type="unsigned long" readonly="yes">
7355 <desc>Size of the floppy image in bytes.</desc>
7356 </attribute>
7357
7358 </interface>
7359
7360
7361 <!--
7362 // IFloppyDrive
7363 /////////////////////////////////////////////////////////////////////////
7364 -->
7365
7366 <interface
7367 name="IFloppyDrive" extends="$unknown"
7368 uuid="E9318F71-78D2-4b00-863C-B7CB0030A2D9"
7369 wsmap="managed"
7370 >
7371 <desc>
7372 The IFloppyDrive interface represents the virtual floppy drive of the
7373 virtual machine. Used in <link to="IMachine::FloppyDrive" />.
7374 </desc>
7375
7376 <attribute name="enabled" type="boolean">
7377 <desc>
7378 Flag whether the floppy drive is enabled. If it is disabled,
7379 the floppy drive will not be reported to the guest.
7380 </desc>
7381 </attribute>
7382
7383 <attribute name="state" type="DriveState" readonly="yes">
7384 <desc>Current drive state.</desc>
7385 </attribute>
7386
7387 <method name="mountImage">
7388 <desc>Mounts the specified image.</desc>
7389 <param name="imageId" type="uuid" dir="in"/>
7390 </method>
7391
7392 <method name="captureHostDrive">
7393 <desc>Captures the specified host drive.</desc>
7394 <param name="drive" type="IHostFloppyDrive" dir="in"/>
7395 </method>
7396
7397 <method name="unmount">
7398 <desc>Unmounts the currently mounted image/device.</desc>
7399 </method>
7400
7401 <method name="getImage">
7402 <desc>Gets the currently mounted image ID.</desc>
7403 <param name="image" type="IFloppyImage" dir="return"/>
7404 </method>
7405
7406 <method name="getHostDrive">
7407 <desc>Gets the currently mounted image ID.</desc>
7408 <param name="drive" type="IHostFloppyDrive" dir="return"/>
7409 </method>
7410
7411 </interface>
7412
7413
7414 <!--
7415 // IKeyboard
7416 /////////////////////////////////////////////////////////////////////////
7417 -->
7418
7419 <interface
7420 name="IKeyboard" extends="$unknown"
7421 uuid="FD443EC1-000A-4F5B-9282-D72760A66916"
7422 wsmap="managed"
7423 >
7424 <desc>
7425 The IKeyboard interface represents the virtual machine's keyboard. Used
7426 in <link to="IConsole::keyboard"/>.
7427
7428 Through this interface, the virtual machine's virtual keyboard can be controlled. One
7429 can send keystrokes to the virtual machine and send the Ctrl-Alt-Del sequence to it.
7430 </desc>
7431 <method name="putScancode">
7432 <desc>Sends a scancode to the keyboard.</desc>
7433 <param name="scancode" type="long" dir="in"/>
7434 </method>
7435
7436 <method name="putScancodes">
7437 <desc>Sends an array of scancode to the keyboard.</desc>
7438 <param name="scancodes" type="long" dir="in" array="count"/>
7439 <param name="count" type="unsigned long" dir="in"/>
7440 <param name="codesStored" type="unsigned long" dir="return"/>
7441 </method>
7442
7443 <method name="putCAD">
7444 <desc>Sends the Ctrl-Alt-Del sequence to the keyboard.</desc>
7445 </method>
7446
7447 </interface>
7448
7449
7450 <!--
7451 // IMouse
7452 /////////////////////////////////////////////////////////////////////////
7453 -->
7454
7455 <enum
7456 name="MouseButtonState"
7457 uuid="03131722-2EC5-4173-9794-0DACA46673EF"
7458 >
7459 <desc>
7460 Mouse button state.
7461 </desc>
7462
7463 <const name="LeftButton" value="0x01"/>
7464 <const name="RightButton" value="0x02"/>
7465 <const name="MiddleButton" value="0x04"/>
7466 <const name="WheelUp" value="0x08"/>
7467 <const name="WheelDown" value="0x10"/>
7468 <const name="MouseStateMask" value="0x1F"/>
7469 </enum>
7470
7471 <interface
7472 name="IMouse" extends="$unknown"
7473 uuid="FD443EC1-0006-4F5B-9282-D72760A66916"
7474 wsmap="managed"
7475 >
7476 <desc>
7477 The IMouse interface represents the virtual machine's mouse. Used in
7478 <link to="IConsole::mouse"/>.
7479
7480 Through this interface, the virtual machine's virtual mouse can be
7481 controlled.
7482 </desc>
7483
7484 <attribute name="absoluteSupported" type="boolean" readonly="yes">
7485 <desc>
7486 Whether the guest OS supports absolute mouse pointer positioning
7487 or not.
7488 <note>
7489 VirtualBox Guest Tools need to be installed to the guest OS
7490 in order to enable absolute mouse positioning support.
7491 You can use the <link to="IConsoleCallback::onMouseCapabilityChange"/>
7492 callback to be instantly informed about changes of this attribute
7493 during virtual machine execution.
7494 </note>
7495 <see><link to="#putMouseEventAbsolute"/></see>
7496 </desc>
7497 </attribute>
7498
7499 <method name="putMouseEvent">
7500 <desc>
7501 Initiates a mouse event using relative pointer movements
7502 along x and y axis.
7503 </desc>
7504
7505 <param name="dx" type="long" dir="in">
7506 <desc>
7507 Amout of pixels the mouse should move to the right.
7508 Negative values move the mouse to the left.
7509 </desc>
7510 </param>
7511 <param name="dy" type="long" dir="in">
7512 <desc>
7513 Amout of pixels the mouse should move downwards.
7514 Negative values move the mouse upwards.
7515 </desc>
7516 </param>
7517 <param name="dz" type="long" dir="in">
7518 <desc>
7519 Amount of mouse wheel moves.
7520 Positive values describe clockwize wheel rotations,
7521 negative values describe counterclockwise rotations.
7522 </desc>
7523 </param>
7524 <param name="buttonState" type="long" dir="in">
7525 <desc>
7526 The current state of mouse buttons. Every bit represents
7527 a mouse button as follows:
7528 <table>
7529 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
7530 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
7531 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
7532 </table>
7533 A value of <tt>1</tt> means the corresponding button is pressed.
7534 otherwise it is released.
7535 </desc>
7536 </param>
7537 </method>
7538
7539 <method name="putMouseEventAbsolute">
7540 <desc>
7541 Positions the mouse pointer using absolute x and y coordinates.
7542 These coordinates are expressed in pixels and
7543 start from <tt>[1,1]</tt> which corresponds to the top left
7544 corner of the virtual display.
7545
7546 <note>
7547 This method will have effect only if absolute mouse
7548 positioning is supported by the guest OS.
7549 </note>
7550
7551 <see><link to="#absoluteSupported"/></see>
7552 </desc>
7553
7554 <param name="x" type="long" dir="in">
7555 <desc>
7556 X coordinate of the pointer in pixels, starting from <tt>1</tt>.
7557 </desc>
7558 </param>
7559 <param name="y" type="long" dir="in">
7560 <desc>
7561 Y coordinate of the pointer in pixels, starting from <tt>1</tt>.
7562 </desc>
7563 </param>
7564 <param name="dz" type="long" dir="in">
7565 <desc>
7566 Amout of mouse wheel moves.
7567 Positive values describe clockwize wheel rotations,
7568 negative values describe counterclockwise rotations.
7569 </desc>
7570 </param>
7571 <param name="buttonState" type="long" dir="in">
7572 <desc>
7573 The current state of mouse buttons. Every bit represents
7574 a mouse button as follows:
7575 <table>
7576 <tr><td>Bit 0 (<tt>0x01</tt>)</td><td>left mouse button</td></tr>
7577 <tr><td>Bit 1 (<tt>0x02</tt>)</td><td>right mouse button</td></tr>
7578 <tr><td>Bit 2 (<tt>0x04</tt>)</td><td>middle mouse button</td></tr>
7579 </table>
7580 A value of <tt>1</tt> means the corresponding button is pressed.
7581 otherwise it is released.
7582 </desc>
7583 </param>
7584 </method>
7585
7586 </interface>
7587
7588 <!--
7589 // IDisplay
7590 /////////////////////////////////////////////////////////////////////////
7591 -->
7592
7593 <enum
7594 name="FramebufferAccelerationOperation"
7595 uuid="f0e5ebbe-dc8e-4e2d-916e-53baa3844df8"
7596 >
7597 <desc>
7598 Framebuffer acceleration operation.
7599 </desc>
7600
7601 <const name="SolidFillAcceleration" value="1"/>
7602 <const name="ScreenCopyAcceleration" value="2"/>
7603 </enum>
7604
7605 <enum
7606 name="FramebufferPixelFormat"
7607 uuid="6b27d1fc-4f2c-4e9c-a166-01d06540305d"
7608 >
7609 <desc>
7610 Format of the video memory buffer. Constants represented by this enum can
7611 be used to test for particular values of <link
7612 to="IFramebuffer::pixelFormat"/>. See also <link
7613 to="IFramebuffer::requestResize()"/>.
7614
7615 See also www.fourcc.org for more informantion about FOURCC pixel formats.
7616 </desc>
7617
7618 <const name="Opaque" value="0xFFFFFFFF">
7619 <desc>
7620 Unknown buffer format. The user may not assume any particular
7621 format of the buffer.
7622 </desc>
7623 </const>
7624 <const name="FOURCC_RGB" value="0x32424752">
7625 <desc>
7626 Basic RGB format. <link to="IFramebuffer::bitsPerPixel"/> determines
7627 the bit layout.
7628 </desc>
7629 </const>
7630 </enum>
7631
7632 <interface
7633 name="IFramebuffer" extends="$unknown"
7634 uuid="af431304-5b09-40e2-94da-3c3cb03822c1"
7635 wsmap="suppress"
7636 >
7637 <attribute name="address" type="octet" mod="ptr" readonly="yes">
7638 <desc>Address of the start byte of the framebuffer.</desc>
7639 </attribute>
7640
7641 <attribute name="width" type="unsigned long" readonly="yes">
7642 <desc>Framebuffer width, in pixels.</desc>
7643 </attribute>
7644
7645 <attribute name="height" type="unsigned long" readonly="yes">
7646 <desc>Framebuffer height, in pixels.</desc>
7647 </attribute>
7648
7649 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
7650 <desc>
7651 Color depth, in bits per pixel. When <link to="#pixelFormat"/> is <link
7652 to="FramebufferPixelFormat::FOURCC_RGB">FOURCC_RGB</link>, valid values
7653 are: 8, 15, 16, 24 and 32.
7654 </desc>
7655 </attribute>
7656
7657 <attribute name="bytesPerLine" type="unsigned long" readonly="yes">
7658 <desc>
7659 Scan line size, in bytes. When <link to="#pixelFormat"/> is <link
7660 to="FramebufferPixelFormat::FOURCC_RGB">FOURCC_RGB</link>, the
7661 size of the scan line must be aligned to 32 bits.
7662 </desc>
7663 </attribute>
7664
7665 <attribute name="pixelFormat" type="unsigned long" readonly="yes">
7666 <desc>
7667 Framebuffer pixel format. It's either one of the values defined by <link
7668 to="FramebufferPixelFormat"/> or a raw FOURCC code.
7669 <note>
7670 This attribute must never return <link
7671 to="PixelFormat::Opaque"/> -- the format of the buffer
7672 <link to="#address"/> points to must be always known.
7673 </note>
7674 </desc>
7675 </attribute>
7676
7677 <attribute name="usesGuestVRAM" type="boolean" readonly="yes">
7678 <desc>
7679 Defines whether this framebuffer uses the virtual video card's memory
7680 buffer (guest VRAM) directly or not. See <link
7681 to="IFramebuffer::requestResize()"/> for more information.
7682 </desc>
7683 </attribute>
7684
7685 <attribute name="heightReduction" type="unsigned long" readonly="yes">
7686 <desc>
7687 Hint from the framebuffer about how much of the standard
7688 screen height it wants to use for itself. This information is
7689 exposed to the guest through the VESA BIOS and VMMDev interface
7690 so that it can use it for determining its video mode table. It
7691 is not guaranteed that the guest respects the value.
7692 </desc>
7693 </attribute>
7694
7695 <attribute name="overlay" type="IFramebufferOverlay" readonly="yes">
7696 <desc>
7697 An alpha-blended overlay which is superposed over the framebuffer.
7698 The initial purpose is to allow the display of icons providing
7699 information about the VM state, including disk activity, in front
7700 ends which do not have other means of doing that. The overlay is
7701 designed to controlled exclusively by IDisplay. It has no locking
7702 of its own, and any changes made to it are not guaranteed to be
7703 visible until the affected portion of IFramebuffer is updated. The
7704 overlay can be created lazily the first time it is requested. This
7705 attribute can also return NULL to signal that the overlay is not
7706 implemented.
7707 </desc>
7708 </attribute>
7709
7710 <method name="lock">
7711 <desc>
7712 Locks the framebuffer.
7713 Gets called by the IDisplay object where this framebuffer is
7714 bound to.
7715 </desc>
7716 </method>
7717
7718 <method name="unlock">
7719 <desc>
7720 Unlocks the framebuffer.
7721 Gets called by the IDisplay object where this framebuffer is
7722 bound to.
7723 </desc>
7724 </method>
7725
7726 <method name="notifyUpdate">
7727 <desc>
7728 Informs about an update.
7729 Gets called by the display object where this buffer is
7730 registered.
7731 </desc>
7732 <param name="x" type="unsigned long" dir="in"/>
7733 <param name="y" type="unsigned long" dir="in"/>
7734 <param name="width" type="unsigned long" dir="in"/>
7735 <param name="height" type="unsigned long" dir="in"/>
7736 <param name="finished" type="boolean" dir="return"/>
7737 </method>
7738
7739 <method name="requestResize">
7740 <desc>
7741 Requests a size and pixel format change.
7742
7743 There are two modes of working with the video buffer of the virtual
7744 machine. The <i>indirect</i> mode implies that the IFramebuffer
7745 implementation allocates a memory buffer for the requested display mode
7746 and provides it to the virtual machine. In <i>direct</i> mode, the
7747 IFramebuffer implementation uses the memory buffer allocated and owned
7748 by the virtual machine. This buffer represents the video memory of the
7749 emulated video adapter (so called <i>guest VRAM</i>). The direct mode is
7750 usually faster because the implementation gets a raw pointer to the
7751 guest VRAM buffer which it can directly use for visualising the contents
7752 of the virtual display, as opposed to the indirect mode where the
7753 contents of guest VRAM are copied to the memory buffer provided by
7754 the implementation every time a display update occurs.
7755
7756 It is important to note that the direct mode is really fast only when
7757 the implementation uses the given guest VRAM buffer directly, for
7758 example, by blitting it to the window representing the virtual machine's
7759 display, which saves at least one copy operation comparing to the
7760 indirect mode. However, using the guest VRAM buffer directly is not
7761 always possible: the format and the color depth of this buffer may be
7762 not supported by the target window, or it may be unknown (opaque) as in
7763 case of text or non-linear multi-plane VGA video modes. In this case,
7764 the indirect mode (that is always available) should be used as a
7765 fallback: when the guest VRAM contents are copied to the
7766 implementation-provided memory buffer, color and format conversion is
7767 done authomatically by the underlying code.
7768
7769 The @a pixelFormat parameter defines whether the direct mode is
7770 available or not. If @a pixelFormat is <link
7771 to="PixelFormat::Opaque"/> then direct access to the guest
7772 VRAM buffer is not available -- the @a VRAM, @a bitsPerPixel and @a
7773 bytesPerLine parameters must be ignored and the implementation must use
7774 the indirect mode (where it provides its own buffer in one of the
7775 supported formats). In all other cases, @a pixelFormat together with @a
7776 bitsPerPixel and @a bytesPerLine define the format of the video memory
7777 buffer pointed to by the @a VRAM parameter and the implementation is
7778 free to choose which mode to use. To indicate that this framebuffer uses
7779 the direct mode, the implementation of the <link to="#usesGuestVRAM"/>
7780 attribute must return <tt>true</tt> and <link to="#address"/> must
7781 return exactly the same address that is passed in the @a VRAM parameter
7782 of this method; otherwise it is assumed that the indirect strategy is
7783 chosen.
7784
7785 The @a width and @a height parameters represent the size of the
7786 requested display mode in both modes. In case of indirect mode, the
7787 provided memory buffer should be big enough to store data of the given
7788 display mode. In case of direct mode, it is guaranteed that the given @a
7789 VRAM buffer contains enough space to represent the display mode of the
7790 given size. Note that this framebuffer's <link to="#width"/> and <link
7791 to="#height"/> attributes must return exactly the same values as
7792 passed to this method after the resize is completed (see below).
7793
7794 The @a finished output parameter determines if the implementation has
7795 finished resizing the framebuffer or not. If, for some reason, the
7796 resize cannot be finished immediately during this call, @a finished
7797 must be set to @c false, and the implementation must call
7798 <link to="IDisplay::resizeCompleted()"/> after it has returned from
7799 this method as soon as possible. If @a finished is @c false, the
7800 machine will not call any framebuffer methods until
7801 <link to="IDisplay::resizeCompleted()"/> is called.
7802
7803 Note that if the direct mode is chosen, the <link to="#bitsPerPixel"/>,
7804 <link to="#bytesPerLine"/> and <link to="#pixelFormat"/> attributes of
7805 this framebuffer must return exactly the same values as specified in the
7806 parameters of this method, after the resize is completed. If the
7807 indirect mode is chosen, these attributes must return values describing
7808 the format of the implementation's own memory buffer <link
7809 to="#address"/> points to. Note also that the <link to="#bitsPerPixel"/>
7810 value must always correlate with <link to="#pixelFormat"/>. Note that
7811 the <link to="#pixelFormat"/> attribute must never return <link
7812 to="PixelFormat::Opaque"/> regardless of the selected mode.
7813
7814 <note>
7815 This method is called by the IDisplay object under the
7816 <link to="#lock()"/> provided by this IFramebuffer
7817 implementation. If this method returns @c false in @a finished, then
7818 this lock is not released until
7819 <link to="IDisplay::resizeCompleted()"/> is called.
7820 </note>
7821 </desc>
7822 <param name="screenId" type="unsigned long" dir="in">
7823 <desc>
7824 Logical screen number. Must be used in the corresponding call to
7825 <link to="IDisplay::resizeCompleted()"/> if this call is made.
7826 </desc>
7827 </param>
7828 <param name="pixelFormat" type="unsigned long" dir="in">
7829 <desc>
7830 Pixel format of the memory buffer pointed to by @a VRAM.
7831 See also <link to="FramebufferPixelFormat"/>.
7832 </desc>
7833 </param>
7834 <param name="VRAM" type="octet" mod="ptr" dir="in">
7835 <desc>Pointer to the virtual video card's VRAM (may be @c null).</desc>
7836 </param>
7837 <param name="bitsPerPixel" type="unsigned long" dir="in">
7838 <desc>Color depth, bits per pixel.</desc>
7839 </param>
7840 <param name="bytesPerLine" type="unsigned long" dir="in">
7841 <desc>Size of one scan line, in bytes.</desc>
7842 </param>
7843 <param name="width" type="unsigned long" dir="in">
7844 <desc>Width of the guest display, in pixels.</desc>
7845 </param>
7846 <param name="height" type="unsigned long" dir="in">
7847 <desc>Height of the guest display, in pixels.</desc>
7848 </param>
7849 <param name="finished" type="boolean" dir="return">
7850 <desc>
7851 Can the VM start using the new framebuffer immediately
7852 after this method returns or it should wait for
7853 <link to="IDisplay::resizeCompleted()"/>.
7854 </desc>
7855 </param>
7856 </method>
7857
7858 <method name="operationSupported">
7859 <desc>
7860 Returns whether the given acceleration operation is supported
7861 by the IFramebuffer implementation. If not, the display object
7862 will not attempt to call the corresponding IFramebuffer entry
7863 point. Even if an operation is indicated to supported, the
7864 IFramebuffer implementation always has the option to return non
7865 supported from the corresponding acceleration method in which
7866 case the operation will be performed by the display engine. This
7867 allows for reduced IFramebuffer implementation complexity where
7868 only common cases are handled.
7869 </desc>
7870 <param name="operation" type="FramebufferAccelerationOperation" dir="in"/>
7871 <param name="supported" type="boolean" dir="return"/>
7872 </method>
7873
7874 <method name="videoModeSupported">
7875 <desc>
7876 Returns whether the framebuffer implementation is willing to
7877 support a given video mode. In case it is not able to render
7878 the video mode (or for some reason not willing), it should
7879 return false. Usually this method is called when the guest
7880 asks the VMM device whether a given video mode is supported
7881 so the information returned is directly exposed to the guest.
7882 It is important that this method returns very quickly.
7883 </desc>
7884 <param name="width" type="unsigned long" dir="in"/>
7885 <param name="height" type="unsigned long" dir="in"/>
7886 <param name="bpp" type="unsigned long" dir="in"/>
7887 <param name="supported" type="boolean" dir="return"/>
7888 </method>
7889
7890 <method name="solidFill">
7891 <desc>
7892 Fills the specified rectangle on screen with a solid color.
7893 </desc>
7894 <param name="x" type="unsigned long" dir="in"/>
7895 <param name="y" type="unsigned long" dir="in"/>
7896 <param name="width" type="unsigned long" dir="in"/>
7897 <param name="height" type="unsigned long" dir="in"/>
7898 <param name="color" type="unsigned long" dir="in"/>
7899 <param name="handled" type="boolean" dir="return"/>
7900 </method>
7901
7902 <method name="copyScreenBits">
7903 <desc>
7904 Copies specified rectangle on the screen.
7905 </desc>
7906 <param name="xDst" type="unsigned long" dir="in"/>
7907 <param name="yDst" type="unsigned long" dir="in"/>
7908 <param name="xSrc" type="unsigned long" dir="in"/>
7909 <param name="ySrc" type="unsigned long" dir="in"/>
7910 <param name="width" type="unsigned long" dir="in"/>
7911 <param name="height" type="unsigned long" dir="in"/>
7912 <param name="handled" type="boolean" dir="return"/>
7913 </method>
7914
7915 <method name="getVisibleRegion">
7916 <desc>
7917 Returns the visible region of this framebuffer.
7918
7919 If the @a rectangles parameter is <tt>NULL</tt> then the value of the
7920 @a count parameter is ignored and the number of elements necessary to
7921 describe the current visible region is returned in @a countCopied.
7922
7923 If @a rectangles is not <tt>NULL</tt> but @a count is less
7924 than the required number of elements to store region data, the method
7925 will report a failure. If @a count is equal or greater than the
7926 required number of elements, then the actual number of elements copied
7927 to the provided array will be returned in @a countCopied.
7928
7929 <note>
7930 The address of the provided array must be in the process space of
7931 this IFramebuffer object.
7932 </note>
7933 </desc>
7934 <param name="rectangles" type="octet" mod="ptr" dir="in">
7935 <desc>Pointer to the <tt>RTRECT</tt> array to receive region data.</desc>
7936 </param>
7937 <param name="count" type="unsigned long" dir="in">
7938 <desc>Number of <tt>RTRECT</tt> elements in the @a rectangles array.</desc>
7939 </param>
7940 <param name="countCopied" type="unsigned long" dir="return">
7941 <desc>Number of elements copied to the @a rectangles array.</desc>
7942 </param>
7943 </method>
7944
7945 <method name="setVisibleRegion">
7946 <desc>
7947 Suggests a new visible region to this framebuffer. This region
7948 represents the area of the VM display which is a union of regions of
7949 all top-level windows of the guest operating system running inside the
7950 VM (if the Guest Additions for this system support this
7951 functionality). This information may be used by the frontends to
7952 implement the seamless desktop integration feature.
7953
7954 <note>
7955 The address of the provided array must be in the process space of
7956 this IFramebuffer object.
7957 </note>
7958 <note>
7959 The IFramebuffer implementation must make a copy of the provided
7960 array of rectangles.
7961 </note>
7962 </desc>
7963 <param name="rectangles" type="octet" mod="ptr" dir="in">
7964 <desc>Pointer to the <tt>RTRECT</tt> array.</desc>
7965 </param>
7966 <param name="count" type="unsigned long" dir="in">
7967 <desc>Number of <tt>RTRECT</tt> elements in the @a rectangles array.</desc>
7968 </param>
7969 </method>
7970
7971 </interface>
7972
7973 <interface
7974 name="IFramebufferOverlay" extends="IFrameBuffer"
7975 uuid="0bcc1c7e-e415-47d2-bfdb-e4c705fb0f47"
7976 wsmap="suppress"
7977 >
7978 <desc>
7979 The IFramebufferOverlay interface represents an alpha blended overlay
7980 for displaying status icons above an IFramebuffer. It is always created
7981 not visible, so that it must be explicitly shown. It only covers a
7982 portion of the IFramebuffer, determined by its width, height and
7983 co-ordinates. It is always in packed pixel little-endian 32bit ARGB (in
7984 that order) format, and may be written to directly. Do re-read the
7985 width though, after setting it, as it may be adjusted (increased) to
7986 make it more suitable for the front end.
7987 </desc>
7988 <attribute name="x" type="unsigned long" readonly="yes">
7989 <desc>X position of the overlay, relative to the framebuffer.</desc>
7990 </attribute>
7991
7992 <attribute name="y" type="unsigned long" readonly="yes">
7993 <desc>Y position of the overlay, relative to the framebuffer.</desc>
7994 </attribute>
7995
7996 <attribute name="visible" type="boolean" readonly="no">
7997 <desc>
7998 Whether the overlay is currently visible.
7999 </desc>
8000 </attribute>
8001
8002 <attribute name="alpha" type="unsigned long" readonly="no">
8003 <desc>
8004 The global alpha value for the overlay. This may or may not be
8005 supported by a given front end.
8006 </desc>
8007 </attribute>
8008
8009 <method name="move">
8010 <desc>
8011 Changes the overlay's position relative to the IFramebuffer.
8012 </desc>
8013 <param name="x" type="unsigned long" dir="in"/>
8014 <param name="y" type="unsigned long" dir="in"/>
8015 </method>
8016
8017 </interface>
8018
8019 <interface
8020 name="IDisplay" extends="$unknown"
8021 uuid="09789f63-4525-48e5-a5e4-1080453b0eab"
8022 wsmap="suppress"
8023 >
8024 <desc>
8025 The IDisplay interface represents the virtual machine's display.
8026
8027 The object implementing this interface is contained in each
8028 <link to="IConsole::display"/> attribute and represents the visual
8029 output of the virtual machine.
8030
8031 The virtual display supports pluggable output targets represented by the
8032 IFramebuffer interface. Examples of the output target are a window on
8033 the host computer or an RDP sessoin's display on a remote computer.
8034 </desc>
8035 <attribute name="width" type="unsigned long" readonly="yes">
8036 <desc>Current display width.</desc>
8037 </attribute>
8038
8039 <attribute name="height" type="unsigned long" readonly="yes">
8040 <desc>Current display height.</desc>
8041 </attribute>
8042
8043 <attribute name="bitsPerPixel" type="unsigned long" readonly="yes">
8044 <desc>
8045 Current guest display color depth. Note that this may differ
8046 from <link to="IFramebuffer::bitsPerPixel"/>.
8047 </desc>
8048 </attribute>
8049
8050 <method name="setupInternalFramebuffer">
8051 <desc>
8052 Prepares an internally managed framebuffer.
8053 </desc>
8054 <param name="depth" type="unsigned long" dir="in"/>
8055 </method>
8056
8057 <method name="lockFramebuffer">
8058 <desc>
8059 Requests access to the internal framebuffer.
8060 </desc>
8061 <param name="address" type="octet" mod="ptr" dir="return"/>
8062 </method>
8063
8064 <method name="unlockFramebuffer">
8065 <desc>
8066 Releases access to the internal framebuffer.
8067 </desc>
8068 </method>
8069
8070 <method name="registerExternalFramebuffer">
8071 <desc>
8072 Registers an external framebuffer.
8073 </desc>
8074 <param name="framebuffer" type="IFramebuffer" dir="in"/>
8075 </method>
8076
8077 <method name="setFramebuffer">
8078 <desc>
8079 Sets the framebuffer for given screen.
8080 </desc>
8081 <param name="screenId" type="unsigned long" dir="in"/>
8082 <param name="framebuffer" type="IFramebuffer" dir="in"/>
8083 </method>
8084
8085 <method name="getFramebuffer">
8086 <desc>
8087 Queries the framebuffer for given screen.
8088 </desc>
8089 <param name="screenId" type="unsigned long" dir="in"/>
8090 <param name="framebuffer" type="IFramebuffer" dir="out"/>
8091 <param name="xOrigin" type="long" dir="out"/>
8092 <param name="yOrigin" type="long" dir="out"/>
8093 </method>
8094
8095 <method name="setVideoModeHint">
8096 <desc>
8097 Asks VirtualBox to request the given video mode from
8098 the guest. This is just a hint and it cannot be guaranteed
8099 that the requested resolution will be used. Guest Additions
8100 are required for the request to be seen by guests. The caller
8101 should issue the request and wait for a resolution change and
8102 after a timeout retry.
8103
8104 Specifying <tt>0</tt> for either @a width, @a height or @a bitsPerPixel
8105 parameters means that the corresponding values should be taken from the
8106 current video mode (i.e. left unchanged).
8107
8108 If the guest OS supports multi-monitor configuration then the @a display
8109 parameter specifies the number of the guest display to send the hint to:
8110 <tt>0</tt> is the primary display, <tt>1</tt> is the first secondary and
8111 so on. If the multi-monitor configuration is not supported, @a display
8112 must be <tt>0</tt>.
8113
8114 </desc>
8115 <param name="width" type="unsigned long" dir="in"/>
8116 <param name="height" type="unsigned long" dir="in"/>
8117 <param name="bitsPerPixel" type="unsigned long" dir="in"/>
8118 <param name="display" type="unsigned long" dir="in"/>
8119 </method>
8120
8121 <method name="setSeamlessMode">
8122 <desc>
8123 Enables or disables seamless guest display rendering (seamless desktop
8124 integration) mode.
8125 <note>
8126 Calling this method has no effect if <link
8127 to="IGuest::supportsSeamless"/> returns <tt>false</tt>.
8128 </note>
8129 </desc>
8130 <param name="enabled" type="boolean" dir="in"/>
8131 </method>
8132
8133 <method name="takeScreenShot">
8134 <desc>
8135 Takes a screen shot of the requested size and copies it to the
8136 32-bpp buffer allocated by the caller.
8137 </desc>
8138 <param name="address" type="octet" mod="ptr" dir="in"/>
8139 <param name="width" type="unsigned long" dir="in"/>
8140 <param name="height" type="unsigned long" dir="in"/>
8141 </method>
8142
8143 <method name="drawToScreen">
8144 <desc>
8145 Draws a 32-bpp image of the specified size from the given buffer
8146 to the given point on the VM display.
8147 </desc>
8148 <param name="address" type="octet" mod="ptr" dir="in"/>
8149 <param name="x" type="unsigned long" dir="in"/>
8150 <param name="y" type="unsigned long" dir="in"/>
8151 <param name="width" type="unsigned long" dir="in"/>
8152 <param name="height" type="unsigned long" dir="in"/>
8153 </method>
8154
8155 <method name="invalidateAndUpdate">
8156 <desc>
8157 Does a full invalidation of the VM display and instructs the VM
8158 to update it.
8159 </desc>
8160 </method>
8161
8162 <method name="resizeCompleted">
8163 <desc>
8164 Signals that a framebuffer has completed the resize operation.
8165 </desc>
8166 <param name="screenId" type="unsigned long" dir="in"/>
8167 </method>
8168
8169 <method name="updateCompleted">
8170 <desc>
8171 Signals that a framebuffer has completed the update operation.
8172 </desc>
8173 </method>
8174
8175 </interface>
8176
8177 <!--
8178 // INetworkAdapter
8179 /////////////////////////////////////////////////////////////////////////
8180 -->
8181
8182 <enum
8183 name="NetworkAttachmentType"
8184 uuid="8730d899-d036-4925-bc63-e58f3486f4bf"
8185 >
8186 <desc>
8187 Network attachment type.
8188 </desc>
8189
8190 <const name="Null" value="0">
8191 <desc><tt>null</tt> value. Also means "not attached".</desc>
8192 </const>
8193 <const name="NAT" value="1"/>
8194 <const name="HostInterface" value="2"/>
8195 <const name="Internal" value="3"/>
8196 </enum>
8197
8198 <enum
8199 name="NetworkAdapterType"
8200 uuid="156b17b9-5d61-4d54-be90-62e37dda848d"
8201 >
8202 <desc>
8203 Network adapter type.
8204 </desc>
8205
8206 <const name="Null" value="0">
8207 <desc><tt>null</tt> value. Never used by the API.</desc>
8208 </const>
8209 <const name="Am79C970A" value="1"/>
8210 <const name="Am79C973" value="2"/>
8211 <const name="I82540EM" value="3"/>
8212 <const name="I82543GC" value="4"/>
8213 </enum>
8214
8215 <interface
8216 name="INetworkAdapter" extends="$unknown"
8217 uuid="a876d9b1-68d9-43b1-9c68-ddea0a473663"
8218 wsmap="managed"
8219 >
8220 <attribute name="adapterType" type="NetworkAdapterType">
8221 <desc>
8222 Type of the virtual network adapter. Depending on this value,
8223 VirtualBox will provide a different virtual network hardware
8224 to the guest.
8225 </desc>
8226 </attribute>
8227
8228 <attribute name="slot" type="unsigned long" readonly="yes">
8229 <desc>
8230 Slot number this adapter is plugged into. Corresponds to
8231 the value you pass to <link to="IMachine::getNetworkAdapter"/>
8232 to obtain this instance.
8233 </desc>
8234 </attribute>
8235
8236 <attribute name="enabled" type="boolean">
8237 <desc>
8238 Flag whether the network adapter is present in the
8239 guest system. If disabled, the virtual guest hardware will
8240 not contain this network adapter. Can only be changed when
8241 the VM is not running.
8242 </desc>
8243 </attribute>
8244
8245 <attribute name="MACAddress" type="wstring">
8246 <desc>
8247 Ethernet MAC address of the adapter, 12 hexadecimal characters. When setting
8248 it to NULL, VirtualBox will generate a unique MAC address.
8249 </desc>
8250 </attribute>
8251
8252 <attribute name="attachmentType" type="NetworkAttachmentType" readonly="yes"/>
8253
8254 <attribute name="hostInterface" type="wstring">
8255 <desc>
8256 Name of the Host Network Interface that is currently in use. NULL will be returned
8257 if no device has been allocated. On Linux, setting this refers to a permanent TAP
8258 device. However, a file descriptor has precedence over the interface name on Linux.
8259 Note that when VBox allocates a TAP device, this property will not be set, i.e. the
8260 interface name would have to be determined using the file descriptor and /proc/self/fd.
8261 </desc>
8262 </attribute>
8263
8264<if target="xpidl">
8265 <attribute name="TAPFileDescriptor" type="long">
8266 <desc>
8267 File descriptor of the TAP device. It can either be setup by the caller
8268 which has to supply an existing valid file handle allocated in the parent
8269 process of the VM process or allocated by VirtualBox. The value is -1 if it
8270 has not been defined. This property is non persistent, i.e. it will not be
8271 stored in the VM's configuration data and thus has to be set at each startup.
8272 </desc>
8273 </attribute>
8274 <attribute name="TAPSetupApplication" type="wstring">
8275 <desc>
8276 Application to start to configure the TAP device.
8277 It is being passed two parameters, 1) the file handle (as ascii),
8278 2) the TAP device name if it is available.
8279 </desc>
8280 </attribute>
8281 <attribute name="TAPTerminateApplication" type="wstring">
8282 <desc>
8283 Application to start before closing a TAP device.
8284 It is being passed two parameters, 1) the file handle (as ascii),
8285 2) the TAP device name if it is available.
8286 </desc>
8287 </attribute>
8288</if>
8289
8290 <attribute name="internalNetwork" type="wstring">
8291 <desc>
8292 Name of the internal network the VM is attached to.
8293 </desc>
8294 </attribute>
8295
8296 <attribute name="NATNetwork" type="wstring">
8297 <desc>
8298 Name of the NAT network the VM is attached to.
8299 </desc>
8300 </attribute>
8301
8302 <attribute name="cableConnected" type="boolean">
8303 <desc>
8304 Flag whether the adapter reports the cable as connected or not.
8305 It can be used to report offline situations to a VM.
8306 </desc>
8307 </attribute>
8308
8309 <attribute name="lineSpeed" type="unsigned long">
8310 <desc>
8311 Line speed reported by custom drivers, in units of 1 kbps.
8312 </desc>
8313 </attribute>
8314
8315 <attribute name="traceEnabled" type="boolean">
8316 <desc>
8317 Flag whether network traffic from/to the network card should be traced.
8318 Can only be toggled when the VM is turned off.
8319 </desc>
8320 </attribute>
8321
8322 <attribute name="traceFile" type="wstring">
8323 <desc>
8324 Filename where a network trace will be stored. If not set, VBox-pid.pcap
8325 will be used.
8326 </desc>
8327 </attribute>
8328
8329 <method name="attachToNAT">
8330 <desc>
8331 Attach the network adapter to the Network Address Translation (NAT) interface.
8332 </desc>
8333 </method>
8334
8335 <method name="attachToHostInterface">
8336 <desc>
8337 Attach the network adapter to a host interface. On Linux, the TAP
8338 setup application will be executed if configured and unless a device
8339 name and/or file descriptor has been set, a new TAP interface will be
8340 created.
8341 </desc>
8342 </method>
8343
8344 <method name="attachToInternalNetwork">
8345 <desc>
8346 Attach the network adapter to an internal network.
8347 </desc>
8348 </method>
8349
8350 <method name="detach">
8351 <desc>
8352 Detach the network adapter
8353 </desc>
8354 </method>
8355 </interface>
8356
8357
8358 <!--
8359 // ISerialPort
8360 /////////////////////////////////////////////////////////////////////////
8361 -->
8362
8363 <enum
8364 name="PortMode"
8365 uuid="b266f43c-2e93-46b3-812b-c20e600e867b"
8366 >
8367 <desc>
8368 The PortMode enumeration represents possible communicaton modes for
8369 the virtual serial port device.
8370 </desc>
8371
8372 <const name="Disconnected" value="0">
8373 <desc>Virtual device is not attached to any real host device.</desc>
8374 </const>
8375 <const name="HostPipe" value="1">
8376 <desc>Virtual device is attached to a host pipe.</desc>
8377 </const>
8378 <const name="HostDevice" value="2">
8379 <desc>Virtual device is attached to a host device.</desc>
8380 </const>
8381 </enum>
8382
8383 <interface
8384 name="ISerialPort" extends="$unknown"
8385 uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
8386 wsmap="managed"
8387 >
8388
8389 <desc>
8390 The ISerialPort interface represents the virtual serial port device.
8391
8392 The virtual serial port device acts like an ordinary serial port
8393 inside the virtual machine. This device communicates to the real
8394 serial port hardware in one of two modes: host pipe or host device.
8395
8396 In host pipe mode, the #path attribute specifies the path to the pipe on
8397 the host computer that represents a serial port. The #server attribute
8398 determines if this pipe is created by the virtual machine process at
8399 machine startup or it must already exist before starting machine
8400 execution.
8401
8402 In host device mode, the #path attribute specifies the name of the
8403 serial port device on the host computer.
8404
8405 There is also a third communication mode: the disconnected mode. In this
8406 mode, the guest OS running inside the virtual machine will be able to
8407 detect the serial port, but all port write operations will be discarded
8408 and all port read operations will return no data.
8409
8410 <see>IMachine::getSerialPort</see>
8411 </desc>
8412
8413 <attribute name="slot" type="unsigned long" readonly="yes">
8414 <desc>
8415 Slot number this serial port is plugged into. Corresponds to
8416 the value you pass to <link to="IMachine::getSerialPort"/>
8417 to obtain this instance.
8418 </desc>
8419 </attribute>
8420
8421 <attribute name="enabled" type="boolean">
8422 <desc>
8423 Flag whether the serial port is enabled. If disabled,
8424 the serial port will not be reported to the guest OS.
8425 </desc>
8426 </attribute>
8427
8428 <attribute name="IOBase" type="unsigned long">
8429 <desc>Base I/O address of the serial port.</desc>
8430 </attribute>
8431
8432 <attribute name="IRQ" type="unsigned long">
8433 <desc>IRQ number of the serial port.</desc>
8434 </attribute>
8435
8436 <attribute name="hostMode" type="PortMode">
8437 <desc>How is this port connected to the host.</desc>
8438 </attribute>
8439
8440 <attribute name="server" type="boolean">
8441 <desc>
8442 Flag whether this serial port acts as a server (creates a new pipe on
8443 the host) or as a client (uses the existing pipe). This attribute is
8444 used only when #hostMode is PortMode::HostPipePort.
8445 </desc>
8446 </attribute>
8447
8448 <attribute name="path" type="wstring">
8449 <desc>
8450 Path to the serial port's pipe on the host when #hostMode is
8451 PortMode::HostPipePort, or the host serial device name when #hostMode
8452 is PortMode::HostDevicePort. In either of the above cases, setting a
8453 @c null or an empty string as the attribute's value will result into
8454 an error. Otherwise, the value of this property is ignored.
8455 </desc>
8456 </attribute>
8457
8458 </interface>
8459
8460 <!--
8461 // IParallelPort
8462 /////////////////////////////////////////////////////////////////////////
8463 -->
8464
8465 <interface
8466 name="IParallelPort" extends="$unknown"
8467 uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
8468 wsmap="managed"
8469 >
8470
8471 <desc>
8472 The IParallelPort interface represents the virtual parallel port device.
8473
8474 The virtual parallel port device acts like an ordinary parallel port
8475 inside the virtual machine. This device communicates to the real
8476 parallel port hardware using the name of the parallel device on the host
8477 computer specified in the #path attribute.
8478
8479 Each virtual parallel port device is assigned a base I/O address and an
8480 IRQ number that will be reported to the guest operating system and used
8481 to operate the given parallel port from within the virtual machine.
8482
8483 <see>IMachine::getParallelPort</see>
8484 </desc>
8485
8486 <attribute name="slot" type="unsigned long" readonly="yes">
8487 <desc>
8488 Slot number this parallel port is plugged into. Corresponds to
8489 the value you pass to <link to="IMachine::getParallelPort"/>
8490 to obtain this instance.
8491 </desc>
8492 </attribute>
8493
8494 <attribute name="enabled" type="boolean">
8495 <desc>
8496 Flag whether the parallel port is enabled. If disabled,
8497 the parallel port will not be reported to the guest OS.
8498 </desc>
8499 </attribute>
8500
8501 <attribute name="IOBase" type="unsigned long">
8502 <desc>Base I/O address of the parallel port.</desc>
8503 </attribute>
8504
8505 <attribute name="IRQ" type="unsigned long">
8506 <desc>IRQ number of the parallel port.</desc>
8507 </attribute>
8508
8509 <attribute name="path" type="wstring">
8510 <desc>
8511 Host parallel device name. If this parallel port is enabled, setting a
8512 @c null or an empty string as this attribute's value will result into
8513 an error.
8514 </desc>
8515 </attribute>
8516
8517 </interface>
8518
8519
8520 <!--
8521 // IMachineDebugger
8522 /////////////////////////////////////////////////////////////////////////
8523 -->
8524
8525 <interface
8526 name="IMachineDebugger" extends="$unknown"
8527 uuid="b3a02721-556a-4481-9d47-052a3f8cff90"
8528 wsmap="suppress"
8529 >
8530 <method name="resetStats">
8531 <desc>
8532 Reset VM statistics.
8533 </desc>
8534 <param name="pattern" type="wstring" dir="in">
8535 <desc>The selection pattern. A bit similar to filename globbing.</desc>
8536 </param>
8537 </method>
8538
8539 <method name="dumpStats">
8540 <desc>
8541 Dumps VM statistics.
8542 </desc>
8543 <param name="pattern" type="wstring" dir="in">
8544 <desc>The selection pattern. A bit similar to filename globbing.</desc>
8545 </param>
8546 </method>
8547
8548 <method name="getStats">
8549 <desc>
8550 Get the VM statistics in a XMLish format.
8551 </desc>
8552 <param name="pattern" type="wstring" dir="in">
8553 <desc>The selection pattern. A bit similar to filename globbing.</desc>
8554 </param>
8555 <param name="withDescriptions" type="boolean" dir="in">
8556 <desc>Whether to include the descriptions.</desc>
8557 </param>
8558 <param name="stats" type="wstring" dir="out">
8559 <desc>The XML document containing the statistics.</desc>
8560 </param>
8561 </method>
8562
8563 <attribute name="singlestep" type="boolean">
8564 <desc>Switch for enabling singlestepping.</desc>
8565 </attribute>
8566
8567 <attribute name="recompileUser" type="boolean">
8568 <desc>Switch for forcing code recompilation for user mode code.</desc>
8569 </attribute>
8570
8571 <attribute name="recompileSupervisor" type="boolean">
8572 <desc>Switch for forcing code recompilation for supervisor mode code.</desc>
8573 </attribute>
8574
8575 <attribute name="PATMEnabled" type="boolean">
8576 <desc>Switch for enabling and disabling the PATM component.</desc>
8577 </attribute>
8578
8579 <attribute name="CSAMEnabled" type="boolean">
8580 <desc>Switch for enabling and disabling the CSAM component.</desc>
8581 </attribute>
8582
8583 <attribute name="logEnabled" type="boolean">
8584 <desc>Switch for enabling and disabling logging.</desc>
8585 </attribute>
8586
8587 <attribute name="HWVirtExEnabled" type="boolean" readonly="yes">
8588 <desc>
8589 Flag indicating whether the VM is currently making use of CPU hardware
8590 virtualization extensions
8591 </desc>
8592 </attribute>
8593
8594 <attribute name="PAEEnabled" type="boolean" readonly="yes">
8595 <desc>
8596 Flag indicating whether the VM is currently making use of the Physical
8597 Address Extension CPU feature.
8598 </desc>
8599 </attribute>
8600
8601 <attribute name="virtualTimeRate" type="unsigned long">
8602 <desc>
8603 The rate at which the virtual time runs expressed as a percentage.
8604 The accepted range is 2% to 20000%.
8605 </desc>
8606 </attribute>
8607
8608 <!-- @todo method for setting log flags, groups and destination! -->
8609
8610 <attribute name="VM" type="unsigned long long" readonly="yes">
8611 <desc>
8612 Gets the VM handle. This is only for internal use while
8613 we carve the details of this interface.
8614 </desc>
8615 </attribute>
8616
8617 </interface>
8618
8619 <!--
8620 // IUSBController
8621 /////////////////////////////////////////////////////////////////////////
8622 -->
8623
8624 <interface
8625 name="IUSBController" extends="$unknown"
8626 uuid="f4c2d3dc-f109-4da7-93b1-ec28973ac89f"
8627 wsmap="managed"
8628 >
8629 <attribute name="enabled" type="boolean">
8630 <desc>
8631 Flag whether the USB controller is present in the
8632 guest system. If disabled, the virtual guest hardware will
8633 not contain any USB controller. Can only be changed when
8634 the VM is powered off.
8635 </desc>
8636 </attribute>
8637
8638 <attribute name="enabledEhci" type="boolean">
8639 <desc>
8640 Flag whether the USB EHCI controller is present in the
8641 guest system. If disabled, the virtual guest hardware will
8642 not contain a USB EHCI controller. Can only be changed when
8643 the VM is powered off.
8644 </desc>
8645 </attribute>
8646
8647 <attribute name="USBStandard" type="unsigned short" readonly="yes">
8648 <desc>
8649 USB standard version which the controller implements.
8650 This is a BCD which means that the major version is in the
8651 high byte and minor version is in the low byte.
8652 </desc>
8653 </attribute>
8654
8655 <attribute name="deviceFilters" type="IUSBDeviceFilterCollection" readonly="yes">
8656 <desc>
8657 List of USB device filters associated with the machine.
8658
8659 If the machine is currently running, these filters are activated
8660 every time a new (supported) USB device is attached to the host
8661 computer that was not ignored by global filters
8662 (<link to="IHost::USBDeviceFilters"/>).
8663
8664 These filters are also activated when the machine is powered up.
8665 They are run against a list of all currently available USB
8666 devices (in states
8667 <link to="USBDeviceState::Available">Available</link>,
8668 <link to="USBDeviceState::Busy">Busy</link>,
8669 <link to="USBDeviceState::Held">Held</link>) that were not previously
8670 ignored by global filters.
8671
8672 If at least one filter matches the USB device in question, this
8673 device is automatically captured (attached to) the virtual USB
8674 controller of this machine.
8675
8676 <see>IUSBDeviceFilter, ::IUSBController</see>
8677 </desc>
8678 </attribute>
8679
8680 <method name="createDeviceFilter">
8681 <desc>
8682 Creates a new USB device filter. All attributes except
8683 the filter name are set to <tt>null</tt> (any match),
8684 <i>active</i> is <tt>false</tt> (the filter is not active).
8685
8686 The created filter can then be added to the list of filters using
8687 <link to="#insertDeviceFilter()"/>.
8688
8689 <see>#deviceFilters</see>
8690 </desc>
8691 <param name="name" type="wstring" dir="in">
8692 <desc>
8693 Filter name. See <link to="IUSBDeviceFilter::name"/>
8694 for more info.
8695 </desc>
8696 </param>
8697 <param name="filter" type="IUSBDeviceFilter" dir="return">
8698 <desc>Created filter object.</desc>
8699 </param>
8700 </method>
8701
8702 <method name="insertDeviceFilter">
8703 <desc>
8704 Inserts the given USB device to the specified position
8705 in the list of filters.
8706
8707 Positions are numbered starting from <tt>0</tt>. If the specified
8708 position is equal to or greater than the number of elements in
8709 the list, the filter is added to the end of the collection.
8710
8711 <note>
8712 Duplicates are not allowed, so an attempt to inster a
8713 filter that is already in the collection, will return an
8714 error.
8715 </note>
8716
8717 <see>#deviceFilters</see>
8718 </desc>
8719 <param name="position" type="unsigned long" dir="in">
8720 <desc>Position to insert the filter to.</desc>
8721 </param>
8722 <param name="filter" type="IUSBDeviceFilter" dir="in">
8723 <desc>USB device filter to insert.</desc>
8724 </param>
8725 </method>
8726
8727 <method name="removeDeviceFilter">
8728 <desc>
8729 Removes a USB device filter from the specified position in the
8730 list of filters.
8731
8732 Positions are numbered starting from <tt>0</tt>. Specifying a
8733 position equal to or greater than the number of elements in
8734 the list will produce an error.
8735
8736 <see>#deviceFilters</see>
8737 </desc>
8738 <param name="position" type="unsigned long" dir="in">
8739 <desc>Position to remove the filter from.</desc>
8740 </param>
8741 <param name="filter" type="IUSBDeviceFilter" dir="return">
8742 <desc>Removed USB device filter.</desc>
8743 </param>
8744 </method>
8745
8746 </interface>
8747
8748
8749 <!--
8750 // IUSBDevice
8751 /////////////////////////////////////////////////////////////////////////
8752 -->
8753
8754 <enumerator
8755 name="IUSBDeviceEnumerator" type="IUSBDevice"
8756 uuid="aefe00f7-eb8a-454b-9ea4-fd5ad93c0e99"
8757 />
8758
8759 <collection
8760 name="IUSBDeviceCollection" type="IUSBDevice"
8761 enumerator="IUSBDeviceEnumerator"
8762 uuid="e31f3248-90dd-4ca2-95f0-6b36042d96a2"
8763 readonly="yes"
8764 >
8765 <method name="findById">
8766 <desc>
8767 Searches this collection for a USB device with the given UUID.
8768 <note>
8769 The method returns an error if the given UUID does not
8770 correspond to any USB device in the collection.
8771 </note>
8772 <see>IUSBDevice::id</see>
8773 </desc>
8774 <param name="id" type="uuid" dir="in">
8775 <desc>UUID of the USB device to search for.</desc>
8776 </param>
8777 <param name="device" type="IUSBDevice" dir="return">
8778 <desc>Found USB device object.</desc>
8779 </param>
8780 </method>
8781
8782 <method name="findByAddress">
8783 <desc>
8784 Searches this collection for a USB device with the given
8785 host address.
8786 <note>
8787 The method returns an error if the given address does not
8788 correspond to any USB device in the collection.
8789 </note>
8790 <see>IUSBDevice::address</see>
8791 </desc>
8792 <param name="name" type="wstring" dir="in">
8793 <desc>
8794 Address of the USB device (as assigned by the host) to
8795 search for.
8796 </desc>
8797 </param>
8798 <param name="device" type="IUSBDevice" dir="return">
8799 <desc>Found USB device object.</desc>
8800 </param>
8801 </method>
8802
8803 </collection>
8804
8805 <interface
8806 name="IUSBDevice" extends="$unknown"
8807 uuid="850af07b-9ee8-48c2-b6b0-f6d0acbf63c3"
8808 wsmap="managed"
8809 >
8810 <desc>
8811 The IUSBDevice interface represents a virtual USB device attached to the
8812 virtual machine.
8813
8814 A collection of objects implementing this interface is stored in the
8815 <link to="IConsole::USBDevices"/> attribute which lists all USB devices
8816 attached to a running virtual machine's USB controller.
8817 </desc>
8818
8819 <attribute name="id" type="uuid" readonly="yes">
8820 <desc>
8821 Unique USB device ID. This ID is built from #vendorId,
8822 #productId, #revision and #serialNumber.
8823 </desc>
8824 </attribute>
8825
8826 <attribute name="vendorId" type="unsigned short" readonly="yes">
8827 <desc>Vendor ID.</desc>
8828 </attribute>
8829
8830 <attribute name="productId" type="unsigned short" readonly="yes">
8831 <desc>Product ID.</desc>
8832 </attribute>
8833
8834 <attribute name="revision" type="unsigned short" readonly="yes">
8835 <desc>
8836 Product revision number. This is a packed BCD represented as
8837 unsigned short. The high byte is the integer part and the low
8838 byte is the decimal.
8839 </desc>
8840 </attribute>
8841
8842 <attribute name="manufacturer" type="wstring" readonly="yes">
8843 <desc>Manufacturer string.</desc>
8844 </attribute>
8845
8846 <attribute name="product" type="wstring" readonly="yes">
8847 <desc>Product string.</desc>
8848 </attribute>
8849
8850 <attribute name="serialNumber" type="wstring" readonly="yes">
8851 <desc>Serial number string.</desc>
8852 </attribute>
8853
8854 <attribute name="address" type="wstring" readonly="yes">
8855 <desc>Host specific address of the device.</desc>
8856 </attribute>
8857
8858 <attribute name="port" type="unsigned short" readonly="yes">
8859 <desc>
8860 Host USB port number the device is physically
8861 coonected to.
8862 </desc>
8863 </attribute>
8864
8865 <attribute name="version" type="unsigned short" readonly="yes">
8866 <desc>
8867 The major USB version of the device - 1 or 2.
8868 </desc>
8869 </attribute>
8870
8871 <attribute name="portVersion" type="unsigned short" readonly="yes">
8872 <desc>
8873 The major USB version of the host USB port the device is
8874 physically coonected to - 1 or 2. For devices not connected to
8875 anything this will have the same value as the version attribute.
8876 </desc>
8877 </attribute>
8878
8879 <attribute name="remote" type="boolean" readonly="yes">
8880 <desc>
8881 Whether the device is physically connected to a remote VRDP
8882 client or to a local host machine.
8883 </desc>
8884 </attribute>
8885
8886 </interface>
8887
8888
8889 <!--
8890 // IUSBDeviceFilter
8891 /////////////////////////////////////////////////////////////////////////
8892 -->
8893
8894 <enumerator
8895 name="IUSBDeviceFilterEnumerator" type="IUSBDeviceFilter"
8896 uuid="d5109c61-93e7-4726-926b-0dee1020da56"
8897 />
8898
8899 <collection
8900 name="IUSBDeviceFilterCollection" type="IUSBDeviceFilter"
8901 enumerator="IUSBDeviceFilterEnumerator"
8902 uuid="4fa3fc99-ceb1-4bf5-a9cb-e962d825c1ef"
8903 readonly="yes"
8904 />
8905
8906 <interface
8907 name="IUSBDeviceFilter" extends="$unknown"
8908 uuid="d6831fb4-1a94-4c2c-96ef-8d0d6192066d"
8909 wsmap="managed"
8910 >
8911 <desc>
8912 The IUSBDeviceFilter interface represents an USB device filter used
8913 to perform actions on a group of USB devices.
8914
8915 This type of filters is used by running virtual machines to
8916 automatically capture selected USB devices once they are physically
8917 attached to the host computer.
8918
8919 A USB device is matched to the given device filter if and only if all
8920 attributes of the device match the corresponding attributes of the
8921 filter (that is, attributes are joined together using the logical AND
8922 operation). On the other hand, all together, filters in the list of
8923 filters carry the semantics of the logical OR operation. So if it is
8924 desirable to create a match like "this vendor id OR this product id",
8925 one needs to create two filters and specify "any match" (see below)
8926 for unused attributes.
8927
8928 All filter attributes used for matching are strings. Each string
8929 is an expression representing a set of values of the corresponding
8930 device attribute, that will match the given filter. Currently, the
8931 following filtering expressions are supported:
8932
8933 <ul>
8934 <li><i>Interval filters</i>. Used to specify valid intervals for
8935 integer device attributes (Vendor ID, Product ID and Revision).
8936 The format of the string is:
8937
8938 <tt>int:((m)|([m]-[n]))(,(m)|([m]-[n]))*</tt>
8939
8940 where <tt>m</tt> and <tt>n</tt> are integer numbers, either in octal
8941 (starting from <tt>0</tt>), hexadecimal (starting from <tt>0x</tt>)
8942 or decimal (otherwise) form, so that <tt>m &lt; n</tt>. If <tt>m</tt>
8943 is ommitted before a dash (<tt>-</tt>), the minimum possible integer
8944 is assumed; if <tt>n</tt> is ommitted after a dash, the maximum
8945 possible integer is assummed.
8946 </li>
8947 <li><i>Boolean filters</i>. Used to specify acceptable values for
8948 boolean device attributes. The format of the string is:
8949
8950 <tt>true|false|yes|no|0|1</tt>
8951
8952 </li>
8953 <li><i>Exact match</i>. Used to specify a single value for the given
8954 device attribute. Any string that does't start with <tt>int:</tt>
8955 represents the exact match. String device attributes are compared to
8956 this string including case of symbols. Integer attributes are first
8957 converted to a string (see individual filter attributes) and then
8958 compared ignoring case.
8959
8960 </li>
8961 <li><i>Any match</i>. Any value of the corresponding device attribute
8962 will match the given filter. An empty or <tt>null</tt> string is
8963 used to construct this type of filtering expressions.
8964
8965 </li>
8966 </ul>
8967
8968 <note>
8969 On the Windows host platform, interval filters are not currently
8970 available. Also all string filter attributes
8971 (<link to="#manufacturer"/>, <link to="#product"/>,
8972 <link to="#serialNumber"/>) are ignored, so they behave as
8973 <i>any match</i> no matter what string expression is specified.
8974 </note>
8975
8976 <see>IUSBController::deviceFilters, IHostUSBDeviceFilter</see>
8977 </desc>
8978
8979 <attribute name="name" type="wstring">
8980 <desc>
8981 Visible name for this filter.
8982 This name is used to visually distungish one filter from another,
8983 so it can neither be <tt>null</tt> nor an empty string.
8984 </desc>
8985 </attribute>
8986
8987 <attribute name="active" type="boolean">
8988 <desc>Whether this filter active or has been temporarily disabled.</desc>
8989 </attribute>
8990
8991 <attribute name="vendorId" type="wstring">
8992 <desc>
8993 <link to="IUSBDevice::vendorId">Vendor ID</link> filter.
8994 The string representation for the <i>exact matching</i>
8995 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
8996 (including leading zeroes).
8997 </desc>
8998 </attribute>
8999
9000 <attribute name="productId" type="wstring">
9001 <desc>
9002 <link to="IUSBDevice::productId">Product ID</link> filter.
9003 The string representation for the <i>exact matching</i>
9004 has the form <tt>XXXX</tt>, where <tt>X</tt> is the hex digit
9005 (including leading zeroes).
9006 </desc>
9007 </attribute>
9008
9009 <attribute name="revision" type="wstring">
9010 <desc>
9011 <link to="IUSBDevice::productId">Product revision number</link>
9012 filter. The string representation for the <i>exact matching</i>
9013 has the form <tt>IIFF</tt>, where <tt>I</tt> is the decimal digit
9014 of the integer part of the revision, and <tt>F</tt> is the
9015 decimal digit of its fractional part (including leading and
9016 trailing zeroes).
9017 Note that for interval filters, it's best to use the hexadecimal
9018 form, because the revision is stored as a 16 bit packed BCD value;
9019 so the expression <tt>int:0x0100-0x0199</tt> will match any
9020 revision from <tt>1.0</tt> to <tt>1.99</tt>.
9021 </desc>
9022 </attribute>
9023
9024 <attribute name="manufacturer" type="wstring">
9025 <desc>
9026 <link to="IUSBDevice::manufacturer">Manufacturer</link> filter.
9027 </desc>
9028 </attribute>
9029
9030 <attribute name="product" type="wstring">
9031 <desc>
9032 <link to="IUSBDevice::product">Product</link> filter.
9033 </desc>
9034 </attribute>
9035
9036 <attribute name="serialNumber" type="wstring">
9037 <desc>
9038 <link to="IUSBDevice::serialNumber">Serial number</link> filter.
9039 </desc>
9040 </attribute>
9041
9042 <attribute name="port" type="wstring">
9043 <desc>
9044 <link to="IUSBDevice::port">Host USB port</link> filter.
9045 </desc>
9046 </attribute>
9047
9048 <attribute name="remote" type="wstring">
9049 <desc>
9050 <link to="IUSBDevice::remote">Remote state</link> filter.
9051 <note>
9052 This filter makes sense only for machine USB filters,
9053 i.e. it is ignored by IHostUSBDeviceFilter objects.
9054 </note>
9055 </desc>
9056 </attribute>
9057
9058 <attribute name="maskedInterfaces" type="unsigned long">
9059 <desc>
9060 This is an advanced option for hiding one or more USB interfaces
9061 from the guest. The value is a bitmask where the bits that are set
9062 means the corresponding USB interface should be hidden, masked off
9063 if you like.
9064 This feature only works on Linux hosts.
9065 </desc>
9066 </attribute>
9067
9068 </interface>
9069
9070
9071 <!--
9072 // IHostUSBDevice
9073 /////////////////////////////////////////////////////////////////////////
9074 -->
9075
9076 <enum
9077 name="USBDeviceState"
9078 uuid="b99a2e65-67fb-4882-82fd-f3e5e8193ab4"
9079 >
9080 <desc>
9081 USB device state. This enumeration represents all possible states
9082 of the USB device physically attached to the host computer regarding
9083 its state on the host computer and availability to guest computers
9084 (all currently running virtual machines).
9085
9086 Once a supported USB device is attached to the host, global USB
9087 filters (<link to="IHost::USBDeviceFilters"/>) are activated. They can
9088 either ignore the device, or put ot to #Held state, or do nothing. Unless
9089 the device is ignored by global filters, filters of all currently running
9090 guests (<link to="IUSBController::deviceFilters"/>) are activated that can
9091 put it to #Captured state.
9092
9093 If the device was ignored by global filters, or didn't match
9094 any filters at all (including guest ones), it is handled by the host
9095 in a normal way. In this case, the device state is determined by
9096 the host and can be one of #Unavailable, #Busy or #Available, depending on
9097 the current device usage.
9098
9099 Besides auto-capturing based on filters, the device can be manually
9100 captured by guests (<link to="IConsole::attachUSBDevice()"/>) if its
9101 state is #Busy, #Available or #Held.
9102
9103 <note>
9104 Due to differences in USB stack implementations in Linux and Win32,
9105 states #Busy and #Available are applicable only to the Linux version of
9106 the product. This also means that (<link
9107 to="IConsole::attachUSBDevice()"/>) can only succeed on Win32 if
9108 the device state is #USBDeviceHeld.
9109 </note>
9110
9111 <see>IHostUSBDevice, IHostUSBDeviceFilter</see>
9112 </desc>
9113
9114 <const name="NotSupported" value="0">
9115 <desc>
9116 Not supported by the VirtualBox server, not available to guests.
9117 </desc>
9118 </const>
9119 <const name="Unavailable" value="1">
9120 <desc>
9121 Being used by the host computer exclusively,
9122 not available to guests.
9123 </desc>
9124 </const>
9125 <const name="Busy" value="2">
9126 <desc>
9127 Being used by the host computer, potentially available to guests.
9128 </desc>
9129 </const>
9130 <const name="Available" value="3">
9131 <desc>
9132 Not used by the host computer, available to guests.
9133 The host computer can also start using the device at any time.
9134 </desc>
9135 </const>
9136 <const name="Held" value="4">
9137 <desc>
9138 Held by the VirtualBox server (ignored by the host computer),
9139 available to guests.
9140 </desc>
9141 </const>
9142 <const name="Captured" value="5">
9143 <desc>
9144 Captured by one of the guest computers, not available
9145 to anybody else.
9146 </desc>
9147 </const>
9148 </enum>
9149
9150 <enumerator
9151 name="IHostUSBDeviceEnumerator" type="IHostUSBDevice"
9152 uuid="a0c55136-939f-4d20-b9d3-4d406f08bfa5"
9153 />
9154
9155 <collection
9156 name="IHostUSBDeviceCollection" type="IHostUSBDevice"
9157 enumerator="IHostUSBDeviceEnumerator"
9158 uuid="f9d3f96d-b027-4994-b589-70bb9ee0d364"
9159 readonly="yes"
9160 >
9161 <method name="findById">
9162 <desc>
9163 Searches this collection for a USB device with the given UUID.
9164 <note>
9165 The method returns an error if the given UUID does not
9166 correspond to any USB device in the collection.
9167 </note>
9168 <see>IHostUSBDevice::id</see>
9169 </desc>
9170 <param name="id" type="uuid" dir="in">
9171 <desc>UUID of the USB device to search for.</desc>
9172 </param>
9173 <param name="device" type="IHostUSBDevice" dir="return">
9174 <desc>Found USB device object.</desc>
9175 </param>
9176 </method>
9177
9178 <method name="findByAddress">
9179 <desc>
9180 Searches this collection for a USB device with the given
9181 host address.
9182 <note>
9183 The method returns an error if the given address does not
9184 correspond to any USB device in the collection.
9185 </note>
9186 <see>IHostUSBDevice::address</see>
9187 </desc>
9188 <param name="name" type="wstring" dir="in">
9189 <desc>
9190 Address of the USB device (as assigned by the host) to
9191 search for.
9192 </desc>
9193 </param>
9194 <param name="device" type="IHostUSBDevice" dir="return">
9195 <desc>Found USB device object.</desc>
9196 </param>
9197 </method>
9198
9199 </collection>
9200
9201 <interface
9202 name="IHostUSBDevice" extends="IUSBDevice"
9203 uuid="173b4b44-d268-4334-a00d-b6521c9a740a"
9204 wsmap="managed"
9205 >
9206 <desc>
9207 The IHostUSBDevice interface represents a physical USB device attached
9208 to the host computer.
9209
9210 Besides properties inherited from IUSBDevice, this interface adds the
9211 <link to="#state"/> property that holds the courrent state of the USB
9212 device.
9213
9214 <see>IHost::USBDevices, IHost::USBDeviceFilters</see>
9215 </desc>
9216
9217 <attribute name="state" type="USBDeviceState" readonly="yes">
9218 <desc>
9219 Current state of the device.
9220 </desc>
9221 </attribute>
9222
9223 <!-- @todo add class, subclass, bandwidth, configs, interfaces endpoints and such later. -->
9224
9225 </interface>
9226
9227
9228 <!--
9229 // IHostUSBDeviceFilter
9230 /////////////////////////////////////////////////////////////////////////
9231 -->
9232
9233 <enum
9234 name="USBDeviceFilterAction"
9235 uuid="cbc30a49-2f4e-43b5-9da6-121320475933"
9236 >
9237 <desc>
9238 Actions for host USB device filters.
9239 <see>IHostUSBDeviceFilter, USBDeviceState</see>
9240 </desc>
9241
9242 <const name="Null" value="0">
9243 <desc><tt>null</tt> value. Never used by the API.</desc>
9244 </const>
9245 <const name="Ignore" value="1">
9246 <desc>Ignore the matched USB device.</desc>
9247 </const>
9248 <const name="Hold" value="2">
9249 <desc>Hold the matched USB device.</desc>
9250 </const>
9251 </enum>
9252
9253 <enumerator
9254 name="IHostUSBDeviceFilterEnumerator" type="IHostUSBDeviceFilter"
9255 uuid="ff735211-903e-4642-9c37-189eb44579fe"
9256 />
9257
9258 <collection
9259 name="IHostUSBDeviceFilterCollection" type="IHostUSBDeviceFilter"
9260 enumerator="IHostUSBDeviceFilterEnumerator"
9261 uuid="1a80458b-87f1-4a74-995d-04e2330119e0"
9262 readonly="yes"
9263 />
9264
9265 <interface
9266 name="IHostUSBDeviceFilter" extends="IUSBDeviceFilter"
9267 uuid="4cc70246-d74a-400f-8222-3900489c0374"
9268 wsmap="managed"
9269 >
9270 <desc>
9271 The IHostUSBDeviceFilter interface represents a global filter for a
9272 physical USB device used by the host computer. Used indirectly in
9273 <link to="IHost::USBDeviceFilters"/>.
9274
9275 Using filters of this type, the host computer determines the initial
9276 state of the USB device after it is physically attached to the
9277 host's USB controller.
9278
9279 <note>
9280 The <link to="#remote"/> attribute is ignored by this type of
9281 filters, because it makes sense only for
9282 <link to="IUSBController::deviceFilters">machine USB filters</link>.
9283 </note>
9284
9285 <see>IHost::USBDeviceFilters</see>
9286 </desc>
9287
9288 <attribute name="action" type="USBDeviceFilterAction">
9289 <desc>
9290 Action performed by the host when an attached USB device
9291 matches this filter.
9292 </desc>
9293 </attribute>
9294
9295 </interface>
9296
9297 <!--
9298 // IAudioAdapter
9299 /////////////////////////////////////////////////////////////////////////
9300 -->
9301
9302 <enum
9303 name="AudioDriverType"
9304 uuid="4bcc3d73-c2fe-40db-b72f-0c2ca9d68496"
9305 >
9306 <desc>
9307 Host audio driver type.
9308 </desc>
9309
9310 <const name="Null" value="0">
9311 <desc><tt>null</tt> value. Also means "dummy audio driver".</desc>
9312 </const>
9313 <const name="WinMM" value="1"/>
9314 <const name="OSS" value="2"/>
9315 <const name="ALSA" value="3"/>
9316 <const name="DirectSound" value="4"/>
9317 <const name="CoreAudio" value="5"/>
9318 <const name="MMPM" value="6"/>
9319 <const name="Pulse" value="7"/>
9320 <const name="SolAudio" value="8"/>
9321 </enum>
9322
9323 <enum
9324 name="AudioControllerType"
9325 uuid="7afd395c-42c3-444e-8788-3ce80292f36c"
9326 >
9327 <desc>
9328 Virtual audio controller type.
9329 </desc>
9330
9331 <const name="AC97" value="0"/>
9332 <const name="SB16" value="1"/>
9333 </enum>
9334
9335 <interface
9336 name="IAudioAdapter" extends="$unknown"
9337 uuid="921873db-5f3f-4b69-91f9-7be9e535a2cb"
9338 wsmap="managed"
9339 >
9340 <desc>
9341 The IAudioAdapter interface represents the virtual audio adapter of
9342 the virtual machine. Used in <link to="IMachine::audioAdapter"/>.
9343 </desc>
9344 <attribute name="enabled" type="boolean">
9345 <desc>
9346 Flag whether the audio adapter is present in the
9347 guest system. If disabled, the virtual guest hardware will
9348 not contain any audio adapter. Can only be changed when
9349 the VM is not running.
9350 </desc>
9351 </attribute>
9352 <attribute name="audioController" type="AudioControllerType">
9353 <desc>
9354 The audio hardware we emulate.
9355 </desc>
9356 </attribute>
9357 <attribute name="audioDriver" type="AudioDriverType">
9358 <desc>
9359 Audio driver the adapter is connected to. This setting
9360 can only be changed when the VM is not running.
9361 </desc>
9362 </attribute>
9363 </interface>
9364
9365 <!--
9366 // IVRDPServer
9367 /////////////////////////////////////////////////////////////////////////
9368 -->
9369
9370 <enum
9371 name="VRDPAuthType"
9372 uuid="3d91887a-b67f-4b33-85bf-2da7ab1ea83a"
9373 >
9374 <desc>
9375 VRDP authentication type.
9376 </desc>
9377
9378 <const name="Null" value="0">
9379 <desc><tt>null</tt> value. Also means "no authentication".</desc>
9380 </const>
9381 <const name="External" value="1"/>
9382 <const name="Guest" value="2"/>
9383 </enum>
9384
9385 <interface
9386 name="IVRDPServer" extends="$unknown"
9387 uuid="ed9d31ae-867f-45fc-b727-6740084d1883"
9388 wsmap="managed"
9389 >
9390 <attribute name="enabled" type="boolean">
9391 <desc>VRDP server status.</desc>
9392 </attribute>
9393
9394 <attribute name="port" type="unsigned long">
9395 <desc>
9396 VRDP server port number.
9397 <note>
9398 Setting the value of this property to <tt>0</tt> will reset the port
9399 number to the default value which is
9400 currently <tt>3389</tt>. Reading this property will always return a
9401 real port number, even after it has been set to <tt>0</tt> (in which
9402 case the default port is returned).
9403 </note>
9404 </desc>
9405 </attribute>
9406
9407 <attribute name="netAddress" type="wstring">
9408 <desc>VRDP server address.</desc>
9409 </attribute>
9410
9411 <attribute name="authType" type="VRDPAuthType">
9412 <desc>VRDP authentication method.</desc>
9413 </attribute>
9414
9415 <attribute name="authTimeout" type="unsigned long">
9416 <desc>Timeout for guest authentication. Milliseconds.</desc>
9417 </attribute>
9418
9419 <attribute name="allowMultiConnection" type="boolean">
9420 <desc>
9421 Flag whether multiple simultaneous connections to the VM are permitted.
9422 Note that this will be replaced by a more powerful mechanism in the future.
9423 </desc>
9424 </attribute>
9425
9426 </interface>
9427
9428
9429 <!--
9430 // ISharedFolder
9431 /////////////////////////////////////////////////////////////////////////
9432 -->
9433
9434 <enumerator
9435 name="ISharedFolderEnumerator" type="ISharedFolder"
9436 uuid="1d420fd8-e7c1-4511-abf4-a504dc6d0cbf"
9437 />
9438
9439 <collection
9440 name="ISharedFolderCollection" type="ISharedFolder"
9441 enumerator="ISharedFolderEnumerator"
9442 uuid="9c7e2282-bb16-4fa7-9138-f383c5e02353"
9443 readonly="yes">
9444
9445 <method name="findByName">
9446 <desc>
9447 Searches this collection for a shared folder with the given logical
9448 name.
9449 <note>
9450 The method returns an error if the given name does not correspond to
9451 any shared folder in the collection.
9452 </note>
9453 </desc>
9454 <param name="name" type="wstring" dir="in">
9455 <desc>Logical name of the shared folder to search for</desc>
9456 </param>
9457 <param name="sharedFolder" type="ISharedFolder" dir="return">
9458 <desc>Found shared folder object</desc>
9459 </param>
9460 </method>
9461
9462 </collection>
9463
9464 <interface
9465 name="ISharedFolder" extends="$unknown"
9466 uuid="8b0c5f70-9139-4f97-a421-64d5e9c335d5"
9467 wsmap="struct"
9468 >
9469 <desc>
9470 The ISharedFolder interface represents a folder in the host computer's
9471 file system accessible from the guest OS running inside a virtual
9472 machine using an associated logical name.
9473
9474 There are three types of shared folders:
9475 <ul>
9476 <li><i>Global</i> (<link to="IVirtualBox::sharedFolders"/>), shared
9477 folders available to all virtual machines.</li>
9478 <li><i>Permanent</i> (<link to="IMachine::sharedFolders"/>),
9479 VM-specific shared folders available to the given virtual machine at
9480 startup.</li>
9481 <li><i>Transient</i> (<link to="IConsole::sharedFolders"/>),
9482 VM-specific shared folders created in the session context (for
9483 example, when the virtual machine is running) and automatically
9484 discarded when the session is closed (the VM is powered off).</li>
9485 </ul>
9486
9487 Logical names of shared folders must be unique within the given scope
9488 (global, permanent or transient). However, they do not need to be unique
9489 across scopes. In this case, the definitioin of the shared folder in a
9490 more specific scope takes precedence over definitions in all other
9491 scopes. The order of precedence is (more specific to more general):
9492 <ol>
9493 <li>Transient definitions</li>
9494 <li>Permanent definitions</li>
9495 <li>Global definitions</li>
9496 </ol>
9497
9498 For example, if MyMachine has a shared folder named
9499 <tt>C_DRIVE</tt> (that points to <tt>C:\\</tt>), then cretaing a
9500 transient shared folder named <tt>C_DRIVE</tt> (that points
9501 to <tt>C:\\\\WINDOWS</tt>) will change the definition
9502 of <tt>C_DRIVE</tt> in the guest OS so
9503 that <tt>\\\\VBOXSVR\\C_DRIVE</tt> will give access
9504 to <tt>C:\\WINDOWS</tt> instead of <tt>C:\\</tt> on the host
9505 PC. Removing the transient shared folder <tt>C_DRIVE</tt> will restore
9506 the prevoious (permanent) definition of <tt>C_DRIVE</tt> that points
9507 to <tt>C:\\</tt> if it still exists.
9508
9509 Note that permanent and transient shared folders of different machines
9510 are in different name spaces, so they don't overlap and don't need to
9511 have unique logical names.
9512
9513 <note>With the COM API, this is an interface like all the others. With the webservice,
9514 this is mapped to a structure, so querying the attribute will not return an object,
9515 but a complete structure.</note>
9516
9517 <note>
9518 Global shared folders are not implemented in the current vesion of the
9519 product.
9520 </note>
9521 </desc>
9522
9523 <attribute name="name" type="wstring" readonly="yes">
9524 <desc>Logical name of the shared folder.</desc>
9525 </attribute>
9526
9527 <attribute name="hostPath" type="wstring" readonly="yes">
9528 <desc>Full path to the shared folder in the host file system.</desc>
9529 </attribute>
9530
9531 <attribute name="accessible" type="boolean" readonly="yes">
9532 <desc>
9533 Whether the folder defined by the host path is currently
9534 accessible or not.
9535 For example, the folder can be unaccessible if it is placed
9536 on the network share that is not available by the time
9537 this property is read.
9538 </desc>
9539 </attribute>
9540
9541 <attribute name="writable" type="boolean" readonly="yes">
9542 <desc>
9543 Whether the folder defined by the host path is writable or
9544 not.
9545 </desc>
9546 </attribute>
9547
9548 </interface>
9549
9550 <!--
9551 // ISession
9552 /////////////////////////////////////////////////////////////////////////
9553 -->
9554
9555 <interface
9556 name="IInternalSessionControl" extends="$unknown"
9557 uuid="37838967-2430-4bb1-8acc-1b5b2c383d44"
9558 internal="yes"
9559 wsmap="suppress"
9560 >
9561 <method name="getPID">
9562 <desc>PID of the process that has created this Session object.
9563 </desc>
9564 <param name="pid" type="unsigned long" dir="return"/>
9565 </method>
9566
9567 <method name="getRemoteConsole">
9568 <desc>Returns the console object suitable for remote control.</desc>
9569 <param name="console" type="IConsole" dir="return"/>
9570 </method>
9571
9572 <method name="assignMachine">
9573 <desc>
9574 Assigns the machine object associated with this direct-type
9575 session or informs the session that it will be a remote one
9576 (if machine = NULL).
9577 </desc>
9578 <param name="machine" type="IMachine" dir="in"/>
9579 </method>
9580
9581 <method name="assignRemoteMachine">
9582 <desc>
9583 Assigns the machine and the (remote) console object associated with
9584 this remote-type session.
9585 </desc>
9586 <param name="machine" type="IMachine" dir="in"/>
9587 <param name="console" type="IConsole" dir="in"/>
9588 </method>
9589
9590 <method name="updateMachineState">
9591 <desc>
9592 Updates the machine state in the VM process.
9593 Must be called only in certain cases
9594 (see the method implementation).
9595 </desc>
9596 <param name="aMachineState" type="MachineState" dir="in"/>
9597 </method>
9598
9599 <method name="uninitialize">
9600 <desc>
9601 Uninitializes (closes) this session. Used by VirtualBox to close
9602 the corresponding remote session when the direct session dies
9603 or gets closed.
9604 </desc>
9605 </method>
9606
9607 <method name="onDVDDriveChange">
9608 <desc>
9609 Triggered when settings of the DVD drive object of the
9610 associated virtual machine have changed.
9611 </desc>
9612 </method>
9613
9614 <method name="onFloppyDriveChange">
9615 <desc>
9616 Triggered when settings of the floppy drive object of the
9617 associated virtual machine have changed.
9618 </desc>
9619 </method>
9620
9621 <method name="onNetworkAdapterChange">
9622 <desc>
9623 Triggered when settions of a network adapter of the
9624 associated virtual machine have changed.
9625 </desc>
9626 <param name="networkAdapter" type="INetworkAdapter" dir="in"/>
9627 </method>
9628
9629 <method name="onSerialPortChange">
9630 <desc>
9631 Triggered when settions of a serial port of the
9632 associated virtual machine have changed.
9633 </desc>
9634 <param name="serialPort" type="ISerialPort" dir="in"/>
9635 </method>
9636
9637 <method name="onParallelPortChange">
9638 <desc>
9639 Triggered when settings of a parallel port of the
9640 associated virtual machine have changed.
9641 </desc>
9642 <param name="parallelPort" type="IParallelPort" dir="in"/>
9643 </method>
9644
9645 <method name="onVRDPServerChange">
9646 <desc>
9647 Triggered when settings of the VRDP server object of the
9648 associated virtual machine have changed.
9649 </desc>
9650 </method>
9651
9652 <method name="onUSBControllerChange">
9653 <desc>
9654 Triggered when settings of the USB controller object of the
9655 associated virtual machine have changed.
9656 </desc>
9657 </method>
9658
9659 <method name="onSharedFolderChange">
9660 <desc>
9661 Triggered when a permanent (global or machine) shared folder has been
9662 created or removed.
9663 <note>
9664 We don't pass shared folder parameters in this notification because
9665 the order in which parallel notifications are delivered is not defined,
9666 therefore it could happen that these parameters were outdated by the
9667 time of processing this notification.
9668 </note>
9669 </desc>
9670 <param name="global" type="boolean" dir="in"/>
9671 </method>
9672
9673 <method name="onUSBDeviceAttach">
9674 <desc>
9675 Triggered when a request to capture a USB device (as a result
9676 of matched USB filters or direct call to
9677 <link to="IConsole::attachUSBDevice"/>) has completed.
9678 A @c null @a error object means success, otherwise it
9679 describes a failure.
9680 </desc>
9681 <param name="device" type="IUSBDevice" dir="in"/>
9682 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
9683 <param name="maskedInterfaces" type="unsigned long" dir="in"/>
9684 </method>
9685
9686 <method name="onUSBDeviceDetach">
9687 <desc>
9688 Triggered when a request to release the USB device (as a result
9689 of machine termination or direct call to
9690 <link to="IConsole::detachUSBDevice"/>) has completed.
9691 A @c null @a error object means success, otherwise it
9692 </desc>
9693 <param name="id" type="uuid" dir="in"/>
9694 <param name="error" type="IVirtualBoxErrorInfo" dir="in"/>
9695 </method>
9696
9697 <method name="onShowWindow">
9698 <desc>
9699 Called by <link to="IMachine::canShowConsoleWindow()"/> and by
9700 <link to="IMachine::showConsoleWindow()"/> in order to notify
9701 console callbacks
9702 <link to="IConsoleCallback::onCanShowWindow()"/>
9703 and <link to="IConsoleCallback::onShowWindow()"/>.
9704 </desc>
9705 <param name="check" type="boolean" dir="in"/>
9706 <param name="canShow" type="boolean" dir="out"/>
9707 <param name="winId" type="unsigned long long" dir="out"/>
9708 </method>
9709
9710 </interface>
9711
9712 <interface
9713 name="ISession" extends="$dispatched"
9714 uuid="12F4DCDB-12B2-4ec1-B7CD-DDD9F6C5BF4D"
9715 wsmap="managed"
9716 >
9717 <desc>
9718 The ISession interface represents a serialization primitive for virtual
9719 machines.
9720
9721 Within VirtualBox, every time one wishes to manipulate a virtual machine
9722 (for example, change its settings or start execution), an instance of
9723 the ISession interface is required. One first creates a local session
9724 object that implements the ISession interface and then passes the
9725 created object with the method call that opens the given session and
9726 thus initiates the machine manipulation. The session serves several
9727 purposes: it identifies to the inter-process VirtualBox code which
9728 process is currently working with the virtual machine, and it ensures
9729 that there are no incompatible requests from several processes for the
9730 same virtual machine.
9731
9732 How sessions objects are used depends on whether you use the Main API
9733 via COM or via the web service:
9734
9735 <ul>
9736 <li>When using the COM API directly, an object of the Session class from the
9737 VirtualBox type library needs to be created. In regular COM C++ client code,
9738 this can be done by calling <tt>createLocalObject()</tt>, a standard COM API.
9739 This object will then act as a local session object in further calls to open
9740 a session.
9741 </li>
9742
9743 <li>In the webservice, the session manager (IWebsessionManager) instead creates
9744 one session object automatically when <link to="IWebsessionManager::logon" />
9745 is called. A managed object reference to that session object can be retrieved by
9746 calling <link to="IWebsessionManager::getSessionObject" />. This session object
9747 reference can then be used to open sessions.
9748 </li>
9749 </ul>
9750
9751 Sessions are mainly used in two variations:
9752
9753 <ul>
9754 <li>
9755 To start a virtual machine in a separate process, one would call
9756 <link to="IVirtualBox::openRemoteSession"/>, which requires a session
9757 object as its first parameter. This session then identifies the caller
9758 and lets him control the started machine (for example, pause machine
9759 execution or power it down) as well as be notified about machine
9760 execution state changes.
9761 </li>
9762
9763 <li>To alter machine settings, or to start machine execution within the
9764 current process, one needs to open a direct session for the machine first by
9765 calling <link to="IVirtualBox::openSession"/>. While a direct session
9766 is open within one process, no any other process may open another direct
9767 session for the same machine. This prevents the machine from being changed
9768 by other processes while it is running or while the machine is being configured.
9769 </li>
9770 </ul>
9771
9772 One also can attach to an existing direct session alreay opened by
9773 another process (for example, in order to send a control request to the
9774 virtual machine such as the pause or the reset request). This is done by
9775 calling <link to="IVirtualBox::openExistingSession"/>.
9776
9777 <note>
9778 Unless you are trying to write a new VirtualBox front-end that
9779 performs direct machine execution (like the VirtualBox or VBoxSDL
9780 front-ends), don't call <link to="IConsole::powerUp"/> in a direct
9781 session opened by <link to="IVirtualBox::openSession"/> and use this
9782 session only to change virtual machine settings. If you simply want to
9783 start virtual machine execution using one of the existing front-ends
9784 (for example the VirtualBox GUI or headless server), simply use
9785 <link to="IVirtualBox::openRemoteSession"/>; these front-ends
9786 will power up the machine automatically for you.
9787 </note>
9788 </desc>
9789
9790 <attribute name="state" type="SessionState" readonly="yes">
9791 <desc>Current state of this session.</desc>
9792 </attribute>
9793
9794 <attribute name="type" type="SessionType" readonly="yes">
9795 <desc>
9796 Type of this session. The value of this attribute is valid only
9797 if the session is currently open (i.e. its #state is SessionType::SessionOpen),
9798 otherwise an error will be returned.
9799 </desc>
9800 </attribute>
9801
9802 <attribute name="machine" type="IMachine" readonly="yes">
9803 <desc>Machine object associated with this session.</desc>
9804 </attribute>
9805
9806 <attribute name="console" type="IConsole" readonly="yes">
9807 <desc>Console object associated with this session.</desc>
9808 </attribute>
9809
9810 <method name="close">
9811 <desc>
9812 Closes this session.
9813 <note>
9814 If a direct session for a machine opened with
9815 <link to="IVirtualBox::openSession()"/> is not explicitly
9816 closed when the application terminates, the state of the
9817 machine will be set to <link to="MachineState::Aborted"/>
9818 on the server. Generally, it is recommended to close all
9819 open sessions explicitly before terminating the application
9820 (no matter what is the reason of the termination).
9821 </note>
9822 </desc>
9823 </method>
9824
9825 </interface>
9826
9827 <!--
9828 // ISATAController
9829 /////////////////////////////////////////////////////////////////////////
9830 -->
9831
9832 <interface
9833 name="ISATAController" extends="$unknown"
9834 uuid="9a4b868b-1376-4533-8ef5-065b8e8cedff"
9835 wsmap="managed"
9836 >
9837 <attribute name="enabled" type="boolean">
9838 <desc>
9839 Flag whether the SATA controller is present in the
9840 guest system. If disabled, the virtual guest hardware will
9841 not contain any SATA controller. Can only be changed when
9842 the VM is powered off.
9843 </desc>
9844 </attribute>
9845
9846 <attribute name="portCount" type="unsigned long">
9847 <desc>
9848 The number of usable ports on the sata controller.
9849 It ranges from 1 to 30.
9850 </desc>
9851 </attribute>
9852
9853 <method name="GetIDEEmulationPort">
9854 <desc>Gets the corresponding port number which is emulated as an IDE device.</desc>
9855 <param name="devicePosition" type="long" dir="in"/>
9856 <param name="portNumber" type="long" dir="return"/>
9857 </method>
9858
9859 <method name="SetIDEEmulationPort">
9860 <desc>Sets the port number which is emulated as an IDE device.</desc>
9861 <param name="devicePosition" type="long" dir="in"/>
9862 <param name="portNumber" type="long" dir="in"/>
9863 </method>
9864
9865 </interface>
9866
9867<if target="wsdl">
9868
9869 <!--
9870 // IManagedObjectRef
9871 /////////////////////////////////////////////////////////////////////////
9872 -->
9873
9874 <interface
9875 name="IManagedObjectRef" extends="$unknown"
9876 uuid="9474d09d-2313-46de-b568-a42b8718e8ed"
9877 internal="yes"
9878 wsmap="managed"
9879 wscpp="hardcoded"
9880 >
9881 <desc>
9882 Webservice only: Managed object reference.
9883
9884 Only within the webservice, a managed object reference (which is really
9885 an opaque number) allows a webservice client to address an object
9886 that lives in the address space of the webservice server.
9887
9888 Behind each managed object reference, there is a COM object that lives
9889 in the webservice server's address space. The COM object is not freed
9890 until the managed object reference is released, either by an explicit
9891 call to <link to="IManagedObjectRef::release" /> or by logging off from
9892 the webservice (<link to="IWebsessionManager::logoff" />), which releases
9893 all objects created during the webservice session.
9894
9895 Whenever a method call of the VirtualBox API returns a COM object, the
9896 webservice representation of that method will instead return a
9897 managed object reference, which can then be used to invoke methods
9898 on that object.
9899 </desc>
9900
9901 <method name="getInterfaceName">
9902 <desc>
9903 Returns the name of the interface that this managed object represents,
9904 for example, "IMachine", as a string.
9905 </desc>
9906 <param name="return" type="wstring" dir="return"/>
9907 </method>
9908
9909 <method name="release">
9910 <desc>
9911 Releases this managed object reference and frees the resources that
9912 were allocated for it in the webservice server process. After calling
9913 this method, the identifier of the reference can no longer be used.
9914 </desc>
9915 </method>
9916
9917 </interface>
9918
9919 <!--
9920 // IWebsessionManager
9921 /////////////////////////////////////////////////////////////////////////
9922 -->
9923
9924 <interface
9925 name="IWebsessionManager" extends="$unknown"
9926 uuid="dea1b4c7-2de3-418a-850d-7868617f7733"
9927 internal="yes"
9928 wsmap="global"
9929 wscpp="hardcoded"
9930 >
9931 <desc>
9932 Webservice only: Websession manager. This provides essential services
9933 to webservice clients.
9934 </desc>
9935 <method name="logon">
9936 <desc>
9937 Logs a new client onto the webservice and returns a managed object reference to
9938 the IVirtualBox instance, which the client can then use as a basis to further
9939 queries, since all calls to the VirtualBox API are based on the IVirtualBox
9940 interface, in one way or the other.
9941 </desc>
9942 <param name="username" type="wstring" dir="in"/>
9943 <param name="password" type="wstring" dir="in"/>
9944 <param name="return" type="wstring" dir="return"/>
9945 </method>
9946
9947 <method name="getSessionObject">
9948 <desc>
9949 Returns a managed object reference to the internal ISession object that was created
9950 for this web service session when the client logged on.
9951
9952 <see>ISession</see>
9953 </desc>
9954 <param name="refIVirtualBox" type="wstring" dir="in"/>
9955 <param name="return" type="wstring" dir="return"/>
9956 </method>
9957
9958 <method name="logoff">
9959 <desc>
9960 Logs off the client who has previously logged on with <link to="IWebsessionManager::logoff" />
9961 and destroys all resources associated with the session (most importantly, all
9962 managed objects created in the server while the session was active).
9963 </desc>
9964 <param name="refIVirtualBox" type="wstring" dir="in"/>
9965 </method>
9966
9967 </interface>
9968
9969</if>
9970
9971 <module name="VBoxSVC" context="LocalServer">
9972 <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
9973 namespace="virtualbox.org">
9974 <interface name="IVirtualBox" default="yes"/>
9975 </class>
9976 </module>
9977
9978 <module name="VBoxC" context="InprocServer" threadingModel="Free">
9979 <class name="Session" uuid="3C02F46D-C9D2-4f11-A384-53F0CF917214"
9980 namespace="virtualbox.org">
9981 <interface name="ISession" default="yes"/>
9982 </class>
9983 </module>
9984
9985</library>
9986
9987</idl>
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