| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > GetAdaptersInfo после Hibernate/standby |
| Автор: Glen 16.9.2010, 14:57 |
| У меня есть клиентский application на VC++ 6.0. Она при связи с неким сервером должна идентифицировать компьютер на котором она установлена. Для идентификации в частности используется MAC-адрес сетевого адаптера. Программист который это делал получал его так: вызвал GetAdaptersInfo и получил размер буфера необходимый чтобы вернуть список всех адаптеров; выделил этот буфер; вызвал GetAdaptersInfo и получил список всех адаптеров в этот буфер; в качестве MAC-адреса использовал поле Address из САМОЙ ПЕРВОЙ структуры IP_ADAPTER_INFO находящейся в буфере Однако у одного из клиентов возникли проблемы: похоже наша программа, установленная на некоем компьютере, через какое-то время стала использовать другой MAC-адрес по сравнению с тем, что был на этом же компьютере раньше. Вроде бы - по словам клиента - это произошло ПОСЛЕ того как тот компьютер вошёл в Hibernate или StandBy; а потом вышел из него. Я пока не имею доступа к тому компьютеру, но скорее всего там установлены НЕСКОЛЬКО адаптеров, и почему-то изменился порядок их следования, когда они возвращаются функцией GetAdaptersInfo. Операционка - WinXP. Какие есть версии почему это могло случиться (или другая причина почему это могло случиться): - связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина; - не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера? - не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем? |
| Автор: Glen 16.9.2010, 16:19 | ||||||||||||||||||
>эту защиту несложно обойти: Нет, мой клиент этим заниматься не будет. Я имел в виду случаи подобные тому что я встретил - когда порядок следования адаптеров вдруг меняется. Пока это первый заказчик который встретился с проблемой - тысячи инсталляций моей программы работали без неё несколько лет. Добавлено через 1 минуту и 19 секунд
>установишь новые драйвера на видео, например, и всё. кердык. То есть драйверы ВИДЕО могут повлиять на перечисление порядка СЕТЕВЫХ АДАПТЕРОВ? |
| Автор: borisbn 16.9.2010, 16:21 | ||
возможно там был всего один адаптер ? так а чем тебе не нравится предложение
|
| Автор: Glen 12.11.2010, 11:56 | ||
'то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный' - имеется в виду по принципу 'если в списках адаптеров совпадает хотя бы один элемент (вне зависимости от их порядка в списке), то этот - тот же комп'? Да, думаю придётся так и делать. Ибо за прошедшее время я выснил что использованный мной способ имеет принципиальные недостатки: - на компьютере могут создаваться разным софтом 'виртуальные адаптеры', попадающие в список ПЕРЕД физическими. И - ещё хуже - MAC такого виртуального адаптера может периодичски меняться, это нормальное явление. Я видел это на софте называемом Juniper Network Connect Virtual Adapter - даже без 'виртуальных' адаптеров может быть такое: есть один Ethernet обычный и один - WiFi. Этот WiFi стоит первым с списке - пока включён. А потом его запретили (когда принесли лаптоп в офис и включили в проводную сеть), и он вообще ИСЧЕЗ из списка адаптеров возвращаемых этой функцией. Доп вопросы: Можно ли каким-от образом отделить физические адаптеры от виртуальных? Есть ли какие-то ещё способы надёжной идентификации компьютера (персоналок и лаптопов)? |