VirtualBox

source: vbox/trunk/src/VBox/Main/include/SnapshotImpl.h@ 55437

Last change on this file since 55437 was 54948, checked in by vboxsync, 10 years ago

Main/Medium+Snapshot: make all code recursing over trees (objects containing lists of child objects) use as little stack as possible, and establish safe depth limits to avoid crashes, plus related cleanups in related code areas

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1/* $Id: SnapshotImpl.h 54948 2015-03-25 16:56:48Z vboxsync $ */
2/** @file
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2015 Oracle Corporation
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
18#ifndef ____H_SNAPSHOTIMPL
19#define ____H_SNAPSHOTIMPL
20
21#include "SnapshotWrap.h"
22
23class SnapshotMachine;
24
25namespace settings
26{
27 struct Snapshot;
28}
29
30class ATL_NO_VTABLE Snapshot :
31 public SnapshotWrap
32{
33public:
34 DECLARE_EMPTY_CTOR_DTOR(Snapshot)
35
36 HRESULT FinalConstruct();
37 void FinalRelease();
38
39 // public initializer/uninitializer only for internal purposes
40 HRESULT init(VirtualBox *aVirtualBox,
41 const Guid &aId,
42 const Utf8Str &aName,
43 const Utf8Str &aDescription,
44 const RTTIMESPEC &aTimeStamp,
45 SnapshotMachine *aMachine,
46 Snapshot *aParent);
47 void uninit();
48
49 void i_beginSnapshotDelete();
50
51 void i_deparent();
52
53 // public methods only for internal purposes
54
55 /**
56 * Override of the default locking class to be used for validating lock
57 * order with the standard member lock handle.
58 */
59 virtual VBoxLockingClass getLockingClass() const
60 {
61 return LOCKCLASS_SNAPSHOTOBJECT;
62 }
63
64 const ComObjPtr<Snapshot>& i_getParent() const;
65 const ComObjPtr<Snapshot> i_getFirstChild() const;
66
67 const Utf8Str& i_getStateFilePath() const;
68
69 uint32_t i_getDepth();
70
71 ULONG i_getChildrenCount();
72 ULONG i_getAllChildrenCount();
73 ULONG i_getAllChildrenCountImpl();
74
75 const ComObjPtr<SnapshotMachine>& i_getSnapshotMachine() const;
76
77 Guid i_getId() const;
78 const Utf8Str& i_getName() const;
79 RTTIMESPEC i_getTimeStamp() const;
80
81 ComObjPtr<Snapshot> i_findChildOrSelf(IN_GUID aId);
82 ComObjPtr<Snapshot> i_findChildOrSelf(const Utf8Str &aName);
83
84 void i_updateSavedStatePaths(const Utf8Str &strOldPath,
85 const Utf8Str &strNewPath);
86 void i_updateSavedStatePathsImpl(const Utf8Str &strOldPath,
87 const Utf8Str &strNewPath);
88
89 bool i_sharesSavedStateFile(const Utf8Str &strPath,
90 Snapshot *pSnapshotToIgnore);
91
92 HRESULT i_saveSnapshot(settings::Snapshot &data) const;
93 HRESULT i_saveSnapshotImpl(settings::Snapshot &data) const;
94 HRESULT i_saveSnapshotImplOne(settings::Snapshot &data) const;
95
96 HRESULT i_uninitOne(AutoWriteLock &writeLock,
97 CleanupMode_T cleanupMode,
98 MediaList &llMedia,
99 std::list<Utf8Str> &llFilenames);
100 HRESULT i_uninitRecursively(AutoWriteLock &writeLock,
101 CleanupMode_T cleanupMode,
102 MediaList &llMedia,
103 std::list<Utf8Str> &llFilenames);
104
105
106private:
107
108 struct Data; // opaque, defined in SnapshotImpl.cpp
109
110 // wrapped ISnapshot properties
111 HRESULT getId(com::Guid &aId);
112 HRESULT getName(com::Utf8Str &aName);
113 HRESULT setName(const com::Utf8Str &aName);
114 HRESULT getDescription(com::Utf8Str &aDescription);
115 HRESULT setDescription(const com::Utf8Str &aDescription);
116 HRESULT getTimeStamp(LONG64 *aTimeStamp);
117 HRESULT getOnline(BOOL *aOnline);
118 HRESULT getMachine(ComPtr<IMachine> &aMachine);
119 HRESULT getParent(ComPtr<ISnapshot> &aParent);
120 HRESULT getChildren(std::vector<ComPtr<ISnapshot> > &aChildren);
121
122 // wrapped ISnapshot methods
123 HRESULT getChildrenCount(ULONG *aChildrenCount);
124
125 Data *m;
126};
127
128#endif // ____H_SNAPSHOTIMPL
129
130/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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