|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 20, 2004 17:14:00 Уважаемый господин Four-F/ Молю вас о помощи. Дело вот в чём. Вопрос касается создания системного ядерного потока в дравере. Всё делаю как надо, оформляю процедуру, которая станет потоком, вызываю PsCreateSystemThread. Всё превосходно, нить создаётся , работает прекрасно... Выгружаю драйвер, вызов DriverUnload. В ней я передаю флаг завершения нити, нашему подопытному потоку. Жду, пока он проглотит этот флаг и явно вижу , что он вызывает PsTerminateSystemThread и.... ушёл в систему.Между тем встаёт вопрос, как определить, что нить завершена ?? Конечно, в принципе мне достаточно того, что управление получила вышеуказанная функция, после чего я продолжаю выполнять DrverUnload до конца.. Всё превосходно, но... тут меня прибил истерический смех, гляжу в консоль отладочного вывода,и вижу, что нить моя всё ещё выполняется, в то время, как драйвер уже выгружен!!!!! Что это ??? Сэр, объясните мне пожалуста разумно, что происходит, и почему поток так долго продолжает своё существование после вызова функции собственного уничтожения (более 10 секунд) , и почему после выгрузки драйвера не были отобраны ресурсы, которые драйвер - родитель выделил нашей нити ??? (Приоритет созданному потоку я назначил равным 8, как это делает XP по умолчанию) |
|
|
Дата: Июн 21, 2004 16:19:22 [ CARDINAL: Между тем встаёт вопрос, как определить, что нить завершена ?? ] Часть 12 : Базовая техника. Синхронизация. Таймер и системный поток. Часть 13 : Базовая техника. Синхронизация. Взаимоисключающий доступ. Эти статьи, наверное, читал... Если делаешь также, то во-первых, проверь, не возвращает ли PsTerminateSystemThread ошибку. Если поток грохнется, то она вообще не вернется. Во-вторых, возвращает ли KeWaitForSingleObject STATUS_SUCCESS. Если да, то поток умер. Явно проверить выполняется ли ещё поток можно с помощью PsIsThreadTerminating. Если PsTerminateSystemThread не возвращается, а KeWaitForSingleObject возвращает STATUS_SUCCESS, то хотелось бы посмотреть на код. Можешь ещё поставить бряк на изменение поля HasTerminated структуры потока. Когда там появится 1, поток будет мертв. [ CARDINAL: почему после выгрузки драйвера не были отобраны ресурсы, которые драйвер - родитель выделил нашей нити ??? ] Какие такие ресурсы? Если драйвер сам что-то выделил, то сам и должен освобождать. Десять раз об этом говорил. |
|
|
Дата: Июн 21, 2004 17:09:46 Огромное спасиба !!!! :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.083 |