VirtualBox

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

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

Main/Frontends: Changed all interface attributes and method parameters that used to use ULONG to pass pointers around; they now use BYTE * for this purpose (should fix problems for 64-bit targets).

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