Bug 1090535 - Add Windows Firewall whitelist entry. r=bbondy, a=lsblakk
authorRobert Strong <robert.bugzilla@gmail.com>
Mon, 29 Dec 2014 13:19:41 -0800
changeset 235697 a349c33ba8103e8141702dc31ce2d8fb3e896328
parent 235696 73145d9c6bdecc52be9e4032336af0d9ea644abf
child 235698 6147cf28a38e9fd01302dcf434ddc5f17f129fa7
child 235700 8bea59b8706d8768da85dced2a043586dad464aa
child 235702 7ee021371caf66675fae9a49c21fdecfdf676d83
push id611
push userraliiev@mozilla.com
push dateMon, 05 Jan 2015 23:23:16 +0000
treeherdermozilla-release@345cd3b9c445 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbbondy, lsblakk
bugs1090535
milestone35.0
Bug 1090535 - Add Windows Firewall whitelist entry. r=bbondy, a=lsblakk
browser/installer/windows/nsis/installer.nsi
browser/installer/windows/nsis/shared.nsh
browser/installer/windows/nsis/uninstaller.nsi
other-licenses/nsis/Contrib/liteFirewall/License.txt
other-licenses/nsis/Contrib/liteFirewall/ReadMe.txt
other-licenses/nsis/Contrib/liteFirewall/Sample.nsi
other-licenses/nsis/Contrib/liteFirewall/exdll.h
other-licenses/nsis/Contrib/liteFirewall/liteFirewall.cpp
other-licenses/nsis/Contrib/liteFirewall/liteFirewall.dsp
other-licenses/nsis/Contrib/liteFirewall/liteFirewall.dsw
other-licenses/nsis/Contrib/liteFirewall/liteFirewall.sln
other-licenses/nsis/Contrib/liteFirewall/liteFirewall.vcproj
other-licenses/nsis/Contrib/liteFirewall/netfw.tlb
other-licenses/nsis/Plugins/liteFirewallW.dll
toolkit/mozapps/installer/windows/nsis/makensis.mk
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -584,16 +584,19 @@ Section "-Application" APP_IDX
         ; know the correct full path.
         ${LogMsg} "Added Quick Launch Shortcut: ${BrandFullName}.lnk"
         GetFunctionAddress $0 AddQuickLaunchShortcut
         UAC::ExecCodeSegment $0
       ${EndIf}
     ${EndUnless}
   ${EndIf}
 
+  ; Add the Firewall entries during install
+  Call AddFirewallEntries
+
 !ifdef MOZ_MAINTENANCE_SERVICE
   ${If} $TmpVal == "HKLM"
     ; Add the registry keys for allowed certificates.
     ${AddMaintCertKeys}
   ${EndIf}
 !endif
 SectionEnd
 
--- a/browser/installer/windows/nsis/shared.nsh
+++ b/browser/installer/windows/nsis/shared.nsh
@@ -110,16 +110,19 @@ FunctionEnd
     ${RegCleanUninstall}
     ${UpdateProtocolHandlers}
     ${FixShellIconHandler} "HKLM"
     ${SetAppLSPCategories} ${LSP_CATEGORIES}
 
     ; Win7 taskbar and start menu link maintenance
     Call FixShortcutAppModelIDs
 
+    ; Add the Firewall entries after an update
+    Call AddFirewallEntries
+
     ; Only update the Clients\StartMenuInternet registry key values in HKLM if
     ; they don't exist or this installation is the same as the one set in those
     ; keys.
     ${StrFilter} "${FileMainEXE}" "+" "" "" $1
     ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$1\DefaultIcon" ""
     ${GetPathFromString} "$0" $0
     ${GetParent} "$0" $0
     ${If} ${FileExists} "$0"
@@ -1601,16 +1604,20 @@ FunctionEnd
 ; Helper for updating the shortcut application model IDs.
 Function FixShortcutAppModelIDs
   ${If} ${AtLeastWin7}
   ${AndIf} "$AppUserModelID" != ""
     ${UpdateShortcutAppModelIDs} "$INSTDIR\${FileMainEXE}" "$AppUserModelID" $0
   ${EndIf}
 FunctionEnd
 
