黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 文章正文
[推荐]编程实现重起网卡等设备
      ★★★
编程实现重起网卡等设备
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-12-7

 

 const std::string CDeviceManager::GetProperty(SP_DEVINFO_DATA& did, DWORD Property) const
 {  
   std::string buf;
   DWORD dwLength = 0;

   while(!::SetupDiGetDeviceRegistryProperty(m_hDevInfo, &did, Property, NULL,
     (PBYTE)buf.c_str(), buf.size(), &dwLength))
   {
     if(::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
     {
       buf.resize(dwLength * sizeof(wchar_t));
       std::fill(buf.begin(), buf.end(), '\0');
     }
     else
     {
       break;
     }
   }
   buf.resize(strlen(buf.c_str()));

   return buf;
 }

 if(stricmp(GetProperty(did, SPDRP_CLASSGUID).c_str(), "{4d36e972-e325-11ce-bfc1-08002be10318}") == 0)
 {
   // ...
 }
    
     满足上述限制的设备,就是我们要处理的网卡。可以直接修改其状态:SetupDiSetClassInstallParams函数设置参数;SetupDiCallClassInstaller完成参数修改。
 
以下为引用:

 bool CDeviceManager::ChangeDeviceState(SP_DEVINFO_DATA& did, DWORD State) const
 {
   SP_PROPCHANGE_PARAMS pcp = {sizeof(SP_CLASSINSTALL_HEADER)};
  
   pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
   pcp.Scope = (State == DICS_START || State == DICS_STOP )? DICS_FLAG_CONFIGSPECIFIC : DICS_FLAG_GLOBAL;
   pcp.StateChange = State; 
 

   if(!::SetupDiSetClassInstallParams(m_hDevInfo, &did,
     (SP_CLASSINSTALL_HEADER *)&pcp, sizeof(pcp)))
   {
     DisplayError("SetupDiSetClassInstallParams");   
     return false;
   }
  
   //
   // Call the ClassInstaller and perform the change.
   //
   if(!::SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, m_hDevInfo, &did))
   {
     DisplayError("SetupDiCallClassInstaller");
   }
   return true;
 }

 ChangeDeviceState(did, DICS_STOP);    // 停止
 ChangeDeviceState(did, DICS_START);   // 启动
 ChangeDeviceState(did, DICS_ENABLE);  // 启用
 ChangeDeviceState(did, DICS_DISABLE); // 禁用

上一页  [1] [2] 

文章录入:sygbox    责任编辑:sygbox 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886