扫描IIs已存在站点及端口

当新建IIS站点时,有可能发生端口冲突的情况,需要在此之前扫描已使用的端口。

int CIISDlg::ScanSitePort(unsigned short *SiteType, long lPort)
{
 IADsContainer* pContainer = NULL;  
      HRESULT hr;  
 char Port[256];
 sprintf(Port,"%d",lPort);
      bool bCoInit  =  false;     
      hr = ::CoInitialize(NULL);  
      if  SUCCEEDED(hr)  
          bCoInit = true;     
      hr = ADsGetObject(SiteType,IID_IADsContainer,(void**)&pContainer);  
      if FAILED(hr)  
      {  
          printf("Error in get web3svc object \n");  
          return -1;  
      }      
      IUnknown *pUnk;  
      hr = pContainer->get__NewEnum(&pUnk);  
      pContainer->Release();   
      if FAILED(hr)  
      {  
          printf("Error in getting the enumeration \n");              
          return   -2;  
      }        
      IEnumVARIANT *pEnum;  
      hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);  
      pUnk->Release();   
      if FAILED(hr)  
      {  
          printf("Error in getting the enumeration variant/n");  
          return   -3;  
      }      
      BSTR  bstr;  
      VARIANT  var;  
      IADs  *pADs;  
      ULONG   lFetch;  
      IDispatch   *pDisp; 
      VariantInit(&var);  
   
      hr= pEnum->Next(1, &var, &lFetch);  
      while(hr == S_OK)  
      {  
          if (lFetch == 1)  
          {              
              pDisp = V_DISPATCH(&var);  
              pDisp->QueryInterface(IID_IADs, (void**)&pADs);             
              pADs->get_Name(&bstr);  
              VARIANT   var1;  
              VariantInit(&var1);  
              HRESULT   hr1;             
              hr1 = pADs->Get(L"ServerBindings", &var1 ); 
              if( SUCCEEDED(hr1))  
              {  
                  LONG   lstart,   lend;  
                  SAFEARRAY *sa = V_ARRAY(&var1);  
                  VARIANT   varItem;  
     
                  hr1 = SafeArrayGetLBound(sa, 1, &lstart);  
                  hr1 = SafeArrayGetUBound(sa, 1, &lend);  
           
                  VariantInit(&varItem);  
   
                  for(long idx = lstart; idx <= lend; idx++)  
                  {  
                      hr1 = SafeArrayGetElement( sa, &idx, &varItem);
 CString str,temp;
     str.Format("%S\n",V_BSTR(&varItem));
 MessageBox(str,NULL,MB_OK);
 AfxExtractSubString(temp,str,1,':');
 if(Port==temp)
 {
AfxMessageBox("该端口已存在");
return 1;
 }
                      VariantClear(&varItem);
                  }          
                  VariantClear(&var1);  
              }     
              
             if (pADs)  
              pADs->Release();  
          
              SysFreeString(bstr);              
          }  
          VariantClear(&var);  
          hr=pEnum->Next(1, &var, &lFetch);  
      }  
    if (pEnum)  
        pEnum->Release();  
   
    if (bCoInit)  
       ::CoUninitialize();  
   
    return 0;  
}


AfxExtractSubString();函数的用法见上一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值