VirtualBox

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

Last change on this file since 4097 was 4097, checked in by vboxsync, 18 years ago

Main, Installer:

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

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette