精典的ASP传奇的J2EE新生的NETFTP服务器服务器安全WINDOWSB/S 模式WEB安全WAP世界动态网站推广宣传
空间服务器数据库技术邮局服务器站長工具硬设与组建Alexa专题DHTML项目管理WEB标准电脑硬件
病毒知识电脑使用布线协议接入交换路由局域网无线网络网络规划
Visual BasicVisual C/C++MssqlMySqloracleSybase 存在安全风险进程系统进程列表应用程序进程列表其它进程列表
黑客编程漏洞分析本地提权免杀技术脚本漏洞数据库注入安全防护内网渗透加密解密工具使用
WAP技术WAP入门
 您的位置:   >> 相关知识 >> 桌面应用程序 >> Visual C/C++ >>

用VC编程实现IIS服务器的配置

合金网络科技

 
  添加日期:2007-3-31 点击次数:94次  
   
 

#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#pragma comment(lib,'comsupp.lib')
#pragma comment(lib,'ActiveDS.lib')
#pragma comment(lib,'adsiid.lib')
#pragma comment(lib, 'WS2_32.lib')

int CPage1::CheckW3SvcExist(BOOL bStart)
{
 int iErrCode;
 
    SC_HANDLE hHandle = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
 SC_HANDLE hService;
 
    if (hHandle ==NULL ) //创建句柄失败
 {
  iErrCode = ERRORCODE_CHECKSERVICEERROR;  //检查服务失败
  SetDlgItemText(IDC_SERVER_STATE,'检查IIS服务失败!');
  return iErrCode;
    }
 
    ENUM_SERVICE_STATUS service;
    DWORD dwBytesNeeded = 0;
    DWORD dwServicesReturned = 0;
    DWORD dwResumedHandle = 0;
    DWORD dwServiceType = SERVICE_WIN32;  //只读取WIN32的服务 | SERVICE_DRIVER;
 char* chServiceName;
 char* chFind;
 BOOL bResult;
 bool bHasService=false;
 
 chFind='W3SVC';
 chFind=_strupr(_strdup(chFind)); //_strdup The _strdup function calls malloc to allocate storage space for a copy of strSource and then copies strSource to the allocated space. 所以要释放
 
 // 查找服务列表
    bResult = ::EnumServicesStatus(hHandle,
         dwServiceType,
         SERVICE_STATE_ALL, 
         &service,
         sizeof(ENUM_SERVICE_STATUS),
         &dwBytesNeeded,
         &dwServicesReturned,
         &dwResumedHandle        );
 
    if (!bResult)
 {
        // 获取应需要的内存空间
        if (GetLastError() == ERROR_MORE_DATA)
  {           
            DWORD dwBytes = sizeof(ENUM_SERVICE_STATUS) + dwBytesNeeded;
            ENUM_SERVICE_STATUS* pServices = NULL;
            pServices = new ENUM_SERVICE_STATUS [dwBytes];
  
            // 获取服务列表
            EnumServicesStatus(hHandle,
        dwServiceType,
        SERVICE_STATE_ALL,
        pServices,
        dwBytes,
        &dwBytesNeeded,
        &dwServicesReturned,
        &dwResumedHandle );
  
            // 提取每个列表
  
            for (unsigned iIndex = 0; iIndex < dwServicesReturned; iIndex++)
   {
    //chServiceName=(pServices+iIndex)->lpDisplayName;
    //AfxMessageBox((pServices+iIndex)->lpDisplayName);

    chServiceName=_strupr(_strdup((pServices+iIndex)->lpServiceName));
    if(strcmp(chFind,chServiceName)==0)
    {
     switch((pServices+iIndex)->ServiceStatus.dwCurrentState)
     {     
     case SERVICE_STOPPED: 
      SetDlgItemText(IDC_SERVER_STATE,'IIS已经停止');
      GetDlgItem(IDC_SERVER_START)->EnableWindow(true);
      GetDlgItem(IDC_SERVER_STOP)->EnableWindow(false);

     
      if(bStart)
      {
       hService= OpenService(hHandle,chServiceName,SERVICE_ALL_ACCESS);
       if(hService==0)
       {
        iErrCode=ERRORCODE_CANNTSTARTSERVICE;
        SetDlgItemText(IDC_SERVER_STATE,'无法启动IIS!');
        return iErrCode;
       }
       else
       {
        bResult=StartService(hService,0,NULL);
        if(!bResult)
        {
         SetDlgItemText(IDC_SERVER_STATE,'无法启动IIS!');
         iErrCode=ERRORCODE_CANNTSTARTSERVICE;
         return iErrCode;
        }
        else
        {
         SetDlgItemText(IDC_SERVER_STATE,'已经成功启动了IIS');
         iErrCode=ERRORCODE_STARTED;
                
         GetDlgItem(IDC_SERVER_START)->EnableWindow(false);
         GetDlgItem(IDC_SERVER_STOP)->EnableWindow(true);

         return iErrCode;
        }

        CloseServiceHandle(hService);      
       }     
      }    
      break;

     case SERVICE_RUNNING:    
      GetDlgItem(IDC_SERVER_START)->EnableWindow(false);
      GetDlgItem(IDC_SERVER_STOP)->EnableWindow(true);

      iErrCode=ERRORCODE_RUNNING;
      SetDlgItemText(IDC_SERVER_STATE,'IIS正在运行中...');
      break;
     }
     bHasService=true;
     free(chServiceName);
     break; //退出循环
    }
    free(chServiceName);
            }
  
            delete [] pServices;
            pServices = NULL;
  
        }
        CloseServiceHandle(hHandle);
    }
 else
 {
    SetDlgItemText(IDC_SERVER_STATE,'检查IIS服务失败!');

  iErrCode=ERRORCODE_CHECKSERVICEERROR;
 }
 free(chFind);

    if(!bHasService)
 {
  iErrCode=ERRORCODE_NOSERVICE;
  SetDlgItemText(IDC_SERVER_STATE,'你的计算机还没有安装IIS!');

 }

 return iErrCode;
}

