Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с удалением(остановкой) драйвера  (Прочитано 7495 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Frodo
Гость
« : 10-12-2005 18:46 » new

Всем привет....
Имеется драйвер некоторого устройства...его пытаються удалить..
в оладке приходит запрос IRP_MN_QUERY_REMOVE_DEVICE на который я отвечаю

Irp->IoStatus.Status = status;
IoSkipCurrentIrpStackLocation(Irp);
status = IoCallDriver(deviceExtension->AttachedDevice, Irp);
return status;

В status возращаеться STATUS_SUCCESS...
проходит секунд 5 и приходит запрос IRP_MN_CANCEL_REMOVE_DEVICE, хотя должен прийдти IRP_MN_REMOVE_DEVICE???

у драйвера крутяться два потока,я их не останавливал...может быть из-за них,потому что в MSDN сказано что драйвер должен перейти
в remove-pending state,а как это понимать???
буду рад любой помощи....
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-12-2005 09:29 » 

Irp->IoStatus.Status = status;
Не понял?
а статус то какой? status =??? Ага
если не статус_суксесс - ессественно тебе следующиим - кансел_ремув пошлют...)
PS то что два потока крутятся - ерунда... этот запрос- всего лишь уведомление что тебя остановить хотят. а разрешаешь ли ты это или нет - от общего статуса всего стека зависит. так что:
status = STATUS_SUCCESS; - первой строчкой поставь.
а по идее ты там должен все очереди запросов приостановить... но я так не делал - вроде работает)
« Последнее редактирование: 20-12-2005 09:32 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Frodo
Гость
« Ответ #2 : 20-12-2005 15:27 » 

Привет Ochkarik!
конечно же status = STATUS_SUCCESS Улыбаюсь
нижний по стеку драйвер тоже отвечает STATUS_SUCCESS
я смотрел IRP нормально завершаеться т.е нижний драйвер завершает его вызовом IoCompleteRequest()
а в ответ ничего не приходит,т.е приходит запрос IRP_MN_CANCEL_REMOVE_DEVICE через 5 сек,с чем
бы это могло быть связано?Не понял
Надо наверно отладочную версию Windows ставить и смотреть почему Pnp менеджер так делает?Не понял
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-12-2005 16:05 » 

а сверху никакой драйвер встать не мог? так... случайно.
второе - может кто-нибудь стек IRP изгадил? - очень может такое быть...
тертье... что то там хитрость какая то была с ремувом... попробуй сравнить код рыбы например той же драйвер студии?
КомплитРеквест для нее не вызывается. это раз.
два - помоему после нее рекомендуют дождаться завершения всех необработанных IRP... или как-то так было. подробнее в примерах студии.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Frodo
Гость
« Ответ #4 : 20-12-2005 19:00 » 

сверху точно драйвера нет!!!
IRP стек врадли кто мог изгадить,у меня в стеке всего 2 драйвера,причем нижний создаеться PnP менеджером,как я понял...
по идее все IRP завершены,хотя точно не скажу сейчас...поэксперементирую
IoCompleteRequest и не должен вызываться,запрос ведь нужно передать дальше по стеку,чтобы оповестить низлежащий драйвер
непонял что за "код рыбы" Улыбаюсь)))
ДрайверСтудия не стоит у меня,попробую поставить,там есть подобные примеры?Не понял
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 22-12-2005 14:26 » 

поставь студию не ниже третьей... и сгенери рыбу на чистом C!!!! (БЕЗ ++!!!!)
там разберешься... правда там большой и хитрый механизм диспечеризации IRP...) я честно говоря без него работаю...
PS  и никонец... почему никто в ДДК не лазит?Не понял? там же все есть!
C:\DDK\DDKXP_2600SP1\src\kernel\serial\pnp.c
« Последнее редактирование: 22-12-2005 14:28 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines