VirtualBox

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

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

Main, VBoxManage: add setting for webservice authentication library (which can be NULL to disable authentication)

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