Disabling a Firewall Per Interface
This example disables a firewall per interface using the Windows Firewall with Advanced Security APIs.
/********************************************************************++ THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. Copyright (C) Microsoft. All Rights Reserved. Abstract: This C++ file includes sample code for disabling Windows Firewall per Interface. --********************************************************************/ #include <windows.h> #include <stdio.h> #include <comdef.h> #include <netfw.h> // Forward declarations HRESULT WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2); int __cdecl main() { HRESULT hrComInit = S_OK; HRESULT hr = S_OK; INetFwPolicy2 *pNetFwPolicy2 = NULL; variant_t vtInterfaceName("Local Area Connection"), vtInterface; long index = 0; SAFEARRAY *pSa = NULL; // 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)) { goto Cleanup; } // Retrieve Local Interface pSa = SafeArrayCreateVector(VT_VARIANT, 0, 1); if (!pSa) _com_issue_error(E_OUTOFMEMORY); else { hr = SafeArrayPutElement(pSa, &index, &vtInterfaceName); if FAILED(hr) _com_issue_error(hr); vtInterface.vt = VT_ARRAY | VT_VARIANT; vtInterface.parray = pSa; } // Disable Windows Firewall for the local interface (Public profile) hr = pNetFwPolicy2->put_ExcludedInterfaces(NET_FW_PROFILE2_PRIVATE, vtInterface); if (FAILED(hr)) { printf("put_ExcludedInterfaces failed: 0x%08lx\n", hr); goto Cleanup; } Cleanup: // Release the INetFwPolicy2 object if (pNetFwPolicy2 != NULL) { pNetFwPolicy2->Release(); } // Uninitialize COM. if (SUCCEEDED(hrComInit)) { CoUninitialize(); } return 0; } // 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; }
Send comments about this topic to Microsoft
Build date: 10/26/2012