Инсталяция сетевых компонет в NT.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 26.12.07 12:00
Оценка: 46 (7)
Вот оказывается есть такая мелкая проблемка — автоматическая инсталяция, так называемых, сетевых компонет совсем без использования активности пользоватея.


Озаботили тут меня этим вопросом — а я честно говоря и не знал, что это проблема... вернее, как-то раньше как-то кто-то за меня её решал , или ещё раньше так вопрос вообще не стоял — "без активности пользователя"... и выяснилось, что на самом деле эта проблемка имеет место быть. И в мсовских форумах и на OSR'е постоянно эти вопросы задают — "а как?". А ответов то и нет. Вернее есть но примерно такие — "а никак" или "а ручками"...

А суть самой проблемки в том, что для того чтобы сетевая компонета — Сервис, Протокол, Клиент, нормально функционировал, он должен быть "встроен" в NDIS стек. А это делается посредством "привязки" (такой старый русский термин) данного сервиса, протокола или клиента к сетевому оборудованию, к так называемому NIC'у. Эта привязка обычно описывается в INF файле, путем например указания сетевых сред и места в стеке, но подробно на том как это делеается, останавливаться не хочу, все довольно ясно расписано в документации. Можно сделать привязку и "чисто руками", и тут нет совсем ничего сложного — все делается в риестре, но все не документированно и поэтому для правильных ковбоев это не подходит. Но также есть ещё и специальный путь — с использованием INetCfg API, поищите в документации все описано. А в WDK есть даже спекиальный пример BindView — как раз постороенный на этом API и на SetupApi. И вообщем-то разработчику совсем ничего не стоит — написать программу из пять строчек... написать такой специальный инсталятор для только его компонент. Помню был даже написан некий такой "универсальный" инсталятор для сетевых протоколов — ProtInstall, посмотрите он есть в исходниках на NDIS.COM.


Все было бы ничего, но как всегда НО — но с появленим Vista и Server 2008 и активным расшинением 64-битности теперь встал вопрос о том как делать, так чтобы разные бинарники сетевой компоненты вставали соответсвенно на разные платформы и версии. Ну вот например официально существует IA64, AND64, I386 версии Vista. Как быть? Документация описывает то как создавать мультиплатформенные INF'ы. Эта возможность существовала давно, еще в Win2000 можно было использовать так называемые декорированные имена секций, например blabka.NT или blabla.NtX86, в ХР уже стало можно ещё больше... Ну так вот, дело то в том, что примеры из WDК и соответсвенно и ProtInsrall'еры не умеют работать с такими INF файлами.

Поэтому я решил, что раз уже потребовалось мне написать инсталятор для своей собственной задачи, почему бы не написать сразу что-то универсальное, тем более, что на самом деле там нет ничего сложного. А в Server 2003 даже появилась такая специальная функция — SetupDiGetActualModelsSection которая сразу выдает имя секции модели соответсвующую платформе. Правда программа использующая такую функцию не загрузится в ранних версиях ОС.

В итоге я написал "универсальный" инсталятор для сетевых компонет, для всех версий NT и всех платформ. Он позволяет инсталировать не только протоколы но и сервисы, клиенты и пр.

Скачать можно тут :

Исходники собираются посредством BUILD.
Проект для Студии

Бинарники, лучше конечно стройте сами, но если не получается то:

32-бита платформа INTEL 32
64 бита платформа INTEL 64
64 бита платформа AMD64
Не все кто уехал, предал Россию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.