ReactOS 0.4.16-dev-1946-g52006dd
CCompartmentMgr Class Reference
Inheritance diagram for CCompartmentMgr:
Collaboration diagram for CCompartmentMgr:

Public Member Functions

 CCompartmentMgr (IUnknown *pUnkOuter=NULL)
 
virtual ~CCompartmentMgr ()
 
STDMETHODIMP QueryInterface (REFIID iid, LPVOID *ppvObj) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP GetCompartment (_In_ REFGUID rguid, _Out_ ITfCompartment **ppcomp) override
 
STDMETHODIMP ClearCompartment (_In_ TfClientId tid, _In_ REFGUID rguid) override
 
STDMETHODIMP EnumCompartments (_Out_ IEnumGUID **ppEnum) override
 
- Public Member Functions inherited from ITfCompartmentMgr
HRESULT GetCompartment ([in] REFGUID rguid, [out] ITfCompartment **ppcomp)
 
HRESULT ClearCompartment ([in] TfClientId tid, [in] REFGUID rguid)
 
HRESULT EnumCompartments ([out] IEnumGUID **ppEnum)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Static Public Member Functions

static HRESULT CreateInstance (IUnknown *pUnkOuter, REFIID riid, IUnknown **ppOut)
 

Protected Attributes

LONG m_cRefs
 
IUnknownm_pUnkOuter
 
struct list m_values
 

Additional Inherited Members

- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 

Detailed Description

Definition at line 26 of file compartmentmgr.cpp.

Constructor & Destructor Documentation

◆ CCompartmentMgr()

CCompartmentMgr::CCompartmentMgr ( IUnknown pUnkOuter = NULL)

Definition at line 120 of file compartmentmgr.cpp.

121 : m_cRefs(1)
122 , m_pUnkOuter(pUnkOuter)
123{
125}
static void list_init(struct list_entry *head)
Definition: list.h:51
IUnknown * m_pUnkOuter
struct list m_values

◆ ~CCompartmentMgr()

CCompartmentMgr::~CCompartmentMgr ( )
virtual

Definition at line 127 of file compartmentmgr.cpp.

128{
129 struct list *cursor, *cursor2;
130
132 {
135 value->compartment->Release();
137 }
138}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:20
Definition: list.h:37
const char cursor[]
Definition: icontest.c:13
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_SAFE(cursor, cursor2, list)
Definition: list.h:192
#define LIST_ENTRY(type)
Definition: queue.h:175
Definition: pdh_main.c:96

Member Function Documentation

◆ ClearCompartment()

HRESULT CCompartmentMgr::ClearCompartment ( _In_ TfClientId  tid,
_In_ REFGUID  rguid 
)
override

Definition at line 248 of file compartmentmgr.cpp.

249{
250 struct list *cursor;
251
252 TRACE("(%p) %i %s\n", this, tid, debugstr_guid(&rguid));
253
255 {
257 if (rguid == value->guid)
258 {
259 if (value->owner && tid != value->owner)
260 return E_UNEXPECTED;
262 value->compartment->Release();
264 return S_OK;
265 }
266 }
267
269}
static TfClientId tid
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define CONNECT_E_NOCONNECTION
Definition: olectl.h:251
#define LIST_FOR_EACH(cursor, list)
Definition: list.h:188
#define TRACE(s)
Definition: solgame.cpp:4
#define E_UNEXPECTED
Definition: winerror.h:3528

◆ CreateInstance()

HRESULT CCompartmentMgr::CreateInstance ( IUnknown pUnkOuter,
REFIID  riid,
IUnknown **  ppOut 
)
static

Definition at line 140 of file compartmentmgr.cpp.

141{
142 if (!ppOut)
143 return E_POINTER;
144
145 if (pUnkOuter && riid != IID_IUnknown)
147
149 if (!This)
150 return E_OUTOFMEMORY;
151
152 if (pUnkOuter)
153 {
154 *ppOut = static_cast<ITfCompartmentMgr *>(This);
155 TRACE("returning %p\n", *ppOut);
156 return S_OK;
157 }
158 else
159 {
160 HRESULT hr;
161 hr = This->QueryInterface(riid, (void **)ppOut);
162 if (FAILED(hr))
163 delete This;
164 return hr;
165 }
166}
const GUID IID_IUnknown
#define cicNoThrow
Definition: cicbase.h:46
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
REFIID riid
Definition: atlbase.h:39
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hr
Definition: shlfolder.c:183
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480

Referenced by CompartmentMgr_Constructor().

◆ EnumCompartments()

HRESULT CCompartmentMgr::EnumCompartments ( _Out_ IEnumGUID **  ppEnum)
override

Definition at line 271 of file compartmentmgr.cpp.

272{
273 TRACE("(%p) %p\n", this, ppEnum);
274 if (!ppEnum)
275 return E_INVALIDARG;
276
278}
static HRESULT CreateInstance(struct list *values, IEnumGUID **ppOut)
#define E_INVALIDARG
Definition: ddrawi.h:101

◆ GetCompartment()

HRESULT CCompartmentMgr::GetCompartment ( _In_ REFGUID  rguid,
_Out_ ITfCompartment **  ppcomp 
)
override

Definition at line 205 of file compartmentmgr.cpp.

206{
207 if (!ppcomp)
208 return E_POINTER;
210 struct list *cursor;
211 HRESULT hr;
212
213 TRACE("(%p) %s %p\n", this, debugstr_guid(&rguid), ppcomp);
214
216 {
218 if (rguid == value->guid)
219 {
220 value->compartment->AddRef();
221 *ppcomp = value->compartment;
222 return S_OK;
223 }
224 }
225
227 if (!value)
228 return E_OUTOFMEMORY;
229
230 value->guid = rguid;
231 value->owner = 0;
232 hr = CCompartment::CreateInstance(value, &value->compartment);
233 if (SUCCEEDED(hr))
234 {
235 list_add_head(&m_values, &value->entry);
236 value->compartment->AddRef();
237 *ppcomp = value->compartment;
238 }
239 else
240 {
242 *ppcomp = NULL;
243 }
244
245 return hr;
246}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static LPVOID cicMemAlloc(SIZE_T size)
Definition: cicbase.h:10
static HRESULT CreateInstance(CompartmentValue *valueData, ITfCompartment **ppOut)
#define NULL
Definition: types.h:112
#define SUCCEEDED(hr)
Definition: intsafe.h:50

◆ QueryInterface()

STDMETHODIMP CCompartmentMgr::QueryInterface ( REFIID  iid,
LPVOID ppvObj 
)
override

Definition at line 168 of file compartmentmgr.cpp.

169{
170 if (m_pUnkOuter)
171 return m_pUnkOuter->QueryInterface(iid, ppvOut);
172
173 *ppvOut = NULL;
174
175 if (iid == IID_IUnknown || iid == IID_ITfCompartmentMgr)
176 *ppvOut = static_cast<ITfCompartmentMgr *>(this);
177
178 if (*ppvOut)
179 {
180 AddRef();
181 return S_OK;
182 }
183
184 WARN("unsupported interface: %s\n", debugstr_guid(&iid));
185 return E_NOINTERFACE;
186}
#define WARN(fmt,...)
Definition: precomp.h:61
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ STDMETHODIMP_() [1/2]

CCompartmentMgr::STDMETHODIMP_ ( ULONG  )
override

◆ STDMETHODIMP_() [2/2]

CCompartmentMgr::STDMETHODIMP_ ( ULONG  )
override

Member Data Documentation

◆ m_cRefs

LONG CCompartmentMgr::m_cRefs
protected

Definition at line 46 of file compartmentmgr.cpp.

Referenced by STDMETHODIMP_().

◆ m_pUnkOuter

IUnknown* CCompartmentMgr::m_pUnkOuter
protected

Definition at line 47 of file compartmentmgr.cpp.

Referenced by QueryInterface(), and STDMETHODIMP_().

◆ m_values

struct list CCompartmentMgr::m_values
protected

The documentation for this class was generated from the following file: