VirtualBox

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

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

Main: Documentatin corrections.

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