VirtualBox

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

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

Main: Implemented IConsole::AdoptSavedState(); Prototyped IVirtualBox::WaitForPropertyChange().

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