VirtualBox

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

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

implemented LogHistoryCount system property (Main+VBoxManage)

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