Здравствуйте, Аноним, Вы писали:
А>Есть две задачи.
А>1. Удалить заданый LSP из цепочки (задан путь к LSP). А>2. Восстановить LSP в состояние принятое по умолчанию в ОС.
А>Подскажите с какой стороны к этому подойти, где это можно прочитать. А>Буду благодарен за любую помощь.
Здравствуйте, alexora, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Есть две задачи.
А>>1. Удалить заданый LSP из цепочки (задан путь к LSP). А>>2. Восстановить LSP в состояние принятое по умолчанию в ОС.
А>>Подскажите с какой стороны к этому подойти, где это можно прочитать. А>>Буду благодарен за любую помощь.
A>http://komodia.com/KomodiaLSP.zip
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, alexora, Вы писали:
A>>Здравствуйте, Аноним, Вы писали:
А>>>Есть две задачи.
А>>>1. Удалить заданый LSP из цепочки (задан путь к LSP). А>>>2. Восстановить LSP в состояние принятое по умолчанию в ОС.
Здравствуйте, Аноним, Вы писали:
А>Есть две задачи.
А>1. Удалить заданый LSP из цепочки (задан путь к LSP). А>2. Восстановить LSP в состояние принятое по умолчанию в ОС.
А>Подскажите с какой стороны к этому подойти, где это можно прочитать. А>Буду благодарен за любую помощь.
Процесс инсталяции/анисталяции хорошо описан в книге Джонса и Оланда
"Программирование в сетях Windows".
Если коротко, то изначально есть только базовые поставщики. LSP устанавливается
поверх базовых, формируя таким образом цепочки поставщиков.
Информация об этих цепочках хранится в реестре, посмотреть которую можно например
с помощью sporder.exe (поставляется с SDK вроде).
Упрщенно, без установленных LSP вы увидите что-то такое:
...
...
MSAFD[Tcp/Ip]
MSAFD[Udp/Ip]
...
...
А после инсталяции, что-то такое
...
...
YourLSP/MSAFD[Tcp/Ip]
YourLSP/MSAFD[Udp/Ip]
MSAFD[Tcp/Ip]
MSAFD[Udp/Ip]
...
...
Стоит обратить внимание, что старые цепочки не удаляются, а только сдвигаются. Это сделано для
удобства анинсталяции, то есть ты должен удалить все цепочки, содержащие твои LSP ни о чем более
не задумываясь, так как автоматически первыми опять станут недавно отодвинутые.
То есть преподположим мы захотели установить вторую LSP, тогда будем иметь что-то такое
Здравствуйте, Игoрь, Вы писали:
И>Процесс инсталяции/анисталяции хорошо описан в книге Джонса и Оланда И>"Программирование в сетях Windows".
И>Если коротко, то изначально есть только базовые поставщики. LSP устанавливается И>поверх базовых, формируя таким образом цепочки поставщиков.
И>Информация об этих цепочках хранится в реестре, посмотреть которую можно например И>с помощью sporder.exe (поставляется с SDK вроде).
У меня следующая интересная проблема.
Требуется выгружать длл из программы сразу по команде.
Сначала я удаляю своего провайдера и протоколы, все как положено, после этого дергаю ключик в реестре, а в длл у меня стоит RegNotify на ключик
и пробую выгружать длл из самой себя путем FreeLibraryAndExitThread
перед этим все освобождаю как положено и т.п.
Но приложение валится, потому что к нему все равно поступают данные, то есть как будто другие уровни не знают еще, что такой провайдер удалили.
На каком этапе winsock все это сообщает ? Известно точно, если не пытаться выгрузить длл, а произвести какие либо манипуляции с сокетами ( передать — отправить ) самой программе, как длл выгружается. Вот не знаю, что делать Т.к. документации по этой части очень мало, жду хотя бы совета или предположения, как решить проблему ?
з.ы. все это нужно, потому что, некоторые приложения как подхватят длл, с сетью потом часами могут не работать, следовательно чтобы удалить длл или заменить при дебаге, нужно ребутиться. очень неудобно.
нужно дождаться, пока вашему провайдеру не скажут WSPCleanup ( при чем, столько раз, сколько был вызван экспорт WSPStartup, который правда обычно вызывается единожды ). А это произойдет никак не раньше чем будут закрыты все сокеты, открытые ранее на нем.
Здравствуйте, TarasCo, Вы писали:
TC>нужно дождаться, пока вашему провайдеру не скажут WSPCleanup ( при чем, столько раз, сколько был вызван экспорт WSPStartup, который правда обычно вызывается единожды ). А это произойдет никак не раньше чем будут закрыты все сокеты, открытые ранее на нем.
Хм.
А что есть разница, если я сам вызову у себя WSPCleanup и откуда то из другой части программы вызовут ?
А если все сокеты самому закрыть, вызов произойдет сразу же или же опять ждать ?
W>А что есть разница, если я сам вызову у себя WSPCleanup и откуда то из другой части программы вызовут ?
большая разница. WSPCleanup вызывается когда Ваш провайдер больше не нужен, когда больше никто не использует его ресурсы ( сокеты и.т.д )
W>А если все сокеты самому закрыть, вызов произойдет сразу же или же опять ждать ?
А как Вы собираетесь самостоятельно закрыть сокеты?
Вы себя утопией тешите. Корректно выгрузить LSP фильтр на лету не получится. Я вообще сомневаюсь, что получится выгрузить не дожидаясь остановки приложения.
Здравствуйте, TarasCo, Вы писали:
W>>А что есть разница, если я сам вызову у себя WSPCleanup и откуда то из другой части программы вызовут ?
TC>большая разница. WSPCleanup вызывается когда Ваш провайдер больше не нужен, когда больше никто не использует его ресурсы ( сокеты и.т.д )
Ну так, на примере браузера смотрим
Инсталим провайдера, делаем пару кликов, весь траф через наш провайдер прошел.. Делаем унистал, делаем клик и провайдер сразу же выгружается.
Хотя бывает, что если долго работать, она уже просто так не выгружается. Скорее всего, потому что остается открытый сокет, на прослушку например.
W>>А если все сокеты самому закрыть, вызов произойдет сразу же или же опять ждать ?
TC>А как Вы собираетесь самостоятельно закрыть сокеты?
TC>Вы себя утопией тешите. Корректно выгрузить LSP фильтр на лету не получится. Я вообще сомневаюсь, что получится выгрузить не дожидаясь остановки приложения.
программа уже не валится. и продолжает работать хорошо. только в случае, если идет работа с сокетами и одновременно выгрузка, проблемы начинаются ессно. Думаю теперь как лучше сделать ? Дергать мьютекс в каждой функции и потом ожидать освобождение его в потоке выгрузки ?
з.ы. я знаю, как это выглядит, но не судите строго, таково ТЗ проекта и нужно очень постараться это сделать..
W>Ну так, на примере браузера смотрим W>Инсталим провайдера, делаем пару кликов, весь траф через наш провайдер прошел.. Делаем унистал, делаем клик и провайдер сразу же выгружается. W>Хотя бывает, что если долго работать, она уже просто так не выгружается. Скорее всего, потому что остается открытый сокет, на прослушку например.
Эксплорер при старте напрмер открывает UDP сокет, через который по 1 байту гонит '!' сам себе. Это продолжается до завершения работы. Мозилла шлет себе '8'. Если Вы успели "поймать" такой сокет — поздравляю . Ну, эксплорер еще ничего. Иногда LSP всасывает, скажем winlogon или какая нибудь служба.
W>з.ы. я знаю, как это выглядит, но не судите строго, таково ТЗ проекта и нужно очень постараться это сделать..
в данном случае, imho нужно пересматривать ТЗ — бесследное удаление LSP не реально ( если LSP подменяет стандартных провайдеров ). И вообще, LSP — must die.