BOOL CPage1::CreateVirtualDirectry(LPCTSTR lpszVirtualDirName, LPCTSTR lpszDiskPath)
{
 UpdateData();

 IADsContainer* iContainer;
 IADs* iAds;
 if(ADsGetObject(L'IIS://localhost/w3svc',IID_IADsContainer,(void**)&iContainer)==S_OK)
 {
  iContainer->GetObject(_bstr_t('IIsWebServer'), _bstr_t('1'),(IDispatch**)&iAds);
  if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
  {
   iContainer->GetObject(_bstr_t('IIsWebVirtualDir'),_bstr_t('Root'),(IDispatch**)&iAds);
   if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
   {
   // iContainer->Delete(_bstr_t('IIsWebVirtualDir'), _bstr_t(lpszVirtualDirName));
    if(iContainer->Create(_bstr_t('IIsWebVirtualDir'), _bstr_t(lpszVirtualDirName),(IDispatch**)&iAds)==S_OK)
    {
     iAds->Put(_bstr_t('AccessRead'),_variant_t(this->m_bRead?true:false));
     iAds->Put(_bstr_t('AccessWrite'),_variant_t(this->m_bWrite?true:false));
     iAds->Put(_bstr_t('AccessScript'),_variant_t(this->m_bScript?true:false));
     iAds->Put(_bstr_t('AccessExecute'),_variant_t(this->m_bExecute?true:false));
     iAds->Put(_bstr_t('EnableDirBrowsing'),_variant_t(this->m_bBrowse?true:false));
     iAds->Put(_bstr_t('EnableDefaultDoc'),_variant_t(this->m_bExecute?true:false));
     iAds->Put(_bstr_t('Path'),_variant_t(lpszDiskPath));
    
     iAds->SetInfo();
    
     DISPID dispid;
     LPWSTR szDispName = L'AppCreate2';
     HRESULT hresult = iAds->GetIDsOfNames(IID_NULL,&szDispName,1,
      LOCALE_SYSTEM_DEFAULT,&dispid);
     if(hresult == S_OK)
     {
      DISPPARAMS par;
      VARIANTARG vName;
      VariantInit(&vName);
      vName.vt = VT_BOOL;
      vName.boolVal = false;
     
      par.cArgs = 1;
      par.rgvarg = &vName;
      par.cNamedArgs = 0;
      par.rgdispidNamedArgs = NULL;
     
      hresult = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
       DISPATCH_METHOD,&par,NULL, NULL,NULL);

      SetDlgItemText(IDC_STATE,'创建虚拟目录成功!');
     }
     iAds->Release();
     iContainer->Release();
     return true;
    }
    else
    {
     SetDlgItemText(IDC_STATE,'创建虚拟目录失败!');
     iAds->Release();
     iContainer->Release();
    
     return false;
    }
   }
   else
   {
    SetDlgItemText(IDC_STATE,'创建虚拟目录失败!');

    iAds->Release();
    iContainer->Release();
   }
  }
  else
  {
   SetDlgItemText(IDC_STATE,'创建虚拟目录失败!');
   iAds->Release();
  }
  iContainer->Release();
 
 }
 
 return false;
}

