Click here to Skip to main content
Licence 
First Posted 5 Jul 2005
Views 126,852
Bookmarked 80 times

Windows XP SP2 Firewall Controller

By | 10 Jul 2006 | Article
How to control a base firewall included in Windows XP SP2 using COM.

Sample Image - WinXPSP2Firewall.jpg

Introduction

Windows XP SP2 basically has a small firewall. It's very easy to control, but sometimes it bothers you. When your application tries to connect to the internet, Windows shows a warning message-box, and this makes users feel your application is an Ad-Ware.

To prevent such things, I suggest you add your program to a Firewall Collection List. (This list contains the allowed programs.)

This wrapper class is very easy, simple, and useful. You don't need to see this 'Security Alert' message box any more:

Sample Image - Windows Firewall Security Alert Message Box

Implementation - C++

It's very easy. Just connect to the Windows XP Firewall as a COM, and do what you want.

FW_ERROR_CODE WinXPSP2FireWall::Initialize()
{
 HRESULT hr = S_FALSE;
 INetFwMgr* fwMgr = NULL;
 INetFwPolicy* fwPolicy = NULL;

 FW_ERROR_CODE ret = FW_NOERROR;
 try
 {
  if( m_pFireWallProfile )
   throw FW_ERR_INITIALIZED;
  /* Create an instance of the firewall settings manager. */
  hr = CoCreateInstance( __uuidof(NetFwMgr), NULL, 
         CLSCTX_INPROC_SERVER, __uuidof( INetFwMgr), (void**)&fwMgr );
  if( FAILED( hr ))
   throw FW_ERR_CREATE_SETTING_MANAGER;
  /* Retrieve the local firewall policy. */
  hr = fwMgr->get_LocalPolicy( &fwPolicy );
  if( FAILED( hr ))
   throw FW_ERR_LOCAL_POLICY;
  /* Retrieve the firewall profile currently in effect */

  hr = fwPolicy->get_CurrentProfile( &m_pFireWallProfile );
  if( FAILED( hr ))
   throw FW_ERR_PROFILE;
 }
 catch( FW_ERROR_CODE nError)
 {
  ret = nError;
 }
 if( fwPolicy )
  fwPolicy->Release();
 if( fwMgr )
  fwMgr->Release();
 return ret;
}

How to Use in C++

It's very easy to use. Just make an instance, and call Initialize(). Ensure that you call the Initialize() function after calling CoInitialize(). You can call Uninitialize() by yourself, but the destructor calls the function too. Also, you should know that you must let Uninitialize() be called before CoUninitialize() is called.

{
 WinXPSP2FireWall fw;
 fw.Initialize();
 wchar_t szApplication[MAX_PATH];
 GetCurrentDirectoryW( MAX_PATH, szApplication );

#ifdef _DEBUG

  wcscat(szApplication, L"file://Debug//WindowsFirewall.exe");
#else
 wcscat( szApplication, L"file://Release//WindowsFirewall.exe");
#endif

 fw.AddApplication( szApplication, L"FireWallTest");
 fw.RemoveApplication( szApplication );
 fw.AddPort( 4321, NET_FW_IP_PROTOCOL_TCP, L"FireWallPortTest" );
 fw.RemovePort( 4321, NET_FW_IP_PROTOCOL_TCP );
 fw.Uninitialize();
}

How to Use in C#

Usage in C# is very similar to that in C++. But it doesn't require APIs for COM interfaces, this makes it easier to implement this in C# than C++. Allocate an instance of the WinXPSP2FireWall, and call Initialize() first. And then use the methods you want. That's all! :)

Moah.WinXPSP2FireWall fw = new Moah.WinXPSP2FireWall();
fw.Initialize();

string strApplication = System.Environment.CurrentDirectory + 
                        "\\WindowsFirewall.exe";
fw.AddApplication(strApplication, "FireWallTest");
fw.RemoveApplication(strApplication);

fw.AddPort(4321, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP, 
           "FireWallPortTest");
fw.RemovePort(4321, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);

Acknowledgment for C++

You need four files to compile this project: netfw.h, netfw.idl, icftypes.h, and icftypes.idl. You can get those files from the Windows XP SP2 PSDK. Or I have included the files in the downloads. You can just use them, instead of downloading and installing the SDK.

