Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение информации о сетевой карте 
:(
    Опции темы
ApSerg
Дата 30.5.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для включения/отключения сетевых карт я использую 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;
}



Прошу прощения если вопросы немного не в теме форума.
Заранее спасибо.

Добавлено через 3 минуты и 35 секунд
Ошибка: biggrin исходник не выключающей, а включающей функции.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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