|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 12, 2004 23:54:26 Всем привет. Вопрос касается, опять же корректной выгрузки DRV-фильтра. Суть: есть процедура, которая перехватывает (точнее на нее перенаправлено) N нитей. Тело этой процедуры принадлежит драйверу, который, выгружаясь, соотв-но убирает и её из памяти (извиняюсь за банальность), и т.о. при попытке нити(тей) выполнять код по этому адресу, получаем ПО ЛБУ! Следовательно, приходится убирать хук, ставить счетчик нитей внутри, и когда он будет равным 0, спокойно выгружаться. Примерно так: { Inc ThreadCounter . . . .IF MAY_UNLOAD Call RemoveHOOK .ENDIF Dec ThreadCounter JNZ Still_Work Call FreeEventToUnload . . . Still_Work: NOP ret? } Вроде всё понятно, но ведь может быть и такое, что когда все нити вышли и счетчик обнулился, вошла очередная нить в Proc, а планировщик ее прервал на Inc ThreadCounter. Т.о. я спокойно выгружаюсь, а нить то там... лови #GP!!! Аналогичная ситуация, if нить остановится на NOP. От проблемы я частично избавился Поставив перед Unload-ом некоторую задержку "GarantWaitTime", чтобы оставшиеся нити успели вылететь, но ессно это неграмотно (как и впрочем такой тип фильтров, НО ЭТО МЫ НЕ ТРОГАЕМ). Пожалуйста! Если у кого есть еще какие нибудь варианты решения этой проблемы пишите. Заренее благодарен. --==PPS==-- З.Ы. пока еще ошибок небыло, т.к. большая задержка, но и в то же время еще и код короткий. А если код разжиреет, то точно либо задержку увеличивать либо #GP. |
|
|
Дата: Апр 13, 2004 03:09:47 Обычно дрова, которые хуки ставят не выгружаются вообще. Например, все тулзы с sysinternals именно так и делают, т.е. будучи запущены, уже никогда не выгружаются. Частично именно по причине невозможности безопасного снятия хука. В твоей ситуации очень сложно что-то сказать, т.к. нужны все детали. Но скорее всего, тебе остается только один вариант - не выгружаться вовсе. Или делать большую задержку, но это (чисто теоритически) без гарантии. |
|
|
Дата: Апр 13, 2004 09:11:40 Спасибо. Выгружать надо. Отлаживать то как!? Но вообще я так и предполагал. Неужели больше нет вариантов.... Придется надеяться на Авось... |
|
|
Дата: Апр 13, 2004 12:41:51 Ну для отладки без проблем. Просто выгружаешь и всё. |
|
|
Дата: Апр 13, 2004 18:35:42 ... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086 |