В процессе работы столкнулся со следующей пробоемой. Программе требуется извлечь из реестра список сетевых интерфейсов и их настройки TCP/IP.
Изначально система вытаскивала этот список из HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards, а затем лезла за настройками TCP/IP в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces.
К сожадению этот метод не корректно работает в случае если в системе установлено несколько интерфейсов объединённых в teamed NIC, по причине того, что последнего не оказалось в ...\NetworkCards.
Другой вариант, воспользоваться ключом реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}. Там лежит описание драйверов и ссылки на их настройки. Сетевые адаптеры можно отличить по полю Characteristic. Сам я ещё не тестировал этот подход, но к его недостаткам можно отнести отсутствие (у меня) спецификации по значениям поля Characteristic. Если оно зависит от драйвера, то неизбежны проблемы.
Подскажите пожалуйста, другие варианты решить мою проблему или может кто-то подробнее знаком с этими двумя. Отдельно буду благодарен если кто-нибудь даст спецификацию значений в ключе {4D36E972-E325-11CE-BFC1-08002BE10318} и любой информации о том как хранятся в реестре данные о Teamed NICs. Есть ли какой-нибудь стандарт или всё зависит от драйвера.
Всем спасибо.
Re: Как узнатб список сетевых адаптеров из реестра? Teamed N
Здравствуйте, Timas, Вы писали:
T>В процессе работы столкнулся со следующей пробоемой. Программе требуется извлечь из реестра список сетевых интерфейсов и их настройки TCP/IP.
Здравствуйте, butcher, Вы писали:
B>Может воспользоваться IP Helper Functions?
Нет необходимо достать именно из реестра. Ситуация примерно такая: реестр в некотором виде лежит сохранённый на диске и есть возможность достать любой его ключ. Таким образом API функции не подходят.
Re[3]: Как узнатб список сетевых адаптеров из реестра? Teame
Здравствуйте, Timas, Вы писали:
T>Нет необходимо достать именно из реестра. Ситуация примерно такая: реестр в некотором виде лежит сохранённый на диске и есть возможность достать любой его ключ. Таким образом API функции не подходят.
Можно попробовать каким-нибудь RegMon'ом понаблюдать, что происходит когда такой вызов проводится.
Нет ничего невозможного..
Re: Как узнатб список сетевых адаптеров из реестра? Teamed N
T>Другой вариант, воспользоваться ключом реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}. Там лежит описание драйверов и ссылки на их настройки. Сетевые адаптеры можно отличить по полю Characteristic. Сам я ещё не тестировал этот подход, но к его недостаткам можно отнести отсутствие (у меня) спецификации по значениям поля Characteristic. Если оно зависит от драйвера, то неизбежны проблемы.
Как выяснилось микросовтовская утилита msinfo32.exe показывает информацию в ветке Components\Network\Adapter как раз из ключа реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}. Но она выводет сюда всё, что там лежит.
Может кто-нибуть знает как оттуда выбрать Ethernet карточки и Teamed NIC виртуальные драйвера?
Re[4]: Как узнатб список сетевых адаптеров из реестра? Teame
Здравствуйте, butcher, Вы писали:
B>Можно попробовать каким-нибудь RegMon'ом понаблюдать, что происходит когда такой вызов проводится.
Посмотрел регмоном что происходит с реестром когда происходит вызов функции GetAdaptersInfo из Ip Helper'а. Она сразу лезет к настройкам TCP/IP интерфейсов. Их guid'ы она похоже берёт не из реестра. Поправьте меня если я ошибаюсь.