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
;
30 static inline fw_app
*impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication
*iface
)
32 return CONTAINING_RECORD(iface
, fw_app
, INetFwAuthorizedApplication_iface
);
35 static ULONG WINAPI
fw_app_AddRef(
36 INetFwAuthorizedApplication
*iface
)
38 fw_app
*fw_app
= impl_from_INetFwAuthorizedApplication( iface
);
39 return InterlockedIncrement( &fw_app
->refs
);
42 static ULONG WINAPI
fw_app_Release(
43 INetFwAuthorizedApplication
*iface
)
45 fw_app
*fw_app
= impl_from_INetFwAuthorizedApplication( iface
);
46 LONG refs
= InterlockedDecrement( &fw_app
->refs
);
49 TRACE("destroying %p\n", fw_app
);
50 HeapFree( GetProcessHeap(), 0, fw_app
);
55 static HRESULT WINAPI
fw_app_QueryInterface(
56 INetFwAuthorizedApplication
*iface
,
60 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
62 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
64 if ( IsEqualGUID( riid
, &IID_INetFwAuthorizedApplication
) ||
65 IsEqualGUID( riid
, &IID_IDispatch
) ||
66 IsEqualGUID( riid
, &IID_IUnknown
) )
72 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
75 INetFwAuthorizedApplication_AddRef( iface
);
79 static HRESULT WINAPI
fw_app_GetTypeInfoCount(
80 INetFwAuthorizedApplication
*iface
,
83 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
85 TRACE("%p %p\n", This
, pctinfo
);
90 static ITypeLib
*typelib
;
91 static ITypeInfo
*typeinfo
[last_tid
];
93 static REFIID tid_id
[] =
95 &IID_INetFwAuthorizedApplication
,
96 &IID_INetFwAuthorizedApplications
,
105 HRESULT
get_typeinfo( enum type_id tid
, ITypeInfo
**ret
)
113 hr
= LoadRegTypeLib( &LIBID_NetFwPublicTypeLib
, 1, 0, LOCALE_SYSTEM_DEFAULT
, &lib
);
116 ERR("LoadRegTypeLib failed: %08x\n", hr
);
119 if (InterlockedCompareExchangePointer( (void **)&typelib
, lib
, NULL
))
120 ITypeLib_Release( lib
);
126 hr
= ITypeLib_GetTypeInfoOfGuid( typelib
, tid_id
[tid
], &info
);
129 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_id
[tid
]), hr
);
132 if (InterlockedCompareExchangePointer( (void **)(typeinfo
+ tid
), info
, NULL
))
133 ITypeInfo_Release( info
);
135 *ret
= typeinfo
[tid
];
136 ITypeInfo_AddRef(typeinfo
[tid
]);
140 void release_typelib(void)
144 for (i
= 0; i
< sizeof(typeinfo
)/sizeof(*typeinfo
); i
++)
146 ITypeInfo_Release(typeinfo
[i
]);
149 ITypeLib_Release(typelib
);
152 static HRESULT WINAPI
fw_app_GetTypeInfo(
153 INetFwAuthorizedApplication
*iface
,
156 ITypeInfo
**ppTInfo
)
158 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
160 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
161 return get_typeinfo( INetFwAuthorizedApplication_tid
, ppTInfo
);
164 static HRESULT WINAPI
fw_app_GetIDsOfNames(
165 INetFwAuthorizedApplication
*iface
,
172 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
176 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
178 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
181 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
182 ITypeInfo_Release( typeinfo
);
187 static HRESULT WINAPI
fw_app_Invoke(
188 INetFwAuthorizedApplication
*iface
,
193 DISPPARAMS
*pDispParams
,
195 EXCEPINFO
*pExcepInfo
,
198 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
202 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
203 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
205 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
208 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplication_iface
, dispIdMember
,
209 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
210 ITypeInfo_Release( typeinfo
);
215 static HRESULT WINAPI
fw_app_get_Name(
216 INetFwAuthorizedApplication
*iface
,
219 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
221 FIXME("%p, %p\n", This
, name
);
225 static HRESULT WINAPI
fw_app_put_Name(
226 INetFwAuthorizedApplication
*iface
,
229 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
231 FIXME("%p, %s\n", This
, debugstr_w(name
));
235 static HRESULT WINAPI
fw_app_get_ProcessImageFileName(
236 INetFwAuthorizedApplication
*iface
,
237 BSTR
*imageFileName
)
239 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
241 FIXME("%p, %p\n", This
, imageFileName
);
245 static HRESULT WINAPI
fw_app_put_ProcessImageFileName(
246 INetFwAuthorizedApplication
*iface
,
249 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
251 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
255 static HRESULT WINAPI
fw_app_get_IpVersion(
256 INetFwAuthorizedApplication
*iface
,
257 NET_FW_IP_VERSION
*ipVersion
)
259 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
261 TRACE("%p, %p\n", This
, ipVersion
);
265 *ipVersion
= NET_FW_IP_VERSION_ANY
;
269 static HRESULT WINAPI
fw_app_put_IpVersion(
270 INetFwAuthorizedApplication
*iface
,
271 NET_FW_IP_VERSION ipVersion
)
273 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
275 TRACE("%p, %u\n", This
, ipVersion
);
279 static HRESULT WINAPI
fw_app_get_Scope(
280 INetFwAuthorizedApplication
*iface
,
281 NET_FW_SCOPE
*scope
)
283 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
285 FIXME("%p, %p\n", This
, scope
);
289 static HRESULT WINAPI
fw_app_put_Scope(
290 INetFwAuthorizedApplication
*iface
,
293 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
295 FIXME("%p, %u\n", This
, scope
);
299 static HRESULT WINAPI
fw_app_get_RemoteAddresses(
300 INetFwAuthorizedApplication
*iface
,
303 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
305 FIXME("%p, %p\n", This
, remoteAddrs
);
309 static HRESULT WINAPI
fw_app_put_RemoteAddresses(
310 INetFwAuthorizedApplication
*iface
,
313 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
315 FIXME("%p, %s\n", This
, debugstr_w(remoteAddrs
));
319 static HRESULT WINAPI
fw_app_get_Enabled(
320 INetFwAuthorizedApplication
*iface
,
321 VARIANT_BOOL
*enabled
)
323 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
325 FIXME("%p, %p\n", This
, enabled
);
327 *enabled
= VARIANT_FALSE
;
331 static HRESULT WINAPI
fw_app_put_Enabled(
332 INetFwAuthorizedApplication
*iface
,
333 VARIANT_BOOL enabled
)
335 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
337 FIXME("%p, %d\n", This
, enabled
);
341 static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl
=
343 fw_app_QueryInterface
,
346 fw_app_GetTypeInfoCount
,
348 fw_app_GetIDsOfNames
,
352 fw_app_get_ProcessImageFileName
,
353 fw_app_put_ProcessImageFileName
,
354 fw_app_get_IpVersion
,
355 fw_app_put_IpVersion
,
358 fw_app_get_RemoteAddresses
,
359 fw_app_put_RemoteAddresses
,
364 HRESULT
NetFwAuthorizedApplication_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
368 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
370 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
371 if (!fa
) return E_OUTOFMEMORY
;
373 fa
->INetFwAuthorizedApplication_iface
.lpVtbl
= &fw_app_vtbl
;
376 *ppObj
= &fa
->INetFwAuthorizedApplication_iface
;
378 TRACE("returning iface %p\n", *ppObj
);
381 typedef struct fw_apps
383 INetFwAuthorizedApplications INetFwAuthorizedApplications_iface
;
387 static inline fw_apps
*impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications
*iface
)
389 return CONTAINING_RECORD(iface
, fw_apps
, INetFwAuthorizedApplications_iface
);
392 static ULONG WINAPI
fw_apps_AddRef(
393 INetFwAuthorizedApplications
*iface
)
395 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
396 return InterlockedIncrement( &fw_apps
->refs
);
399 static ULONG WINAPI
fw_apps_Release(
400 INetFwAuthorizedApplications
*iface
)
402 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
403 LONG refs
= InterlockedDecrement( &fw_apps
->refs
);
406 TRACE("destroying %p\n", fw_apps
);
407 HeapFree( GetProcessHeap(), 0, fw_apps
);
412 static HRESULT WINAPI
fw_apps_QueryInterface(
413 INetFwAuthorizedApplications
*iface
,
417 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
419 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
421 if ( IsEqualGUID( riid
, &IID_INetFwAuthorizedApplications
) ||
422 IsEqualGUID( riid
, &IID_IDispatch
) ||
423 IsEqualGUID( riid
, &IID_IUnknown
) )
429 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
430 return E_NOINTERFACE
;
432 INetFwAuthorizedApplications_AddRef( iface
);
436 static HRESULT WINAPI
fw_apps_GetTypeInfoCount(
437 INetFwAuthorizedApplications
*iface
,
440 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
442 FIXME("%p %p\n", This
, pctinfo
);
446 static HRESULT WINAPI
fw_apps_GetTypeInfo(
447 INetFwAuthorizedApplications
*iface
,
450 ITypeInfo
**ppTInfo
)
452 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
454 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
455 return get_typeinfo( INetFwAuthorizedApplications_tid
, ppTInfo
);
458 static HRESULT WINAPI
fw_apps_GetIDsOfNames(
459 INetFwAuthorizedApplications
*iface
,
466 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
470 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
472 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
475 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
476 ITypeInfo_Release( typeinfo
);
481 static HRESULT WINAPI
fw_apps_Invoke(
482 INetFwAuthorizedApplications
*iface
,
487 DISPPARAMS
*pDispParams
,
489 EXCEPINFO
*pExcepInfo
,
492 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
496 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
497 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
499 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
502 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplications_iface
, dispIdMember
,
503 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
504 ITypeInfo_Release( typeinfo
);
509 static HRESULT WINAPI
fw_apps_get_Count(
510 INetFwAuthorizedApplications
*iface
,
513 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
515 FIXME("%p, %p\n", This
, count
);
519 static HRESULT WINAPI
fw_apps_Add(
520 INetFwAuthorizedApplications
*iface
,
521 INetFwAuthorizedApplication
*app
)
523 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
525 FIXME("%p, %p\n", This
, app
);
529 static HRESULT WINAPI
fw_apps_Remove(
530 INetFwAuthorizedApplications
*iface
,
533 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
535 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
539 static HRESULT WINAPI
fw_apps_Item(
540 INetFwAuthorizedApplications
*iface
,
542 INetFwAuthorizedApplication
**app
)
544 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
546 TRACE("%p, %s, %p\n", This
, debugstr_w(imageFileName
), app
);
547 return NetFwAuthorizedApplication_create( NULL
, (void **)app
);
550 static HRESULT WINAPI
fw_apps_get__NewEnum(
551 INetFwAuthorizedApplications
*iface
,
554 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
556 FIXME("%p, %p\n", This
, newEnum
);
560 static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl
=
562 fw_apps_QueryInterface
,
565 fw_apps_GetTypeInfoCount
,
567 fw_apps_GetIDsOfNames
,
576 HRESULT
NetFwAuthorizedApplications_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
580 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
582 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
583 if (!fa
) return E_OUTOFMEMORY
;
585 fa
->INetFwAuthorizedApplications_iface
.lpVtbl
= &fw_apps_vtbl
;
588 *ppObj
= &fa
->INetFwAuthorizedApplications_iface
;
590 TRACE("returning iface %p\n", *ppObj
);