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 "hnetcfg_private.h"
26 INetFwAuthorizedApplication INetFwAuthorizedApplication_iface
;
31 static inline fw_app
*impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication
*iface
)
33 return CONTAINING_RECORD(iface
, fw_app
, INetFwAuthorizedApplication_iface
);
36 static ULONG WINAPI
fw_app_AddRef(
37 INetFwAuthorizedApplication
*iface
)
39 fw_app
*fw_app
= impl_from_INetFwAuthorizedApplication( iface
);
40 return InterlockedIncrement( &fw_app
->refs
);
43 static ULONG WINAPI
fw_app_Release(
44 INetFwAuthorizedApplication
*iface
)
46 fw_app
*fw_app
= impl_from_INetFwAuthorizedApplication( iface
);
47 LONG refs
= InterlockedDecrement( &fw_app
->refs
);
50 TRACE("destroying %p\n", fw_app
);
51 if (fw_app
->filename
) SysFreeString( fw_app
->filename
);
52 HeapFree( GetProcessHeap(), 0, fw_app
);
57 static HRESULT WINAPI
fw_app_QueryInterface(
58 INetFwAuthorizedApplication
*iface
,
62 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
64 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
66 if ( IsEqualGUID( riid
, &IID_INetFwAuthorizedApplication
) ||
67 IsEqualGUID( riid
, &IID_IDispatch
) ||
68 IsEqualGUID( riid
, &IID_IUnknown
) )
74 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
77 INetFwAuthorizedApplication_AddRef( iface
);
81 static HRESULT WINAPI
fw_app_GetTypeInfoCount(
82 INetFwAuthorizedApplication
*iface
,
85 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
87 TRACE("%p %p\n", This
, pctinfo
);
92 static ITypeLib
*typelib
;
93 static ITypeInfo
*typeinfo
[last_tid
];
95 static REFIID tid_id
[] =
97 &IID_INetFwAuthorizedApplication
,
98 &IID_INetFwAuthorizedApplications
,
101 &IID_INetFwOpenPorts
,
106 HRESULT
get_typeinfo( enum type_id tid
, ITypeInfo
**ret
)
114 hr
= LoadRegTypeLib( &LIBID_NetFwPublicTypeLib
, 1, 0, LOCALE_SYSTEM_DEFAULT
, &lib
);
117 ERR("LoadRegTypeLib failed: %08x\n", hr
);
120 if (InterlockedCompareExchangePointer( (void **)&typelib
, lib
, NULL
))
121 ITypeLib_Release( lib
);
127 hr
= ITypeLib_GetTypeInfoOfGuid( typelib
, tid_id
[tid
], &info
);
130 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_id
[tid
]), hr
);
133 if (InterlockedCompareExchangePointer( (void **)(typeinfo
+ tid
), info
, NULL
))
134 ITypeInfo_Release( info
);
136 *ret
= typeinfo
[tid
];
137 ITypeInfo_AddRef(typeinfo
[tid
]);
141 void release_typelib(void)
145 for (i
= 0; i
< sizeof(typeinfo
)/sizeof(*typeinfo
); i
++)
147 ITypeInfo_Release(typeinfo
[i
]);
150 ITypeLib_Release(typelib
);
153 static HRESULT WINAPI
fw_app_GetTypeInfo(
154 INetFwAuthorizedApplication
*iface
,
157 ITypeInfo
**ppTInfo
)
159 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
161 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
162 return get_typeinfo( INetFwAuthorizedApplication_tid
, ppTInfo
);
165 static HRESULT WINAPI
fw_app_GetIDsOfNames(
166 INetFwAuthorizedApplication
*iface
,
173 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
177 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
179 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
182 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
183 ITypeInfo_Release( typeinfo
);
188 static HRESULT WINAPI
fw_app_Invoke(
189 INetFwAuthorizedApplication
*iface
,
194 DISPPARAMS
*pDispParams
,
196 EXCEPINFO
*pExcepInfo
,
199 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
203 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
204 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
206 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
209 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplication_iface
, dispIdMember
,
210 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
211 ITypeInfo_Release( typeinfo
);
216 static HRESULT WINAPI
fw_app_get_Name(
217 INetFwAuthorizedApplication
*iface
,
220 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
222 FIXME("%p, %p\n", This
, name
);
226 static HRESULT WINAPI
fw_app_put_Name(
227 INetFwAuthorizedApplication
*iface
,
230 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
232 FIXME("%p, %s\n", This
, debugstr_w(name
));
236 static HRESULT WINAPI
fw_app_get_ProcessImageFileName(
237 INetFwAuthorizedApplication
*iface
,
238 BSTR
*imageFileName
)
240 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
242 FIXME("%p, %p\n", This
, imageFileName
);
249 *imageFileName
= NULL
;
253 *imageFileName
= SysAllocString( This
->filename
);
254 return *imageFileName
? S_OK
: E_OUTOFMEMORY
;
257 static HRESULT WINAPI
fw_app_put_ProcessImageFileName(
258 INetFwAuthorizedApplication
*iface
,
261 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
263 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
267 This
->filename
= NULL
;
271 This
->filename
= SysAllocString( imageFileName
);
272 return This
->filename
? S_OK
: E_OUTOFMEMORY
;
275 static HRESULT WINAPI
fw_app_get_IpVersion(
276 INetFwAuthorizedApplication
*iface
,
277 NET_FW_IP_VERSION
*ipVersion
)
279 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
281 TRACE("%p, %p\n", This
, ipVersion
);
285 *ipVersion
= NET_FW_IP_VERSION_ANY
;
289 static HRESULT WINAPI
fw_app_put_IpVersion(
290 INetFwAuthorizedApplication
*iface
,
291 NET_FW_IP_VERSION ipVersion
)
293 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
295 TRACE("%p, %u\n", This
, ipVersion
);
299 static HRESULT WINAPI
fw_app_get_Scope(
300 INetFwAuthorizedApplication
*iface
,
301 NET_FW_SCOPE
*scope
)
303 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
305 FIXME("%p, %p\n", This
, scope
);
309 static HRESULT WINAPI
fw_app_put_Scope(
310 INetFwAuthorizedApplication
*iface
,
313 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
315 FIXME("%p, %u\n", This
, scope
);
319 static HRESULT WINAPI
fw_app_get_RemoteAddresses(
320 INetFwAuthorizedApplication
*iface
,
323 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
325 FIXME("%p, %p\n", This
, remoteAddrs
);
329 static HRESULT WINAPI
fw_app_put_RemoteAddresses(
330 INetFwAuthorizedApplication
*iface
,
333 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
335 FIXME("%p, %s\n", This
, debugstr_w(remoteAddrs
));
339 static HRESULT WINAPI
fw_app_get_Enabled(
340 INetFwAuthorizedApplication
*iface
,
341 VARIANT_BOOL
*enabled
)
343 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
345 FIXME("%p, %p\n", This
, enabled
);
347 *enabled
= VARIANT_FALSE
;
351 static HRESULT WINAPI
fw_app_put_Enabled(
352 INetFwAuthorizedApplication
*iface
,
353 VARIANT_BOOL enabled
)
355 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
357 FIXME("%p, %d\n", This
, enabled
);
361 static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl
=
363 fw_app_QueryInterface
,
366 fw_app_GetTypeInfoCount
,
368 fw_app_GetIDsOfNames
,
372 fw_app_get_ProcessImageFileName
,
373 fw_app_put_ProcessImageFileName
,
374 fw_app_get_IpVersion
,
375 fw_app_put_IpVersion
,
378 fw_app_get_RemoteAddresses
,
379 fw_app_put_RemoteAddresses
,
384 HRESULT
NetFwAuthorizedApplication_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
388 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
390 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
391 if (!fa
) return E_OUTOFMEMORY
;
393 fa
->INetFwAuthorizedApplication_iface
.lpVtbl
= &fw_app_vtbl
;
397 *ppObj
= &fa
->INetFwAuthorizedApplication_iface
;
399 TRACE("returning iface %p\n", *ppObj
);
402 typedef struct fw_apps
404 INetFwAuthorizedApplications INetFwAuthorizedApplications_iface
;
408 static inline fw_apps
*impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications
*iface
)
410 return CONTAINING_RECORD(iface
, fw_apps
, INetFwAuthorizedApplications_iface
);
413 static ULONG WINAPI
fw_apps_AddRef(
414 INetFwAuthorizedApplications
*iface
)
416 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
417 return InterlockedIncrement( &fw_apps
->refs
);
420 static ULONG WINAPI
fw_apps_Release(
421 INetFwAuthorizedApplications
*iface
)
423 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
424 LONG refs
= InterlockedDecrement( &fw_apps
->refs
);
427 TRACE("destroying %p\n", fw_apps
);
428 HeapFree( GetProcessHeap(), 0, fw_apps
);
433 static HRESULT WINAPI
fw_apps_QueryInterface(
434 INetFwAuthorizedApplications
*iface
,
438 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
440 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
442 if ( IsEqualGUID( riid
, &IID_INetFwAuthorizedApplications
) ||
443 IsEqualGUID( riid
, &IID_IDispatch
) ||
444 IsEqualGUID( riid
, &IID_IUnknown
) )
450 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
451 return E_NOINTERFACE
;
453 INetFwAuthorizedApplications_AddRef( iface
);
457 static HRESULT WINAPI
fw_apps_GetTypeInfoCount(
458 INetFwAuthorizedApplications
*iface
,
461 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
463 FIXME("%p %p\n", This
, pctinfo
);
467 static HRESULT WINAPI
fw_apps_GetTypeInfo(
468 INetFwAuthorizedApplications
*iface
,
471 ITypeInfo
**ppTInfo
)
473 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
475 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
476 return get_typeinfo( INetFwAuthorizedApplications_tid
, ppTInfo
);
479 static HRESULT WINAPI
fw_apps_GetIDsOfNames(
480 INetFwAuthorizedApplications
*iface
,
487 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
491 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
493 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
496 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
497 ITypeInfo_Release( typeinfo
);
502 static HRESULT WINAPI
fw_apps_Invoke(
503 INetFwAuthorizedApplications
*iface
,
508 DISPPARAMS
*pDispParams
,
510 EXCEPINFO
*pExcepInfo
,
513 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
517 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
518 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
520 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
523 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplications_iface
, dispIdMember
,
524 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
525 ITypeInfo_Release( typeinfo
);
530 static HRESULT WINAPI
fw_apps_get_Count(
531 INetFwAuthorizedApplications
*iface
,
534 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
536 FIXME("%p, %p\n", This
, count
);
540 static HRESULT WINAPI
fw_apps_Add(
541 INetFwAuthorizedApplications
*iface
,
542 INetFwAuthorizedApplication
*app
)
544 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
546 FIXME("%p, %p\n", This
, app
);
550 static HRESULT WINAPI
fw_apps_Remove(
551 INetFwAuthorizedApplications
*iface
,
554 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
556 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
560 static HRESULT WINAPI
fw_apps_Item(
561 INetFwAuthorizedApplications
*iface
,
563 INetFwAuthorizedApplication
**app
)
565 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
567 TRACE("%p, %s, %p\n", This
, debugstr_w(imageFileName
), app
);
568 return NetFwAuthorizedApplication_create( NULL
, (void **)app
);
571 static HRESULT WINAPI
fw_apps_get__NewEnum(
572 INetFwAuthorizedApplications
*iface
,
575 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
577 FIXME("%p, %p\n", This
, newEnum
);
581 static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl
=
583 fw_apps_QueryInterface
,
586 fw_apps_GetTypeInfoCount
,
588 fw_apps_GetIDsOfNames
,
597 HRESULT
NetFwAuthorizedApplications_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
601 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
603 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
604 if (!fa
) return E_OUTOFMEMORY
;
606 fa
->INetFwAuthorizedApplications_iface
.lpVtbl
= &fw_apps_vtbl
;
609 *ppObj
= &fa
->INetFwAuthorizedApplications_iface
;
611 TRACE("returning iface %p\n", *ppObj
);