将AP加入防火墙例外C++ 方法可对比C#方法参考

头文件 #include "netfw.h"


INetFwProfile* m_pFireWallProfile=NULL;
//int FW_NOERROR = 0;
//int FW_ERR_INITIALIZED = 1;
//int FW_ERR_CREATE_SETTING_MANAGER = 2;
//int FW_ERR_LOCAL_POLICY = 3;
//int FW_ERR_PROFILE = 4;
enum FW_ERROR_CODE {FW_NOERROR , FW_ERR_INITIALIZED, FW_ERR_CREATE_SETTING_MANAGER, FW_ERR_LOCAL_POLICY,FW_ERR_PROFILE,
 FW_ERR_INVALID_ARG,FW_ERR_AUTH_APPLICATIONS,FW_ERR_CREATE_APP_INSTANCE,FW_ERR_SYS_ALLOC_STRING,FW_ERR_PUT_PROCESS_IMAGE_NAME,
 FW_ERR_PUT_REGISTER_NAME,FW_ERR_ADD_TO_COLLECTION
} ;

int test(){
  HRESULT hr = S_FALSE;
  INetFwMgr * fwMgr = NULL;
  INetFwPolicy * fwPolicy = NULL;

  int ret = FW_NOERROR;
  try 
  {
  if ( m_pFireWallProfile )
  throw FW_ERR_INITIALIZED;

  CoInitialize(0);
  // 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; //将程序名称加入例外列表:
}

int AddApplication( const wchar_t* lpszProcessImageFileName, const wchar_t* lpszRegisterName )
{
  FW_ERROR_CODE ret = FW_NOERROR;
  HRESULT hr;
  BOOL bAppEnable = false;
  BSTR bstrProcessImageFileName = NULL;
  BSTR bstrRegisterName = NULL;
  INetFwAuthorizedApplication* pFWApp = NULL;
  INetFwAuthorizedApplications* pFWApps = NULL;
  INetFwServices * services = NULL;
  INetFwService * remote = NULL;

  try
  {
  if( m_pFireWallProfile == NULL )
  throw FW_ERR_INITIALIZED;
  if( lpszProcessImageFileName == NULL || lpszRegisterName == NULL )
  throw FW_ERR_INVALID_ARG;

  // First of all, check the application is already authorized;
 // FW_ERROR_CODE nError = this->IsAppEnabled( lpszProcessImageFileName, bAppEnable );
  //if( nError != FW_NOERROR )
//  throw nError;

  // Only add the application if it isn't authorized
  if( bAppEnable == FALSE )
  {
  // Retrieve the authorized application collection
  hr = m_pFireWallProfile->get_AuthorizedApplications( &pFWApps );
  if( FAILED( hr ))
  throw FW_ERR_AUTH_APPLICATIONS;

  // Create an instance of an authorized application
  hr = CoCreateInstance( __uuidof(NetFwAuthorizedApplication), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwAuthorizedApplication), (void**)&pFWApp);
  if( FAILED( hr ))
  throw FW_ERR_CREATE_APP_INSTANCE;

  // Allocate a BSTR for the Process Image FileName
  bstrProcessImageFileName = SysAllocString( lpszProcessImageFileName );
  if( SysStringLen( bstrProcessImageFileName ) == 0)
  throw FW_ERR_SYS_ALLOC_STRING;

  // Set the process image file name
  hr = pFWApp->put_ProcessImageFileName( bstrProcessImageFileName );
  if( FAILED( hr ) )
  throw FW_ERR_PUT_PROCESS_IMAGE_NAME;

  // Allocate a BSTR for register name
  bstrRegisterName = SysAllocString( lpszRegisterName );
  if( SysStringLen( bstrRegisterName ) == 0)
  throw FW_ERR_SYS_ALLOC_STRING;
  // Set a registered name of the process
  hr = pFWApp->put_Name( bstrRegisterName );
  if( FAILED( hr ))
  throw FW_ERR_PUT_REGISTER_NAME;
   
  // Add the application to the collection
  hr = pFWApps->Add( pFWApp );
  if( FAILED( hr ))
  throw FW_ERR_ADD_TO_COLLECTION;
  }
  }
  catch( FW_ERROR_CODE nError )
  {
  ret = nError;
  }
 

  SysFreeString( bstrProcessImageFileName );
  SysFreeString( bstrRegisterName );

  if( pFWApp )
  pFWApp->Release();
  if( pFWApps )
  pFWApps->Release();

  return ret;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值