Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Получение информации устройстве (setupapi.dll)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
ApSerg



Зарегистрирован: 20.01.2007
Сообщения: 4

СообщениеДобавлено: Ср Май 30 2007 09:19    Заголовок сообщения: Получение информации устройстве (setupapi.dll) Ответить с цитатой

Для включения/отключения сетевых карт я использую setupapi.dll. При переборе устройств, относящихся к классу Network Card {AD498944-762F-11D0-8DCB-00C04FC3358C} вылазит много левоты типа "Минипорт планировщика пакетов" и т.п.
Как это отфильтровать?

И ещё вопрос:
Мой код может включить устройство (сетевой адаптер), только если оно было выключено моим же кодом. Если я выключаю устройство из диспетчера устройств, то включить его не получается, но и ошибок не выдаётся. Ниже привожу исходник функции включающей устройство:

Код:

extern "C" BOOL _stdcall EnableNic(wchar_t* pName)
{
   BOOL bRes;

   SP_PROPCHANGE_PARAMS spPropChangeParams;
   spPropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
   spPropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
   spPropChangeParams.Scope = DICS_FLAG_GLOBAL;
   spPropChangeParams.StateChange = DICS_ENABLE;
   spPropChangeParams.HwProfile = 0;

   SP_DEVINFO_DATA spDevInfoData;
   HDEVINFO hDevInfo;

   DWORD dwFlags = DIGCF_DEVICEINTERFACE;

   bRes = FindDevice(hDevInfo, pName, spDevInfoData, dwFlags);

   if(!bRes)
   {
      return FALSE;
   }

   bRes = SetupDiSetClassInstallParams(hDevInfo, &spDevInfoData,
               (SP_CLASSINSTALL_HEADER*)&spPropChangeParams, sizeof(spPropChangeParams));

   if(!bRes)
   {
      printf("SetupDiSetClassInstallParams(): Error");
      return FALSE;
   }
      
   bRes = SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &spDevInfoData);

   if(!bRes)
   {
      printf("SetupDiCallClassInstaller(): Error");
      return FALSE;
   }
         
   return true;
}

BOOL FindDevice(HDEVINFO& hDevInfo, wchar_t* pName,
                       SP_DEVINFO_DATA& spDevInfoData, DWORD dwFlags)
{
   BOOL bSuccess = FALSE;

   GUID ClassGuid;

   // Network Card GUID
   ClassGuid.Data1 = 0xad498944;
   ClassGuid.Data2 = 0x762f;
   ClassGuid.Data3 = 0x11d0;
   ClassGuid.Data4[0] = 0x8d;
   ClassGuid.Data4[1] = 0xcb;
   ClassGuid.Data4[2] = 0x00;
   ClassGuid.Data4[3] = 0xc0;
   ClassGuid.Data4[4] = 0x4f;
   ClassGuid.Data4[5] = 0xc3;
   ClassGuid.Data4[6] = 0x35;
   ClassGuid.Data4[7] = 0x8c;


   hDevInfo = SetupDiGetClassDevs(&ClassGuid, NULL, NULL, dwFlags);

   if(hDevInfo == INVALID_HANDLE_VALUE)
   {
      return FALSE;
   }

   spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
   for(int i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
   {
      DWORD DataT ;
      WCHAR buf[MAX_PATH];
      DWORD nSize = 0;

      if ( !SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData,
         SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize) )
      {
         lstrcpy(buf, L"Unknown");
      }

      std::wstring StrBuf = buf;
      std::wstring StrName = pName;
      if(StrBuf == StrName)
      {
         bSuccess = TRUE;
         break;
      }

   }

   return bSuccess;
}


Заранее спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...