VirtualBox

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

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

preliminary system time offset implementation

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

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