VirtualBox

source: vbox/trunk/src/VBox/Main/include/SharedFolderImpl.h@ 5528

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

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

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
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 as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ____H_SHAREDFOLDERIMPL
19#define ____H_SHAREDFOLDERIMPL
20
21#include "VirtualBoxBase.h"
22#include "Collection.h"
23#include <VBox/shflsvc.h>
24
25class Machine;
26class Console;
27class VirtualBox;
28
29class ATL_NO_VTABLE SharedFolder :
30 public VirtualBoxBaseNEXT,
31 public VirtualBoxSupportErrorInfoImpl <SharedFolder, ISharedFolder>,
32 public VirtualBoxSupportTranslation <SharedFolder>,
33 public ISharedFolder
34{
35public:
36
37 struct Data
38 {
39 Data() {}
40
41 const Bstr mName;
42 const Bstr mHostPath;
43 };
44
45 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (SharedFolder)
46
47 DECLARE_NOT_AGGREGATABLE(SharedFolder)
48
49 DECLARE_PROTECT_FINAL_CONSTRUCT()
50
51 BEGIN_COM_MAP(SharedFolder)
52 COM_INTERFACE_ENTRY(ISupportErrorInfo)
53 COM_INTERFACE_ENTRY(ISharedFolder)
54 END_COM_MAP()
55
56 NS_DECL_ISUPPORTS
57
58 DECLARE_EMPTY_CTOR_DTOR (SharedFolder)
59
60 HRESULT FinalConstruct();
61 void FinalRelease();
62
63 // public initializer/uninitializer for internal purposes only
64 HRESULT init (Machine *aMachine, const BSTR aName, const BSTR aHostPath);
65 HRESULT initCopy (Machine *aMachine, SharedFolder *aThat);
66 HRESULT init (Console *aConsole, const BSTR aName, const BSTR aHostPath);
67 HRESULT init (VirtualBox *aVirtualBox, const BSTR aName, const BSTR aHostPath);
68 void uninit();
69
70 // ISharedFolder properties
71 STDMETHOD(COMGETTER(Name)) (BSTR *aName);
72 STDMETHOD(COMGETTER(HostPath)) (BSTR *aHostPath);
73 STDMETHOD(COMGETTER(Accessible)) (BOOL *aAccessible);
74
75 // public methods for internal purposes only
76 // (ensure there is a caller and a read lock before calling them!)
77
78 // public methods that don't need a lock (because access constant data)
79 // (ensure there is a caller added before calling them!)
80
81 const Bstr &name() const { return mData.mName; }
82 const Bstr &hostPath() const { return mData.mHostPath; }
83
84 // for VirtualBoxSupportErrorInfoImpl
85 static const wchar_t *getComponentName() { return L"SharedFolder"; }
86
87protected:
88
89 HRESULT protectedInit (VirtualBoxBaseWithChildrenNEXT *aParent,
90 const BSTR aName, const BSTR aHostPath);
91
92private:
93
94 VirtualBoxBaseWithChildrenNEXT *const mParent;
95
96 /* weak parents (only one of them is not null) */
97 const ComObjPtr <Machine, ComWeakRef> mMachine;
98 const ComObjPtr <Console, ComWeakRef> mConsole;
99 const ComObjPtr <VirtualBox, ComWeakRef> mVirtualBox;
100
101 Data mData;
102};
103
104COM_DECL_READONLY_ENUM_AND_COLLECTION_BEGIN (SharedFolder)
105
106 STDMETHOD(FindByName) (INPTR BSTR aName, ISharedFolder **aSharedFolder)
107 {
108 if (!aName)
109 return E_INVALIDARG;
110 if (!aSharedFolder)
111 return E_POINTER;
112
113 *aSharedFolder = NULL;
114 Vector::value_type found;
115 Vector::iterator it = vec.begin();
116 while (it != vec.end() && !found)
117 {
118 Bstr name;
119 (*it)->COMGETTER(Name) (name.asOutParam());
120 if (name == aName)
121 found = *it;
122 ++ it;
123 }
124
125 if (!found)
126 return setError (E_INVALIDARG, SharedFolderCollection::tr (
127 "Could not find the shared folder '%ls'"), aName);
128
129 return found.queryInterfaceTo (aSharedFolder);
130 }
131
132COM_DECL_READONLY_ENUM_AND_COLLECTION_END (SharedFolder)
133
134#endif // ____H_SHAREDFOLDERIMPL
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