Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> список портов 
:(
    Опции темы
LastAngel
Дата 26.2.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



Код

  HDEVINFO hDevInfo;                            
  SP_DEVINFO_DATA DeviceInfoData;              
  SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; 
  SP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData; 
  
  hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, 
                                 0,
                                 0,
                                 
                                 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

  
  if (hDevInfo == INVALID_HANDLE_VALUE)
  {
    return ;
  }
  
  DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
  DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
  DeviceInterfaceDetailData.cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
  
  for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)
  {
    DWORD dwData;
    char* buffer = new char[100];
    
    DWORD buffersize = 0;
    
    while (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData,
            SPDRP_DEVICEDESC, 
            &dwData, (PBYTE)buffer, buffersize, &buffersize))
    {
      if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)
      {
        if (buffer) delete [] buffer;
        buffer = new char [buffersize];
      }
      else
      {
        break;
      }
    }

    if(SetupDiEnumDeviceInterfaces(hDevInfo, &DeviceInfoData,
                    &GUID_DEVCLASS_PORTS, i, &DeviceInterfaceData))
    {
      DWORD requiredSize = 0;
      SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                      &DeviceInterfaceData,
                                      NULL,
                                      0,
                                      &requiredSize,
                                      NULL
                                      );

      if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)
      {
        SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                        &DeviceInterfaceData,
                                        &DeviceInterfaceDetailData,
                                        requiredSize,
                                        NULL,
                                        &DeviceInfoData);

      requiredSize = 0;
      SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,SPDRP_FRIENDLYNAME,NULL,NULL,0,&requiredSize);
      CHAR* pBuffer = new CHAR[requiredSize+1];
      SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,SPDRP_FRIENDLYNAME,NULL,(UCHAR*)pBuffer,requiredSize,NULL);
      }
    }
    else
    {
        // GetLastError();
    }

    if (buffer) delete[]buffer;
  }
  SetupDiDestroyDeviceInfoList(hDevInfo);


Такая вот проблемка, на компе есть 1 порт на мамке не выведенный, 1 через usb переходник и два виртуальных ... когда SetupDiGetClassDevs имеет флаг DIGCF_PRESENT, SetupDiEnumDeviceInfo выдает все 4 , но SetupDiEnumDeviceInterfaces говорит что нету элементов(ERROR_NO_MORE_ITEMS). Если флаг стоит DIGCF_PRESENT | DIGCF_DEVICEINTERFACE то выдается только 1 порт который на мамке и SetupDiEnumDeviceInterfaces срабатывает возвращая его имя (COMX). 
Не пойму почему имена остальных он не хочет выводить ... и почему вообще SetupDiEnumDeviceInfo с такими флагами выдает только 1 элемент 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.