VirtualBox

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

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

Biggest check-in ever. New source code headers for all (C) innotek files.

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