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

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

Подскажите пожалуста как перехватить прерывание от COM-порта.
IoConnectInterrupt вызываю в DriverEntry - не работает
(ERROR_INVALID_PARAMETER)

И еще: Попробовал преобразовать обычный драйвер в PnP - драйвер.
(Опять же для цели перехвата прерывания от COM-порта)
Почему-то не вызывается AddDevice для драйвера устройства.
Это устройство специализированное, втыкается на COM-порт. Правда
в данный момент его нет в COM-порту. Может быть когда я его воткну
в COM-порт тогда и AddDevice вызывется.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 24-10-2003 11:37 » 

Ну учитывая то сколько параметров у этой функции ответить так просто нельзя- накосячить ты мог где угодно. Скорее всего так и вышло.
Далее - это прерывание может быть уже занято настоящим драйвером и второй обработчик подключится к цепочке обработчиков при условии что настоящий драйвер разрешил это, сделав вектор разделяемым при вызове IoConnectInterrupt. И даже если ты подключишься к цепочке ты не отменишь вызов другого обработчика, только если не подцепишься в цепочке вызова до него.

Цитата

И еще: Попробовал преобразовать обычный драйвер в PnP - драйвер.
(Опять же для цели перехвата прерывания от COM-порта)
Почему-то не вызывается AddDevice для драйвера устройства.
Это устройство специализированное, втыкается на COM-порт. Правда
в данный момент его нет в COM-порту. Может быть когда я его воткну
в COM-порт тогда и AddDevice вызывется.


Ну естественно. AddDevice вызывается когда находят соответствующий девайс.
Записан
zah
Гость
« Ответ #2 : 24-10-2003 18:11 » 

Уточняю параметры вызова IoConnectInterrupt:

statusint = IoConnectInterrupt(&pExtension->InterruptObject,
      theISR,
      pExtension->Context,
      NULL,
      0x0B, // вектор COM2-порта
      5, // DIRQL
      5, // DIRQL
      LevelSensitive,
      TRUE,
      0, // вроде параметр для многопроцессорных систем
      FALSE);

В результате получаю ERROR_INVALID_PARAMETER Жаль

На форуме я прочитал что для перехвата прерывания от параллельного порта
надо прикрепить драйвер как фильтр и посылать IRP с кодом
IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT Искал в DDK что-то подобное для COM порта - нету.

Хотя наверно ты прав и системный драйвер COM-порта мне в принципе
не даст прерывание. Что же тогда: ТУПИК!!!, а как же драйвер модема
Ведь он наверняка прерывания обрабатывает: например при приходе данных ?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #3 : 27-10-2003 08:24 » new

Цитата

Что же тогда: ТУПИК!!!, а как же драйвер модема
Ведь он наверняка прерывания обрабатывает: например при приходе данных ?


IRP_MJ_READ/IRP_MJ_WRITE вот так можно читать и писать в COM порт или вместо этих запросов использовать ZwReadFile/ZwWriteFile. На чтение можно отдельный поток посадить.
 А вобще неплохо почитать DDK там про COM порты целый раздел.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines