hnetcfg: Add typeinfo support to INetFwOpenPort.
[wine/multimedia.git] / dlls / hnetcfg / apps.c
blobdded141c44db1d3c629694da6a25f04bf35cf726
1 /*
2 * Copyright 2009 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
19 #include "config.h"
20 #include <stdarg.h>
21 #include <stdio.h>
23 #define COBJMACROS
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winuser.h"
28 #include "ole2.h"
29 #include "netfw.h"
31 #include "wine/debug.h"
32 #include "wine/unicode.h"
33 #include "hnetcfg_private.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg);
37 typedef struct fw_app
39 INetFwAuthorizedApplication INetFwAuthorizedApplication_iface;
40 LONG refs;
41 } fw_app;
43 static inline fw_app *impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication *iface )
45 return CONTAINING_RECORD(iface, fw_app, INetFwAuthorizedApplication_iface);
48 static ULONG WINAPI fw_app_AddRef(
49 INetFwAuthorizedApplication *iface )
51 fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface );
52 return InterlockedIncrement( &fw_app->refs );
55 static ULONG WINAPI fw_app_Release(
56 INetFwAuthorizedApplication *iface )
58 fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface );
59 LONG refs = InterlockedDecrement( &fw_app->refs );
60 if (!refs)
62 TRACE("destroying %p\n", fw_app);
63 HeapFree( GetProcessHeap(), 0, fw_app );
65 return refs;
68 static HRESULT WINAPI fw_app_QueryInterface(
69 INetFwAuthorizedApplication *iface,
70 REFIID riid,
71 void **ppvObject )
73 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
75 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
77 if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplication ) ||
78 IsEqualGUID( riid, &IID_IDispatch ) ||
79 IsEqualGUID( riid, &IID_IUnknown ) )
81 *ppvObject = iface;
83 else
85 FIXME("interface %s not implemented\n", debugstr_guid(riid));
86 return E_NOINTERFACE;
88 INetFwAuthorizedApplication_AddRef( iface );
89 return S_OK;
92 static HRESULT WINAPI fw_app_GetTypeInfoCount(
93 INetFwAuthorizedApplication *iface,
94 UINT *pctinfo )
96 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
98 TRACE("%p %p\n", This, pctinfo);
99 *pctinfo = 1;
100 return S_OK;
103 static ITypeLib *typelib;
104 static ITypeInfo *typeinfo[last_tid];
106 static REFIID tid_id[] =
108 &IID_INetFwAuthorizedApplication,
109 &IID_INetFwAuthorizedApplications,
110 &IID_INetFwMgr,
111 &IID_INetFwOpenPort,
112 &IID_INetFwPolicy,
113 &IID_INetFwProfile
116 HRESULT get_typeinfo( enum type_id tid, ITypeInfo **ret )
118 HRESULT hr;
120 if (!typelib)
122 ITypeLib *lib;
124 hr = LoadRegTypeLib( &LIBID_NetFwPublicTypeLib, 1, 0, LOCALE_SYSTEM_DEFAULT, &lib );
125 if (FAILED(hr))
127 ERR("LoadRegTypeLib failed: %08x\n", hr);
128 return hr;
130 if (InterlockedCompareExchangePointer( (void **)&typelib, lib, NULL ))
131 ITypeLib_Release( lib );
133 if (!typeinfo[tid])
135 ITypeInfo *info;
137 hr = ITypeLib_GetTypeInfoOfGuid( typelib, tid_id[tid], &info );
138 if (FAILED(hr))
140 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_id[tid]), hr);
141 return hr;
143 if (InterlockedCompareExchangePointer( (void **)(typeinfo + tid), info, NULL ))
144 ITypeInfo_Release( info );
146 *ret = typeinfo[tid];
147 return S_OK;
150 static HRESULT WINAPI fw_app_GetTypeInfo(
151 INetFwAuthorizedApplication *iface,
152 UINT iTInfo,
153 LCID lcid,
154 ITypeInfo **ppTInfo )
156 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
158 TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
159 return get_typeinfo( INetFwAuthorizedApplication_tid, ppTInfo );
162 static HRESULT WINAPI fw_app_GetIDsOfNames(
163 INetFwAuthorizedApplication *iface,
164 REFIID riid,
165 LPOLESTR *rgszNames,
166 UINT cNames,
167 LCID lcid,
168 DISPID *rgDispId )
170 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
171 ITypeInfo *typeinfo;
172 HRESULT hr;
174 TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
176 hr = get_typeinfo( INetFwAuthorizedApplication_tid, &typeinfo );
177 if (SUCCEEDED(hr))
179 hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId );
180 ITypeInfo_Release( typeinfo );
182 return hr;
185 static HRESULT WINAPI fw_app_Invoke(
186 INetFwAuthorizedApplication *iface,
187 DISPID dispIdMember,
188 REFIID riid,
189 LCID lcid,
190 WORD wFlags,
191 DISPPARAMS *pDispParams,
192 VARIANT *pVarResult,
193 EXCEPINFO *pExcepInfo,
194 UINT *puArgErr )
196 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
197 ITypeInfo *typeinfo;
198 HRESULT hr;
200 TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
201 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
203 hr = get_typeinfo( INetFwAuthorizedApplication_tid, &typeinfo );
204 if (SUCCEEDED(hr))
206 hr = ITypeInfo_Invoke( typeinfo, &This->INetFwAuthorizedApplication_iface, dispIdMember,
207 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
208 ITypeInfo_Release( typeinfo );
210 return hr;
213 static HRESULT WINAPI fw_app_get_Name(
214 INetFwAuthorizedApplication *iface,
215 BSTR *name )
217 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
219 FIXME("%p, %p\n", This, name);
220 return E_NOTIMPL;
223 static HRESULT WINAPI fw_app_put_Name(
224 INetFwAuthorizedApplication *iface,
225 BSTR name )
227 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
229 FIXME("%p, %s\n", This, debugstr_w(name));
230 return S_OK;
233 static HRESULT WINAPI fw_app_get_ProcessImageFileName(
234 INetFwAuthorizedApplication *iface,
235 BSTR *imageFileName )
237 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
239 FIXME("%p, %p\n", This, imageFileName);
240 return E_NOTIMPL;
243 static HRESULT WINAPI fw_app_put_ProcessImageFileName(
244 INetFwAuthorizedApplication *iface,
245 BSTR imageFileName )
247 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
249 FIXME("%p, %s\n", This, debugstr_w(imageFileName));
250 return S_OK;
253 static HRESULT WINAPI fw_app_get_IpVersion(
254 INetFwAuthorizedApplication *iface,
255 NET_FW_IP_VERSION *ipVersion )
257 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
259 FIXME("%p, %p\n", This, ipVersion);
260 return E_NOTIMPL;
263 static HRESULT WINAPI fw_app_put_IpVersion(
264 INetFwAuthorizedApplication *iface,
265 NET_FW_IP_VERSION ipVersion )
267 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
269 FIXME("%p, %u\n", This, ipVersion);
270 return E_NOTIMPL;
273 static HRESULT WINAPI fw_app_get_Scope(
274 INetFwAuthorizedApplication *iface,
275 NET_FW_SCOPE *scope )
277 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
279 FIXME("%p, %p\n", This, scope);
280 return E_NOTIMPL;
283 static HRESULT WINAPI fw_app_put_Scope(
284 INetFwAuthorizedApplication *iface,
285 NET_FW_SCOPE scope )
287 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
289 FIXME("%p, %u\n", This, scope);
290 return S_OK;
293 static HRESULT WINAPI fw_app_get_RemoteAddresses(
294 INetFwAuthorizedApplication *iface,
295 BSTR *remoteAddrs )
297 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
299 FIXME("%p, %p\n", This, remoteAddrs);
300 return E_NOTIMPL;
303 static HRESULT WINAPI fw_app_put_RemoteAddresses(
304 INetFwAuthorizedApplication *iface,
305 BSTR remoteAddrs )
307 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
309 FIXME("%p, %s\n", This, debugstr_w(remoteAddrs));
310 return E_NOTIMPL;
313 static HRESULT WINAPI fw_app_get_Enabled(
314 INetFwAuthorizedApplication *iface,
315 VARIANT_BOOL *enabled )
317 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
319 FIXME("%p, %p\n", This, enabled);
321 *enabled = VARIANT_FALSE;
322 return S_OK;
325 static HRESULT WINAPI fw_app_put_Enabled(
326 INetFwAuthorizedApplication *iface,
327 VARIANT_BOOL enabled )
329 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
331 FIXME("%p, %d\n", This, enabled);
332 return S_OK;
335 static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl =
337 fw_app_QueryInterface,
338 fw_app_AddRef,
339 fw_app_Release,
340 fw_app_GetTypeInfoCount,
341 fw_app_GetTypeInfo,
342 fw_app_GetIDsOfNames,
343 fw_app_Invoke,
344 fw_app_get_Name,
345 fw_app_put_Name,
346 fw_app_get_ProcessImageFileName,
347 fw_app_put_ProcessImageFileName,
348 fw_app_get_IpVersion,
349 fw_app_put_IpVersion,
350 fw_app_get_Scope,
351 fw_app_put_Scope,
352 fw_app_get_RemoteAddresses,
353 fw_app_put_RemoteAddresses,
354 fw_app_get_Enabled,
355 fw_app_put_Enabled
358 HRESULT NetFwAuthorizedApplication_create( IUnknown *pUnkOuter, LPVOID *ppObj )
360 fw_app *fa;
362 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
364 fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) );
365 if (!fa) return E_OUTOFMEMORY;
367 fa->INetFwAuthorizedApplication_iface.lpVtbl = &fw_app_vtbl;
368 fa->refs = 1;
370 *ppObj = &fa->INetFwAuthorizedApplication_iface;
372 TRACE("returning iface %p\n", *ppObj);
373 return S_OK;
375 typedef struct fw_apps
377 INetFwAuthorizedApplications INetFwAuthorizedApplications_iface;
378 LONG refs;
379 } fw_apps;
381 static inline fw_apps *impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications *iface )
383 return CONTAINING_RECORD(iface, fw_apps, INetFwAuthorizedApplications_iface);
386 static ULONG WINAPI fw_apps_AddRef(
387 INetFwAuthorizedApplications *iface )
389 fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface );
390 return InterlockedIncrement( &fw_apps->refs );
393 static ULONG WINAPI fw_apps_Release(
394 INetFwAuthorizedApplications *iface )
396 fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface );
397 LONG refs = InterlockedDecrement( &fw_apps->refs );
398 if (!refs)
400 TRACE("destroying %p\n", fw_apps);
401 HeapFree( GetProcessHeap(), 0, fw_apps );
403 return refs;
406 static HRESULT WINAPI fw_apps_QueryInterface(
407 INetFwAuthorizedApplications *iface,
408 REFIID riid,
409 void **ppvObject )
411 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
413 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
415 if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplications ) ||
416 IsEqualGUID( riid, &IID_IDispatch ) ||
417 IsEqualGUID( riid, &IID_IUnknown ) )
419 *ppvObject = iface;
421 else
423 FIXME("interface %s not implemented\n", debugstr_guid(riid));
424 return E_NOINTERFACE;
426 INetFwAuthorizedApplications_AddRef( iface );
427 return S_OK;
430 static HRESULT WINAPI fw_apps_GetTypeInfoCount(
431 INetFwAuthorizedApplications *iface,
432 UINT *pctinfo )
434 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
436 FIXME("%p %p\n", This, pctinfo);
437 return E_NOTIMPL;
440 static HRESULT WINAPI fw_apps_GetTypeInfo(
441 INetFwAuthorizedApplications *iface,
442 UINT iTInfo,
443 LCID lcid,
444 ITypeInfo **ppTInfo )
446 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
448 TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
449 return get_typeinfo( INetFwAuthorizedApplications_tid, ppTInfo );
452 static HRESULT WINAPI fw_apps_GetIDsOfNames(
453 INetFwAuthorizedApplications *iface,
454 REFIID riid,
455 LPOLESTR *rgszNames,
456 UINT cNames,
457 LCID lcid,
458 DISPID *rgDispId )
460 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
461 ITypeInfo *typeinfo;
462 HRESULT hr;
464 TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
466 hr = get_typeinfo( INetFwAuthorizedApplications_tid, &typeinfo );
467 if (SUCCEEDED(hr))
469 hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId );
470 ITypeInfo_Release( typeinfo );
472 return hr;
475 static HRESULT WINAPI fw_apps_Invoke(
476 INetFwAuthorizedApplications *iface,
477 DISPID dispIdMember,
478 REFIID riid,
479 LCID lcid,
480 WORD wFlags,
481 DISPPARAMS *pDispParams,
482 VARIANT *pVarResult,
483 EXCEPINFO *pExcepInfo,
484 UINT *puArgErr )
486 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
487 ITypeInfo *typeinfo;
488 HRESULT hr;
490 TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
491 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
493 hr = get_typeinfo( INetFwAuthorizedApplications_tid, &typeinfo );
494 if (SUCCEEDED(hr))
496 hr = ITypeInfo_Invoke( typeinfo, &This->INetFwAuthorizedApplications_iface, dispIdMember,
497 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
498 ITypeInfo_Release( typeinfo );
500 return hr;
503 static HRESULT WINAPI fw_apps_get_Count(
504 INetFwAuthorizedApplications *iface,
505 LONG *count )
507 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
509 FIXME("%p, %p\n", This, count);
510 return E_NOTIMPL;
513 static HRESULT WINAPI fw_apps_Add(
514 INetFwAuthorizedApplications *iface,
515 INetFwAuthorizedApplication *app )
517 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
519 FIXME("%p, %p\n", This, app);
520 return S_OK;
523 static HRESULT WINAPI fw_apps_Remove(
524 INetFwAuthorizedApplications *iface,
525 BSTR imageFileName )
527 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
529 FIXME("%p, %s\n", This, debugstr_w(imageFileName));
530 return S_OK;
533 static HRESULT WINAPI fw_apps_Item(
534 INetFwAuthorizedApplications *iface,
535 BSTR imageFileName,
536 INetFwAuthorizedApplication **app )
538 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
540 TRACE("%p, %s, %p\n", This, debugstr_w(imageFileName), app);
541 return NetFwAuthorizedApplication_create( NULL, (void **)app );
544 static HRESULT WINAPI fw_apps_get__NewEnum(
545 INetFwAuthorizedApplications *iface,
546 IUnknown **newEnum )
548 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
550 FIXME("%p, %p\n", This, newEnum);
551 return E_NOTIMPL;
554 static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl =
556 fw_apps_QueryInterface,
557 fw_apps_AddRef,
558 fw_apps_Release,
559 fw_apps_GetTypeInfoCount,
560 fw_apps_GetTypeInfo,
561 fw_apps_GetIDsOfNames,
562 fw_apps_Invoke,
563 fw_apps_get_Count,
564 fw_apps_Add,
565 fw_apps_Remove,
566 fw_apps_Item,
567 fw_apps_get__NewEnum
570 HRESULT NetFwAuthorizedApplications_create( IUnknown *pUnkOuter, LPVOID *ppObj )
572 fw_apps *fa;
574 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
576 fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) );
577 if (!fa) return E_OUTOFMEMORY;
579 fa->INetFwAuthorizedApplications_iface.lpVtbl = &fw_apps_vtbl;
580 fa->refs = 1;
582 *ppObj = &fa->INetFwAuthorizedApplications_iface;
584 TRACE("returning iface %p\n", *ppObj);
585 return S_OK;