· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› GarantWaitTime

Посл.отвђт Сообщен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