1 /*
2 * Copyright 2009 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 #include <stdio.h>
21
22 #define COBJMACROS
23
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "ole2.h"
28 #include "netfw.h"
29 #include "natupnp.h"
30 #ifdef __REACTOS__
31 #include "winnetwk.h"
32 #endif
33
34 #include "wine/debug.h"
35 #include "wine/heap.h"
36 #include "hnetcfg_private.h"
37
38 WINE_DEFAULT_DEBUG_CHANNEL(hnetcfg);
39
40 typedef struct fw_app
41 {
42 INetFwAuthorizedApplication INetFwAuthorizedApplication_iface;
43 LONG refs;
44 BSTR filename;
45 } fw_app;
46
impl_from_INetFwAuthorizedApplication(INetFwAuthorizedApplication * iface)47 static inline fw_app *impl_from_INetFwAuthorizedApplication( INetFwAuthorizedApplication *iface )
48 {
49 return CONTAINING_RECORD(iface, fw_app, INetFwAuthorizedApplication_iface);
50 }
51
fw_app_AddRef(INetFwAuthorizedApplication * iface)52 static ULONG WINAPI fw_app_AddRef(
53 INetFwAuthorizedApplication *iface )
54 {
55 fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface );
56 return InterlockedIncrement( &fw_app->refs );
57 }
58
fw_app_Release(INetFwAuthorizedApplication * iface)59 static ULONG WINAPI fw_app_Release(
60 INetFwAuthorizedApplication *iface )
61 {
62 fw_app *fw_app = impl_from_INetFwAuthorizedApplication( iface );
63 LONG refs = InterlockedDecrement( &fw_app->refs );
64 if (!refs)
65 {
66 TRACE("destroying %p\n", fw_app);
67 SysFreeString( fw_app->filename );
68 HeapFree( GetProcessHeap(), 0, fw_app );
69 }
70 return refs;
71 }
72
fw_app_QueryInterface(INetFwAuthorizedApplication * iface,REFIID riid,void ** ppvObject)73 static HRESULT WINAPI fw_app_QueryInterface(
74 INetFwAuthorizedApplication *iface,
75 REFIID riid,
76 void **ppvObject )
77 {
78 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
79
80 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
81
82 if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplication ) ||
83 IsEqualGUID( riid, &IID_IDispatch ) ||
84 IsEqualGUID( riid, &IID_IUnknown ) )
85 {
86 *ppvObject = iface;
87 }
88 else
89 {
90 FIXME("interface %s not implemented\n", debugstr_guid(riid));
91 return E_NOINTERFACE;
92 }
93 INetFwAuthorizedApplication_AddRef( iface );
94 return S_OK;
95 }
96
fw_app_GetTypeInfoCount(INetFwAuthorizedApplication * iface,UINT * pctinfo)97 static HRESULT WINAPI fw_app_GetTypeInfoCount(
98 INetFwAuthorizedApplication *iface,
99 UINT *pctinfo )
100 {
101 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
102
103 TRACE("%p %p\n", This, pctinfo);
104 *pctinfo = 1;
105 return S_OK;
106 }
107
108 static ITypeLib *typelib;
109 static ITypeInfo *typeinfo[last_tid];
110
111 static REFIID tid_id[] =
112 {
113 &IID_INetFwAuthorizedApplication,
114 &IID_INetFwAuthorizedApplications,
115 &IID_INetFwMgr,
116 &IID_INetFwOpenPort,
117 &IID_INetFwOpenPorts,
118 &IID_INetFwPolicy,
119 &IID_INetFwPolicy2,
120 &IID_INetFwProfile,
121 &IID_IUPnPNAT
122 };
123
get_typeinfo(enum type_id tid,ITypeInfo ** ret)124 HRESULT get_typeinfo( enum type_id tid, ITypeInfo **ret )
125 {
126 HRESULT hr;
127
128 if (!typelib)
129 {
130 ITypeLib *lib;
131
132 hr = LoadRegTypeLib( &LIBID_NetFwPublicTypeLib, 1, 0, LOCALE_SYSTEM_DEFAULT, &lib );
133 if (FAILED(hr))
134 {
135 ERR("LoadRegTypeLib failed: %08x\n", hr);
136 return hr;
137 }
138 if (InterlockedCompareExchangePointer( (void **)&typelib, lib, NULL ))
139 ITypeLib_Release( lib );
140 }
141 if (!typeinfo[tid])
142 {
143 ITypeInfo *info;
144
145 hr = ITypeLib_GetTypeInfoOfGuid( typelib, tid_id[tid], &info );
146 if (FAILED(hr))
147 {
148 ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_id[tid]), hr);
149 return hr;
150 }
151 if (InterlockedCompareExchangePointer( (void **)(typeinfo + tid), info, NULL ))
152 ITypeInfo_Release( info );
153 }
154 *ret = typeinfo[tid];
155 ITypeInfo_AddRef(typeinfo[tid]);
156 return S_OK;
157 }
158
release_typelib(void)159 void release_typelib(void)
160 {
161 unsigned i;
162
163 for (i = 0; i < ARRAY_SIZE(typeinfo); i++)
164 if (typeinfo[i])
165 ITypeInfo_Release(typeinfo[i]);
166
167 if (typelib)
168 ITypeLib_Release(typelib);
169 }
170
fw_app_GetTypeInfo(INetFwAuthorizedApplication * iface,UINT iTInfo,LCID lcid,ITypeInfo ** ppTInfo)171 static HRESULT WINAPI fw_app_GetTypeInfo(
172 INetFwAuthorizedApplication *iface,
173 UINT iTInfo,
174 LCID lcid,
175 ITypeInfo **ppTInfo )
176 {
177 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
178
179 TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
180 return get_typeinfo( INetFwAuthorizedApplication_tid, ppTInfo );
181 }
182
fw_app_GetIDsOfNames(INetFwAuthorizedApplication * iface,REFIID riid,LPOLESTR * rgszNames,UINT cNames,LCID lcid,DISPID * rgDispId)183 static HRESULT WINAPI fw_app_GetIDsOfNames(
184 INetFwAuthorizedApplication *iface,
185 REFIID riid,
186 LPOLESTR *rgszNames,
187 UINT cNames,
188 LCID lcid,
189 DISPID *rgDispId )
190 {
191 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
192 ITypeInfo *typeinfo;
193 HRESULT hr;
194
195 TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
196
197 hr = get_typeinfo( INetFwAuthorizedApplication_tid, &typeinfo );
198 if (SUCCEEDED(hr))
199 {
200 hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId );
201 ITypeInfo_Release( typeinfo );
202 }
203 return hr;
204 }
205
fw_app_Invoke(INetFwAuthorizedApplication * iface,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS * pDispParams,VARIANT * pVarResult,EXCEPINFO * pExcepInfo,UINT * puArgErr)206 static HRESULT WINAPI fw_app_Invoke(
207 INetFwAuthorizedApplication *iface,
208 DISPID dispIdMember,
209 REFIID riid,
210 LCID lcid,
211 WORD wFlags,
212 DISPPARAMS *pDispParams,
213 VARIANT *pVarResult,
214 EXCEPINFO *pExcepInfo,
215 UINT *puArgErr )
216 {
217 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
218 ITypeInfo *typeinfo;
219 HRESULT hr;
220
221 TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
222 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
223
224 hr = get_typeinfo( INetFwAuthorizedApplication_tid, &typeinfo );
225 if (SUCCEEDED(hr))
226 {
227 hr = ITypeInfo_Invoke( typeinfo, &This->INetFwAuthorizedApplication_iface, dispIdMember,
228 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
229 ITypeInfo_Release( typeinfo );
230 }
231 return hr;
232 }
233
fw_app_get_Name(INetFwAuthorizedApplication * iface,BSTR * name)234 static HRESULT WINAPI fw_app_get_Name(
235 INetFwAuthorizedApplication *iface,
236 BSTR *name )
237 {
238 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
239
240 FIXME("%p, %p\n", This, name);
241 return E_NOTIMPL;
242 }
243
fw_app_put_Name(INetFwAuthorizedApplication * iface,BSTR name)244 static HRESULT WINAPI fw_app_put_Name(
245 INetFwAuthorizedApplication *iface,
246 BSTR name )
247 {
248 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
249
250 FIXME("%p, %s\n", This, debugstr_w(name));
251 return S_OK;
252 }
253
fw_app_get_ProcessImageFileName(INetFwAuthorizedApplication * iface,BSTR * imageFileName)254 static HRESULT WINAPI fw_app_get_ProcessImageFileName(
255 INetFwAuthorizedApplication *iface,
256 BSTR *imageFileName )
257 {
258 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
259
260 FIXME("%p, %p\n", This, imageFileName);
261
262 if (!imageFileName)
263 return E_POINTER;
264
265 *imageFileName = SysAllocString( This->filename );
266 return *imageFileName || !This->filename ? S_OK : E_OUTOFMEMORY;
267 }
268
fw_app_put_ProcessImageFileName(INetFwAuthorizedApplication * iface,BSTR image)269 static HRESULT WINAPI fw_app_put_ProcessImageFileName(
270 INetFwAuthorizedApplication *iface, BSTR image )
271 {
272 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
273 UNIVERSAL_NAME_INFOW *info;
274 DWORD sz, longsz;
275 WCHAR *path;
276 DWORD res;
277
278 FIXME("%p, %s\n", This, debugstr_w(image));
279
280 if (!image || !image[0])
281 return E_INVALIDARG;
282
283 sz = 0;
284 res = WNetGetUniversalNameW(image, UNIVERSAL_NAME_INFO_LEVEL, NULL, &sz);
285 if (res == WN_MORE_DATA)
286 {
287 if (!(path = heap_alloc(sz)))
288 return E_OUTOFMEMORY;
289
290 info = (UNIVERSAL_NAME_INFOW *)&path;
291 res = WNetGetUniversalNameW(image, UNIVERSAL_NAME_INFO_LEVEL, &info, &sz);
292 if (res == NO_ERROR)
293 {
294 SysFreeString(This->filename);
295 This->filename = SysAllocString(info->lpUniversalName);
296 }
297 heap_free(path);
298 return HRESULT_FROM_WIN32(res);
299 }
300
301 sz = GetFullPathNameW(image, 0, NULL, NULL);
302 if (!(path = heap_alloc(++sz * sizeof(WCHAR))))
303 return E_OUTOFMEMORY;
304 GetFullPathNameW(image, sz, path, NULL);
305
306 longsz = GetLongPathNameW(path, path, sz);
307 if (longsz > sz)
308 {
309 if (!(path = heap_realloc(path, longsz * sizeof(WCHAR))))
310 {
311 heap_free(path);
312 return E_OUTOFMEMORY;
313 }
314 GetLongPathNameW(path, path, longsz);
315 }
316
317 SysFreeString( This->filename );
318 This->filename = SysAllocString(path);
319 heap_free(path);
320 return This->filename ? S_OK : E_OUTOFMEMORY;
321 }
322
fw_app_get_IpVersion(INetFwAuthorizedApplication * iface,NET_FW_IP_VERSION * ipVersion)323 static HRESULT WINAPI fw_app_get_IpVersion(
324 INetFwAuthorizedApplication *iface,
325 NET_FW_IP_VERSION *ipVersion )
326 {
327 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
328
329 TRACE("%p, %p\n", This, ipVersion);
330
331 if (!ipVersion)
332 return E_POINTER;
333 *ipVersion = NET_FW_IP_VERSION_ANY;
334 return S_OK;
335 }
336
fw_app_put_IpVersion(INetFwAuthorizedApplication * iface,NET_FW_IP_VERSION ipVersion)337 static HRESULT WINAPI fw_app_put_IpVersion(
338 INetFwAuthorizedApplication *iface,
339 NET_FW_IP_VERSION ipVersion )
340 {
341 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
342
343 TRACE("%p, %u\n", This, ipVersion);
344 return S_OK;
345 }
346
fw_app_get_Scope(INetFwAuthorizedApplication * iface,NET_FW_SCOPE * scope)347 static HRESULT WINAPI fw_app_get_Scope(
348 INetFwAuthorizedApplication *iface,
349 NET_FW_SCOPE *scope )
350 {
351 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
352
353 FIXME("%p, %p\n", This, scope);
354 return E_NOTIMPL;
355 }
356
fw_app_put_Scope(INetFwAuthorizedApplication * iface,NET_FW_SCOPE scope)357 static HRESULT WINAPI fw_app_put_Scope(
358 INetFwAuthorizedApplication *iface,
359 NET_FW_SCOPE scope )
360 {
361 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
362
363 FIXME("%p, %u\n", This, scope);
364 return S_OK;
365 }
366
fw_app_get_RemoteAddresses(INetFwAuthorizedApplication * iface,BSTR * remoteAddrs)367 static HRESULT WINAPI fw_app_get_RemoteAddresses(
368 INetFwAuthorizedApplication *iface,
369 BSTR *remoteAddrs )
370 {
371 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
372
373 FIXME("%p, %p\n", This, remoteAddrs);
374 return E_NOTIMPL;
375 }
376
fw_app_put_RemoteAddresses(INetFwAuthorizedApplication * iface,BSTR remoteAddrs)377 static HRESULT WINAPI fw_app_put_RemoteAddresses(
378 INetFwAuthorizedApplication *iface,
379 BSTR remoteAddrs )
380 {
381 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
382
383 FIXME("%p, %s\n", This, debugstr_w(remoteAddrs));
384 return E_NOTIMPL;
385 }
386
fw_app_get_Enabled(INetFwAuthorizedApplication * iface,VARIANT_BOOL * enabled)387 static HRESULT WINAPI fw_app_get_Enabled(
388 INetFwAuthorizedApplication *iface,
389 VARIANT_BOOL *enabled )
390 {
391 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
392
393 FIXME("%p, %p\n", This, enabled);
394
395 *enabled = VARIANT_FALSE;
396 return S_OK;
397 }
398
fw_app_put_Enabled(INetFwAuthorizedApplication * iface,VARIANT_BOOL enabled)399 static HRESULT WINAPI fw_app_put_Enabled(
400 INetFwAuthorizedApplication *iface,
401 VARIANT_BOOL enabled )
402 {
403 fw_app *This = impl_from_INetFwAuthorizedApplication( iface );
404
405 FIXME("%p, %d\n", This, enabled);
406 return S_OK;
407 }
408
409 static const struct INetFwAuthorizedApplicationVtbl fw_app_vtbl =
410 {
411 fw_app_QueryInterface,
412 fw_app_AddRef,
413 fw_app_Release,
414 fw_app_GetTypeInfoCount,
415 fw_app_GetTypeInfo,
416 fw_app_GetIDsOfNames,
417 fw_app_Invoke,
418 fw_app_get_Name,
419 fw_app_put_Name,
420 fw_app_get_ProcessImageFileName,
421 fw_app_put_ProcessImageFileName,
422 fw_app_get_IpVersion,
423 fw_app_put_IpVersion,
424 fw_app_get_Scope,
425 fw_app_put_Scope,
426 fw_app_get_RemoteAddresses,
427 fw_app_put_RemoteAddresses,
428 fw_app_get_Enabled,
429 fw_app_put_Enabled
430 };
431
NetFwAuthorizedApplication_create(IUnknown * pUnkOuter,LPVOID * ppObj)432 HRESULT NetFwAuthorizedApplication_create( IUnknown *pUnkOuter, LPVOID *ppObj )
433 {
434 fw_app *fa;
435
436 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
437
438 fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) );
439 if (!fa) return E_OUTOFMEMORY;
440
441 fa->INetFwAuthorizedApplication_iface.lpVtbl = &fw_app_vtbl;
442 fa->refs = 1;
443 fa->filename = NULL;
444
445 *ppObj = &fa->INetFwAuthorizedApplication_iface;
446
447 TRACE("returning iface %p\n", *ppObj);
448 return S_OK;
449 }
450 typedef struct fw_apps
451 {
452 INetFwAuthorizedApplications INetFwAuthorizedApplications_iface;
453 LONG refs;
454 } fw_apps;
455
impl_from_INetFwAuthorizedApplications(INetFwAuthorizedApplications * iface)456 static inline fw_apps *impl_from_INetFwAuthorizedApplications( INetFwAuthorizedApplications *iface )
457 {
458 return CONTAINING_RECORD(iface, fw_apps, INetFwAuthorizedApplications_iface);
459 }
460
fw_apps_AddRef(INetFwAuthorizedApplications * iface)461 static ULONG WINAPI fw_apps_AddRef(
462 INetFwAuthorizedApplications *iface )
463 {
464 fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface );
465 return InterlockedIncrement( &fw_apps->refs );
466 }
467
fw_apps_Release(INetFwAuthorizedApplications * iface)468 static ULONG WINAPI fw_apps_Release(
469 INetFwAuthorizedApplications *iface )
470 {
471 fw_apps *fw_apps = impl_from_INetFwAuthorizedApplications( iface );
472 LONG refs = InterlockedDecrement( &fw_apps->refs );
473 if (!refs)
474 {
475 TRACE("destroying %p\n", fw_apps);
476 HeapFree( GetProcessHeap(), 0, fw_apps );
477 }
478 return refs;
479 }
480
fw_apps_QueryInterface(INetFwAuthorizedApplications * iface,REFIID riid,void ** ppvObject)481 static HRESULT WINAPI fw_apps_QueryInterface(
482 INetFwAuthorizedApplications *iface,
483 REFIID riid,
484 void **ppvObject )
485 {
486 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
487
488 TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
489
490 if ( IsEqualGUID( riid, &IID_INetFwAuthorizedApplications ) ||
491 IsEqualGUID( riid, &IID_IDispatch ) ||
492 IsEqualGUID( riid, &IID_IUnknown ) )
493 {
494 *ppvObject = iface;
495 }
496 else
497 {
498 FIXME("interface %s not implemented\n", debugstr_guid(riid));
499 return E_NOINTERFACE;
500 }
501 INetFwAuthorizedApplications_AddRef( iface );
502 return S_OK;
503 }
504
fw_apps_GetTypeInfoCount(INetFwAuthorizedApplications * iface,UINT * pctinfo)505 static HRESULT WINAPI fw_apps_GetTypeInfoCount(
506 INetFwAuthorizedApplications *iface,
507 UINT *pctinfo )
508 {
509 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
510
511 FIXME("%p %p\n", This, pctinfo);
512 return E_NOTIMPL;
513 }
514
fw_apps_GetTypeInfo(INetFwAuthorizedApplications * iface,UINT iTInfo,LCID lcid,ITypeInfo ** ppTInfo)515 static HRESULT WINAPI fw_apps_GetTypeInfo(
516 INetFwAuthorizedApplications *iface,
517 UINT iTInfo,
518 LCID lcid,
519 ITypeInfo **ppTInfo )
520 {
521 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
522
523 TRACE("%p %u %u %p\n", This, iTInfo, lcid, ppTInfo);
524 return get_typeinfo( INetFwAuthorizedApplications_tid, ppTInfo );
525 }
526
fw_apps_GetIDsOfNames(INetFwAuthorizedApplications * iface,REFIID riid,LPOLESTR * rgszNames,UINT cNames,LCID lcid,DISPID * rgDispId)527 static HRESULT WINAPI fw_apps_GetIDsOfNames(
528 INetFwAuthorizedApplications *iface,
529 REFIID riid,
530 LPOLESTR *rgszNames,
531 UINT cNames,
532 LCID lcid,
533 DISPID *rgDispId )
534 {
535 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
536 ITypeInfo *typeinfo;
537 HRESULT hr;
538
539 TRACE("%p %s %p %u %u %p\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
540
541 hr = get_typeinfo( INetFwAuthorizedApplications_tid, &typeinfo );
542 if (SUCCEEDED(hr))
543 {
544 hr = ITypeInfo_GetIDsOfNames( typeinfo, rgszNames, cNames, rgDispId );
545 ITypeInfo_Release( typeinfo );
546 }
547 return hr;
548 }
549
fw_apps_Invoke(INetFwAuthorizedApplications * iface,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS * pDispParams,VARIANT * pVarResult,EXCEPINFO * pExcepInfo,UINT * puArgErr)550 static HRESULT WINAPI fw_apps_Invoke(
551 INetFwAuthorizedApplications *iface,
552 DISPID dispIdMember,
553 REFIID riid,
554 LCID lcid,
555 WORD wFlags,
556 DISPPARAMS *pDispParams,
557 VARIANT *pVarResult,
558 EXCEPINFO *pExcepInfo,
559 UINT *puArgErr )
560 {
561 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
562 ITypeInfo *typeinfo;
563 HRESULT hr;
564
565 TRACE("%p %d %s %d %d %p %p %p %p\n", This, dispIdMember, debugstr_guid(riid),
566 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
567
568 hr = get_typeinfo( INetFwAuthorizedApplications_tid, &typeinfo );
569 if (SUCCEEDED(hr))
570 {
571 hr = ITypeInfo_Invoke( typeinfo, &This->INetFwAuthorizedApplications_iface, dispIdMember,
572 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr );
573 ITypeInfo_Release( typeinfo );
574 }
575 return hr;
576 }
577
fw_apps_get_Count(INetFwAuthorizedApplications * iface,LONG * count)578 static HRESULT WINAPI fw_apps_get_Count(
579 INetFwAuthorizedApplications *iface,
580 LONG *count )
581 {
582 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
583
584 FIXME("%p, %p\n", This, count);
585 return E_NOTIMPL;
586 }
587
fw_apps_Add(INetFwAuthorizedApplications * iface,INetFwAuthorizedApplication * app)588 static HRESULT WINAPI fw_apps_Add(
589 INetFwAuthorizedApplications *iface,
590 INetFwAuthorizedApplication *app )
591 {
592 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
593
594 FIXME("%p, %p\n", This, app);
595 return S_OK;
596 }
597
fw_apps_Remove(INetFwAuthorizedApplications * iface,BSTR imageFileName)598 static HRESULT WINAPI fw_apps_Remove(
599 INetFwAuthorizedApplications *iface,
600 BSTR imageFileName )
601 {
602 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
603
604 FIXME("%p, %s\n", This, debugstr_w(imageFileName));
605 return S_OK;
606 }
607
fw_apps_Item(INetFwAuthorizedApplications * iface,BSTR imageFileName,INetFwAuthorizedApplication ** app)608 static HRESULT WINAPI fw_apps_Item(
609 INetFwAuthorizedApplications *iface,
610 BSTR imageFileName,
611 INetFwAuthorizedApplication **app )
612 {
613 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
614
615 TRACE("%p, %s, %p\n", This, debugstr_w(imageFileName), app);
616 return NetFwAuthorizedApplication_create( NULL, (void **)app );
617 }
618
fw_apps_get__NewEnum(INetFwAuthorizedApplications * iface,IUnknown ** newEnum)619 static HRESULT WINAPI fw_apps_get__NewEnum(
620 INetFwAuthorizedApplications *iface,
621 IUnknown **newEnum )
622 {
623 fw_apps *This = impl_from_INetFwAuthorizedApplications( iface );
624
625 FIXME("%p, %p\n", This, newEnum);
626 return E_NOTIMPL;
627 }
628
629 static const struct INetFwAuthorizedApplicationsVtbl fw_apps_vtbl =
630 {
631 fw_apps_QueryInterface,
632 fw_apps_AddRef,
633 fw_apps_Release,
634 fw_apps_GetTypeInfoCount,
635 fw_apps_GetTypeInfo,
636 fw_apps_GetIDsOfNames,
637 fw_apps_Invoke,
638 fw_apps_get_Count,
639 fw_apps_Add,
640 fw_apps_Remove,
641 fw_apps_Item,
642 fw_apps_get__NewEnum
643 };
644
NetFwAuthorizedApplications_create(IUnknown * pUnkOuter,LPVOID * ppObj)645 HRESULT NetFwAuthorizedApplications_create( IUnknown *pUnkOuter, LPVOID *ppObj )
646 {
647 fw_apps *fa;
648
649 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
650
651 fa = HeapAlloc( GetProcessHeap(), 0, sizeof(*fa) );
652 if (!fa) return E_OUTOFMEMORY;
653
654 fa->INetFwAuthorizedApplications_iface.lpVtbl = &fw_apps_vtbl;
655 fa->refs = 1;
656
657 *ppObj = &fa->INetFwAuthorizedApplications_iface;
658
659 TRACE("returning iface %p\n", *ppObj);
660 return S_OK;
661 }
662