Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Железо. Написание драйверов
Перезагрузить страницу Как завершить работу приложения с драйвером
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anatolich Anatolich вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2006
По умолчанию 18.10.2006, 16:56

Как обычно получаю CreateFile указатель.
CloseHandle освобождает его. Приложение закрывается. Процесс из TaskManager исчез.
Но если дергаю в приложении DeviceIoControl где пишу или читаю память или порты,
то приложение остается висеть в TaskManager (минут 10). Если его пытаться снять
то с 10 попытки комп перегружается.
Может кто-нибудь помочь?
Ответить с цитированием
  (#2 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 18.10.2006, 18:07

DeviceIoControl'у нужен открытый хэндл. Если сделать CloseHandle, он уже работать не будет. Если говорить о поставленном вопросе, то CloseHandle как раз и есть тот самый способ корректного завершения.
Ответить с цитированием
  (#3 (permalink)) Старый
Anatolich Anatolich вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2006
По умолчанию 18.10.2006, 18:21

Dear Dian,
большое спасибо
Конечно я CloseHandle делаю после DeviceIoControl
Можно ли как-то посмотреть, на чем там крутится аппликейшн,
что его держит?
Ответить с цитированием
  (#4 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 18.10.2006, 18:33

А что за дарайвер?
Ответить с цитированием
  (#5 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 19.10.2006, 07:24

Цитата:
Можно ли как-то посмотреть, на чем там крутится аппликейшн,
что его держит?
Вряд ли. Только по коду программы и драйвера.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Anatolich Anatolich вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2006
По умолчанию 19.10.2006, 13:51

Драйвер для PCI карточки, на ней есть порты и память
она аппаратно считает корреляцию
Протрассировал все и вижу в дебаггере ...
Если не дергаю DeviceIoControlDispatch то при закрытии
хэндла из приложения отрабатывается в драйвере CloseDispatch
А если дерну DeviceIoControlDispatch, то отрабатывается только
CleanupDispatch

Драйвер пишу на основе скелета из Compuware DriverStudio без их классов, используя только DDK
Ответить с цитированием
  (#7 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 19.10.2006, 16:53

Цитата:
Драйвер пишу на основе скелета из Compuware DriverStudio без их классов, используя только DDK
А мне всегда казалось, что там черт ногу сломит :)

То есть система на CloseHandle() не вызывает драйвер и не закрывает хэндл? А что возвращает?
Ответить с цитированием
  (#8 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 19.10.2006, 19:16

Скорее проблема в драйвере. Приведи обработчик DeviceIoControl драйвера
Ответить с цитированием
  (#9 (permalink)) Старый
Explod Explod вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.03.2006
По умолчанию 23.10.2006, 22:06

Цитата:
Скорее проблема в драйвере. Приведи обработчик DeviceIoControl драйвера
Да, проблема в драйвере. Если Windows не может унистожить процесс => он(одна из его нитей) находится в ядре. Это происходт потому, что уничтожение осуществляется с использованием APC User Mod'а.
Ответить с цитированием
  (#10 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 24.10.2006, 09:19

Цитата:
Это происходт потому, что уничтожение осуществляется с использованием APC User Mod'а.
Как такое возможно? Ожидание в режиме ядра?
Ответить с цитированием
  (#11 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 24.10.2006, 09:29

Вполне возможно. Достаточно например один раз вернуть STATUS_PENDING и забыть про IRP пакет, будет примерно то же самое

2Anatolich Кстати проверь, обработка пакета корректно завершается?
Ответить с цитированием
  (#12 (permalink)) Старый
Explod Explod вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.03.2006
По умолчанию 30.10.2006, 23:41

Цитата:
Как такое возможно? Ожидание в режиме ядра?
Ожидание в Kernel Mod'е возможно, но на IRQL = PASSIVE_LEVEL. Но завершения работы процесса ждать не надо. Винда ставит в очередь исполнения этому процессу особый APC, вызываемый когда все нити процесса находятся в User Mod'е.Этот APC, грубо говоря, вызывает ExitProcess(...) и процесс "самоуничтожается". Возможно есть и еще ограничения, так что чистить, чистить и еще раз чистить(свои творения)!!!!
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Anatolich Anatolich вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.10.2006
По умолчанию 14.11.2006, 15:01

Большое всем спасибо, действительно не все IRP завершал. Теперь другие проблемы в другой теме
А как тему закрыть на форуме?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с драйвером limonad Драйвера 7 02.03.2011 22:41
Надо завершить укомплектацию Alexander11 Оценка конфигурации 11 26.11.2010 13:02
При форматировании жесткого диска выдает ошибку: не возможно завершить форматирование Rafff Любые вопросы от новичков 2 12.03.2010 17:02
Приказ завершить рисование Ahinar OpenGL 10 16.09.2009 18:19
какие процессы можно завершить sergey111 Софт и программы 4 15.07.2008 15:16
Завершить работу приложения imported_@LeX Delphi 11 08.02.2008 02:01
Сборщик мусора как завершить приложения работу X-Cite_Forever Delphi 0 01.11.2007 20:14
Как завершить процесс в Windows XP KrAV C++ Builder 22 12.07.2007 11:15
Запускается процесс, который затем можно завершить в Task Manager Drey^the^first WinAPI 10 23.11.2006 20:39
Как завершить процесс? imported_Diablo83 Visual Basic 0 09.05.2006 13:11
Как правильно завершить тред Vladimir the Red Sunny Visual C++ 21 20.02.2005 18:20
Как завершить процесс функцией CreateProcess Anonymous Visual C++ 17 22.05.2003 17:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов