2 * Copyright 2012 Hans Leidekker for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 #include "wine/debug.h"
30 #include "wbemprox_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
34 struct enum_class_object
36 IEnumWbemClassObject IEnumWbemClassObject_iface;
41 static inline struct enum_class_object *impl_from_IEnumWbemClassObject(
42 IEnumWbemClassObject *iface )
44 return CONTAINING_RECORD(iface, struct enum_class_object, IEnumWbemClassObject_iface);
47 static ULONG WINAPI enum_class_object_AddRef(
48 IEnumWbemClassObject *iface )
50 struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
51 return InterlockedIncrement( &ec->refs );
54 static ULONG WINAPI enum_class_object_Release(
55 IEnumWbemClassObject *iface )
57 struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
58 LONG refs = InterlockedDecrement( &ec->refs );
61 TRACE("destroying %p\n", ec);
62 free_query( ec->query );
68 static HRESULT WINAPI enum_class_object_QueryInterface(
69 IEnumWbemClassObject *iface,
73 struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
75 TRACE("%p, %s, %p\n", ec, debugstr_guid( riid ), ppvObject );
77 if ( IsEqualGUID( riid, &IID_IEnumWbemClassObject ) ||
78 IsEqualGUID( riid, &IID_IUnknown ) )
84 FIXME("interface %s not implemented\n", debugstr_guid(riid));
87 IEnumWbemClassObject_AddRef( iface );
91 static HRESULT WINAPI enum_class_object_Reset(
92 IEnumWbemClassObject *iface )
98 static HRESULT WINAPI enum_class_object_Next(
99 IEnumWbemClassObject *iface,
102 IWbemClassObject **apObjects,
105 FIXME("%p, %d, %u, %p, %p\n", iface, lTimeout, uCount, apObjects, puReturned);
109 static HRESULT WINAPI enum_class_object_NextAsync(
110 IEnumWbemClassObject *iface,
112 IWbemObjectSink *pSink )
114 FIXME("%p, %u, %p\n", iface, uCount, pSink);
118 static HRESULT WINAPI enum_class_object_Clone(
119 IEnumWbemClassObject *iface,
120 IEnumWbemClassObject **ppEnum )
122 FIXME("%p, %p\n", iface, ppEnum);
126 static HRESULT WINAPI enum_class_object_Skip(
127 IEnumWbemClassObject *iface,
131 FIXME("%p, %d, %u\n", iface, lTimeout, nCount);
135 static const IEnumWbemClassObjectVtbl enum_class_object_vtbl =
137 enum_class_object_QueryInterface,
138 enum_class_object_AddRef,
139 enum_class_object_Release,
140 enum_class_object_Reset,
141 enum_class_object_Next,
142 enum_class_object_NextAsync,
143 enum_class_object_Clone,
144 enum_class_object_Skip
147 HRESULT EnumWbemClassObject_create(
148 IUnknown *pUnkOuter, struct query *query, LPVOID *ppObj )
150 struct enum_class_object *ec;
152 TRACE("%p, %p\n", pUnkOuter, ppObj);
154 ec = heap_alloc( sizeof(*ec) );
155 if (!ec) return E_OUTOFMEMORY;
157 ec->IEnumWbemClassObject_iface.lpVtbl = &enum_class_object_vtbl;
161 *ppObj = &ec->IEnumWbemClassObject_iface;
163 TRACE("returning iface %p\n", *ppObj);
169 IWbemClassObject IWbemClassObject_iface;
173 static inline struct class_object *impl_from_IWbemClassObject(
174 IWbemClassObject *iface )
176 return CONTAINING_RECORD(iface, struct class_object, IWbemClassObject_iface);
179 static ULONG WINAPI class_object_AddRef(
180 IWbemClassObject *iface )
182 struct class_object *co = impl_from_IWbemClassObject( iface );
183 return InterlockedIncrement( &co->refs );
186 static ULONG WINAPI class_object_Release(
187 IWbemClassObject *iface )
189 struct class_object *co = impl_from_IWbemClassObject( iface );
190 LONG refs = InterlockedDecrement( &co->refs );
193 TRACE("destroying %p\n", co);
199 static HRESULT WINAPI class_object_QueryInterface(
200 IWbemClassObject *iface,
204 struct class_object *co = impl_from_IWbemClassObject( iface );
206 TRACE("%p, %s, %p\n", co, debugstr_guid( riid ), ppvObject );
208 if ( IsEqualGUID( riid, &IID_IWbemClassObject ) ||
209 IsEqualGUID( riid, &IID_IUnknown ) )
215 FIXME("interface %s not implemented\n", debugstr_guid(riid));
216 return E_NOINTERFACE;
218 IWbemClassObject_AddRef( iface );
222 static HRESULT WINAPI class_object_GetQualifierSet(
223 IWbemClassObject *iface,
224 IWbemQualifierSet **ppQualSet )
226 FIXME("%p, %p\n", iface, ppQualSet);
230 static HRESULT WINAPI class_object_Get(
231 IWbemClassObject *iface,
238 FIXME("%p, %s, %08x, %p, %p, %p\n", iface, debugstr_w(wszName), lFlags, pVal, pType, plFlavor);
242 static HRESULT WINAPI class_object_Put(
243 IWbemClassObject *iface,
249 FIXME("%p, %s, %08x, %p, %u\n", iface, debugstr_w(wszName), lFlags, pVal, Type);
253 static HRESULT WINAPI class_object_Delete(
254 IWbemClassObject *iface,
257 FIXME("%p, %s\n", iface, debugstr_w(wszName));
261 static HRESULT WINAPI class_object_GetNames(
262 IWbemClassObject *iface,
263 LPCWSTR wszQualifierName,
265 VARIANT *pQualifierVal,
268 FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszQualifierName), lFlags, pQualifierVal, pNames);
272 static HRESULT WINAPI class_object_BeginEnumeration(
273 IWbemClassObject *iface,
276 FIXME("%p, %08x\n", iface, lEnumFlags);
280 static HRESULT WINAPI class_object_Next(
281 IWbemClassObject *iface,
288 FIXME("%p, %08x, %p, %p, %p, %p\n", iface, lFlags, strName, pVal, pType, plFlavor);
292 static HRESULT WINAPI class_object_EndEnumeration(
293 IWbemClassObject *iface )
295 FIXME("%p\n", iface);
299 static HRESULT WINAPI class_object_GetPropertyQualifierSet(
300 IWbemClassObject *iface,
302 IWbemQualifierSet **ppQualSet )
304 FIXME("%p, %s, %p\n", iface, debugstr_w(wszProperty), ppQualSet);
308 static HRESULT WINAPI class_object_Clone(
309 IWbemClassObject *iface,
310 IWbemClassObject **ppCopy )
312 FIXME("%p, %p\n", iface, ppCopy);
316 static HRESULT WINAPI class_object_GetObjectText(
317 IWbemClassObject *iface,
319 BSTR *pstrObjectText )
321 FIXME("%p, %08x, %p\n", iface, lFlags, pstrObjectText);
325 static HRESULT WINAPI class_object_SpawnDerivedClass(
326 IWbemClassObject *iface,
328 IWbemClassObject **ppNewClass )
330 FIXME("%p, %08x, %p\n", iface, lFlags, ppNewClass);
334 static HRESULT WINAPI class_object_SpawnInstance(
335 IWbemClassObject *iface,
337 IWbemClassObject **ppNewInstance )
339 FIXME("%p, %08x, %p\n", iface, lFlags, ppNewInstance);
343 static HRESULT WINAPI class_object_CompareTo(
344 IWbemClassObject *iface,
346 IWbemClassObject *pCompareTo )
348 FIXME("%p, %08x, %p\n", iface, lFlags, pCompareTo);
352 static HRESULT WINAPI class_object_GetPropertyOrigin(
353 IWbemClassObject *iface,
355 BSTR *pstrClassName )
357 FIXME("%p, %s, %p\n", iface, debugstr_w(wszName), pstrClassName);
361 static HRESULT WINAPI class_object_InheritsFrom(
362 IWbemClassObject *iface,
363 LPCWSTR strAncestor )
365 FIXME("%p, %s\n", iface, debugstr_w(strAncestor));
369 static HRESULT WINAPI class_object_GetMethod(
370 IWbemClassObject *iface,
373 IWbemClassObject **ppInSignature,
374 IWbemClassObject **ppOutSignature )
376 FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszName), lFlags, ppInSignature, ppOutSignature);
380 static HRESULT WINAPI class_object_PutMethod(
381 IWbemClassObject *iface,
384 IWbemClassObject *pInSignature,
385 IWbemClassObject *pOutSignature )
387 FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszName), lFlags, pInSignature, pOutSignature);
391 static HRESULT WINAPI class_object_DeleteMethod(
392 IWbemClassObject *iface,
395 FIXME("%p, %s\n", iface, debugstr_w(wszName));
399 static HRESULT WINAPI class_object_BeginMethodEnumeration(
400 IWbemClassObject *iface,
403 FIXME("%p, %08x\n", iface, lEnumFlags);
407 static HRESULT WINAPI class_object_NextMethod(
408 IWbemClassObject *iface,
411 IWbemClassObject **ppInSignature,
412 IWbemClassObject **ppOutSignature)
414 FIXME("%p, %08x, %p, %p, %p\n", iface, lFlags, pstrName, ppInSignature, ppOutSignature);
418 static HRESULT WINAPI class_object_EndMethodEnumeration(
419 IWbemClassObject *iface )
421 FIXME("%p\n", iface);
425 static HRESULT WINAPI class_object_GetMethodQualifierSet(
426 IWbemClassObject *iface,
428 IWbemQualifierSet **ppQualSet)
430 FIXME("%p, %s, %p\n", iface, debugstr_w(wszMethod), ppQualSet);
434 static HRESULT WINAPI class_object_GetMethodOrigin(
435 IWbemClassObject *iface,
436 LPCWSTR wszMethodName,
439 FIXME("%p, %s, %p\n", iface, debugstr_w(wszMethodName), pstrClassName);
443 static const IWbemClassObjectVtbl class_object_vtbl =
445 class_object_QueryInterface,
447 class_object_Release,
448 class_object_GetQualifierSet,
452 class_object_GetNames,
453 class_object_BeginEnumeration,
455 class_object_EndEnumeration,
456 class_object_GetPropertyQualifierSet,
458 class_object_GetObjectText,
459 class_object_SpawnDerivedClass,
460 class_object_SpawnInstance,
461 class_object_CompareTo,
462 class_object_GetPropertyOrigin,
463 class_object_InheritsFrom,
464 class_object_GetMethod,
465 class_object_PutMethod,
466 class_object_DeleteMethod,
467 class_object_BeginMethodEnumeration,
468 class_object_NextMethod,
469 class_object_EndMethodEnumeration,
470 class_object_GetMethodQualifierSet,
471 class_object_GetMethodOrigin
474 HRESULT WbemClassObject_create(
475 IUnknown *pUnkOuter, LPVOID *ppObj )
477 struct class_object *co;
479 TRACE("%p, %p\n", pUnkOuter, ppObj);
481 co = heap_alloc( sizeof(*co) );
482 if (!co) return E_OUTOFMEMORY;
484 co->IWbemClassObject_iface.lpVtbl = &class_object_vtbl;
487 *ppObj = &co->IWbemClassObject_iface;
489 TRACE("returning iface %p\n", *ppObj);