Acknowledgment for C#

If you have errors with NetFwTypeLib, add a reference to hnetcfg.dll. You can do that through "Project -> Add Reference... -> Browse" in Visual Studio, and the DLL file is usually located in "C:\Windows\System32\hnetcfg.dll".

History

  • 6, Jul. 2005
    • First release.
  • 10, Jul. 2006
    • Added a C# version of the Windows XP SP2 Firewall Controller.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

moah

Web Developer

Korea (Republic Of) Korea (Republic Of)

Member

Youngjin Kim lives in South Korea. I'm interested in every part of Computer Science, cause it has not been long time since graduate a University.
But now I'm working and researching on Pattern Recognition. Using that trying to recognize a Handwriting Prints. Korean and Chinese are my interesting Research Part.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionLicense PinmemberMember 896106523:27 28 May '12  
Questionhow to run this source code PinmemberMember 395831223:24 6 Sep '08  
QuestionHow to add Windws Service Exception??? Pinmembererickbp219:20 2 Sep '08  
Generalbug under Vista Pinmembernoelhx18:55 27 Mar '07  
QuestionXP firewall gets automatically DISABLED when using this?? PinmemberOrion Richardson24:28 28 Dec '06  
AnswerRe: XP firewall gets automatically DISABLED when using this?? Pinmembermoah6:02 28 Dec '06  
AnswerRe: XP firewall gets automatically DISABLED when using this?? PinmemberOrion Richardson28:49 7 Feb '07  
GeneralRe: XP firewall gets automatically DISABLED when using this?? Pinmemberchinnu_123:19 13 Feb '07  
GeneralRe: XP firewall gets automatically DISABLED when using this?? Pinmemberel delo12:52 15 May '07  
Just a thought, but I believe the MS Firewall can also be controlled (or at least it's state interrogatged) by/according-to Group Policy.
 
Assuming that's the case, then even a Local Admin might not be able to muck with the Firewall if the Group Policies preclude it.
 
As I said, I don't know this as fact and am not asserting it to be true, just proposing the thought as one scenario/hypothesis.
 
I know that at a certain very large SW company the net nannies would detect the FW being off or having certain ports/exceptions opened (and a laundry list of other settings etc), then generated nag-ware and nag-mail based on that. At some point they'd also simply boot ones' machine off the network.
 
BTW, very nice work!!!
 
- Lance
QuestionDoes this work on Vista? Pinmemberthomastom11:00 19 Sep '06  
AnswerRe: Does this work on Vista? Pinmemberthomastom14:02 19 Sep '06  
GeneralRe: Does this work on Vista? Pinmembermoah5:45 20 Sep '06  
AnswerRe: Does this work on Vista? PinmemberEd Dixon12:50 28 Dec '06  
GeneralDon't listen to the complainers PinmemberTomM11:40 11 Aug '06  
GeneralRe: Don't listen to the complainers Pinmembermoah2:37 12 Aug '06  
Questionwhat if there is no SP? PinmemberMario M.13:35 21 Jul '06  
AnswerRe: what if there is no SP? Pinmembermoah16:05 23 Jul '06  
GeneralFirewall on Windows 2000 and XP SP1 PinmemberFornazin4:46 19 Jul '06  
GeneralRe: Firewall on Windows 2000 and XP SP1 Pinmembermoah20:22 19 Jul '06  
GeneralRe: Firewall on Windows 2000 and XP SP1 Pinmemberpadma81023:30 14 Nov '06  
GeneralRe: Firewall on Windows 2000 and XP SP1 Pinmembermoah0:49 15 Nov '06  
GeneralAbout the C# version Pinmemberhdkrus6:07 28 Jun '06  
GeneralRe: About the C# version Pinmembermoah15:22 29 Jun '06  
GeneralAbout the C# version Pinmemberhdkrus6:03 11 Jul '06  
GeneralI want to use Windows XP SP2 Firewall Controller in Visual C# Pinmemberchul781021:49 12 Jul '05  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120529.1 | Last Updated 10 Jul 2006
Article Copyright 2005 by moah
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid