В драйвере пытаюсь перехватить прерывание от COM — порта.
Я вычитал что PnP-manager распределяет ресурсы для драйвера в поле Parameters.StartDevice.AllocatedResourcesTranslated, передавая указатель на структуру CM_RESOURCE_LIST. При этом распределение ресурсов происходит когда он посылает пакет IRP_MN_START_DEVICE. Потом хочу взять параметры для IoConnectInterrupt из этой структуры. Но возникла другая проблема: у меня почему-то не вызывается функция обработки IRP_MJ_PNP, хотя в DriverEntry я пишу:
Вроде DispatchPnp должна вызываться несколько раз. Например,
при старте драйвера когда приходит IRP_MN_START_DEVICE
Драйвер запускаю использую функции SCM (StartService и тд)
Помогите кто-нибудь. Спасибо
Re: Проблема с прерываниями
От:
Аноним
Дата:
19.10.03 04:27
Оценка:
Здравствуйте, zah, Вы писали:
zah>В драйвере пытаюсь перехватить прерывание от COM — порта. zah>Я вычитал что PnP-manager распределяет ресурсы для драйвера в поле Parameters.StartDevice.AllocatedResourcesTranslated, передавая указатель на структуру CM_RESOURCE_LIST. При этом распределение ресурсов происходит когда он посылает пакет IRP_MN_START_DEVICE. Потом хочу взять параметры для IoConnectInterrupt из этой структуры. Но возникла другая проблема: у меня почему-то не вызывается функция обработки IRP_MJ_PNP, хотя в DriverEntry я пишу:
zah>Помогите кто-нибудь. Спасибо
И не увидишь, com-port это не PnP.
Зачем тебе вообще в ядро лезть для работы компортом?
Дело в том что есть устройство которое висит на com — порту и генерит прерывания как по вашему их обрабатывать если не писать драйвер и лесть в ядро.
А PnP я пытаюсь использовать так как если внаглую написать
IoConnectInterrupt c вектором COM2 порта (0xB) то эта хрень возвратит ERROR_INVALID_PARAMETER:
Здравствуйте, zah, Вы писали:
zah>Дело в том что есть устройство которое висит на com — порту и генерит прерывания как по вашему их обрабатывать если не писать драйвер и лесть в ядро.
Не понял. Если устройство висит на COM-порту, то как оно может генерить прерывания? Для этого оно должно "висеть" на системной шине, т.е. на слотах ISA или PCI. Если же оно генерит любые сигналы по к-л линиям com-порта (DTR, DSR и что там еще), то все это прекрасно обрабатывается через serial API и вовсе незачем лезть в kernel и переписыавть системный драйвер com-порта.
Re: Проблема с прерываниями
От:
Аноним
Дата:
21.10.03 20:00
Оценка:
Я не совсем точно выразился насчет прерываний.
Короче не вдаваясь в подробности это устройство очень похоже на модем.
Приближенно его можно считать модемом. Так вот возможно я не прав так как недавно занимаюсь этой темой, но себе представляю это так:
этот "модем" при приходе данных и в других важных случаях делает так что возникает прерывание от COM-порта (дело в том что у меня есть програ под DOS которая работает с этим устройством и она перехватывает именно прерывания от COM порта).
Кроме того в книжке Зубкова имеется пример программы работающий с модемом и там тоже перехватывается прерывания от COM-порта (правда она под DOS).
Таким образом, необходимость перехвата прерывания от COM порта жизненно важна.
Ксати даже если у меня получится перехватить прерывание то оно должно
использоваться системным драйвером COM порта. В результате взаимодействия моего "драйвера" и системного драйвера COM-порта получиться черт знает что.
Если кто-то покритикует мои представления и что нибудь присоветует
буду благодарен.
P.S. Всетаки вполне логично при появлении нового устройства в системе
написать драйвер.