int CheckFirewallPortState(long number, NET_FW_IP_PROTOCOL protocol) { INetFwMgr *imgr = NULL; INetFwPolicy *ipol = NULL; INetFwProfile *iprof = NULL; HRESULT hr = S_OK; VARIANT_BOOL portenabled = 0; // false int result = 0; // error hr = CoCreateInstance(__uuidof(NetFwMgr), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwMgr), (void**)&imgr); if(FAILED(hr)) return 0; hr = S_FALSE; if(imgr->get_LocalPolicy(&ipol) == S_OK) { if(ipol->get_CurrentProfile(&iprof) == S_OK) { INetFwOpenPorts *iports = NULL; if(iprof->get_GloballyOpenPorts(&iports) == S_OK) { INetFwOpenPort *iport = NULL; hr = iports->Item(number, protocol, &iport); if(SUCCEEDED(hr)) { hr = iport->get_Enabled(&portenabled); iport->Release(); } iports->Release(); } iprof->Release(); } ipol->Release(); } imgr->Release(); if(hr == S_OK) { if(portenabled) result = 1; else result = -1; } return result; }
FW_ERROR_CODE WinXPSP2FireWall::IsPortEnabled( LONG lPortNumber, NET_FW_IP_PROTOCOL ipProtocol, BOOL& bEnable ) { FW_ERROR_CODE ret = FW_NOERROR; VARIANT_BOOL bFWEnabled; INetFwOpenPort* pFWOpenPort = nullptr; INetFwOpenPorts* pFWOpenPorts = nullptr; HRESULT hr; bEnable = FALSE; try { if( m_pFireWallProfile == nullptr ) throw FW_ERR_INITIALIZED; // Retrieve the open ports collection hr = m_pFireWallProfile->get_GloballyOpenPorts( &pFWOpenPorts ); if( FAILED( hr )) throw FW_ERR_GLOBAL_OPEN_PORTS; // Get the open port hr = pFWOpenPorts->Item( lPortNumber, ipProtocol, &pFWOpenPort ); if( SUCCEEDED( hr )) { hr = pFWOpenPort->get_Enabled( &bFWEnabled ); if( FAILED( hr )) throw FW_ERR_PORT_IS_ENABLED; if( bFWEnabled == VARIANT_TRUE ) bEnable = TRUE; } } catch( FW_ERROR_CODE nError) { ret = nError; } if( pFWOpenPort ) pFWOpenPort->Release(); if( pFWOpenPorts ) pFWOpenPorts->Release(); return ret; }
HRESULT WindowsFirewallPortIsEnabled( IN INetFwProfile* fwProfile, IN LONG portNumber, IN NET_FW_IP_PROTOCOL ipProtocol, OUT BOOL* fwPortEnabled ) { HRESULT hr = S_OK; VARIANT_BOOL fwEnabled; INetFwOpenPort* fwOpenPort = NULL; INetFwOpenPorts* fwOpenPorts = NULL; _ASSERT(fwProfile != NULL); _ASSERT(fwPortEnabled != NULL); *fwPortEnabled = FALSE; // Retrieve the globally open ports collection. hr = fwProfile->get_GloballyOpenPorts(&fwOpenPorts); if (FAILED(hr)) { goto error; } // Attempt to retrieve the globally open port. hr = fwOpenPorts->Item(portNumber, ipProtocol, &fwOpenPort); if (SUCCEEDED(hr)) { // Find out if the globally open port is enabled. hr = fwOpenPort->get_Enabled(&fwEnabled); if (FAILED(hr)) { goto error; } if (fwEnabled != VARIANT_FALSE) { // The globally open port is enabled. *fwPortEnabled = TRUE; } else { } } else { // The globally open port was not in the collection. hr = S_OK; } error: // Release the globally open port. if (fwOpenPort != NULL) { fwOpenPort->Release(); } // Release the globally open ports collection. if (fwOpenPorts != NULL) { fwOpenPorts->Release(); } return hr; }