Проблема с прерываниями
От: zah нет
Дата: 18.10.03 21:36
Оценка:
В драйвере пытаюсь перехватить прерывание от COM — порта.
Я вычитал что PnP-manager распределяет ресурсы для драйвера в поле Parameters.StartDevice.AllocatedResourcesTranslated, передавая указатель на структуру CM_RESOURCE_LIST. При этом распределение ресурсов происходит когда он посылает пакет IRP_MN_START_DEVICE. Потом хочу взять параметры для IoConnectInterrupt из этой структуры. Но возникла другая проблема: у меня почему-то не вызывается функция обработки IRP_MJ_PNP, хотя в DriverEntry я пишу:

pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= DispatchControl;
pDriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
pDriverObject->DriverUnload = DriverUnload;

Вроде 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.
Зачем тебе вообще в ядро лезть для работы компортом?
Re: Проблема с прерываниями
От: zah нет
Дата: 20.10.03 10:55
Оценка:
Дело в том что есть устройство которое висит на com — порту и генерит прерывания как по вашему их обрабатывать если не писать драйвер и лесть в ядро.

А PnP я пытаюсь использовать так как если внаглую написать
IoConnectInterrupt c вектором COM2 порта (0xB) то эта хрень возвратит ERROR_INVALID_PARAMETER:

IoConnectInterrupt(&pExtension->InterruptObject,
theISR,
pExtension->Context,
NULL,
0xB,
5,
5,
LevelSensitive,
TRUE,
0,
FALSE);

Да не тошто в ДОСе там с этим никаких проблем.

Но все равно спасибо за ответ.
Re[2]: Проблема с прерываниями
От: Аноним  
Дата: 20.10.03 12:19
Оценка:
Здравствуйте, 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. Всетаки вполне логично при появлении нового устройства в системе
написать драйвер.
Re: Проблема с прерываниями
От: zah нет
Дата: 21.10.03 20:07
Оценка:
Предыдущее сообщение был zah только войти забыл.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.