VirtualBox

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

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

Main: Reworked enums to avoid 1) weird duplication of enum name when referring to enum values in cross-platform code; 2) possible clashes on Win32 due to putting identifiers like Paused or Disabled to the global namespace (via C enums). In the new style, enums are used like this: a) USBDeviceState_T v = USBDeviceState_Busy from cross-platform non-Qt code; b) KUSBDeviceState v = KUSBDeviceState_Busy from Qt code; c) USBDeviceState v = USBDeviceState_Busy from plain Win32 and d) PRUInt32 USBDeviceState v = USBDeviceState::Busy from plain XPCOM.

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