+Function AddFirewallEntries
+	liteFirewallW::AddRule "$INSTDIR\${FileMainEXE}" "${BrandShortName} ($INSTDIR)"
+FunctionEnd
+
 ; The !ifdef NO_LOG prevents warnings when compiling the installer.nsi due to
 ; this function only being used by the uninstaller.nsi.
 !ifdef NO_LOG
 
 Function SetAsDefaultAppUser
   ; On Win8, we want to avoid having a UAC prompt since we'll already have
   ; another action for control panel default browser selection popping up
   ; to the user.  Win8 is the first OS where the start menu keys can be
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -459,16 +459,18 @@ Section "Uninstall"
         FileOpen $0 "$INSTDIR\${FileMainEXE}.moz-delete" w
         FileWrite $0 "Will be deleted on restart"
         Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
         FileClose $0
       ${EndUnless}
     ${EndIf}
   ${EndIf}
 
+	liteFirewallW::RemoveRule "$INSTDIR\${FileMainEXE}" "${BrandShortName} ($INSTDIR)"
+
   ; Refresh desktop icons otherwise the start menu internet item won't be
   ; removed and other ugly things will happen like recreation of the app's
   ; clients registry key by the OS under some conditions.
   System::Call "shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i 0, i 0, i 0)"
 
 !ifdef MOZ_MAINTENANCE_SERVICE
   ; Get the path the allowed cert is at and remove it
   ; Keep this block of code last since it modfies the reg view
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/License.txt
@@ -0,0 +1,17 @@
+liteFirewall is based on nsisFirewall.
+
+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.
+
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/ReadMe.txt
@@ -0,0 +1,39 @@
+liteFirewall 1.0 -- based on nsisFirewall 1.2
+
+http://liangsun.info/portfolio/nsis-plugin-litefirewall/
+http://nsis.sourceforge.net/LiteFirewall_Plugin
+
+---------------------------------------------------------
+liteFirewall resolved the issue nsisFirewall exists on Vista/Windows 7 platforms. 
+It support the profiles (private, domain, public) of firewall rules.
+It support Unicode NSIS, while another firewall plugin SimpleFC not.
+------------------------------------------------------------
+
+Usage
+----------------------------------------------------------
+liteFirewall::AddRule "<application path>" "<rule name>"
+liteFirewall::RemoveRule "<application path>" "<rule name>"
+
+<application path> is the full path to the application you want to be authorized to
+	access the network (or accept incoming connections)
+
+<rule name> is the title that will be given to this exception entry in the firewall
+	control panel list
+
+
+Notes
+-----
+1) Your installer must be run with administrator rights for liteFirewall to work
+2) When compiling with more recent compiler than VC60, you need to choose the compilation
+option to use static MFC library.
+
+Sample scripts
+--------------
+
+	; Add NOTEPAD to the authorized list
+	liteFirewall::AddRule "$WINDIR\Notepad.exe" "liteFirewall Test"
+	Pop $0
+
+	; Remove NOTEPAD from the authorized list
+	liteFirewall::RemoveRule "$WINDIR\Notepad.exe" "liteFirewall Test"
+	Pop $0
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/Sample.nsi
@@ -0,0 +1,25 @@
+; liteFirewall - Sample script
+
+!ifdef TARGETDIR
+!addplugindir "${TARGETDIR}"
+!else
+!addplugindir "..\bin"
+!endif
+
+Name "Sample liteFirewall"
+OutFile "Sample.exe"
+ShowInstDetails show	
+
+Section "Main program"
+	; Add NOTEPAD to the authorized list
+	liteFirewallW::AddRule "$WINDIR\Notepad.exe" "liteFirewall Test"
+	Pop $0
+	Exec "rundll32.exe shell32.dll,Control_RunDLL firewall.cpl"
+	MessageBox MB_OK "Program added to Firewall exception list.$\r$\n(close the control panel before clicking OK)"
+
+	; Remove NOTEPAD from the authorized list
+	liteFirewallW::RemoveRule "$WINDIR\Notepad.exe" "liteFirewall Test"
+	Pop $0
+	Exec "rundll32.exe shell32.dll,Control_RunDLL firewall.cpl"
+	MessageBox MB_OK "Program removed to Firewall exception list"
+SectionEnd
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/exdll.h
@@ -0,0 +1,97 @@
+#ifndef _EXDLL_H_
+#define _EXDLL_H_
+
+// 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;
+  TCHAR text[1]; // this should be the length of string_size
+} stack_t;
+
+
+static unsigned int g_stringsize;
+static stack_t **g_stacktop;
+static TCHAR *g_variables;
+
+static int __stdcall popstring(TCHAR *str); // 0 on success, 1 on empty stack
+static void __stdcall pushstring(const TCHAR *str);
+
+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
+};
+
+
+// utility functions (not required but often useful)
+static int __stdcall popstring(TCHAR *str)
+{
+  stack_t *th;
+  if (!g_stacktop || !*g_stacktop) return 1;
+  th=(*g_stacktop);
+  lstrcpy(str,th->text);
+  *g_stacktop = th->next;
+  GlobalFree((HGLOBAL)th);
+  return 0;
+}
+
+static void __stdcall pushstring(const TCHAR *str)
+{
+  stack_t *th;
+  if (!g_stacktop) return;
+  th=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t)+g_stringsize*sizeof(TCHAR));
+  lstrcpyn(th->text,str,g_stringsize);
+  th->next=*g_stacktop;
+  *g_stacktop=th;
+}
+
+static TCHAR * __stdcall getuservariable(int varnum)
+{
+  if (varnum < 0 || varnum >= __INST_LAST) return NULL;
+  return g_variables+varnum*g_stringsize;
+}
+
+static void __stdcall setuservariable(int varnum, const TCHAR *var)
+{
+	if (var != NULL && varnum >= 0 && varnum < __INST_LAST) 
+		lstrcpy(g_variables + varnum*g_stringsize, var);
+}
+
+
+
+#endif//_EXDLL_H_
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/liteFirewall.cpp
@@ -0,0 +1,408 @@
+/*
+liteFirewall is based on nsisFirewall.
+Modified by Liang Sun on 19, July, 2011
+http://liangsun.info/portfolio/nsis-plugin-litefirewall/
+http://nsis.sourceforge.net/LiteFirewall_Plugin
+http://www.msnlite.org
+*/
+
+/*
+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.
+*/
+#include <windows.h>
+#include <tchar.h>
+#include <shlwapi.h>
+//#include <stdio.h>
+
+#ifdef NSIS
+#include "exdll.h"
+#endif
+
+//#import "libid:58FBCF7C-E7A9-467C-80B3-FC65E8FCCA08"
+#import "netfw.tlb"
+#include <netfw.h>
+using namespace NetFwTypeLib;
+
+
+#pragma comment( lib, "ole32.lib" )
+#pragma comment( lib, "oleaut32.lib" )
+// Forward declarations
+
+#ifdef NSIS
+HINSTANCE g_hInstance;
+#endif
+
+HRESULT     WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2);
+
+HRESULT AddRule(LPCTSTR ExceptionName, LPCTSTR ProcessPath)
+{
+	HRESULT result = CoInitialize(NULL);
+	if (FAILED(result))
+		return result;
+	result = REGDB_E_CLASSNOTREG;
+
+	HRESULT hrComInit = S_OK;
+	HRESULT hr = S_OK;
+
+	INetFwPolicy2 *pNetFwPolicy2 = NULL;
+	INetFwRules *pFwRules = NULL;
+	INetFwRule *pFwRule = NULL;
+/* Start Mozilla modification */
+	INetFwRule *pFwRuleExisting = NULL;
+
+//	long CurrentProfilesBitMask = 0;
+/* End Mozilla modification */
+
+	BSTR bstrRuleName = SysAllocString(ExceptionName);
+	BSTR bstrApplicationName = SysAllocString(ProcessPath);
+	BSTR bstrRuleInterfaceType = SysAllocString(L"All");
+
+	// Initialize COM.
+	hrComInit = CoInitializeEx(
+		0,
+		COINIT_APARTMENTTHREADED
+		);
+
+	// Ignore RPC_E_CHANGED_MODE; this just means that COM has already been
+	// initialized with a different mode. Since we don't care what the mode is,
+	// we'll just use the existing mode.
+	if (hrComInit != RPC_E_CHANGED_MODE)
+	{
+		if (FAILED(hrComInit))
+		{
+			printf("CoInitializeEx failed: 0x%08lx\n", hrComInit);
+			goto Cleanup;
+		}
+	}
+
+	// Retrieve INetFwPolicy2
+	hr = WFCOMInitialize(&pNetFwPolicy2);
+	if (FAILED(hr))
+	{
+		try
+		{
+			INetFwMgrPtr fwMgr(L"HNetCfg.FwMgr");
+			if (fwMgr)
+			{
+				INetFwAuthorizedApplicationPtr app(L"HNetCfg.FwAuthorizedApplication");
+				if (app)
+				{
+					app->ProcessImageFileName = ProcessPath;
+					app->Name = ExceptionName;
+					app->Scope = NetFwTypeLib::NET_FW_SCOPE_ALL;
+					app->IpVersion = NetFwTypeLib::NET_FW_IP_VERSION_ANY;
+					app->Enabled = VARIANT_TRUE;
+					fwMgr->LocalPolicy->CurrentProfile->AuthorizedApplications->Add(app);
+				}
+			}
+		}
+		catch (_com_error& e)
+		{
+			printf("%s", e.Error());
+		}
+		goto Cleanup;
+	}
+
+	// Retrieve INetFwRules
+	hr = pNetFwPolicy2->get_Rules(&pFwRules);
+	if (FAILED(hr))
+	{
+		printf("get_Rules failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+/* Start Mozilla modification */
+	// Don't add a new rule if there is an existing rule with the same name.
+	hr = pFwRules->Item(bstrRuleName, &pFwRuleExisting);
+	// Release the INetFwRule object
+	if (pFwRuleExisting != NULL)
+	{
+		pFwRuleExisting->Release();
+	}
+	if (SUCCEEDED(hr))
+	{
+		printf("Firewall profile already exists\n");
+		goto Cleanup;
+	}
+
+	// Retrieve Current Profiles bitmask
+//	hr = pNetFwPolicy2->get_CurrentProfileTypes(&CurrentProfilesBitMask);
+//	if (FAILED(hr))
+//	{
+//		printf("get_CurrentProfileTypes failed: 0x%08lx\n", hr);
+//		goto Cleanup;
+//	}
+
+	// When possible we avoid adding firewall rules to the \ profile.
+	// If Public is currently active and it is not the only active profile, we remove it from the bitmask
+//	if ((CurrentProfilesBitMask & NET_FW_PROFILE2_PUBLIC) &&
+//		(CurrentProfilesBitMask != NET_FW_PROFILE2_PUBLIC))
+//	{
+//		CurrentProfilesBitMask ^= NET_FW_PROFILE2_PUBLIC;
+//	}
+
+	// Create a new Firewall Rule object.
+	hr = CoCreateInstance(
+		__uuidof(NetFwRule),
+		NULL,
+		CLSCTX_INPROC_SERVER,
+		__uuidof(INetFwRule),
+		(void**)&pFwRule);
+	if (FAILED(hr))
+	{
+		printf("CoCreateInstance for Firewall Rule failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+    // Populate the Firewall Rule object
+	pFwRule->put_Name(bstrRuleName);
+	pFwRule->put_Protocol(NetFwTypeLib::NET_FW_IP_PROTOCOL_TCP);
+	pFwRule->put_InterfaceTypes(bstrRuleInterfaceType);
+	pFwRule->put_Profiles(NET_FW_PROFILE2_PRIVATE);
+	pFwRule->put_Action(NET_FW_ACTION_ALLOW);
+	pFwRule->put_Enabled(VARIANT_TRUE);
+
+	pFwRule->put_ApplicationName(bstrApplicationName);
+	// Add the Firewall Rule
+	hr = pFwRules->Add(pFwRule);
+	if (FAILED(hr))
+	{
+		printf("Firewall Rule Add failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+	pFwRule->Release();
+/* End Mozilla modification */
+
+	// Create a new Firewall Rule object.
+	hr = CoCreateInstance(
+		__uuidof(NetFwRule),
+		NULL,
+		CLSCTX_INPROC_SERVER,
+		__uuidof(INetFwRule),
+		(void**)&pFwRule);
+	if (FAILED(hr))
+	{
+		printf("CoCreateInstance for Firewall Rule failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+	// Populate the Firewall Rule object
+	pFwRule->put_Name(bstrRuleName);
+/* Start Mozilla modification */
+//	pFwRule->put_Protocol(NET_FW_IP_PROTOCOL_ANY);
+	pFwRule->put_Protocol(NetFwTypeLib::NET_FW_IP_PROTOCOL_UDP);
+/* End Mozilla modification */
+	pFwRule->put_InterfaceTypes(bstrRuleInterfaceType);
+/* Start Mozilla modification */
+//	pFwRule->put_Profiles(CurrentProfilesBitMask);
+	pFwRule->put_Profiles(NET_FW_PROFILE2_PRIVATE);
+/* End Mozilla modification */
+	pFwRule->put_Action(NET_FW_ACTION_ALLOW);
+	pFwRule->put_Enabled(VARIANT_TRUE);
+
+	pFwRule->put_ApplicationName(bstrApplicationName);
+	// Add the Firewall Rule
+	hr = pFwRules->Add(pFwRule);
+	if (FAILED(hr))
+	{
+		printf("Firewall Rule Add failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+Cleanup:
+
+	// Free BSTR's
+	SysFreeString(bstrRuleName);
+	SysFreeString(bstrApplicationName);
+	SysFreeString(bstrRuleInterfaceType);
+
+	// Release the INetFwRule object
+	if (pFwRule != NULL)
+	{
+		pFwRule->Release();
+	}
+
+	// Release the INetFwRules object
+	if (pFwRules != NULL)
+	{
+		pFwRules->Release();
+	}
+
+	// Release the INetFwPolicy2 object
+	if (pNetFwPolicy2 != NULL)
+	{
+		pNetFwPolicy2->Release();
+	}
+
+	CoUninitialize();
+    return 0;
+}
+
+HRESULT RemoveRule(LPCTSTR ExceptionName, LPCTSTR ProcessPath)
+{
+    HRESULT result = CoInitialize(NULL);
+	if (FAILED(result))
+        return result;
+	try
+	{
+		INetFwMgrPtr fwMgr(L"HNetCfg.FwMgr");
+        if (fwMgr)
+        {
+		    fwMgr->LocalPolicy->CurrentProfile->AuthorizedApplications->Remove(ProcessPath);
+            result = S_OK;
+        }
+	}
+	catch (_com_error& e)
+	{
+		e;
+	}
+	HRESULT hrComInit = S_OK;
+	HRESULT hr = S_OK;
+
+	INetFwPolicy2 *pNetFwPolicy2 = NULL;
+	INetFwRules *pFwRules = NULL;
+
+/* Start Mozilla modification */
+//	long CurrentProfilesBitMask = 0;
+/* End Mozilla modification */
+
+	BSTR bstrRuleName = SysAllocString(ExceptionName);
+
+	// Retrieve INetFwPolicy2
+	hr = WFCOMInitialize(&pNetFwPolicy2);
+	if (FAILED(hr))
+	{
+		goto Cleanup;
+	}
+
+	// Retrieve INetFwRules
+	hr = pNetFwPolicy2->get_Rules(&pFwRules);
+	if (FAILED(hr))
+	{
+		printf("get_Rules failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+/* Start Mozilla modification */
+	// Retrieve Current Profiles bitmask
+//	hr = pNetFwPolicy2->get_CurrentProfileTypes(&CurrentProfilesBitMask);
+//	if (FAILED(hr))
+//	{
+//		printf("get_CurrentProfileTypes failed: 0x%08lx\n", hr);
+//		goto Cleanup;
+//	}
+
+	// When possible we avoid adding firewall rules to the Public profile.
+	// If Public is currently active and it is not the only active profile, we remove it from the bitmask
+//	if ((CurrentProfilesBitMask & NET_FW_PROFILE2_PUBLIC) &&
+//		(CurrentProfilesBitMask != NET_FW_PROFILE2_PUBLIC))
+//	{
+//		CurrentProfilesBitMask ^= NET_FW_PROFILE2_PUBLIC;
+//	}
+/* End Mozilla modification */
+
+	// Remove the Firewall Rule
+	hr = pFwRules->Remove(bstrRuleName);
+	if (FAILED(hr))
+	{
+		printf("Firewall Rule Remove failed: 0x%08lx\n", hr);
+		goto Cleanup;
+	}
+
+Cleanup:
+
+	// Free BSTR's
+	SysFreeString(bstrRuleName);
+
+	// Release the INetFwRules object
+	if (pFwRules != NULL)
+	{
+		pFwRules->Release();
+	}
+
+	// Release the INetFwPolicy2 object
+	if (pNetFwPolicy2 != NULL)
+	{
+		pNetFwPolicy2->Release();
+	}
+
+	CoUninitialize();
+	return 0;
+}
+
+
+#ifdef NSIS
+extern "C" void __declspec(dllexport) AddRule(HWND hwndParent, int string_size, 
+                                      TCHAR *variables, stack_t **stacktop)
+{
+	EXDLL_INIT();
+	
+	TCHAR ExceptionName[256], ProcessPath[MAX_PATH];
+    popstring(ProcessPath);
+    popstring(ExceptionName);
+    HRESULT result = AddRule(ExceptionName, ProcessPath);
+	// push the result back to NSIS
+    TCHAR intBuffer[16];
+	wsprintf(intBuffer, _T("%d"), result);
+	pushstring(intBuffer);
+}
+
+extern "C" void __declspec(dllexport) RemoveRule(HWND hwndParent, int string_size, 
+                                      TCHAR *variables, stack_t **stacktop)
+{
+	EXDLL_INIT();
+	
+	TCHAR ExceptionName[256], ProcessPath[MAX_PATH];
+    popstring(ProcessPath);
+	popstring(ExceptionName);
+    HRESULT result = RemoveRule(ExceptionName, 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)
+{
+	g_hInstance = hInstance;
+	return TRUE;
+}
+#endif
+
+
+// Instantiate INetFwPolicy2
+
+HRESULT WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2)
+{
+	HRESULT hr = S_OK;
+
+	hr = CoCreateInstance(
+		__uuidof(NetFwPolicy2), 
+		NULL, 
+		CLSCTX_INPROC_SERVER, 
+		__uuidof(INetFwPolicy2), 
+		(void**)ppNetFwPolicy2);
+
+	if (FAILED(hr))
+	{
+		printf("CoCreateInstance for INetFwPolicy2 failed: 0x%08lx\n", hr);
+		goto Cleanup;        
+	}
+
+Cleanup:
+	return hr;
+}
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/liteFirewall.dsp
@@ -0,0 +1,204 @@
+# Microsoft Developer Studio Project File - Name="liteFirewall" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=liteFirewall - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "liteFirewall.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "liteFirewall.mak" CFG="liteFirewall - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "liteFirewall - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "liteFirewall - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "liteFirewall - Win32 Release UNICODE" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "liteFirewall - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "NSIS" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib shlwapi.lib /nologo /dll /machine:I386 /out:"../bin/liteFirewall.dll" /OPT:REF /OPT:NOWIN98
+# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
+# Begin Special Build Tool
+IntDir=.\Release
+ProjDir=.
+TargetDir=\Prog\shared\bin
+SOURCE="$(InputPath)"
+PostBuild_Desc=Building Sample Installer...
+PostBuild_Cmds="%ProgramFiles%\NSIS\makensis" /V2 "/DTARGETDIR=$(TargetDir)" "/DINTDIR=$(IntDir)" "$(ProjDir)\Sample.nsi"
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "liteFirewall - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "NSIS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib shlwapi.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# SUBTRACT LINK32 /nodefaultlib
+# Begin Special Build Tool
+IntDir=.\Debug
+ProjDir=.
+TargetDir=.\Debug
+SOURCE="$(InputPath)"
+PostBuild_Desc=Building Sample Installer...
+PostBuild_Cmds="%ProgramFiles%\NSIS\makensis" /V4 /DTARGETDIR=$(TargetDir) /DINTDIR=$(IntDir) $(ProjDir)\Sample.nsi
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "liteFirewall - Win32 Release UNICODE"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_UNICODE"
+# PROP BASE Intermediate_Dir "Release_UNICODE"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_UNICODE"
+# PROP Intermediate_Dir "Release_UNICODE"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "NSIS" /FR /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "NSIS" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib shlwapi.lib /nologo /dll /machine:I386 /out:"../bin/liteFirewall.dll" /OPT:REF /OPT:NOWIN98
+# SUBTRACT BASE LINK32 /pdb:none /debug /nodefaultlib
+# ADD LINK32 kernel32.lib user32.lib shlwapi.lib /nologo /dll /machine:I386 /out:"../bin/liteFirewallW.dll" /OPT:REF /OPT:NOWIN98
+# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
+# Begin Special Build Tool
+IntDir=.\Release_UNICODE
+ProjDir=.
+TargetDir=\Prog\shared\bin
+SOURCE="$(InputPath)"
+PostBuild_Desc=Building Sample Installer...
+PostBuild_Cmds="%ProgramFiles%\NSIS\makensis" /V2 "/DTARGETDIR=$(TargetDir)" "/DINTDIR=$(IntDir)" "$(ProjDir)\Sample.nsi"
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "liteFirewall - Win32 Release"
+# Name "liteFirewall - Win32 Debug"
+# Name "liteFirewall - Win32 Release UNICODE"
+# Begin Source File
+
+SOURCE=.\exdll.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\License.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\liteFirewall.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\Sample.nsi
+
+!IF  "$(CFG)" == "liteFirewall - Win32 Release"
+
+# Begin Custom Build
+ProjDir=.
+InputPath=.\Sample.nsi
+
+"$(ProjDir)\Sample.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	rem Force Post-Build Step
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "liteFirewall - Win32 Debug"
+
+# Begin Custom Build
+ProjDir=.
+InputPath=.\Sample.nsi
+
+"$(ProjDir)\Sample.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	rem Force Post-Build Step
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "liteFirewall - Win32 Release UNICODE"
+
+# Begin Custom Build
+ProjDir=.
+InputPath=.\Sample.nsi
+
+"$(ProjDir)\Sample.exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	rem Force Post-Build Step
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Target
+# End Project
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/liteFirewall.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "liteFirewall"=.\liteFirewall.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/liteFirewall.sln
@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liteFirewall", "liteFirewall.vcproj", "{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release UNICODE|Win32 = Release UNICODE|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Debug|Win32.Build.0 = Debug|Win32
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Release|Win32.ActiveCfg = Release|Win32
+		{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
new file mode 100644
--- /dev/null
+++ b/other-licenses/nsis/Contrib/liteFirewall/liteFirewall.vcproj
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="liteFirewall"
+	ProjectGUID="{F7462DF9-A430-4185-9AFC-8FAEA0FB98EA}"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="1"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/liteFirewall.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;UNICODE;NSIS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\Debug/liteFirewall.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="shlwapi.lib"
+				OutputFile=".\Debug/liteFirewall.dll"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/liteFirewall.pdb"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Debug/liteFirewall.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/liteFirewall.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Building Sample Installer..."
+				CommandLine="&quot;E:\Program Files (x86)\NSIS\Unicode\makensis&quot; /V4 /DTARGETDIR=$(TargetDir) /DINTDIR=$(IntDir) $(ProjectDir)Sample.nsi"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release UNICODE|Win32"
+			OutputDirectory=".\Release_UNICODE"
+			IntermediateDirectory=".\Release_UNICODE"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="1"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release_UNICODE/liteFirewall.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;UNICODE;NSIS"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release_UNICODE/liteFirewall.pch"
+				AssemblerListingLocation=".\Release_UNICODE/"
+				ObjectFile=".\Release_UNICODE/"
+				ProgramDataBaseFileName=".\Release_UNICODE/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="shlwapi.lib"
+				OutputFile="../bin/liteFirewallW.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release_UNICODE/liteFirewallW.pdb"
+				OptimizeReferences="2"
+				OptimizeForWindows98="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Release_UNICODE/liteFirewallW.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release_UNICODE/liteFirewall.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Building Sample Installer..."
+				CommandLine="&quot;E:\Program Files (x86)\NSIS\Unicode\makensis&quot; /V2 /DTARGETDIR=$(TargetDir) /DINTDIR=$(IntDir) $(ProjectDir)Sample.nsi"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="1"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/liteFirewall.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;NSIS"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/liteFirewall.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="shlwapi.lib"
+				OutputFile="../bin/liteFirewall.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release/liteFirewall.pdb"
+				OptimizeReferences="2"
+				OptimizeForWindows98="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Release/liteFirewall.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/liteFirewall.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				Description="Building Sample Installer..."
+				CommandLine="&quot;E:\Program Files (x86)\NSIS\Unicode\makensis&quot; /V2 /DTARGETDIR=$(TargetDir) /DINTDIR=$(IntDir) $(ProjectDir)Sample.nsi"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="exdll.h"
+			>
+		</File>
+		<File
+			RelativePath="License.txt"
+			>
+		</File>
+		<File
+			RelativePath="liteFirewall.cpp"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCLCompilerTool"
+					PreprocessorDefinitions=""
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release UNICODE|Win32"
+				>
+				<Tool
+					Name="VCCLCompilerTool"
+					PreprocessorDefinitions=""
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCLCompilerTool"
+					PreprocessorDefinitions=""
+				/>
+			</FileConfiguration>
+		</File>
+		<File
+			RelativePath="ReadMe.txt"
+			>
+		</File>
+		<File
+			RelativePath="Sample.nsi"
+			>
+			<FileConfiguration
+				Name="Debug|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					CommandLine="rem Force Post-Build Step&#x0D;&#x0A;"
+					Outputs="$(ProjectDir)Sample.exe"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release UNICODE|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					CommandLine="rem Force Post-Build Step&#x0D;&#x0A;"
+					Outputs="$(ProjectDir)Sample.exe"
+				/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Release|Win32"
+				>
+				<Tool
+					Name="VCCustomBuildTool"
+					CommandLine="rem Force Post-Build Step&#x0D;&#x0A;"
+					Outputs="$(ProjectDir)Sample.exe"
+				/>
+			</FileConfiguration>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..18ff3481a6d37aa1282c8dc1cfa47efc1bd4b0a0
GIT binary patch
literal 12184
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f82a3ff907748c159ca4de94c4e83b4b5a520a97
GIT binary patch
literal 9216
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
M8+Y5?_7`gZ17jjSg#Z8m
--- a/toolkit/mozapps/installer/windows/nsis/makensis.mk
+++ b/toolkit/mozapps/installer/windows/nsis/makensis.mk
@@ -25,16 +25,17 @@ TOOLKIT_NSIS_FILES = \
 CUSTOM_NSIS_PLUGINS = \
 	AccessControl.dll \
 	AppAssocReg.dll \
 	ApplicationID.dll \
 	CertCheck.dll \
 	CityHash.dll \
 	InetBgDL.dll \
 	InvokeShellVerb.dll \
+	liteFirewallW.dll \
 	ServicesHelper.dll \
 	ShellLink.dll \
 	UAC.dll \
 	$(NULL)
 
 CUSTOM_UI = \
 	nsisui.exe \
 	$(NULL)