From 1c502124a9a8bb1a8e7f79ed3fc94875f3228689 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Brammer?= <gbrammer@gmx.de>
Date: Sun, 30 Oct 2011 16:17:40 +0100
Subject: [PATCH 10/10] win32: Add a firewall exception on installation

---
 Makefile.am                |    5 +
 tools/install/exdll.h      |  140 +++
 tools/install/firewall.cpp |  149 +++
 tools/install/netfw.h      | 2747 ++++++++++++++++++++++++++++++++++++++++++++
 tools/install/oc.nsi       |    9 +
 5 files changed, 3050 insertions(+), 0 deletions(-)
 create mode 100644 tools/install/exdll.h
 create mode 100644 tools/install/firewall.cpp
 create mode 100644 tools/install/netfw.h

diff --git a/Makefile.am b/Makefile.am
index adf7ecb..e265355 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -716,11 +716,16 @@ AM_CXXFLAGS += -DOC_SYSTEM_DATA_DIR=\"${pkgdatadir}\"
 	./c4group$(EXEEXT) $< -t $@ || c4group $< -t $@
 
 ## windows setup.exe
+if WIN32
+tools/install/firewall.dll: $(srcdir)/tools/install/firewall.cpp
+	mkdir -p tools/install
+	$(CXX) -shared -o tools/install/firewall.dll $(srcdir)/tools/install/firewall.cpp -lole32 -loleaut32
 setup_openclonk.exe: $(srcdir)/tools/install/oc.nsi c4group$(EXEEXT) clonk$(EXEEXT) $(c4groups)
 	makensis -NOCD -DSRCDIR=$(srcdir) '-DPROGRAMFILES=$$PROGRAMFILES' \
 	  -DPRODUCT_NAME="$$(sed -n 's/SET(C4ENGINENAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)$$(sed -n 's/SET(C4VERSIONBUILDNAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)" \
 	  -DPRODUCT_COMPANY="$$(sed -n 's/SET(C4PROJECT\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)" \
 	  $< "-XOutFile $@"
+endif
 
 ## other stuff
 
