VirtualBox

source: vbox/trunk/src/VBox/Main/SystemPropertiesImpl.cpp@ 12978

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

The Big Sun Rebranding Header Change

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.5 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#include "SystemPropertiesImpl.h"
23#include "VirtualBoxImpl.h"
24#include "MachineImpl.h"
25#include "Logging.h"
26
27// generated header
28#include "SchemaDefs.h"
29
30#include <iprt/path.h>
31#include <iprt/dir.h>
32#include <VBox/param.h>
33#include <VBox/err.h>
34
35// defines
36/////////////////////////////////////////////////////////////////////////////
37
38// constructor / destructor
39/////////////////////////////////////////////////////////////////////////////
40
41HRESULT SystemProperties::FinalConstruct()
42{
43 return S_OK;
44}
45
46void SystemProperties::FinalRelease()
47{
48 if (isReady())
49 uninit ();
50}
51
52// public methods only for internal purposes
53/////////////////////////////////////////////////////////////////////////////
54
55/**
56 * Initializes the system information object.
57 *
58 * @returns COM result indicator
59 */
60HRESULT SystemProperties::init (VirtualBox *aParent)
61{
62 LogFlowMember (("SystemProperties::init()\n"));
63
64 ComAssertRet (aParent, E_FAIL);
65
66 AutoWriteLock alock (this);
67 ComAssertRet (!isReady(), E_UNEXPECTED);
68
69 mParent = aParent;
70
71 setDefaultVDIFolder (NULL);
72 setDefaultMachineFolder (NULL);
73 setRemoteDisplayAuthLibrary (NULL);
74
75 mHWVirtExEnabled = false;
76 mLogHistoryCount = 3;
77
78 setReady(true);
79 return S_OK;
80}
81
82/**
83 * Uninitializes the instance and sets the ready flag to FALSE.
84 * Called either from FinalRelease() or by the parent when it gets destroyed.
85 */
86void SystemProperties::uninit()
87{
88 LogFlowMember (("SystemProperties::uninit()\n"));
89
90 AutoWriteLock alock (this);
91 AssertReturn (isReady(), (void) 0);
92
93 setReady (false);
94}
95
96// ISystemProperties properties
97/////////////////////////////////////////////////////////////////////////////
98
99
100STDMETHODIMP SystemProperties::COMGETTER(MinGuestRAM)(ULONG *minRAM)
101{
102 if (!minRAM)
103 return E_POINTER;
104 AutoWriteLock alock (this);
105 CHECK_READY();
106
107 *minRAM = SchemaDefs::MinGuestRAM;
108
109 return S_OK;
110}
111
112STDMETHODIMP SystemProperties::COMGETTER(MaxGuestRAM)(ULONG *maxRAM)
113{
114 if (!maxRAM)
115 return E_POINTER;
116 AutoWriteLock alock (this);
117 CHECK_READY();
118
119 *maxRAM = SchemaDefs::MaxGuestRAM;
120
121 return S_OK;
122}
123
124STDMETHODIMP SystemProperties::COMGETTER(MinGuestVRAM)(ULONG *minVRAM)
125{
126 if (!minVRAM)
127 return E_POINTER;
128 AutoWriteLock alock (this);
129 CHECK_READY();
130
131 *minVRAM = SchemaDefs::MinGuestVRAM;
132
133 return S_OK;
134}
135
136STDMETHODIMP SystemProperties::COMGETTER(MaxGuestVRAM)(ULONG *maxVRAM)
137{
138 if (!maxVRAM)
139 return E_POINTER;
140 AutoWriteLock alock (this);
141 CHECK_READY();
142
143 *maxVRAM = SchemaDefs::MaxGuestVRAM;
144
145 return S_OK;
146}
147
148STDMETHODIMP SystemProperties::COMGETTER(MaxGuestMonitors)(ULONG *maxMonitors)
149{
150 if (!maxMonitors)
151 return E_POINTER;
152 AutoWriteLock alock (this);
153 CHECK_READY();
154
155 *maxMonitors = SchemaDefs::MaxGuestMonitors;
156
157 return S_OK;
158}
159
160STDMETHODIMP SystemProperties::COMGETTER(MaxVDISize)(ULONG64 *maxVDISize)
161{
162 if (!maxVDISize)
163 return E_POINTER;
164 AutoWriteLock alock (this);
165 CHECK_READY();
166
167 /** The BIOS supports currently 32 bit LBA numbers (implementing the full
168 * 48 bit range is in theory trivial, but the crappy compiler makes things
169 * more difficult). This translates to almost 2 TBytes (to be on the safe
170 * side, the reported limit is 1 MiByte less than that, as the total number
171 * of sectors should fit in 32 bits, too), which should bei enough for
172 * the moment. The virtual ATA disks support complete LBA48 (although for
173 * example iSCSI is also currently limited to 32 bit LBA), so the
174 * theoretical maximum disk size is 128 PiByte. The user interface cannot
175 * cope with this in a reasonable way yet. */
176 *maxVDISize = 2048 * 1024 - 1;
177
178 return S_OK;
179}
180
181STDMETHODIMP SystemProperties::COMGETTER(NetworkAdapterCount)(ULONG *count)
182{
183 if (!count)
184 return E_POINTER;
185 AutoWriteLock alock (this);
186 CHECK_READY();
187
188 *count = SchemaDefs::NetworkAdapterCount;
189
190 return S_OK;
191}
192
193STDMETHODIMP SystemProperties::COMGETTER(SerialPortCount)(ULONG *count)
194{
195 if (!count)
196 return E_POINTER;
197 AutoWriteLock alock (this);
198 CHECK_READY();
199
200 *count = SchemaDefs::SerialPortCount;
201
202 return S_OK;
203}
204
205STDMETHODIMP SystemProperties::COMGETTER(ParallelPortCount)(ULONG *count)
206{
207 if (!count)
208 return E_POINTER;
209 AutoWriteLock alock (this);
210 CHECK_READY();
211
212 *count = SchemaDefs::ParallelPortCount;
213
214 return S_OK;
215}
216
217STDMETHODIMP SystemProperties::COMGETTER(MaxBootPosition)(ULONG *aMaxBootPosition)
218{
219 if (!aMaxBootPosition)
220 return E_POINTER;
221 AutoWriteLock alock (this);
222 CHECK_READY();
223
224 *aMaxBootPosition = SchemaDefs::MaxBootPosition;
225
226 return S_OK;
227}
228
229STDMETHODIMP SystemProperties::COMGETTER(DefaultVDIFolder) (BSTR *aDefaultVDIFolder)
230{
231 if (!aDefaultVDIFolder)
232 return E_POINTER;
233
234 AutoWriteLock alock (this);
235 CHECK_READY();
236
237 mDefaultVDIFolderFull.cloneTo (aDefaultVDIFolder);
238
239 return S_OK;
240}
241
242STDMETHODIMP SystemProperties::COMSETTER(DefaultVDIFolder) (INPTR BSTR aDefaultVDIFolder)
243{
244 AutoWriteLock alock (this);
245 CHECK_READY();
246
247 HRESULT rc = setDefaultVDIFolder (aDefaultVDIFolder);
248 if (FAILED (rc))
249 return rc;
250
251 alock.unlock();
252 return mParent->saveSettings();
253}
254
255STDMETHODIMP SystemProperties::COMGETTER(DefaultMachineFolder) (BSTR *aDefaultMachineFolder)
256{
257 if (!aDefaultMachineFolder)
258 return E_POINTER;
259
260 AutoWriteLock alock (this);
261 CHECK_READY();
262
263 mDefaultMachineFolderFull.cloneTo (aDefaultMachineFolder);
264
265 return S_OK;
266}
267
268STDMETHODIMP SystemProperties::COMSETTER(DefaultMachineFolder) (INPTR BSTR aDefaultMachineFolder)
269{
270 AutoWriteLock alock (this);
271 CHECK_READY();
272
273 HRESULT rc = setDefaultMachineFolder (aDefaultMachineFolder);
274 if (FAILED (rc))
275 return rc;
276
277 alock.unlock();
278 return mParent->saveSettings();
279}
280
281STDMETHODIMP SystemProperties::COMGETTER(RemoteDisplayAuthLibrary) (BSTR *aRemoteDisplayAuthLibrary)
282{
283 if (!aRemoteDisplayAuthLibrary)
284 return E_POINTER;
285
286 AutoWriteLock alock (this);
287 CHECK_READY();
288
289 mRemoteDisplayAuthLibrary.cloneTo (aRemoteDisplayAuthLibrary);
290
291 return S_OK;
292}
293
294STDMETHODIMP SystemProperties::COMSETTER(RemoteDisplayAuthLibrary) (INPTR BSTR aRemoteDisplayAuthLibrary)
295{
296 AutoWriteLock alock (this);
297 CHECK_READY();
298
299 HRESULT rc = setRemoteDisplayAuthLibrary (aRemoteDisplayAuthLibrary);
300 if (FAILED (rc))
301 return rc;
302
303 alock.unlock();
304 return mParent->saveSettings();
305}
306
307STDMETHODIMP SystemProperties::COMGETTER(WebServiceAuthLibrary) (BSTR *aWebServiceAuthLibrary)
308{
309 if (!aWebServiceAuthLibrary)
310 return E_POINTER;
311
312 AutoWriteLock alock (this);
313 CHECK_READY();
314
315 mWebServiceAuthLibrary.cloneTo (aWebServiceAuthLibrary);
316
317 return S_OK;
318}
319
320STDMETHODIMP SystemProperties::COMSETTER(WebServiceAuthLibrary) (INPTR BSTR aWebServiceAuthLibrary)
321{
322 AutoWriteLock alock (this);
323 CHECK_READY();
324
325 HRESULT rc = setWebServiceAuthLibrary (aWebServiceAuthLibrary);
326 if (FAILED (rc))
327 return rc;
328
329 alock.unlock();
330 return mParent->saveSettings();
331}
332
333STDMETHODIMP SystemProperties::COMGETTER(HWVirtExEnabled) (BOOL *enabled)
334{
335 if (!enabled)
336 return E_POINTER;
337
338 AutoWriteLock alock (this);
339 CHECK_READY();
340
341 *enabled = mHWVirtExEnabled;
342
343 return S_OK;
344}
345
346STDMETHODIMP SystemProperties::COMSETTER(HWVirtExEnabled) (BOOL enabled)
347{
348 AutoWriteLock alock (this);
349 CHECK_READY();
350
351 mHWVirtExEnabled = enabled;
352
353 alock.unlock();
354 return mParent->saveSettings();
355}
356
357STDMETHODIMP SystemProperties::COMGETTER(LogHistoryCount) (ULONG *count)
358{
359 if (!count)
360 return E_POINTER;
361
362 AutoWriteLock alock (this);
363 CHECK_READY();
364
365 *count = mLogHistoryCount;
366
367 return S_OK;
368}
369
370STDMETHODIMP SystemProperties::COMSETTER(LogHistoryCount) (ULONG count)
371{
372 AutoWriteLock alock (this);
373 CHECK_READY();
374
375 mLogHistoryCount = count;
376
377 alock.unlock();
378 return mParent->saveSettings();
379}
380
381// public methods only for internal purposes
382/////////////////////////////////////////////////////////////////////////////
383
384HRESULT SystemProperties::loadSettings (const settings::Key &aGlobal)
385{
386 using namespace settings;
387
388 AutoWriteLock alock (this);
389 CHECK_READY();
390
391 AssertReturn (!aGlobal.isNull(), E_FAIL);
392
393 HRESULT rc = S_OK;
394
395 Key properties = aGlobal.key ("SystemProperties");
396
397 Bstr bstr;
398
399 bstr = properties.stringValue ("defaultVDIFolder");
400 rc = setDefaultVDIFolder (bstr);
401 CheckComRCReturnRC (rc);
402
403 bstr = properties.stringValue ("defaultMachineFolder");
404 rc = setDefaultMachineFolder (bstr);
405 CheckComRCReturnRC (rc);
406
407 bstr = properties.stringValue ("remoteDisplayAuthLibrary");
408 rc = setRemoteDisplayAuthLibrary (bstr);
409 CheckComRCReturnRC (rc);
410
411 bstr = properties.stringValue ("webServiceAuthLibrary");
412 rc = setWebServiceAuthLibrary (bstr);
413 CheckComRCReturnRC (rc);
414
415 /* Note: not <BOOL> because Win32 defines BOOL as int */
416 mHWVirtExEnabled = properties.valueOr <bool> ("HWVirtExEnabled", false);
417
418 mLogHistoryCount = properties.valueOr <ULONG> ("LogHistoryCount", 3);
419
420 return S_OK;
421}
422
423HRESULT SystemProperties::saveSettings (settings::Key &aGlobal)
424{
425 using namespace settings;
426
427 AutoWriteLock alock (this);
428 CHECK_READY();
429
430 ComAssertRet (!aGlobal.isNull(), E_FAIL);
431
432 /* first, delete the entry */
433 Key properties = aGlobal.findKey ("SystemProperties");
434 if (!properties.isNull())
435 properties.zap();
436 /* then, recreate it */
437 properties = aGlobal.createKey ("SystemProperties");
438
439 if (mDefaultVDIFolder)
440 properties.setValue <Bstr> ("defaultVDIFolder", mDefaultVDIFolder);
441
442 if (mDefaultMachineFolder)
443 properties.setValue <Bstr> ("defaultMachineFolder", mDefaultMachineFolder);
444
445 if (mRemoteDisplayAuthLibrary)
446 properties.setValue <Bstr> ("remoteDisplayAuthLibrary", mRemoteDisplayAuthLibrary);
447
448 if (mWebServiceAuthLibrary)
449 properties.setValue <Bstr> ("webServiceAuthLibrary", mWebServiceAuthLibrary);
450
451 properties.setValue <bool> ("HWVirtExEnabled", !!mHWVirtExEnabled);
452
453 properties.setValue <ULONG> ("LogHistoryCount", mLogHistoryCount);
454
455 return S_OK;
456}
457
458// private methods
459/////////////////////////////////////////////////////////////////////////////
460
461HRESULT SystemProperties::setDefaultVDIFolder (const BSTR aPath)
462{
463 Utf8Str path;
464 if (aPath && *aPath)
465 path = aPath;
466 else
467 path = "VDI";
468
469 // get the full file name
470 char folder [RTPATH_MAX];
471 int vrc = RTPathAbsEx (mParent->homeDir(), path, folder, sizeof (folder));
472 if (VBOX_FAILURE (vrc))
473 return setError (E_FAIL,
474 tr ("Cannot set the default VDI folder to '%ls' (%Vrc)"),
475 path.raw(), vrc);
476
477 mDefaultVDIFolder = path;
478 mDefaultVDIFolderFull = folder;
479
480 return S_OK;
481}
482
483HRESULT SystemProperties::setDefaultMachineFolder (const BSTR aPath)
484{
485 Utf8Str path;
486 if (aPath && *aPath)
487 path = aPath;
488 else
489 path = "Machines";
490
491 // get the full file name
492 char folder [RTPATH_MAX];
493 int vrc = RTPathAbsEx (mParent->homeDir(), path, folder, sizeof (folder));
494 if (VBOX_FAILURE (vrc))
495 return setError (E_FAIL,
496 tr ("Cannot set the default machines folder to '%ls' (%Vrc)"),
497 path.raw(), vrc);
498
499 mDefaultMachineFolder = path;
500 mDefaultMachineFolderFull = folder;
501
502 return S_OK;
503}
504
505HRESULT SystemProperties::setRemoteDisplayAuthLibrary (const BSTR aPath)
506{
507 Utf8Str path;
508 if (aPath && *aPath)
509 path = aPath;
510 else
511 path = "VRDPAuth";
512
513 mRemoteDisplayAuthLibrary = path;
514
515 return S_OK;
516}
517
518HRESULT SystemProperties::setWebServiceAuthLibrary (const BSTR aPath)
519{
520 Utf8Str path;
521 if (aPath && *aPath)
522 path = aPath;
523 else
524 path = "VRDPAuth";
525
526 mWebServiceAuthLibrary = path;
527
528 return S_OK;
529}
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