VirtualBox

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

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

Added new type of network device 'e1000'. Define VBOX_WITH_E1000 to activate.

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