vc 扫描IIS站点及端口信息

#include   <stdio.h>  

  #include   "IAds.h"  

  #include   "Adshlp.h"  

  #include   "activeds.h"  

  #include   <COMDEF.h>  

   

  int   main()  

  {  

      IADsContainer*   pContainer   =   NULL;  

      HRESULT   hr;  

      bool   bCoInit   =   false;     

      hr   =   ::CoInitialize(NULL);  

      if   SUCCEEDED(hr)  

          bCoInit   =   true;     

      hr   =   ADsGetObject(L"IIS://localhost/W3svc"   ,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   not   W3Svc/n,   it   will   fail.  

              if   (   SUCCEEDED(hr1)   )  

              {  

                  LONG   lstart,   lend;  

                  SAFEARRAY   *sa   =   V_ARRAY(&var1);  

                  VARIANT   varItem;  

     

                  //   Get   the   lower   and   upper   bound  

                  hr1   =   SafeArrayGetLBound(   sa,   1,   &lstart   );  

                  hr1   =   SafeArrayGetUBound(   sa,   1,   &lend   );  

           

                  VariantInit(&varItem);  

   

                  for   (long   idx   =   lstart;   idx   <=   lend;   idx++)  

                  {  

                      hr1   =   SafeArrayGetElement(   sa,   &idx,   &varItem   );   

                      printf("     %S/n",   V_BSTR(&varItem));   //   <---   output,   customize   here/  

                      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;  

  }

你可能感兴趣的:(vc 扫描IIS站点及端口信息)