VirtualBox

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

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

Main/GUI: Implemented the Stuck state.

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