ReactOS  0.4.14-dev-608-gd495a4f
main.c
Go to the documentation of this file.
1 /*
2  * Copyright 2013 Hans Leidekker for CodeWeavers
3  *
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.
8  *
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.
13  *
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
17  */
18 
19 #include <stdarg.h>
20 
21 #define COBJMACROS
22 
23 #include "windef.h"
24 #include "winbase.h"
25 #include "objbase.h"
26 #include "wmiutils.h"
27 #include "wbemdisp.h"
28 #include "rpcproxy.h"
29 
30 #include "wine/debug.h"
31 #include "wine/heap.h"
32 #include "wbemdisp_private.h"
33 #include "wbemdisp_classes.h"
34 
36 
38 
39 struct moniker
40 {
44 };
45 
46 static inline struct moniker *impl_from_IMoniker(
47  IMoniker *iface )
48 {
49  return CONTAINING_RECORD( iface, struct moniker, IMoniker_iface );
50 }
51 
53  IMoniker *iface )
54 {
55  struct moniker *moniker = impl_from_IMoniker( iface );
56  return InterlockedIncrement( &moniker->refs );
57 }
58 
60  IMoniker *iface )
61 {
62  struct moniker *moniker = impl_from_IMoniker( iface );
64  if (!refs)
65  {
66  TRACE( "destroying %p\n", moniker );
67  IUnknown_Release( moniker->obj );
68  heap_free( moniker );
69  }
70  return refs;
71 }
72 
74  IMoniker *iface, REFIID riid, void **ppvObject )
75 {
76  struct moniker *moniker = impl_from_IMoniker( iface );
77 
78  TRACE( "%p, %s, %p\n", moniker, debugstr_guid( riid ), ppvObject );
79 
80  if (IsEqualGUID( riid, &IID_IMoniker ) ||
82  {
83  *ppvObject = iface;
84  }
85  else
86  {
87  FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
88  return E_NOINTERFACE;
89  }
90  IMoniker_AddRef( iface );
91  return S_OK;
92 }
93 
95  IMoniker *iface, CLSID *pClassID )
96 {
97  FIXME( "\n" );
98  return E_NOTIMPL;
99 }
100 
102  IMoniker *iface )
103 {
104  FIXME( "\n" );
105  return E_NOTIMPL;
106 }
107 
109  IMoniker *iface, IStream *pStm )
110 {
111  FIXME( "\n" );
112  return E_NOTIMPL;
113 }
114 
116  IMoniker *iface, IStream *pStm, BOOL fClearDirty )
117 {
118  FIXME( "\n" );
119  return E_NOTIMPL;
120 }
121 
123  IMoniker *iface, ULARGE_INTEGER *pcbSize )
124 {
125  FIXME( "\n" );
126  return E_NOTIMPL;
127 }
128 
130  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult )
131 {
132  struct moniker *moniker = impl_from_IMoniker( iface );
133 
134  TRACE( "%p, %p, %p, %s, %p\n", iface, pbc, pmkToLeft, debugstr_guid(riidResult), ppvResult );
135  return IUnknown_QueryInterface( moniker->obj, riidResult, ppvResult );
136 }
137 
139  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj )
140 {
141  FIXME( "\n" );
142  return E_NOTIMPL;
143 }
144 
146  IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced )
147 {
148  FIXME( "\n" );
149  return E_NOTIMPL;
150 }
151 
153  IMoniker *iface, IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite )
154 {
155  FIXME( "\n" );
156  return E_NOTIMPL;
157 }
158 
160  IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker )
161 {
162  FIXME( "\n" );
163  return E_NOTIMPL;
164 }
165 
167  IMoniker *iface, IMoniker *pmkOtherMoniker )
168 {
169  FIXME( "\n" );
170  return E_NOTIMPL;
171 }
172 
174  IMoniker *iface, DWORD *pdwHash )
175 {
176  FIXME( "\n" );
177  return E_NOTIMPL;
178 }
179 
181  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning )
182 {
183  FIXME( "\n" );
184  return E_NOTIMPL;
185 }
186 
188  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime )
189 {
190  FIXME( "\n" );
191  return E_NOTIMPL;
192 }
193 
195  IMoniker *iface, IMoniker **ppmk )
196 {
197  FIXME( "\n" );
198  return E_NOTIMPL;
199 }
200 
202  IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix )
203 {
204  FIXME( "\n" );
205  return E_NOTIMPL;
206 }
207 
209  IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkRelPath )
210 {
211  FIXME( "\n" );
212  return E_NOTIMPL;
213 }
214 
216  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName )
217 {
218  FIXME( "\n" );
219  return E_NOTIMPL;
220 }
221 
223  IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten,
224  IMoniker **ppmkOut )
225 {
226  FIXME( "\n" );
227  return E_NOTIMPL;
228 }
229 
231  IMoniker *iface, DWORD *pdwMksys )
232 {
233  FIXME( "\n" );
234  return E_NOTIMPL;
235 }
236 
237 static const IMonikerVtbl moniker_vtbl =
238 {
244  moniker_Load,
245  moniker_Save,
251  moniker_Enum,
253  moniker_Hash,
262 };
263 
265 {
266  struct moniker *moniker;
267 
268  TRACE( "%p, %p\n", unk, obj );
269 
270  if (!(moniker = heap_alloc( sizeof(*moniker) ))) return E_OUTOFMEMORY;
272  moniker->refs = 1;
273  moniker->obj = unk;
274  IUnknown_AddRef( moniker->obj );
275 
277  TRACE( "returning iface %p\n", *obj );
278  return S_OK;
279 }
280 
282 {
283  if(IsEqualGUID(riid, &IID_IUnknown)) {
284  TRACE("(IID_IUnknown %p)\n", ppv);
285  *ppv = iface;
286  }else if(IsEqualGUID(riid, &IID_IParseDisplayName)) {
287  TRACE("(IID_IParseDisplayName %p)\n", ppv);
288  *ppv = iface;
289  }else {
290  WARN("Unsupported riid %s\n", debugstr_guid(riid));
291  *ppv = NULL;
292  return E_NOINTERFACE;
293  }
294 
295  IUnknown_AddRef((IUnknown*)*ppv);
296  return S_OK;
297 }
298 
300 {
301  return 2;
302 }
303 
305 {
306  return 1;
307 }
308 
309 static HRESULT parse_path( const WCHAR *str, BSTR *server, BSTR *namespace, BSTR *relative )
310 {
311  IWbemPath *path;
312  ULONG len;
313  HRESULT hr;
314 
315  *server = *namespace = *relative = NULL;
316 
317  hr = CoCreateInstance( &CLSID_WbemDefPath, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemPath, (void **)&path );
318  if (hr != S_OK) return hr;
319 
320  hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, str );
321  if (hr != S_OK) goto done;
322 
323  len = 0;
324  hr = IWbemPath_GetServer( path, &len, NULL );
325  if (hr == S_OK)
326  {
327  if (!(*server = SysAllocStringLen( NULL, len )))
328  {
329  hr = E_OUTOFMEMORY;
330  goto done;
331  }
332  hr = IWbemPath_GetServer( path, &len, *server );
333  if (hr != S_OK) goto done;
334  }
335 
336  len = 0;
337  hr = IWbemPath_GetText( path, WBEMPATH_GET_NAMESPACE_ONLY, &len, NULL );
338  if (hr == S_OK)
339  {
340  if (!(*namespace = SysAllocStringLen( NULL, len )))
341  {
342  hr = E_OUTOFMEMORY;
343  goto done;
344  }
345  hr = IWbemPath_GetText( path, WBEMPATH_GET_NAMESPACE_ONLY, &len, *namespace );
346  if (hr != S_OK) goto done;
347  }
348  len = 0;
349  hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, NULL );
350  if (hr == S_OK)
351  {
352  if (!(*relative = SysAllocStringLen( NULL, len )))
353  {
354  hr = E_OUTOFMEMORY;
355  goto done;
356  }
357  hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, *relative );
358  }
359 
360 done:
361  IWbemPath_Release( path );
362  if (hr != S_OK)
363  {
364  SysFreeString( *server );
365  SysFreeString( *namespace );
366  SysFreeString( *relative );
367  }
368  return hr;
369 }
370 
372  ULONG *pchEaten, IMoniker **ppmkOut)
373 {
374  static const WCHAR prefixW[] = {'w','i','n','m','g','m','t','s',':',0};
375  const DWORD prefix_len = ARRAY_SIZE(prefixW) - 1;
376  ISWbemLocator *locator = NULL;
377  ISWbemServices *services = NULL;
378  ISWbemObject *obj = NULL;
379  BSTR server, namespace, relative;
380  WCHAR *p;
381  HRESULT hr;
382 
383  TRACE( "%p, %p, %s, %p, %p\n", iface, pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut );
384 
385  if (_wcsnicmp( pszDisplayName, prefixW, prefix_len )) return MK_E_SYNTAX;
386 
387  p = pszDisplayName + prefix_len;
388  if (*p == '{')
389  {
390  FIXME( "ignoring security settings\n" );
391  while (*p && *p != '}') p++;
392  if (*p == '}') p++;
393  if (*p == '!') p++;
394  }
395  hr = parse_path( p, &server, &namespace, &relative );
396  if (hr != S_OK) return hr;
397 
398  hr = SWbemLocator_create( (void **)&locator );
399  if (hr != S_OK) goto done;
400 
401  hr = ISWbemLocator_ConnectServer( locator, server, namespace, NULL, NULL, NULL, NULL, 0, NULL, &services );
402  if (hr != S_OK) goto done;
403 
404  if (!relative || !*relative) Moniker_create( (IUnknown *)services, ppmkOut );
405  else
406  {
407  hr = ISWbemServices_Get( services, relative, 0, NULL, &obj );
408  if (hr != S_OK) goto done;
409  hr = Moniker_create( (IUnknown *)obj, ppmkOut );
410  }
411 
412 done:
413  if (obj) ISWbemObject_Release( obj );
414  if (services) ISWbemServices_Release( services );
415  if (locator) ISWbemLocator_Release( locator );
417  SysFreeString( namespace );
418  SysFreeString( relative );
419  if (hr == S_OK) *pchEaten = lstrlenW( pszDisplayName );
420  return hr;
421 }
422 
423 static const IParseDisplayNameVtbl WinMGMTSVtbl = {
428 };
429 
431 
433 {
434  *ppv = &winmgmts;
435  return S_OK;
436 }
437 
438 struct factory
439 {
442 };
443 
444 static inline struct factory *impl_from_IClassFactory( IClassFactory *iface )
445 {
446  return CONTAINING_RECORD( iface, struct factory, IClassFactory_iface );
447 }
448 
450 {
452  {
453  IClassFactory_AddRef( iface );
454  *obj = iface;
455  return S_OK;
456  }
457  FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
458  return E_NOINTERFACE;
459 }
460 
462 {
463  return 2;
464 }
465 
467 {
468  return 1;
469 }
470 
472  LPVOID *obj )
473 {
474  struct factory *factory = impl_from_IClassFactory( iface );
475  IUnknown *unk;
476  HRESULT hr;
477 
478  TRACE( "%p, %s, %p\n", outer, debugstr_guid(riid), obj );
479 
480  *obj = NULL;
481  if (outer) return CLASS_E_NOAGGREGATION;
482 
483  hr = factory->fnCreateInstance( (LPVOID *)&unk );
484  if (FAILED( hr ))
485  return hr;
486 
487  hr = IUnknown_QueryInterface( unk, riid, obj );
488  IUnknown_Release( unk );
489  return hr;
490 }
491 
493 {
494  FIXME( "%p, %d\n", iface, lock );
495  return S_OK;
496 }
497 
498 static const struct IClassFactoryVtbl factory_vtbl =
499 {
505 };
506 
509 
511 {
512 
513  switch (reason)
514  {
515  case DLL_WINE_PREATTACH:
516  return FALSE; /* prefer native version */
517  case DLL_PROCESS_ATTACH:
518  instance = hinst;
520  break;
521  }
522  return TRUE;
523 }
524 
526 {
527  IClassFactory *cf = NULL;
528 
529  TRACE( "%s, %s, %p\n", debugstr_guid(rclsid), debugstr_guid(iid), obj );
530 
531  if (IsEqualGUID( rclsid, &CLSID_SWbemLocator ))
532  cf = &swbem_locator_cf.IClassFactory_iface;
533  else if (IsEqualGUID( rclsid, &CLSID_WinMGMTS ))
534  cf = &winmgmts_cf.IClassFactory_iface;
535  else
537 
538  return IClassFactory_QueryInterface( cf, iid, obj );
539 }
540 
541 /***********************************************************************
542  * DllCanUnloadNow (WBEMDISP.@)
543  */
545 {
546  return S_FALSE;
547 }
548 
549 /***********************************************************************
550  * DllRegisterServer (WBEMDISP.@)
551  */
553 {
555 }
556 
557 /***********************************************************************
558  * DllUnregisterServer (WBEMDISP.@)
559  */
561 {
563 }
#define HRESULT
Definition: msvc.h:7
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
static rfbScreenInfoPtr server
Definition: vnc.c:74
rwlock_t lock
Definition: tcpcore.h:1163
static struct factory * impl_from_IClassFactory(IClassFactory *iface)
Definition: main.c:444
static HRESULT WINAPI moniker_ComposeWith(IMoniker *iface, IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite)
Definition: main.c:152
static const struct IClassFactoryVtbl factory_vtbl
Definition: main.c:498
HRESULT hr
Definition: shlfolder.c:183
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
WINE_DEFAULT_DEBUG_CHANNEL(wmic)
GLsizei const GLchar ** path
Definition: glext.h:7234
REFIID riid
Definition: precomp.h:44
#define REFCLSID
Definition: guiddef.h:117
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT WINAPI moniker_IsDirty(IMoniker *iface)
Definition: main.c:101
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
static HRESULT WINAPI moniker_IsEqual(IMoniker *iface, IMoniker *pmkOtherMoniker)
Definition: main.c:166
static HRESULT WINAPI moniker_IsRunning(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning)
Definition: main.c:180
static HRESULT parse_path(const WCHAR *str, BSTR *server, BSTR *namespace, BSTR *relative)
Definition: main.c:309
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
static HRESULT WINAPI moniker_Save(IMoniker *iface, IStream *pStm, BOOL fClearDirty)
Definition: main.c:115
static HRESULT WINAPI moniker_IsSystemMoniker(IMoniker *iface, DWORD *pdwMksys)
Definition: main.c:230
static HINSTANCE instance
Definition: main.c:37
OLECHAR * BSTR
Definition: compat.h:1942
static ULONG WINAPI factory_AddRef(IClassFactory *iface)
Definition: main.c:461
static LPOLESTR
Definition: stg_prop.c:27
#define lstrlenW
Definition: compat.h:415
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
static HRESULT WINAPI moniker_Reduce(IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced)
Definition: main.c:145
IUnknown * obj
Definition: main.c:43
static HRESULT WINAPI moniker_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize)
Definition: main.c:122
HRESULT(* fnCreateInstance)(LPVOID *)
Definition: main.c:441
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static HRESULT WINAPI factory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *obj)
Definition: main.c:449
static HRESULT WINAPI moniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName)
Definition: main.c:215
static HRESULT WINAPI moniker_BindToObject(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult)
Definition: main.c:129
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT WINAPI DllRegisterServer(void)
Definition: main.c:212
static HRESULT WINAPI moniker_RelativePathTo(IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkRelPath)
Definition: main.c:208
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
Definition: main.c:438
static HRESULT WINAPI moniker_QueryInterface(IMoniker *iface, REFIID riid, void **ppvObject)
Definition: main.c:73
static LPUNKNOWN
Definition: ndr_ole.c:49
HRESULT WINAPI DllUnregisterServer(void)
Definition: main.c:220
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
static HRESULT WINAPI moniker_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
Definition: main.c:222
r reserved
Definition: btrfs.c:2865
#define S_FALSE
Definition: winerror.h:2357
static HRESULT WINAPI WinMGMTS_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv)
Definition: main.c:281
const WCHAR * str
IMoniker IMoniker_iface
Definition: main.c:41
smooth NULL
Definition: ftsmooth.c:416
const GUID IID_IParseDisplayName
static HRESULT WINAPI moniker_Inverse(IMoniker *iface, IMoniker **ppmk)
Definition: main.c:194
#define debugstr_guid
Definition: kernel32.h:35
static ULONG WINAPI WinMGMTS_AddRef(IParseDisplayName *iface)
Definition: main.c:299
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT WINAPI moniker_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime)
Definition: main.c:187
__wchar_t WCHAR
Definition: xmlstorage.h:180
static ULONG WINAPI WinMGMTS_Release(IParseDisplayName *iface)
Definition: main.c:304
LONG HRESULT
Definition: typedefs.h:77
static struct factory winmgmts_cf
Definition: main.c:508
const GUID IID_IUnknown
static HRESULT WINAPI factory_LockServer(IClassFactory *iface, BOOL lock)
Definition: main.c:492
#define WINAPI
Definition: msvc.h:6
LONG refs
Definition: main.c:42
static HRESULT WINAPI moniker_Enum(IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker)
Definition: main.c:159
static HRESULT WINAPI factory_CreateInstance(IClassFactory *iface, LPUNKNOWN outer, REFIID riid, LPVOID *obj)
Definition: main.c:471
unsigned long DWORD
Definition: ntddk_ex.h:95
static HRESULT WINAPI moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj)
Definition: main.c:138
static HRESULT Moniker_create(IUnknown *unk, IMoniker **obj)
Definition: main.c:264
static HRESULT WINAPI moniker_GetClassID(IMoniker *iface, CLSID *pClassID)
Definition: main.c:94
static ULONG WINAPI factory_Release(IClassFactory *iface)
Definition: main.c:466
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
#define InterlockedDecrement
Definition: armddk.h:52
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
GLenum GLsizei len
Definition: glext.h:6722
REFIID LPVOID * ppvObject
Definition: precomp.h:44
static struct factory swbem_locator_cf
Definition: main.c:507
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
static struct moniker * impl_from_IMoniker(IMoniker *iface)
Definition: main.c:46
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
static IParseDisplayName winmgmts
Definition: main.c:430
#define S_OK
Definition: intsafe.h:59
static HRESULT WINAPI moniker_Hash(IMoniker *iface, DWORD *pdwHash)
Definition: main.c:173
static ULONG WINAPI moniker_Release(IMoniker *iface)
Definition: main.c:59
static const IParseDisplayNameVtbl WinMGMTSVtbl
Definition: main.c:423
#define InterlockedIncrement
Definition: armddk.h:53
#define ARRAY_SIZE(a)
Definition: main.h:24
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT WINAPI DllCanUnloadNow(void)
Definition: main.c:204
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
HRESULT SWbemLocator_create(void **obj)
Definition: locator.c:2220
Definition: main.c:39
static ULONG WINAPI moniker_AddRef(IMoniker *iface)
Definition: main.c:52
static HRESULT WINAPI moniker_Load(IMoniker *iface, IStream *pStm)
Definition: main.c:108
static HRESULT WINAPI moniker_CommonPrefixWith(IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix)
Definition: main.c:201
static HRESULT WinMGMTS_create(void **ppv)
Definition: main.c:432
unsigned int ULONG
Definition: retypes.h:1
static HINSTANCE hinst
Definition: edit.c:551
#define MK_E_SYNTAX
Definition: winerror.h:2785
static HRESULT WINAPI WinMGMTS_ParseDisplayName(IParseDisplayName *iface, IBindCtx *pbc, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
Definition: main.c:371
GLfloat GLfloat p
Definition: glext.h:8902
const GUID IID_IClassFactory
IClassFactory IClassFactory_iface
Definition: main.c:440
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: main.c:166
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
Definition: main.c:26
static const IMonikerVtbl moniker_vtbl
Definition: main.c:237