diff --git a/tools/install/exdll.h b/tools/install/exdll.h
new file mode 100644
index 0000000..8f3a7ac
--- /dev/null
+++ b/tools/install/exdll.h
@@ -0,0 +1,140 @@
+#ifndef _EXDLL_H_
+#define _EXDLL_H_
+
+#include <windows.h>
+
+#if defined(__GNUC__)
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+
+// only include this file from one place in your DLL.
+// (it is all static, if you use it in two places it will fail)
+
+#define EXDLL_INIT()           {  \
+        g_stringsize=string_size; \
+        g_stacktop=stacktop;      \
+        g_variables=variables; }
+
+// For page showing plug-ins
+#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
+#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
+#define NOTIFY_BYE_BYE 'x'
+
+typedef struct _stack_t {
+  struct _stack_t *next;
+  char text[1]; // this should be the length of string_size
+} stack_t;
+
+
+static unsigned int g_stringsize;
+static stack_t **g_stacktop;
+static char *g_variables;
+
+static int __stdcall popstring(char *str) UNUSED; // 0 on success, 1 on empty stack
+static void __stdcall pushstring(const char *str) UNUSED;
+static char * __stdcall getuservariable(const int varnum) UNUSED;
+static void __stdcall setuservariable(const int varnum, const char *var) UNUSED;
+
+enum
+{
+INST_0,         // $0
+INST_1,         // $1
+INST_2,         // $2
+INST_3,         // $3
+INST_4,         // $4
+INST_5,         // $5
+INST_6,         // $6
+INST_7,         // $7
+INST_8,         // $8
+INST_9,         // $9
+INST_R0,        // $R0
+INST_R1,        // $R1
+INST_R2,        // $R2
+INST_R3,        // $R3
+INST_R4,        // $R4
+INST_R5,        // $R5
+INST_R6,        // $R6
+INST_R7,        // $R7
+INST_R8,        // $R8
+INST_R9,        // $R9
+INST_CMDLINE,   // $CMDLINE
+INST_INSTDIR,   // $INSTDIR
+INST_OUTDIR,    // $OUTDIR
+INST_EXEDIR,    // $EXEDIR
+INST_LANG,      // $LANGUAGE
+__INST_LAST
+};
+
+typedef struct {
+  int autoclose;
+  int all_user_var;
+  int exec_error;
+  int abort;
+  int exec_reboot;
+  int reboot_called;
+  int XXX_cur_insttype; // deprecated
+  int XXX_insttype_changed; // deprecated
+  int silent;
+  int instdir_error;
+  int rtl;
+  int errlvl;
+  int alter_reg_view;
+  int status_update;
+} exec_flags_type;
+
+typedef struct {
+  exec_flags_type *exec_flags;
+  int (__stdcall *ExecuteCodeSegment)(int, HWND);
+  void (__stdcall *validate_filename)(char *);
+} extra_parameters;
+
+// utility functions (not required but often useful)
+static int __stdcall popstring(char *str)
+{
+  stack_t *th;
+  if (!g_stacktop || !*g_stacktop) return 1;
+  th=(*g_stacktop);
+  lstrcpyA(str,th->text);
+  *g_stacktop = th->next;
+  GlobalFree((HGLOBAL)th);
+  return 0;
+}
+
+static int __stdcall popstring(wchar_t *str, int len)
+{
+  stack_t *th;
+  if (!g_stacktop || !*g_stacktop) return 1;
+  th=(*g_stacktop);
+  MultiByteToWideChar(CP_ACP, 0, th->text, -1, str, len);
+  *g_stacktop = th->next;
+  GlobalFree((HGLOBAL)th);
+  return 0;
+}
+
+static void __stdcall pushstring(const char *str)
+{
+  stack_t *th;
+  if (!g_stacktop) return;
+  th=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t)+g_stringsize);
+  lstrcpynA(th->text,str,g_stringsize);
+  th->next=*g_stacktop;
+  *g_stacktop=th;
+}
+
+static char * __stdcall getuservariable(const int varnum)
+{
+  if (varnum < 0 || varnum >= __INST_LAST) return NULL;
+  return g_variables+varnum*g_stringsize;
+}
+
+static void __stdcall setuservariable(const int varnum, const char *var)
+{
+	if (var != NULL && varnum >= 0 && varnum < __INST_LAST) 
+		lstrcpyA(g_variables + varnum*g_stringsize, var);
+}
+
+
+
+#endif//_EXDLL_H_
diff --git a/tools/install/firewall.cpp b/tools/install/firewall.cpp
new file mode 100644
index 0000000..b1835b8
--- /dev/null
+++ b/tools/install/firewall.cpp
@@ -0,0 +1,149 @@
+/*
+nsisFirewall -- Small NSIS plugin for simple tasks with Windows Firewall
+Web site: http://wiz0u.free.fr/prog/nsisFirewall
+
+Copyright (c) 2007-2009 Olivier Marcoux
+
+This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source distribution.
+*/
+#undef UNICODE
+#undef _UNICODE
+#include <windows.h>
+#include <tchar.h>
+#include <shlwapi.h>
+
+#include <initguid.h>
+#include "netfw.h"
+#include "exdll.h"
+
+HRESULT AddAuthorizedApplication(wchar_t * ExceptionName, wchar_t * ProcessPath)
+{
+	HRESULT hr = CoInitialize(NULL);
+	if (FAILED(hr))
+		return hr;
+
+	INetFwMgr * mgr = 0;
+	INetFwAuthorizedApplication * app = 0;
+	INetFwPolicy * localPolicy = 0;
+	INetFwProfile * profile = 0;
+	INetFwAuthorizedApplications * apps = 0;
+
+	BSTR bstrRuleName = SysAllocString(ExceptionName);
+	BSTR bstrApplicationName = SysAllocString(ProcessPath);
+
+	hr = CoCreateInstance(CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER, IID_INetFwMgr,
+		reinterpret_cast<void**>(static_cast<INetFwMgr**>(&mgr)));
+	if (FAILED(hr)) goto out;
+
+	hr = CoCreateInstance(CLSID_NetFwAuthorizedApplication, NULL, CLSCTX_INPROC_SERVER, IID_INetFwAuthorizedApplication,
+		reinterpret_cast<void**>(static_cast<INetFwAuthorizedApplication**>(&app)));
+	if (FAILED(hr)) goto out;
+
+	app->put_ProcessImageFileName(bstrApplicationName);
+	app->put_Name(bstrRuleName);
+	app->put_Scope(NET_FW_SCOPE_ALL);
+	app->put_IpVersion(NET_FW_IP_VERSION_ANY);
+	app->put_Enabled(VARIANT_TRUE);
+
+	hr = mgr->get_LocalPolicy(&localPolicy);
+	if (FAILED(hr)) goto out;
+
+	hr = localPolicy->get_CurrentProfile(&profile);
+	if (FAILED(hr)) goto out;
+
+	hr = profile->get_AuthorizedApplications(&apps);
+	if (FAILED(hr)) goto out;
+
+	hr = apps->Add(app);
+
+out:
+	SysFreeString(bstrRuleName);
+	SysFreeString(bstrApplicationName);
+	if(apps) apps->Release();
+	if(profile) profile->Release();
+	if(localPolicy) localPolicy->Release();
+	if(app) app->Release();
+	if(mgr) mgr->Release();
+	CoUninitialize();
+	return hr;
+}
+
+HRESULT RemoveAuthorizedApplication(wchar_t * ProcessPath)
+{
+	HRESULT hr = CoInitialize(NULL);
+	if (FAILED(hr)) return hr;
+
+	INetFwMgr * mgr = 0;
+	INetFwPolicy * localPolicy = 0;
+	INetFwProfile * profile = 0;
+	INetFwAuthorizedApplications * apps = 0;
+
+	BSTR bstrApplicationName = SysAllocString(ProcessPath);
+
+	hr = CoCreateInstance(CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER, IID_INetFwMgr,
+		reinterpret_cast<void**>(static_cast<INetFwMgr**>(&mgr)));
+	if (FAILED(hr)) goto out;
+
+	hr = mgr->get_LocalPolicy(&localPolicy);
+	if (FAILED(hr)) goto out;
+
+	hr = localPolicy->get_CurrentProfile(&profile);
+	if (FAILED(hr)) goto out;
+
+	hr = profile->get_AuthorizedApplications(&apps);
+	if (FAILED(hr)) goto out;
+
+	hr = apps->Remove(bstrApplicationName);
+
+out:
+	SysFreeString(bstrApplicationName);
+	if(apps) apps->Release();
+	if(profile) profile->Release();
+	if(localPolicy) localPolicy->Release();
+	if(mgr) mgr->Release();
+	CoUninitialize();
+	return hr;
+}
+
+extern "C" void __declspec(dllexport) AddAuthorizedApplication(HWND hwndParent, int string_size, 
+                                      TCHAR *variables, stack_t **stacktop)
+{
+	EXDLL_INIT();
+
+	wchar_t ExceptionName[256], ProcessPath[MAX_PATH];
+	popstring(ProcessPath, MAX_PATH);
+	popstring(ExceptionName, 256);
+	HRESULT result = AddAuthorizedApplication(ExceptionName, ProcessPath);
+	// push the result back to NSIS
+	TCHAR intBuffer[16];
+	wsprintf(intBuffer, _T("%d"), result);
+	pushstring(intBuffer);
+}
+
+extern "C" void __declspec(dllexport) RemoveAuthorizedApplication(HWND hwndParent, int string_size, 
+                                      TCHAR *variables, stack_t **stacktop)
+{
+	EXDLL_INIT();
+
+	wchar_t ProcessPath[MAX_PATH];
+	popstring(ProcessPath, MAX_PATH);
+	HRESULT result = RemoveAuthorizedApplication(ProcessPath);
+	// push the result back to NSIS
+	TCHAR intBuffer[16];
+	wsprintf(intBuffer, _T("%d"), result);
+	pushstring(intBuffer);
+}
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD, LPVOID)
+{
+	return TRUE;
+}
+
diff --git a/tools/install/netfw.h b/tools/install/netfw.h
new file mode 100644
index 0000000..665f674
--- /dev/null
+++ b/tools/install/netfw.h
@@ -0,0 +1,2747 @@
+/*** Autogenerated by WIDL 1.3.9 from /opt/src/wine/wine-git/include/netfw.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_NETFW_H
+#define __WIDL_NETFW_H
+
+/* Forward declarations */
+
+#ifndef __INetFwIcmpSettings_FWD_DEFINED__
+#define __INetFwIcmpSettings_FWD_DEFINED__
+typedef interface INetFwIcmpSettings INetFwIcmpSettings;
+#endif
+
+#ifndef __INetFwOpenPort_FWD_DEFINED__
+#define __INetFwOpenPort_FWD_DEFINED__
+typedef interface INetFwOpenPort INetFwOpenPort;
+#endif
+
+#ifndef __INetFwOpenPorts_FWD_DEFINED__
+#define __INetFwOpenPorts_FWD_DEFINED__
+typedef interface INetFwOpenPorts INetFwOpenPorts;
+#endif
+
+#ifndef __INetFwService_FWD_DEFINED__
+#define __INetFwService_FWD_DEFINED__
+typedef interface INetFwService INetFwService;
+#endif
+
+#ifndef __INetFwServices_FWD_DEFINED__
+#define __INetFwServices_FWD_DEFINED__
+typedef interface INetFwServices INetFwServices;
+#endif
+
+#ifndef __INetFwAuthorizedApplication_FWD_DEFINED__
+#define __INetFwAuthorizedApplication_FWD_DEFINED__
+typedef interface INetFwAuthorizedApplication INetFwAuthorizedApplication;
+#endif
+
+#ifndef __INetFwRemoteAdminSettings_FWD_DEFINED__
+#define __INetFwRemoteAdminSettings_FWD_DEFINED__
+typedef interface INetFwRemoteAdminSettings INetFwRemoteAdminSettings;
+#endif
+
+#ifndef __INetFwAuthorizedApplications_FWD_DEFINED__
+#define __INetFwAuthorizedApplications_FWD_DEFINED__
+typedef interface INetFwAuthorizedApplications INetFwAuthorizedApplications;
+#endif
+
+#ifndef __INetFwProfile_FWD_DEFINED__
+#define __INetFwProfile_FWD_DEFINED__
+typedef interface INetFwProfile INetFwProfile;
+#endif
+
+#ifndef __INetFwPolicy_FWD_DEFINED__
+#define __INetFwPolicy_FWD_DEFINED__
+typedef interface INetFwPolicy INetFwPolicy;
+#endif
+
+#ifndef __INetFwMgr_FWD_DEFINED__
+#define __INetFwMgr_FWD_DEFINED__
+typedef interface INetFwMgr INetFwMgr;
+#endif
+
+#ifndef __NetFwOpenPort_FWD_DEFINED__
+#define __NetFwOpenPort_FWD_DEFINED__
+typedef struct NetFwOpenPort NetFwOpenPort;
+#endif /* defined __NetFwOpenPort_FWD_DEFINED__ */
+
+#ifndef __NetFwAuthorizedApplication_FWD_DEFINED__
+#define __NetFwAuthorizedApplication_FWD_DEFINED__
+typedef struct NetFwAuthorizedApplication NetFwAuthorizedApplication;
+#endif /* defined __NetFwAuthorizedApplication_FWD_DEFINED__ */
+
+#ifndef __NetFwMgr_FWD_DEFINED__
+#define __NetFwMgr_FWD_DEFINED__
+typedef struct NetFwMgr NetFwMgr;
+#endif /* defined __NetFwMgr_FWD_DEFINED__ */
+
+/* Headers for imported files */
+
+#include <icftypes.h>
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * INetFwIcmpSettings interface
+ */
+#ifndef __INetFwIcmpSettings_INTERFACE_DEFINED__
+#define __INetFwIcmpSettings_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwIcmpSettings, 0xa6207b2e, 0x7cdd, 0x426a, 0x95,0x1e, 0x5e,0x1c,0xbc,0x5a,0xfe,0xad);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwIcmpSettings : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_AllowOutboundDestinationUnreachable(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowOutboundDestinationUnreachable(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowRedirect(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowRedirect(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowInboundEchoRequest(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowInboundEchoRequest(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowOutboundTimeExceeded(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowOutboundTimeExceeded(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowOutboundParameterProblem(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowOutboundParameterProblem(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowOutboundSourceQuench(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowOutboundSourceQuench(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowInboundRouterRequest(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowInboundRouterRequest(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowInboundTimestampRequest(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowInboundTimestampRequest(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowInboundMaskRequest(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowInboundMaskRequest(
+        VARIANT_BOOL allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AllowOutboundPacketTooBig(
+        VARIANT_BOOL *allow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_AllowOutboundPacketTooBig(
+        VARIANT_BOOL allow) = 0;
+
+};
+#else
+typedef struct INetFwIcmpSettingsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwIcmpSettings* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwIcmpSettings* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwIcmpSettings* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwIcmpSettings* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwIcmpSettings* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwIcmpSettings* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwIcmpSettings* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwIcmpSettings methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_AllowOutboundDestinationUnreachable)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowOutboundDestinationUnreachable)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowRedirect)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowRedirect)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowInboundEchoRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowInboundEchoRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowOutboundTimeExceeded)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowOutboundTimeExceeded)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowOutboundParameterProblem)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowOutboundParameterProblem)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowOutboundSourceQuench)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowOutboundSourceQuench)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowInboundRouterRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowInboundRouterRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowInboundTimestampRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowInboundTimestampRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowInboundMaskRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowInboundMaskRequest)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    HRESULT (STDMETHODCALLTYPE *get_AllowOutboundPacketTooBig)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL *allow);
+
+    HRESULT (STDMETHODCALLTYPE *put_AllowOutboundPacketTooBig)(
+        INetFwIcmpSettings* This,
+        VARIANT_BOOL allow);
+
+    END_INTERFACE
+} INetFwIcmpSettingsVtbl;
+interface INetFwIcmpSettings {
+    CONST_VTBL INetFwIcmpSettingsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwIcmpSettings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwIcmpSettings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwIcmpSettings_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwIcmpSettings_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwIcmpSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwIcmpSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwIcmpSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwIcmpSettings methods ***/
+#define INetFwIcmpSettings_get_AllowOutboundDestinationUnreachable(This,allow) (This)->lpVtbl->get_AllowOutboundDestinationUnreachable(This,allow)
+#define INetFwIcmpSettings_put_AllowOutboundDestinationUnreachable(This,allow) (This)->lpVtbl->put_AllowOutboundDestinationUnreachable(This,allow)
+#define INetFwIcmpSettings_get_AllowRedirect(This,allow) (This)->lpVtbl->get_AllowRedirect(This,allow)
+#define INetFwIcmpSettings_put_AllowRedirect(This,allow) (This)->lpVtbl->put_AllowRedirect(This,allow)
+#define INetFwIcmpSettings_get_AllowInboundEchoRequest(This,allow) (This)->lpVtbl->get_AllowInboundEchoRequest(This,allow)
+#define INetFwIcmpSettings_put_AllowInboundEchoRequest(This,allow) (This)->lpVtbl->put_AllowInboundEchoRequest(This,allow)
+#define INetFwIcmpSettings_get_AllowOutboundTimeExceeded(This,allow) (This)->lpVtbl->get_AllowOutboundTimeExceeded(This,allow)
+#define INetFwIcmpSettings_put_AllowOutboundTimeExceeded(This,allow) (This)->lpVtbl->put_AllowOutboundTimeExceeded(This,allow)
+#define INetFwIcmpSettings_get_AllowOutboundParameterProblem(This,allow) (This)->lpVtbl->get_AllowOutboundParameterProblem(This,allow)
+#define INetFwIcmpSettings_put_AllowOutboundParameterProblem(This,allow) (This)->lpVtbl->put_AllowOutboundParameterProblem(This,allow)
+#define INetFwIcmpSettings_get_AllowOutboundSourceQuench(This,allow) (This)->lpVtbl->get_AllowOutboundSourceQuench(This,allow)
+#define INetFwIcmpSettings_put_AllowOutboundSourceQuench(This,allow) (This)->lpVtbl->put_AllowOutboundSourceQuench(This,allow)
+#define INetFwIcmpSettings_get_AllowInboundRouterRequest(This,allow) (This)->lpVtbl->get_AllowInboundRouterRequest(This,allow)
+#define INetFwIcmpSettings_put_AllowInboundRouterRequest(This,allow) (This)->lpVtbl->put_AllowInboundRouterRequest(This,allow)
+#define INetFwIcmpSettings_get_AllowInboundTimestampRequest(This,allow) (This)->lpVtbl->get_AllowInboundTimestampRequest(This,allow)
+#define INetFwIcmpSettings_put_AllowInboundTimestampRequest(This,allow) (This)->lpVtbl->put_AllowInboundTimestampRequest(This,allow)
+#define INetFwIcmpSettings_get_AllowInboundMaskRequest(This,allow) (This)->lpVtbl->get_AllowInboundMaskRequest(This,allow)
+#define INetFwIcmpSettings_put_AllowInboundMaskRequest(This,allow) (This)->lpVtbl->put_AllowInboundMaskRequest(This,allow)
+#define INetFwIcmpSettings_get_AllowOutboundPacketTooBig(This,allow) (This)->lpVtbl->get_AllowOutboundPacketTooBig(This,allow)
+#define INetFwIcmpSettings_put_AllowOutboundPacketTooBig(This,allow) (This)->lpVtbl->put_AllowOutboundPacketTooBig(This,allow)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowOutboundDestinationUnreachable_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowOutboundDestinationUnreachable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowOutboundDestinationUnreachable_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowOutboundDestinationUnreachable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowRedirect_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowRedirect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowRedirect_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowRedirect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowInboundEchoRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowInboundEchoRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowInboundEchoRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowInboundEchoRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowOutboundTimeExceeded_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowOutboundTimeExceeded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowOutboundTimeExceeded_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowOutboundTimeExceeded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowOutboundParameterProblem_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowOutboundParameterProblem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowOutboundParameterProblem_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowOutboundParameterProblem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowOutboundSourceQuench_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowOutboundSourceQuench_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowOutboundSourceQuench_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowOutboundSourceQuench_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowInboundRouterRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowInboundRouterRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowInboundRouterRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowInboundRouterRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowInboundTimestampRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowInboundTimestampRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowInboundTimestampRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowInboundTimestampRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowInboundMaskRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowInboundMaskRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowInboundMaskRequest_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowInboundMaskRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_get_AllowOutboundPacketTooBig_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL *allow);
+void __RPC_STUB INetFwIcmpSettings_get_AllowOutboundPacketTooBig_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwIcmpSettings_put_AllowOutboundPacketTooBig_Proxy(
+    INetFwIcmpSettings* This,
+    VARIANT_BOOL allow);
+void __RPC_STUB INetFwIcmpSettings_put_AllowOutboundPacketTooBig_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwIcmpSettings_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwOpenPort interface
+ */
+#ifndef __INetFwOpenPort_INTERFACE_DEFINED__
+#define __INetFwOpenPort_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwOpenPort, 0xe0483ba0, 0x47ff, 0x4d9c, 0xa6,0xd6, 0x77,0x41,0xd0,0xb1,0x95,0xf7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwOpenPort : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Name(
+        BSTR name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IpVersion(
+        NET_FW_IP_VERSION *ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IpVersion(
+        NET_FW_IP_VERSION ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Protocol(
+        NET_FW_IP_PROTOCOL *ipProtocol) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Protocol(
+        NET_FW_IP_PROTOCOL ipProtocol) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Port(
+        LONG *portNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Port(
+        LONG portNumber) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Scope(
+        NET_FW_SCOPE *scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Scope(
+        NET_FW_SCOPE scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RemoteAddresses(
+        BSTR *remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RemoteAddresses(
+        BSTR remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
+        VARIANT_BOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Enabled(
+        VARIANT_BOOL enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_BuiltIn(
+        VARIANT_BOOL *builtIn) = 0;
+
+};
+#else
+typedef struct INetFwOpenPortVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwOpenPort* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwOpenPort* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwOpenPort* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwOpenPort* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwOpenPort* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwOpenPort* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwOpenPort* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwOpenPort methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        INetFwOpenPort* This,
+        BSTR *name);
+
+    HRESULT (STDMETHODCALLTYPE *put_Name)(
+        INetFwOpenPort* This,
+        BSTR name);
+
+    HRESULT (STDMETHODCALLTYPE *get_IpVersion)(
+        INetFwOpenPort* This,
+        NET_FW_IP_VERSION *ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *put_IpVersion)(
+        INetFwOpenPort* This,
+        NET_FW_IP_VERSION ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *get_Protocol)(
+        INetFwOpenPort* This,
+        NET_FW_IP_PROTOCOL *ipProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *put_Protocol)(
+        INetFwOpenPort* This,
+        NET_FW_IP_PROTOCOL ipProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *get_Port)(
+        INetFwOpenPort* This,
+        LONG *portNumber);
+
+    HRESULT (STDMETHODCALLTYPE *put_Port)(
+        INetFwOpenPort* This,
+        LONG portNumber);
+
+    HRESULT (STDMETHODCALLTYPE *get_Scope)(
+        INetFwOpenPort* This,
+        NET_FW_SCOPE *scope);
+
+    HRESULT (STDMETHODCALLTYPE *put_Scope)(
+        INetFwOpenPort* This,
+        NET_FW_SCOPE scope);
+
+    HRESULT (STDMETHODCALLTYPE *get_RemoteAddresses)(
+        INetFwOpenPort* This,
+        BSTR *remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *put_RemoteAddresses)(
+        INetFwOpenPort* This,
+        BSTR remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
+        INetFwOpenPort* This,
+        VARIANT_BOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_Enabled)(
+        INetFwOpenPort* This,
+        VARIANT_BOOL enabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_BuiltIn)(
+        INetFwOpenPort* This,
+        VARIANT_BOOL *builtIn);
+
+    END_INTERFACE
+} INetFwOpenPortVtbl;
+interface INetFwOpenPort {
+    CONST_VTBL INetFwOpenPortVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwOpenPort_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwOpenPort_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwOpenPort_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwOpenPort_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwOpenPort_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwOpenPort_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwOpenPort_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwOpenPort methods ***/
+#define INetFwOpenPort_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
+#define INetFwOpenPort_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)
+#define INetFwOpenPort_get_IpVersion(This,ipVersion) (This)->lpVtbl->get_IpVersion(This,ipVersion)
+#define INetFwOpenPort_put_IpVersion(This,ipVersion) (This)->lpVtbl->put_IpVersion(This,ipVersion)
+#define INetFwOpenPort_get_Protocol(This,ipProtocol) (This)->lpVtbl->get_Protocol(This,ipProtocol)
+#define INetFwOpenPort_put_Protocol(This,ipProtocol) (This)->lpVtbl->put_Protocol(This,ipProtocol)
+#define INetFwOpenPort_get_Port(This,portNumber) (This)->lpVtbl->get_Port(This,portNumber)
+#define INetFwOpenPort_put_Port(This,portNumber) (This)->lpVtbl->put_Port(This,portNumber)
+#define INetFwOpenPort_get_Scope(This,scope) (This)->lpVtbl->get_Scope(This,scope)
+#define INetFwOpenPort_put_Scope(This,scope) (This)->lpVtbl->put_Scope(This,scope)
+#define INetFwOpenPort_get_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->get_RemoteAddresses(This,remoteAddrs)
+#define INetFwOpenPort_put_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->put_RemoteAddresses(This,remoteAddrs)
+#define INetFwOpenPort_get_Enabled(This,enabled) (This)->lpVtbl->get_Enabled(This,enabled)
+#define INetFwOpenPort_put_Enabled(This,enabled) (This)->lpVtbl->put_Enabled(This,enabled)
+#define INetFwOpenPort_get_BuiltIn(This,builtIn) (This)->lpVtbl->get_BuiltIn(This,builtIn)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_Name_Proxy(
+    INetFwOpenPort* This,
+    BSTR *name);
+void __RPC_STUB INetFwOpenPort_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_Name_Proxy(
+    INetFwOpenPort* This,
+    BSTR name);
+void __RPC_STUB INetFwOpenPort_put_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_IpVersion_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_IP_VERSION *ipVersion);
+void __RPC_STUB INetFwOpenPort_get_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_IpVersion_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_IP_VERSION ipVersion);
+void __RPC_STUB INetFwOpenPort_put_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_Protocol_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_IP_PROTOCOL *ipProtocol);
+void __RPC_STUB INetFwOpenPort_get_Protocol_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_Protocol_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_IP_PROTOCOL ipProtocol);
+void __RPC_STUB INetFwOpenPort_put_Protocol_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_Port_Proxy(
+    INetFwOpenPort* This,
+    LONG *portNumber);
+void __RPC_STUB INetFwOpenPort_get_Port_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_Port_Proxy(
+    INetFwOpenPort* This,
+    LONG portNumber);
+void __RPC_STUB INetFwOpenPort_put_Port_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_Scope_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_SCOPE *scope);
+void __RPC_STUB INetFwOpenPort_get_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_Scope_Proxy(
+    INetFwOpenPort* This,
+    NET_FW_SCOPE scope);
+void __RPC_STUB INetFwOpenPort_put_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_RemoteAddresses_Proxy(
+    INetFwOpenPort* This,
+    BSTR *remoteAddrs);
+void __RPC_STUB INetFwOpenPort_get_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_RemoteAddresses_Proxy(
+    INetFwOpenPort* This,
+    BSTR remoteAddrs);
+void __RPC_STUB INetFwOpenPort_put_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_Enabled_Proxy(
+    INetFwOpenPort* This,
+    VARIANT_BOOL *enabled);
+void __RPC_STUB INetFwOpenPort_get_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_put_Enabled_Proxy(
+    INetFwOpenPort* This,
+    VARIANT_BOOL enabled);
+void __RPC_STUB INetFwOpenPort_put_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPort_get_BuiltIn_Proxy(
+    INetFwOpenPort* This,
+    VARIANT_BOOL *builtIn);
+void __RPC_STUB INetFwOpenPort_get_BuiltIn_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwOpenPort_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwOpenPorts interface
+ */
+#ifndef __INetFwOpenPorts_INTERFACE_DEFINED__
+#define __INetFwOpenPorts_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwOpenPorts, 0xc0e9d7fa, 0xe07e, 0x430a, 0xb1,0x9a, 0x09,0x0c,0xe8,0x2d,0x92,0xe2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwOpenPorts : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        INetFwOpenPort *port) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        LONG portNumber,
+        NET_FW_IP_PROTOCOL ipProtocol) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        LONG portNumber,
+        NET_FW_IP_PROTOCOL ipProtocol,
+        INetFwOpenPort **openPort) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **newEnum) = 0;
+
+};
+#else
+typedef struct INetFwOpenPortsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwOpenPorts* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwOpenPorts* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwOpenPorts* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwOpenPorts* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwOpenPorts* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwOpenPorts* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwOpenPorts* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwOpenPorts methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        INetFwOpenPorts* This,
+        LONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        INetFwOpenPorts* This,
+        INetFwOpenPort *port);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        INetFwOpenPorts* This,
+        LONG portNumber,
+        NET_FW_IP_PROTOCOL ipProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        INetFwOpenPorts* This,
+        LONG portNumber,
+        NET_FW_IP_PROTOCOL ipProtocol,
+        INetFwOpenPort **openPort);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        INetFwOpenPorts* This,
+        IUnknown **newEnum);
+
+    END_INTERFACE
+} INetFwOpenPortsVtbl;
+interface INetFwOpenPorts {
+    CONST_VTBL INetFwOpenPortsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwOpenPorts_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwOpenPorts_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwOpenPorts_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwOpenPorts_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwOpenPorts_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwOpenPorts_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwOpenPorts_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwOpenPorts methods ***/
+#define INetFwOpenPorts_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
+#define INetFwOpenPorts_Add(This,port) (This)->lpVtbl->Add(This,port)
+#define INetFwOpenPorts_Remove(This,portNumber,ipProtocol) (This)->lpVtbl->Remove(This,portNumber,ipProtocol)
+#define INetFwOpenPorts_Item(This,portNumber,ipProtocol,openPort) (This)->lpVtbl->Item(This,portNumber,ipProtocol,openPort)
+#define INetFwOpenPorts_get__NewEnum(This,newEnum) (This)->lpVtbl->get__NewEnum(This,newEnum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwOpenPorts_get_Count_Proxy(
+    INetFwOpenPorts* This,
+    LONG *count);
+void __RPC_STUB INetFwOpenPorts_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPorts_Add_Proxy(
+    INetFwOpenPorts* This,
+    INetFwOpenPort *port);
+void __RPC_STUB INetFwOpenPorts_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPorts_Remove_Proxy(
+    INetFwOpenPorts* This,
+    LONG portNumber,
+    NET_FW_IP_PROTOCOL ipProtocol);
+void __RPC_STUB INetFwOpenPorts_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPorts_Item_Proxy(
+    INetFwOpenPorts* This,
+    LONG portNumber,
+    NET_FW_IP_PROTOCOL ipProtocol,
+    INetFwOpenPort **openPort);
+void __RPC_STUB INetFwOpenPorts_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwOpenPorts_get__NewEnum_Proxy(
+    INetFwOpenPorts* This,
+    IUnknown **newEnum);
+void __RPC_STUB INetFwOpenPorts_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwOpenPorts_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwService interface
+ */
+#ifndef __INetFwService_INTERFACE_DEFINED__
+#define __INetFwService_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwService, 0x79fd57c8, 0x908e, 0x4a36, 0x98,0x88, 0xd5,0xb3,0xf0,0xa4,0x44,0xcf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwService : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        NET_FW_SERVICE_TYPE *type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Customized(
+        VARIANT_BOOL *customized) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IpVersion(
+        NET_FW_IP_VERSION *ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IpVersion(
+        NET_FW_IP_VERSION ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Scope(
+        NET_FW_SCOPE *scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Scope(
+        NET_FW_SCOPE scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RemoteAddresses(
+        BSTR *remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RemoteAddresses(
+        BSTR remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
+        VARIANT_BOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Enabled(
+        VARIANT_BOOL enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_GloballyOpenPorts(
+        INetFwOpenPorts **openPorts) = 0;
+
+};
+#else
+typedef struct INetFwServiceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwService* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwService* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwService* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwService* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwService* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwService* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwService* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwService methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        INetFwService* This,
+        BSTR *name);
+
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        INetFwService* This,
+        NET_FW_SERVICE_TYPE *type);
+
+    HRESULT (STDMETHODCALLTYPE *get_Customized)(
+        INetFwService* This,
+        VARIANT_BOOL *customized);
+
+    HRESULT (STDMETHODCALLTYPE *get_IpVersion)(
+        INetFwService* This,
+        NET_FW_IP_VERSION *ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *put_IpVersion)(
+        INetFwService* This,
+        NET_FW_IP_VERSION ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *get_Scope)(
+        INetFwService* This,
+        NET_FW_SCOPE *scope);
+
+    HRESULT (STDMETHODCALLTYPE *put_Scope)(
+        INetFwService* This,
+        NET_FW_SCOPE scope);
+
+    HRESULT (STDMETHODCALLTYPE *get_RemoteAddresses)(
+        INetFwService* This,
+        BSTR *remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *put_RemoteAddresses)(
+        INetFwService* This,
+        BSTR remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
+        INetFwService* This,
+        VARIANT_BOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_Enabled)(
+        INetFwService* This,
+        VARIANT_BOOL enabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_GloballyOpenPorts)(
+        INetFwService* This,
+        INetFwOpenPorts **openPorts);
+
+    END_INTERFACE
+} INetFwServiceVtbl;
+interface INetFwService {
+    CONST_VTBL INetFwServiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwService_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwService_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwService_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwService_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwService_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwService_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwService methods ***/
+#define INetFwService_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
+#define INetFwService_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
+#define INetFwService_get_Customized(This,customized) (This)->lpVtbl->get_Customized(This,customized)
+#define INetFwService_get_IpVersion(This,ipVersion) (This)->lpVtbl->get_IpVersion(This,ipVersion)
+#define INetFwService_put_IpVersion(This,ipVersion) (This)->lpVtbl->put_IpVersion(This,ipVersion)
+#define INetFwService_get_Scope(This,scope) (This)->lpVtbl->get_Scope(This,scope)
+#define INetFwService_put_Scope(This,scope) (This)->lpVtbl->put_Scope(This,scope)
+#define INetFwService_get_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->get_RemoteAddresses(This,remoteAddrs)
+#define INetFwService_put_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->put_RemoteAddresses(This,remoteAddrs)
+#define INetFwService_get_Enabled(This,enabled) (This)->lpVtbl->get_Enabled(This,enabled)
+#define INetFwService_put_Enabled(This,enabled) (This)->lpVtbl->put_Enabled(This,enabled)
+#define INetFwService_get_GloballyOpenPorts(This,openPorts) (This)->lpVtbl->get_GloballyOpenPorts(This,openPorts)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwService_get_Name_Proxy(
+    INetFwService* This,
+    BSTR *name);
+void __RPC_STUB INetFwService_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_Type_Proxy(
+    INetFwService* This,
+    NET_FW_SERVICE_TYPE *type);
+void __RPC_STUB INetFwService_get_Type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_Customized_Proxy(
+    INetFwService* This,
+    VARIANT_BOOL *customized);
+void __RPC_STUB INetFwService_get_Customized_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_IpVersion_Proxy(
+    INetFwService* This,
+    NET_FW_IP_VERSION *ipVersion);
+void __RPC_STUB INetFwService_get_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_put_IpVersion_Proxy(
+    INetFwService* This,
+    NET_FW_IP_VERSION ipVersion);
+void __RPC_STUB INetFwService_put_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_Scope_Proxy(
+    INetFwService* This,
+    NET_FW_SCOPE *scope);
+void __RPC_STUB INetFwService_get_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_put_Scope_Proxy(
+    INetFwService* This,
+    NET_FW_SCOPE scope);
+void __RPC_STUB INetFwService_put_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_RemoteAddresses_Proxy(
+    INetFwService* This,
+    BSTR *remoteAddrs);
+void __RPC_STUB INetFwService_get_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_put_RemoteAddresses_Proxy(
+    INetFwService* This,
+    BSTR remoteAddrs);
+void __RPC_STUB INetFwService_put_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_Enabled_Proxy(
+    INetFwService* This,
+    VARIANT_BOOL *enabled);
+void __RPC_STUB INetFwService_get_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_put_Enabled_Proxy(
+    INetFwService* This,
+    VARIANT_BOOL enabled);
+void __RPC_STUB INetFwService_put_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwService_get_GloballyOpenPorts_Proxy(
+    INetFwService* This,
+    INetFwOpenPorts **openPorts);
+void __RPC_STUB INetFwService_get_GloballyOpenPorts_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwService_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwServices interface
+ */
+#ifndef __INetFwServices_INTERFACE_DEFINED__
+#define __INetFwServices_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwServices, 0x79649bb4, 0x903e, 0x421b, 0x94,0xc9, 0x79,0x84,0x8e,0x79,0xf6,0xee);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwServices : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        NET_FW_SERVICE_TYPE svcType,
+        INetFwService **service) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **newEnum) = 0;
+
+};
+#else
+typedef struct INetFwServicesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwServices* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwServices* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwServices* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwServices* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwServices* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwServices* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwServices* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwServices methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        INetFwServices* This,
+        LONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        INetFwServices* This,
+        NET_FW_SERVICE_TYPE svcType,
+        INetFwService **service);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        INetFwServices* This,
+        IUnknown **newEnum);
+
+    END_INTERFACE
+} INetFwServicesVtbl;
+interface INetFwServices {
+    CONST_VTBL INetFwServicesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwServices_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwServices_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwServices_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwServices_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwServices_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwServices_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwServices methods ***/
+#define INetFwServices_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
+#define INetFwServices_Item(This,svcType,service) (This)->lpVtbl->Item(This,svcType,service)
+#define INetFwServices_get__NewEnum(This,newEnum) (This)->lpVtbl->get__NewEnum(This,newEnum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwServices_get_Count_Proxy(
+    INetFwServices* This,
+    LONG *count);
+void __RPC_STUB INetFwServices_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwServices_Item_Proxy(
+    INetFwServices* This,
+    NET_FW_SERVICE_TYPE svcType,
+    INetFwService **service);
+void __RPC_STUB INetFwServices_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwServices_get__NewEnum_Proxy(
+    INetFwServices* This,
+    IUnknown **newEnum);
+void __RPC_STUB INetFwServices_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwServices_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwAuthorizedApplication interface
+ */
+#ifndef __INetFwAuthorizedApplication_INTERFACE_DEFINED__
+#define __INetFwAuthorizedApplication_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwAuthorizedApplication, 0xb5e64ffa, 0xc2c5, 0x444e, 0xa3,0x01, 0xfb,0x5e,0x00,0x01,0x80,0x50);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwAuthorizedApplication : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Name(
+        BSTR *name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Name(
+        BSTR name) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ProcessImageFileName(
+        BSTR *imageFileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ProcessImageFileName(
+        BSTR imageFileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IpVersion(
+        NET_FW_IP_VERSION *ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IpVersion(
+        NET_FW_IP_VERSION ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Scope(
+        NET_FW_SCOPE *scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Scope(
+        NET_FW_SCOPE scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RemoteAddresses(
+        BSTR *remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RemoteAddresses(
+        BSTR remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
+        VARIANT_BOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Enabled(
+        VARIANT_BOOL enabled) = 0;
+
+};
+#else
+typedef struct INetFwAuthorizedApplicationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwAuthorizedApplication* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwAuthorizedApplication* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwAuthorizedApplication* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwAuthorizedApplication* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwAuthorizedApplication* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwAuthorizedApplication* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwAuthorizedApplication* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwAuthorizedApplication methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Name)(
+        INetFwAuthorizedApplication* This,
+        BSTR *name);
+
+    HRESULT (STDMETHODCALLTYPE *put_Name)(
+        INetFwAuthorizedApplication* This,
+        BSTR name);
+
+    HRESULT (STDMETHODCALLTYPE *get_ProcessImageFileName)(
+        INetFwAuthorizedApplication* This,
+        BSTR *imageFileName);
+
+    HRESULT (STDMETHODCALLTYPE *put_ProcessImageFileName)(
+        INetFwAuthorizedApplication* This,
+        BSTR imageFileName);
+
+    HRESULT (STDMETHODCALLTYPE *get_IpVersion)(
+        INetFwAuthorizedApplication* This,
+        NET_FW_IP_VERSION *ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *put_IpVersion)(
+        INetFwAuthorizedApplication* This,
+        NET_FW_IP_VERSION ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *get_Scope)(
+        INetFwAuthorizedApplication* This,
+        NET_FW_SCOPE *scope);
+
+    HRESULT (STDMETHODCALLTYPE *put_Scope)(
+        INetFwAuthorizedApplication* This,
+        NET_FW_SCOPE scope);
+
+    HRESULT (STDMETHODCALLTYPE *get_RemoteAddresses)(
+        INetFwAuthorizedApplication* This,
+        BSTR *remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *put_RemoteAddresses)(
+        INetFwAuthorizedApplication* This,
+        BSTR remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
+        INetFwAuthorizedApplication* This,
+        VARIANT_BOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_Enabled)(
+        INetFwAuthorizedApplication* This,
+        VARIANT_BOOL enabled);
+
+    END_INTERFACE
+} INetFwAuthorizedApplicationVtbl;
+interface INetFwAuthorizedApplication {
+    CONST_VTBL INetFwAuthorizedApplicationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwAuthorizedApplication_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwAuthorizedApplication_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwAuthorizedApplication_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwAuthorizedApplication_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwAuthorizedApplication_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwAuthorizedApplication_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwAuthorizedApplication_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwAuthorizedApplication methods ***/
+#define INetFwAuthorizedApplication_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
+#define INetFwAuthorizedApplication_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)
+#define INetFwAuthorizedApplication_get_ProcessImageFileName(This,imageFileName) (This)->lpVtbl->get_ProcessImageFileName(This,imageFileName)
+#define INetFwAuthorizedApplication_put_ProcessImageFileName(This,imageFileName) (This)->lpVtbl->put_ProcessImageFileName(This,imageFileName)
+#define INetFwAuthorizedApplication_get_IpVersion(This,ipVersion) (This)->lpVtbl->get_IpVersion(This,ipVersion)
+#define INetFwAuthorizedApplication_put_IpVersion(This,ipVersion) (This)->lpVtbl->put_IpVersion(This,ipVersion)
+#define INetFwAuthorizedApplication_get_Scope(This,scope) (This)->lpVtbl->get_Scope(This,scope)
+#define INetFwAuthorizedApplication_put_Scope(This,scope) (This)->lpVtbl->put_Scope(This,scope)
+#define INetFwAuthorizedApplication_get_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->get_RemoteAddresses(This,remoteAddrs)
+#define INetFwAuthorizedApplication_put_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->put_RemoteAddresses(This,remoteAddrs)
+#define INetFwAuthorizedApplication_get_Enabled(This,enabled) (This)->lpVtbl->get_Enabled(This,enabled)
+#define INetFwAuthorizedApplication_put_Enabled(This,enabled) (This)->lpVtbl->put_Enabled(This,enabled)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_Name_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR *name);
+void __RPC_STUB INetFwAuthorizedApplication_get_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_Name_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR name);
+void __RPC_STUB INetFwAuthorizedApplication_put_Name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_ProcessImageFileName_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR *imageFileName);
+void __RPC_STUB INetFwAuthorizedApplication_get_ProcessImageFileName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_ProcessImageFileName_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR imageFileName);
+void __RPC_STUB INetFwAuthorizedApplication_put_ProcessImageFileName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_IpVersion_Proxy(
+    INetFwAuthorizedApplication* This,
+    NET_FW_IP_VERSION *ipVersion);
+void __RPC_STUB INetFwAuthorizedApplication_get_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_IpVersion_Proxy(
+    INetFwAuthorizedApplication* This,
+    NET_FW_IP_VERSION ipVersion);
+void __RPC_STUB INetFwAuthorizedApplication_put_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_Scope_Proxy(
+    INetFwAuthorizedApplication* This,
+    NET_FW_SCOPE *scope);
+void __RPC_STUB INetFwAuthorizedApplication_get_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_Scope_Proxy(
+    INetFwAuthorizedApplication* This,
+    NET_FW_SCOPE scope);
+void __RPC_STUB INetFwAuthorizedApplication_put_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_RemoteAddresses_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR *remoteAddrs);
+void __RPC_STUB INetFwAuthorizedApplication_get_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_RemoteAddresses_Proxy(
+    INetFwAuthorizedApplication* This,
+    BSTR remoteAddrs);
+void __RPC_STUB INetFwAuthorizedApplication_put_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_get_Enabled_Proxy(
+    INetFwAuthorizedApplication* This,
+    VARIANT_BOOL *enabled);
+void __RPC_STUB INetFwAuthorizedApplication_get_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplication_put_Enabled_Proxy(
+    INetFwAuthorizedApplication* This,
+    VARIANT_BOOL enabled);
+void __RPC_STUB INetFwAuthorizedApplication_put_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwAuthorizedApplication_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwRemoteAdminSettings interface
+ */
+#ifndef __INetFwRemoteAdminSettings_INTERFACE_DEFINED__
+#define __INetFwRemoteAdminSettings_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwRemoteAdminSettings, 0xd4becddf, 0x6f73, 0x4a83, 0xb8,0x32, 0x9c,0x66,0x87,0x4c,0xd2,0x0e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwRemoteAdminSettings : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_IpVersion(
+        NET_FW_IP_VERSION *ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_IpVersion(
+        NET_FW_IP_VERSION ipVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Scope(
+        NET_FW_SCOPE *scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Scope(
+        NET_FW_SCOPE scope) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RemoteAddresses(
+        BSTR *remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_RemoteAddresses(
+        BSTR remoteAddrs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Enabled(
+        VARIANT_BOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_Enabled(
+        VARIANT_BOOL enabled) = 0;
+
+};
+#else
+typedef struct INetFwRemoteAdminSettingsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwRemoteAdminSettings* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwRemoteAdminSettings* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwRemoteAdminSettings* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwRemoteAdminSettings* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwRemoteAdminSettings* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwRemoteAdminSettings* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwRemoteAdminSettings* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwRemoteAdminSettings methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_IpVersion)(
+        INetFwRemoteAdminSettings* This,
+        NET_FW_IP_VERSION *ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *put_IpVersion)(
+        INetFwRemoteAdminSettings* This,
+        NET_FW_IP_VERSION ipVersion);
+
+    HRESULT (STDMETHODCALLTYPE *get_Scope)(
+        INetFwRemoteAdminSettings* This,
+        NET_FW_SCOPE *scope);
+
+    HRESULT (STDMETHODCALLTYPE *put_Scope)(
+        INetFwRemoteAdminSettings* This,
+        NET_FW_SCOPE scope);
+
+    HRESULT (STDMETHODCALLTYPE *get_RemoteAddresses)(
+        INetFwRemoteAdminSettings* This,
+        BSTR *remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *put_RemoteAddresses)(
+        INetFwRemoteAdminSettings* This,
+        BSTR remoteAddrs);
+
+    HRESULT (STDMETHODCALLTYPE *get_Enabled)(
+        INetFwRemoteAdminSettings* This,
+        VARIANT_BOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_Enabled)(
+        INetFwRemoteAdminSettings* This,
+        VARIANT_BOOL enabled);
+
+    END_INTERFACE
+} INetFwRemoteAdminSettingsVtbl;
+interface INetFwRemoteAdminSettings {
+    CONST_VTBL INetFwRemoteAdminSettingsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwRemoteAdminSettings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwRemoteAdminSettings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwRemoteAdminSettings_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwRemoteAdminSettings_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwRemoteAdminSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwRemoteAdminSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwRemoteAdminSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwRemoteAdminSettings methods ***/
+#define INetFwRemoteAdminSettings_get_IpVersion(This,ipVersion) (This)->lpVtbl->get_IpVersion(This,ipVersion)
+#define INetFwRemoteAdminSettings_put_IpVersion(This,ipVersion) (This)->lpVtbl->put_IpVersion(This,ipVersion)
+#define INetFwRemoteAdminSettings_get_Scope(This,scope) (This)->lpVtbl->get_Scope(This,scope)
+#define INetFwRemoteAdminSettings_put_Scope(This,scope) (This)->lpVtbl->put_Scope(This,scope)
+#define INetFwRemoteAdminSettings_get_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->get_RemoteAddresses(This,remoteAddrs)
+#define INetFwRemoteAdminSettings_put_RemoteAddresses(This,remoteAddrs) (This)->lpVtbl->put_RemoteAddresses(This,remoteAddrs)
+#define INetFwRemoteAdminSettings_get_Enabled(This,enabled) (This)->lpVtbl->get_Enabled(This,enabled)
+#define INetFwRemoteAdminSettings_put_Enabled(This,enabled) (This)->lpVtbl->put_Enabled(This,enabled)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_get_IpVersion_Proxy(
+    INetFwRemoteAdminSettings* This,
+    NET_FW_IP_VERSION *ipVersion);
+void __RPC_STUB INetFwRemoteAdminSettings_get_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_put_IpVersion_Proxy(
+    INetFwRemoteAdminSettings* This,
+    NET_FW_IP_VERSION ipVersion);
+void __RPC_STUB INetFwRemoteAdminSettings_put_IpVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_get_Scope_Proxy(
+    INetFwRemoteAdminSettings* This,
+    NET_FW_SCOPE *scope);
+void __RPC_STUB INetFwRemoteAdminSettings_get_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_put_Scope_Proxy(
+    INetFwRemoteAdminSettings* This,
+    NET_FW_SCOPE scope);
+void __RPC_STUB INetFwRemoteAdminSettings_put_Scope_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_get_RemoteAddresses_Proxy(
+    INetFwRemoteAdminSettings* This,
+    BSTR *remoteAddrs);
+void __RPC_STUB INetFwRemoteAdminSettings_get_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_put_RemoteAddresses_Proxy(
+    INetFwRemoteAdminSettings* This,
+    BSTR remoteAddrs);
+void __RPC_STUB INetFwRemoteAdminSettings_put_RemoteAddresses_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_get_Enabled_Proxy(
+    INetFwRemoteAdminSettings* This,
+    VARIANT_BOOL *enabled);
+void __RPC_STUB INetFwRemoteAdminSettings_get_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwRemoteAdminSettings_put_Enabled_Proxy(
+    INetFwRemoteAdminSettings* This,
+    VARIANT_BOOL enabled);
+void __RPC_STUB INetFwRemoteAdminSettings_put_Enabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwRemoteAdminSettings_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwAuthorizedApplications interface
+ */
+#ifndef __INetFwAuthorizedApplications_INTERFACE_DEFINED__
+#define __INetFwAuthorizedApplications_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwAuthorizedApplications, 0x644efd52, 0xccf9, 0x486c, 0x97,0xa2, 0x39,0xf3,0x52,0x57,0x0b,0x30);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwAuthorizedApplications : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Count(
+        LONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Add(
+        INetFwAuthorizedApplication *app) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Remove(
+        BSTR imageFileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Item(
+        BSTR imageFileName,
+        INetFwAuthorizedApplication **app) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
+        IUnknown **newEnum) = 0;
+
+};
+#else
+typedef struct INetFwAuthorizedApplicationsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwAuthorizedApplications* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwAuthorizedApplications* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwAuthorizedApplications* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwAuthorizedApplications* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwAuthorizedApplications* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwAuthorizedApplications* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwAuthorizedApplications* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwAuthorizedApplications methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Count)(
+        INetFwAuthorizedApplications* This,
+        LONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *Add)(
+        INetFwAuthorizedApplications* This,
+        INetFwAuthorizedApplication *app);
+
+    HRESULT (STDMETHODCALLTYPE *Remove)(
+        INetFwAuthorizedApplications* This,
+        BSTR imageFileName);
+
+    HRESULT (STDMETHODCALLTYPE *Item)(
+        INetFwAuthorizedApplications* This,
+        BSTR imageFileName,
+        INetFwAuthorizedApplication **app);
+
+    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
+        INetFwAuthorizedApplications* This,
+        IUnknown **newEnum);
+
+    END_INTERFACE
+} INetFwAuthorizedApplicationsVtbl;
+interface INetFwAuthorizedApplications {
+    CONST_VTBL INetFwAuthorizedApplicationsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwAuthorizedApplications_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwAuthorizedApplications_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwAuthorizedApplications_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwAuthorizedApplications_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwAuthorizedApplications_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwAuthorizedApplications_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwAuthorizedApplications_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwAuthorizedApplications methods ***/
+#define INetFwAuthorizedApplications_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
+#define INetFwAuthorizedApplications_Add(This,app) (This)->lpVtbl->Add(This,app)
+#define INetFwAuthorizedApplications_Remove(This,imageFileName) (This)->lpVtbl->Remove(This,imageFileName)
+#define INetFwAuthorizedApplications_Item(This,imageFileName,app) (This)->lpVtbl->Item(This,imageFileName,app)
+#define INetFwAuthorizedApplications_get__NewEnum(This,newEnum) (This)->lpVtbl->get__NewEnum(This,newEnum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplications_get_Count_Proxy(
+    INetFwAuthorizedApplications* This,
+    LONG *count);
+void __RPC_STUB INetFwAuthorizedApplications_get_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplications_Add_Proxy(
+    INetFwAuthorizedApplications* This,
+    INetFwAuthorizedApplication *app);
+void __RPC_STUB INetFwAuthorizedApplications_Add_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplications_Remove_Proxy(
+    INetFwAuthorizedApplications* This,
+    BSTR imageFileName);
+void __RPC_STUB INetFwAuthorizedApplications_Remove_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplications_Item_Proxy(
+    INetFwAuthorizedApplications* This,
+    BSTR imageFileName,
+    INetFwAuthorizedApplication **app);
+void __RPC_STUB INetFwAuthorizedApplications_Item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwAuthorizedApplications_get__NewEnum_Proxy(
+    INetFwAuthorizedApplications* This,
+    IUnknown **newEnum);
+void __RPC_STUB INetFwAuthorizedApplications_get__NewEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwAuthorizedApplications_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwProfile interface
+ */
+#ifndef __INetFwProfile_INTERFACE_DEFINED__
+#define __INetFwProfile_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwProfile, 0x174a0dda, 0xe9f9, 0x449d, 0x99,0x3b, 0x21,0xab,0x66,0x7c,0xa4,0x56);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwProfile : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_Type(
+        NET_FW_PROFILE_TYPE *type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FirewallEnabled(
+        VARIANT_BOOL *enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_FirewallEnabled(
+        VARIANT_BOOL enabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_ExceptionsNotAllowed(
+        VARIANT_BOOL *notAllowed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_ExceptionsNotAllowed(
+        VARIANT_BOOL notAllowed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_NotificationsDisabled(
+        VARIANT_BOOL *disabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_NotificationsDisabled(
+        VARIANT_BOOL disabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_UnicastResponsesToMulticastBroadcastDisabled(
+        VARIANT_BOOL *disabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_UnicastResponsesToMulticastBroadcastDisabled(
+        VARIANT_BOOL disabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_RemoteAdminSettings(
+        INetFwRemoteAdminSettings **remoteAdminSettings) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_IcmpSettings(
+        INetFwIcmpSettings **icmpSettings) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_GloballyOpenPorts(
+        INetFwOpenPorts **openPorts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Services(
+        INetFwServices **services) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AuthorizedApplications(
+        INetFwAuthorizedApplications **apps) = 0;
+
+};
+#else
+typedef struct INetFwProfileVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwProfile* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwProfile* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwProfile* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwProfile* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwProfile* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwProfile* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwProfile* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwProfile methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_Type)(
+        INetFwProfile* This,
+        NET_FW_PROFILE_TYPE *type);
+
+    HRESULT (STDMETHODCALLTYPE *get_FirewallEnabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL *enabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_FirewallEnabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL enabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_ExceptionsNotAllowed)(
+        INetFwProfile* This,
+        VARIANT_BOOL *notAllowed);
+
+    HRESULT (STDMETHODCALLTYPE *put_ExceptionsNotAllowed)(
+        INetFwProfile* This,
+        VARIANT_BOOL notAllowed);
+
+    HRESULT (STDMETHODCALLTYPE *get_NotificationsDisabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL *disabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_NotificationsDisabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL disabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_UnicastResponsesToMulticastBroadcastDisabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL *disabled);
+
+    HRESULT (STDMETHODCALLTYPE *put_UnicastResponsesToMulticastBroadcastDisabled)(
+        INetFwProfile* This,
+        VARIANT_BOOL disabled);
+
+    HRESULT (STDMETHODCALLTYPE *get_RemoteAdminSettings)(
+        INetFwProfile* This,
+        INetFwRemoteAdminSettings **remoteAdminSettings);
+
+    HRESULT (STDMETHODCALLTYPE *get_IcmpSettings)(
+        INetFwProfile* This,
+        INetFwIcmpSettings **icmpSettings);
+
+    HRESULT (STDMETHODCALLTYPE *get_GloballyOpenPorts)(
+        INetFwProfile* This,
+        INetFwOpenPorts **openPorts);
+
+    HRESULT (STDMETHODCALLTYPE *get_Services)(
+        INetFwProfile* This,
+        INetFwServices **services);
+
+    HRESULT (STDMETHODCALLTYPE *get_AuthorizedApplications)(
+        INetFwProfile* This,
+        INetFwAuthorizedApplications **apps);
+
+    END_INTERFACE
+} INetFwProfileVtbl;
+interface INetFwProfile {
+    CONST_VTBL INetFwProfileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwProfile_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwProfile_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwProfile_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwProfile_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwProfile_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwProfile methods ***/
+#define INetFwProfile_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
+#define INetFwProfile_get_FirewallEnabled(This,enabled) (This)->lpVtbl->get_FirewallEnabled(This,enabled)
+#define INetFwProfile_put_FirewallEnabled(This,enabled) (This)->lpVtbl->put_FirewallEnabled(This,enabled)
+#define INetFwProfile_get_ExceptionsNotAllowed(This,notAllowed) (This)->lpVtbl->get_ExceptionsNotAllowed(This,notAllowed)
+#define INetFwProfile_put_ExceptionsNotAllowed(This,notAllowed) (This)->lpVtbl->put_ExceptionsNotAllowed(This,notAllowed)
+#define INetFwProfile_get_NotificationsDisabled(This,disabled) (This)->lpVtbl->get_NotificationsDisabled(This,disabled)
+#define INetFwProfile_put_NotificationsDisabled(This,disabled) (This)->lpVtbl->put_NotificationsDisabled(This,disabled)
+#define INetFwProfile_get_UnicastResponsesToMulticastBroadcastDisabled(This,disabled) (This)->lpVtbl->get_UnicastResponsesToMulticastBroadcastDisabled(This,disabled)
+#define INetFwProfile_put_UnicastResponsesToMulticastBroadcastDisabled(This,disabled) (This)->lpVtbl->put_UnicastResponsesToMulticastBroadcastDisabled(This,disabled)
+#define INetFwProfile_get_RemoteAdminSettings(This,remoteAdminSettings) (This)->lpVtbl->get_RemoteAdminSettings(This,remoteAdminSettings)
+#define INetFwProfile_get_IcmpSettings(This,icmpSettings) (This)->lpVtbl->get_IcmpSettings(This,icmpSettings)
+#define INetFwProfile_get_GloballyOpenPorts(This,openPorts) (This)->lpVtbl->get_GloballyOpenPorts(This,openPorts)
+#define INetFwProfile_get_Services(This,services) (This)->lpVtbl->get_Services(This,services)
+#define INetFwProfile_get_AuthorizedApplications(This,apps) (This)->lpVtbl->get_AuthorizedApplications(This,apps)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_Type_Proxy(
+    INetFwProfile* This,
+    NET_FW_PROFILE_TYPE *type);
+void __RPC_STUB INetFwProfile_get_Type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_FirewallEnabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL *enabled);
+void __RPC_STUB INetFwProfile_get_FirewallEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_put_FirewallEnabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL enabled);
+void __RPC_STUB INetFwProfile_put_FirewallEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_ExceptionsNotAllowed_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL *notAllowed);
+void __RPC_STUB INetFwProfile_get_ExceptionsNotAllowed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_put_ExceptionsNotAllowed_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL notAllowed);
+void __RPC_STUB INetFwProfile_put_ExceptionsNotAllowed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_NotificationsDisabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL *disabled);
+void __RPC_STUB INetFwProfile_get_NotificationsDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_put_NotificationsDisabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL disabled);
+void __RPC_STUB INetFwProfile_put_NotificationsDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_UnicastResponsesToMulticastBroadcastDisabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL *disabled);
+void __RPC_STUB INetFwProfile_get_UnicastResponsesToMulticastBroadcastDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_put_UnicastResponsesToMulticastBroadcastDisabled_Proxy(
+    INetFwProfile* This,
+    VARIANT_BOOL disabled);
+void __RPC_STUB INetFwProfile_put_UnicastResponsesToMulticastBroadcastDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_RemoteAdminSettings_Proxy(
+    INetFwProfile* This,
+    INetFwRemoteAdminSettings **remoteAdminSettings);
+void __RPC_STUB INetFwProfile_get_RemoteAdminSettings_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_IcmpSettings_Proxy(
+    INetFwProfile* This,
+    INetFwIcmpSettings **icmpSettings);
+void __RPC_STUB INetFwProfile_get_IcmpSettings_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_GloballyOpenPorts_Proxy(
+    INetFwProfile* This,
+    INetFwOpenPorts **openPorts);
+void __RPC_STUB INetFwProfile_get_GloballyOpenPorts_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_Services_Proxy(
+    INetFwProfile* This,
+    INetFwServices **services);
+void __RPC_STUB INetFwProfile_get_Services_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwProfile_get_AuthorizedApplications_Proxy(
+    INetFwProfile* This,
+    INetFwAuthorizedApplications **apps);
+void __RPC_STUB INetFwProfile_get_AuthorizedApplications_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwProfile_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwPolicy interface
+ */
+#ifndef __INetFwPolicy_INTERFACE_DEFINED__
+#define __INetFwPolicy_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwPolicy, 0xd46d2478, 0x9ac9, 0x4008, 0x9d,0xc7, 0x55,0x63,0xce,0x55,0x36,0xcc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwPolicy : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentProfile(
+        INetFwProfile **profile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProfileByType(
+        NET_FW_PROFILE_TYPE profileType,
+        INetFwProfile **profile) = 0;
+
+};
+#else
+typedef struct INetFwPolicyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwPolicy* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwPolicy* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwPolicy* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwPolicy* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwPolicy* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwPolicy* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwPolicy* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwPolicy methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_CurrentProfile)(
+        INetFwPolicy* This,
+        INetFwProfile **profile);
+
+    HRESULT (STDMETHODCALLTYPE *GetProfileByType)(
+        INetFwPolicy* This,
+        NET_FW_PROFILE_TYPE profileType,
+        INetFwProfile **profile);
+
+    END_INTERFACE
+} INetFwPolicyVtbl;
+interface INetFwPolicy {
+    CONST_VTBL INetFwPolicyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwPolicy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwPolicy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwPolicy_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwPolicy_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwPolicy_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwPolicy_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwPolicy_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwPolicy methods ***/
+#define INetFwPolicy_get_CurrentProfile(This,profile) (This)->lpVtbl->get_CurrentProfile(This,profile)
+#define INetFwPolicy_GetProfileByType(This,profileType,profile) (This)->lpVtbl->GetProfileByType(This,profileType,profile)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwPolicy_get_CurrentProfile_Proxy(
+    INetFwPolicy* This,
+    INetFwProfile **profile);
+void __RPC_STUB INetFwPolicy_get_CurrentProfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwPolicy_GetProfileByType_Proxy(
+    INetFwPolicy* This,
+    NET_FW_PROFILE_TYPE profileType,
+    INetFwProfile **profile);
+void __RPC_STUB INetFwPolicy_GetProfileByType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwPolicy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * INetFwMgr interface
+ */
+#ifndef __INetFwMgr_INTERFACE_DEFINED__
+#define __INetFwMgr_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_INetFwMgr, 0xf7898af5, 0xcac4, 0x4632, 0xa2,0xec, 0xda,0x06,0xe5,0x11,0x1a,0xf2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface INetFwMgr : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_LocalPolicy(
+        INetFwPolicy **localPolicy) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_CurrentProfileType(
+        NET_FW_PROFILE_TYPE *profileType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RestoreDefaults(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsPortAllowed(
+        BSTR imageFileName,
+        NET_FW_IP_VERSION ipVersion,
+        LONG portNumber,
+        BSTR localAddress,
+        NET_FW_IP_PROTOCOL ipProtocol,
+        VARIANT *allowed,
+        VARIANT *restricted) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsIcmpTypeAllowed(
+        NET_FW_IP_VERSION ipVersion,
+        BSTR localAddress,
+        BYTE type,
+        VARIANT *allowed,
+        VARIANT *restricted) = 0;
+
+};
+#else
+typedef struct INetFwMgrVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        INetFwMgr* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        INetFwMgr* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        INetFwMgr* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        INetFwMgr* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        INetFwMgr* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        INetFwMgr* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        INetFwMgr* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** INetFwMgr methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_LocalPolicy)(
+        INetFwMgr* This,
+        INetFwPolicy **localPolicy);
+
+    HRESULT (STDMETHODCALLTYPE *get_CurrentProfileType)(
+        INetFwMgr* This,
+        NET_FW_PROFILE_TYPE *profileType);
+
+    HRESULT (STDMETHODCALLTYPE *RestoreDefaults)(
+        INetFwMgr* This);
+
+    HRESULT (STDMETHODCALLTYPE *IsPortAllowed)(
+        INetFwMgr* This,
+        BSTR imageFileName,
+        NET_FW_IP_VERSION ipVersion,
+        LONG portNumber,
+        BSTR localAddress,
+        NET_FW_IP_PROTOCOL ipProtocol,
+        VARIANT *allowed,
+        VARIANT *restricted);
+
+    HRESULT (STDMETHODCALLTYPE *IsIcmpTypeAllowed)(
+        INetFwMgr* This,
+        NET_FW_IP_VERSION ipVersion,
+        BSTR localAddress,
+        BYTE type,
+        VARIANT *allowed,
+        VARIANT *restricted);
+
+    END_INTERFACE
+} INetFwMgrVtbl;
+interface INetFwMgr {
+    CONST_VTBL INetFwMgrVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define INetFwMgr_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define INetFwMgr_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define INetFwMgr_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define INetFwMgr_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define INetFwMgr_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define INetFwMgr_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define INetFwMgr_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** INetFwMgr methods ***/
+#define INetFwMgr_get_LocalPolicy(This,localPolicy) (This)->lpVtbl->get_LocalPolicy(This,localPolicy)
+#define INetFwMgr_get_CurrentProfileType(This,profileType) (This)->lpVtbl->get_CurrentProfileType(This,profileType)
+#define INetFwMgr_RestoreDefaults(This) (This)->lpVtbl->RestoreDefaults(This)
+#define INetFwMgr_IsPortAllowed(This,imageFileName,ipVersion,portNumber,localAddress,ipProtocol,allowed,restricted) (This)->lpVtbl->IsPortAllowed(This,imageFileName,ipVersion,portNumber,localAddress,ipProtocol,allowed,restricted)
+#define INetFwMgr_IsIcmpTypeAllowed(This,ipVersion,localAddress,type,allowed,restricted) (This)->lpVtbl->IsIcmpTypeAllowed(This,ipVersion,localAddress,type,allowed,restricted)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE INetFwMgr_get_LocalPolicy_Proxy(
+    INetFwMgr* This,
+    INetFwPolicy **localPolicy);
+void __RPC_STUB INetFwMgr_get_LocalPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwMgr_get_CurrentProfileType_Proxy(
+    INetFwMgr* This,
+    NET_FW_PROFILE_TYPE *profileType);
+void __RPC_STUB INetFwMgr_get_CurrentProfileType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwMgr_RestoreDefaults_Proxy(
+    INetFwMgr* This);
+void __RPC_STUB INetFwMgr_RestoreDefaults_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwMgr_IsPortAllowed_Proxy(
+    INetFwMgr* This,
+    BSTR imageFileName,
+    NET_FW_IP_VERSION ipVersion,
+    LONG portNumber,
+    BSTR localAddress,
+    NET_FW_IP_PROTOCOL ipProtocol,
+    VARIANT *allowed,
+    VARIANT *restricted);
+void __RPC_STUB INetFwMgr_IsPortAllowed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE INetFwMgr_IsIcmpTypeAllowed_Proxy(
+    INetFwMgr* This,
+    NET_FW_IP_VERSION ipVersion,
+    BSTR localAddress,
+    BYTE type,
+    VARIANT *allowed,
+    VARIANT *restricted);
+void __RPC_STUB INetFwMgr_IsIcmpTypeAllowed_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __INetFwMgr_INTERFACE_DEFINED__ */
+
+
+DEFINE_GUID(LIBID_NetFwPublicTypeLib, 0xdb4f3345, 0x3ef8, 0x45ed, 0xb9,0x76, 0x25,0xa6,0xd3,0xb8,0x1b,0x71);
+
+#ifndef __INetFwRemoteAdminSettings_FWD_DEFINED__
+#define __INetFwRemoteAdminSettings_FWD_DEFINED__
+typedef interface INetFwRemoteAdminSettings INetFwRemoteAdminSettings;
+#endif
+
+#ifndef __INetFwIcmpSettings_FWD_DEFINED__
+#define __INetFwIcmpSettings_FWD_DEFINED__
+typedef interface INetFwIcmpSettings INetFwIcmpSettings;
+#endif
+
+#ifndef __INetFwOpenPort_FWD_DEFINED__
+#define __INetFwOpenPort_FWD_DEFINED__
+typedef interface INetFwOpenPort INetFwOpenPort;
+#endif
+
+#ifndef __INetFwOpenPorts_FWD_DEFINED__
+#define __INetFwOpenPorts_FWD_DEFINED__
+typedef interface INetFwOpenPorts INetFwOpenPorts;
+#endif
+
+#ifndef __INetFwService_FWD_DEFINED__
+#define __INetFwService_FWD_DEFINED__
+typedef interface INetFwService INetFwService;
+#endif
+
+#ifndef __INetFwServices_FWD_DEFINED__
+#define __INetFwServices_FWD_DEFINED__
+typedef interface INetFwServices INetFwServices;
+#endif
+
+#ifndef __INetFwAuthorizedApplication_FWD_DEFINED__
+#define __INetFwAuthorizedApplication_FWD_DEFINED__
+typedef interface INetFwAuthorizedApplication INetFwAuthorizedApplication;
+#endif
+
+#ifndef __INetFwAuthorizedApplications_FWD_DEFINED__
+#define __INetFwAuthorizedApplications_FWD_DEFINED__
+typedef interface INetFwAuthorizedApplications INetFwAuthorizedApplications;
+#endif
+
+#ifndef __INetFwProfile_FWD_DEFINED__
+#define __INetFwProfile_FWD_DEFINED__
+typedef interface INetFwProfile INetFwProfile;
+#endif
+
+#ifndef __INetFwPolicy_FWD_DEFINED__
+#define __INetFwPolicy_FWD_DEFINED__
+typedef interface INetFwPolicy INetFwPolicy;
+#endif
+
+#ifndef __INetFwMgr_FWD_DEFINED__
+#define __INetFwMgr_FWD_DEFINED__
+typedef interface INetFwMgr INetFwMgr;
+#endif
+
+/*****************************************************************************
+ * NetFwOpenPort coclass
+ */
+
+DEFINE_GUID(CLSID_NetFwOpenPort, 0x0ca545c6, 0x37ad, 0x4a6c, 0xbf,0x92, 0x9f,0x76,0x10,0x06,0x7e,0xf5);
+
+/*****************************************************************************
+ * NetFwAuthorizedApplication coclass
+ */
+
+DEFINE_GUID(CLSID_NetFwAuthorizedApplication, 0xec9846b3, 0x2762, 0x4a6b, 0xa2,0x14, 0x6a,0xcb,0x60,0x34,0x62,0xd2);
+
+/*****************************************************************************
+ * NetFwMgr coclass
+ */
+
+DEFINE_GUID(CLSID_NetFwMgr, 0x304ce942, 0x6e39, 0x40d8, 0x94,0x3a, 0xb9,0x13,0xc4,0x0c,0x9c,0xd4);
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_NETFW_H */
diff --git a/tools/install/oc.nsi b/tools/install/oc.nsi
index 5c1e9e8..f921fce 100644
--- a/tools/install/oc.nsi
+++ b/tools/install/oc.nsi
@@ -74,6 +74,9 @@ LangString MUI_TEXT_USERPATH ${LANG_English} "User Path"
 ; Game Explorer
 !include "${SRCDIR}/tools/install\GameExplorer.nsh"
 
+; Firewall helper
+!addplugindir "tools/install"
+
 ShowInstDetails show
 ShowUnInstDetails show
 
@@ -201,6 +204,9 @@ Section
   WriteRegStr HKCR "OpenClonk.Update\Shell\Update" "" "Update"
   WriteRegStr HKCR "OpenClonk.Update\Shell\Update\Command" "" "$\"$INSTDIR\Clonk.exe$\" $\"%1$\""
 
+  ; Add a Firewall exception
+  firewall::AddAuthorizedApplication "$INSTDIR\Clonk.exe" "$(^Name)"
+
 SectionEnd
 
 
@@ -271,4 +277,7 @@ Section Uninstall
   DeleteRegKey HKCR ".ocu"
   DeleteRegKey HKCR "OpenClonk.Update"
 
+  ; Remove the Firewall exception
+  firewall::RemoveAuthorizedApplication "$INSTDIR\Clonk.exe"
+
 SectionEnd
-- 
1.7.7.1