BOOL CPage1::DeleteVirtualDirectry(LPCTSTR lpszVirtualDirName)
{
 IADsContainer* iContainer;
 IADs* iAds;
 if(ADsGetObject(L'IIS://localhost/w3svc',IID_IADsContainer,(void**)&iContainer)==S_OK)
 {
  iContainer->GetObject(_bstr_t('IIsWebServer'), _bstr_t('1'),(IDispatch**)&iAds);
  if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
  {
   iContainer->GetObject(_bstr_t('IIsWebVirtualDir'),_bstr_t('Root'),(IDispatch**)&iAds);
   if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
   {
    if(iContainer->Delete(_bstr_t('IIsWebVirtualDir'), _bstr_t(lpszVirtualDirName))==S_OK)
     SetDlgItemText(IDC_STATE,'删除虚拟目录成功!');
    else
     SetDlgItemText(IDC_STATE,'删除虚拟目录失败!');

   }
   else
   {
    iAds->Release();
    iContainer->Release();
     SetDlgItemText(IDC_STATE,'删除虚拟目录失败!');
   }
  }
  else
  {
   SetDlgItemText(IDC_STATE,'删除虚拟目录失败!');
   iAds->Release();
  }
  iContainer->Release();
 }
 
 return true;
}

精典的ASP精选TOP
· 利用ADODB.Stream 防盗链
· Adodb.Stream说明手册
· 采集需要登录
· ASP 判断远程图片是否存在
· 在ServerXMLHTTP组件中使用代理服务器
· 用XMLHTTP通过代理服务器从服务提取数据的一些问题
· objXML.readystate的值
· 互联网HTTP连接等出错代码大全
· 利用XMLHTTP实现的二级连动Select
· 利用 xmlhttp 分块上传文件
 
服务器安全点击TOP
· 新云最新漏洞总结篇
· 各类网站的默认数据库和密码
· Windows Server2003 防木马权限设置IIS服务器安全配置整理
· 针对ASP网站的Win 2003硬盘安全设置
· IIS 6 的PHP 最佳配置方法
· 利用SA.exe 将Iusr_victim克隆为Administrator
· Cmd模式下的入侵技术大全
· 破解网页代码加密
· SERV-U 6.4提权方法,通杀SERV-U版本
· 新云网站管理系统文件注入漏洞
 
硬设与组建点击TOP
· 从头到尾教你组建小型局域网20
· 从头到尾教你组建小型局域网19
· 从头到尾教你组建小型局域网18
· 从头到尾教你组建小型局域网17
· 从头到尾教你组建小型局域网16
· 从头到尾教你组建小型局域网15
· 从头到尾教你组建小型局域网14
· 从头到尾教你组建小型局域网13
· 从头到尾教你组建小型局域网12
· 从头到尾教你组建小型局域网11
 
病毒知识点击TOP
· 不再重装 手动清除顽固病毒AutoRUN
· 木马静态变动态 DLL木马程序大揭秘
· 详解一个很牛X的网马
· 一个网马
· Trojan-Downloader.Win32.Delf.bab
· 抓了一个AJAX的网马
· 迅雷5 最新0day利用程序
· 自动关掉270种杀毒软件
· RealPlayer 最新网马
· 五个反弹型后门的源代码
 
WINDOWS点击TOP
· 4【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 3【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 2【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 1【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· Capture an HTML document as an image
· 如何给eWebEditor编辑器加上运行代码框功能
· 给CuteEditor5增加了高亮代码显示功能
· CuteEditor6.0使用配置心得体会
· 关于IE插件的CLSID问题
· 对开发的程序(制作CAB)进行签名,并允许网站中使用
  "凌风微型文章系统",针对"搜索引擎"完美设计,提高"搜索引擎"对网站容量,质量的评估值,"扁平化,转静态 ..."