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
,
107 HRESULT
get_typeinfo( enum type_id tid
, ITypeInfo
**ret
)
115 hr
= LoadRegTypeLib( &LIBID_NetFwPublicTypeLib
, 1, 0, LOCALE_SYSTEM_DEFAULT
, &lib
);
118 ERR("LoadRegTypeLib failed: %08x\n", hr
);
121 if (InterlockedCompareExchangePointer( (void **)&typelib
, lib
, NULL
))
122 ITypeLib_Release( lib
);
128 hr
= ITypeLib_GetTypeInfoOfGuid( typelib
, tid_id
[tid
], &info
);
131 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_id
[tid
]), hr
);
134 if (InterlockedCompareExchangePointer( (void **)(typeinfo
+ tid
), info
, NULL
))
135 ITypeInfo_Release( info
);
137 *ret
= typeinfo
[tid
];
138 ITypeInfo_AddRef(typeinfo
[tid
]);
142 void release_typelib(void)
146 for (i
= 0; i
< sizeof(typeinfo
)/sizeof(*typeinfo
); i
++)
148 ITypeInfo_Release(typeinfo
[i
]);
151 ITypeLib_Release(typelib
);
154 static HRESULT WINAPI
fw_app_GetTypeInfo(
155 INetFwAuthorizedApplication
*iface
,
158 ITypeInfo
**ppTInfo
)
160 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
162 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
163 return get_typeinfo( INetFwAuthorizedApplication_tid
, ppTInfo
);
166 static HRESULT WINAPI
fw_app_GetIDsOfNames(
167 INetFwAuthorizedApplication
*iface
,
174 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
178 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
180 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
183 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
184 ITypeInfo_Release( typeinfo
);
189 static HRESULT WINAPI
fw_app_Invoke(
190 INetFwAuthorizedApplication
*iface
,
195 DISPPARAMS
*pDispParams
,
197 EXCEPINFO
*pExcepInfo
,
200 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
204 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
205 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
207 hr
= get_typeinfo( INetFwAuthorizedApplication_tid
, &typeinfo
);
210 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplication_iface
, dispIdMember
,
211 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
212 ITypeInfo_Release( typeinfo
);
217 static HRESULT WINAPI
fw_app_get_Name(
218 INetFwAuthorizedApplication
*iface
,
221 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
223 FIXME("%p, %p\n", This
, name
);
227 static HRESULT WINAPI
fw_app_put_Name(
228 INetFwAuthorizedApplication
*iface
,
231 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
233 FIXME("%p, %s\n", This
, debugstr_w(name
));
237 static HRESULT WINAPI
fw_app_get_ProcessImageFileName(
238 INetFwAuthorizedApplication
*iface
,
239 BSTR
*imageFileName
)
241 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
243 FIXME("%p, %p\n", This
, imageFileName
);
250 *imageFileName
= NULL
;
254 *imageFileName
= SysAllocString( This
->filename
);
255 return *imageFileName
? S_OK
: E_OUTOFMEMORY
;
258 static HRESULT WINAPI
fw_app_put_ProcessImageFileName(
259 INetFwAuthorizedApplication
*iface
,
262 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
264 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
268 This
->filename
= NULL
;
272 This
->filename
= SysAllocString( imageFileName
);
273 return This
->filename
? S_OK
: E_OUTOFMEMORY
;
276 static HRESULT WINAPI
fw_app_get_IpVersion(
277 INetFwAuthorizedApplication
*iface
,
278 NET_FW_IP_VERSION
*ipVersion
)
280 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
282 TRACE("%p, %p\n", This
, ipVersion
);
286 *ipVersion
= NET_FW_IP_VERSION_ANY
;
290 static HRESULT WINAPI
fw_app_put_IpVersion(
291 INetFwAuthorizedApplication
*iface
,
292 NET_FW_IP_VERSION ipVersion
)
294 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
296 TRACE("%p, %u\n", This
, ipVersion
);
300 static HRESULT WINAPI
fw_app_get_Scope(
301 INetFwAuthorizedApplication
*iface
,
302 NET_FW_SCOPE
*scope
)
304 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
306 FIXME("%p, %p\n", This
, scope
);
310 static HRESULT WINAPI
fw_app_put_Scope(
311 INetFwAuthorizedApplication
*iface
,
314 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
316 FIXME("%p, %u\n", This
, scope
);
320 static HRESULT WINAPI
fw_app_get_RemoteAddresses(
321 INetFwAuthorizedApplication
*iface
,
324 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
326 FIXME("%p, %p\n", This
, remoteAddrs
);
330 static HRESULT WINAPI
fw_app_put_RemoteAddresses(
331 INetFwAuthorizedApplication
*iface
,
334 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
336 FIXME("%p, %s\n", This
, debugstr_w(remoteAddrs
));
340 static HRESULT WINAPI
fw_app_get_Enabled(
341 INetFwAuthorizedApplication
*iface
,
342 VARIANT_BOOL
*enabled
)
344 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
346 FIXME("%p, %p\n", This
, enabled
);
348 *enabled
= VARIANT_FALSE
;
352 static HRESULT WINAPI
fw_app_put_Enabled(
353 INetFwAuthorizedApplication
*iface
,
354 VARIANT_BOOL enabled
)
356 fw_app
*This
= impl_from_INetFwAuthorizedApplication( iface
);
358 FIXME("%p, %d\n", This
, enabled
);
362 static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl
=
364 fw_app_QueryInterface
,
367 fw_app_GetTypeInfoCount
,
369 fw_app_GetIDsOfNames
,
373 fw_app_get_ProcessImageFileName
,
374 fw_app_put_ProcessImageFileName
,
375 fw_app_get_IpVersion
,
376 fw_app_put_IpVersion
,
379 fw_app_get_RemoteAddresses
,
380 fw_app_put_RemoteAddresses
,
385 HRESULT
NetFwAuthorizedApplication_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
389 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
391 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
392 if (!fa
) return E_OUTOFMEMORY
;
394 fa
->INetFwAuthorizedApplication_iface
.lpVtbl
= &fw_app_vtbl
;
398 *ppObj
= &fa
->INetFwAuthorizedApplication_iface
;
400 TRACE("returning iface %p\n", *ppObj
);
403 typedef struct fw_apps
405 INetFwAuthorizedApplications INetFwAuthorizedApplications_iface
;
409 static inline fw_apps
*impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications
*iface
)
411 return CONTAINING_RECORD(iface
, fw_apps
, INetFwAuthorizedApplications_iface
);
414 static ULONG WINAPI
fw_apps_AddRef(
415 INetFwAuthorizedApplications
*iface
)
417 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
418 return InterlockedIncrement( &fw_apps
->refs
);
421 static ULONG WINAPI
fw_apps_Release(
422 INetFwAuthorizedApplications
*iface
)
424 fw_apps
*fw_apps
= impl_from_INetFwAuthorizedApplications( iface
);
425 LONG refs
= InterlockedDecrement( &fw_apps
->refs
);
428 TRACE("destroying %p\n", fw_apps
);
429 HeapFree( GetProcessHeap(), 0, fw_apps
);
434 static HRESULT WINAPI
fw_apps_QueryInterface(
435 INetFwAuthorizedApplications
*iface
,
439 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
441 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
443 if ( IsEqualGUID( riid
, &IID_INetFwAuthorizedApplications
) ||
444 IsEqualGUID( riid
, &IID_IDispatch
) ||
445 IsEqualGUID( riid
, &IID_IUnknown
) )
451 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
452 return E_NOINTERFACE
;
454 INetFwAuthorizedApplications_AddRef( iface
);
458 static HRESULT WINAPI
fw_apps_GetTypeInfoCount(
459 INetFwAuthorizedApplications
*iface
,
462 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
464 FIXME("%p %p\n", This
, pctinfo
);
468 static HRESULT WINAPI
fw_apps_GetTypeInfo(
469 INetFwAuthorizedApplications
*iface
,
472 ITypeInfo
**ppTInfo
)
474 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
476 TRACE("%p %u %u %p\n", This
, iTInfo
, lcid
, ppTInfo
);
477 return get_typeinfo( INetFwAuthorizedApplications_tid
, ppTInfo
);
480 static HRESULT WINAPI
fw_apps_GetIDsOfNames(
481 INetFwAuthorizedApplications
*iface
,
488 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
492 TRACE("%p %s %p %u %u %p\n", This
, debugstr_guid(riid
), rgszNames
, cNames
, lcid
, rgDispId
);
494 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
497 hr
= ITypeInfo_GetIDsOfNames( typeinfo
, rgszNames
, cNames
, rgDispId
);
498 ITypeInfo_Release( typeinfo
);
503 static HRESULT WINAPI
fw_apps_Invoke(
504 INetFwAuthorizedApplications
*iface
,
509 DISPPARAMS
*pDispParams
,
511 EXCEPINFO
*pExcepInfo
,
514 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
518 TRACE("%p %d %s %d %d %p %p %p %p\n", This
, dispIdMember
, debugstr_guid(riid
),
519 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
521 hr
= get_typeinfo( INetFwAuthorizedApplications_tid
, &typeinfo
);
524 hr
= ITypeInfo_Invoke( typeinfo
, &This
->INetFwAuthorizedApplications_iface
, dispIdMember
,
525 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
526 ITypeInfo_Release( typeinfo
);
531 static HRESULT WINAPI
fw_apps_get_Count(
532 INetFwAuthorizedApplications
*iface
,
535 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
537 FIXME("%p, %p\n", This
, count
);
541 static HRESULT WINAPI
fw_apps_Add(
542 INetFwAuthorizedApplications
*iface
,
543 INetFwAuthorizedApplication
*app
)
545 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
547 FIXME("%p, %p\n", This
, app
);
551 static HRESULT WINAPI
fw_apps_Remove(
552 INetFwAuthorizedApplications
*iface
,
555 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
557 FIXME("%p, %s\n", This
, debugstr_w(imageFileName
));
561 static HRESULT WINAPI
fw_apps_Item(
562 INetFwAuthorizedApplications
*iface
,
564 INetFwAuthorizedApplication
**app
)
566 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
568 TRACE("%p, %s, %p\n", This
, debugstr_w(imageFileName
), app
);
569 return NetFwAuthorizedApplication_create( NULL
, (void **)app
);
572 static HRESULT WINAPI
fw_apps_get__NewEnum(
573 INetFwAuthorizedApplications
*iface
,
576 fw_apps
*This
= impl_from_INetFwAuthorizedApplications( iface
);
578 FIXME("%p, %p\n", This
, newEnum
);
582 static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl
=
584 fw_apps_QueryInterface
,
587 fw_apps_GetTypeInfoCount
,
589 fw_apps_GetIDsOfNames
,
598 HRESULT
NetFwAuthorizedApplications_create( IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
602 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
604 fa
= HeapAlloc( GetProcessHeap(), 0, sizeof(*fa
) );
605 if (!fa
) return E_OUTOFMEMORY
;
607 fa
->INetFwAuthorizedApplications_iface
.lpVtbl
= &fw_apps_vtbl
;
610 *ppObj
= &fa
->INetFwAuthorizedApplications_iface
;
612 TRACE("returning iface %p\n", *ppObj
);