Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Создание обработчика прерываний под Win32


Автор: shedon 22.5.2004, 21:22
Добрый день, я пишу библиотеку для работы с COM портами. Работаю я с ними на уровне портов ввода/вывода UART`а.
Для получения привилегий использую драйвер WinIO.
Возникла проблемма как написать свой обработчик прерываний, желательно код должен быть на VC со вставками на асме, если необхадимо.
Винда не позволяет выполнить комманду CLI и STI, хотя использую WinIO.
Спасибо!

Автор: Baa 22.5.2004, 21:25
Я тебе предлагаю отказаться от WinIO и написать самому промежуточный драйвер. Если интересно, то могу даже рассказать как smile.gif

Автор: shedon 22.5.2004, 21:35
Цитата
Я тебе предлагаю отказаться от WinIO и написать самому промежуточный драйвер. Если интересно, то могу даже рассказать как 

Была такая мысля, но пока не могу найти где скачать DDK sad.gif

Автор: Baa 23.5.2004, 02:31
shedon, на мелкомягких уже не скачаешь, теперь только через файлообеменную сеть eMule например.

Автор: shedon 23.5.2004, 18:21
Свершилось ! Я нашёл DDK !!!
Цитата
Я тебе предлагаю отказаться от WinIO и написать самому промежуточный драйвер. Если интересно, то могу даже рассказать как 

Буду очень благодарен smile.gif

Автор: Масяня 23.5.2004, 20:46
Цитата(shedon @ 22.5.2004, 21:22)
Винда не позволяет выполнить комманду CLI и STI, хотя использую WinIO.

Но ведь все надо делать в режиме ядра, а CLI-STI ничего не дадут, WinNT это же не ДОС там есть такое понятие как IRQL.... на нем-то все и держится! А драйвер режима ядра может выполнить свою процедуру с CLI (запрет прерываний) да и только, а после все вернется на "круги своя" smile.gif, т.е. все надо делать в драйвере!!!

Автор: shedon 23.5.2004, 23:16
Ды к WinIo я и пытался использовать, для получения режима ядра. Но не фига не получилось. Эти операции похоже разрешены только в нулевом кольце, а по-этому придётся писать свой драйвер.

Автор: Sined 23.5.2004, 23:19
Цитата
Но ведь все надо делать в режиме ядра, а CLI-STI ничего не дадут, WinNT это же не ДОС там есть такое понятие как IRQL....

cli,sti идут прямо на ПКП насколько я помню, посему ни 1 винда не должна такого позволять.Ни на нулевом кольце--нигде...сама идея многозадачности летит на фиг.

shedon, тут уже была подобная тема и даже выкладывалсь болванка драйвера--самая простая длл. Поищи, если не найдешь у меня вроде на винте валялось что-то похожее(работает с посл. портами)--поищу....

Автор: shedon 23.5.2004, 23:42
Цитата
cli,sti идут прямо на ПКП насколько я помню, посему ни 1 винда не должна такого позволять.Ни на нулевом кольце--нигде...сама идея многозадачности летит на фиг.

А в нулевом кольце винду ни кто не спросит biggrin.gif

Автор: Масяня 24.5.2004, 04:54
Цитата(shedon)
Цитата
cli,sti идут прямо на ПКП насколько я помню, посему ни 1 винда не должна такого позволять.Ни на нулевом кольце--нигде...сама идея многозадачности летит на фиг.

А в нулевом кольце винду ни кто не спросит biggrin.gif

shedon прав! На нулевом кольце можешь делать что хочешь!
Когда я говорил о том, что "надо все делать в драйвере", то я имел в виду то, что если вызовишь CLI, то при возврате управления из процедуры драйвера Диспетчер ввода/вывода сам потом разрешит прерывания.

Автор: Sined 24.5.2004, 08:03
Цитата
А в нулевом кольце винду ни кто не спросит

Именно поэтому она обидится и выбросит bsod.

Автор: Масяня 28.5.2004, 16:19
shedon, написал я тут вот обработчик для IRQ12 в WinXP и все с ним заеб.. - могу дать, а вот например, на IRQ1 (клаву) WinXP не разрешила поставить, там в последнем обработчике IRQ1 ShareVector = FALSE. А тебе на что надо поставить обработчик?

Автор: Baa 28.5.2004, 22:49
Да на самом деле проще наерно написать фильтр на драйвер ком-порта. Зачем колесо-то изобретать?

Автор: shedon 29.5.2004, 15:57
Цитата
А тебе на что надо поставить обработчик?

На IRQ4.
Мне тут намекнули, что проблемма не в дровах, а в аппаратной части, вроде есть такой глюк почти у всех микросхем UART, они не всегда формируют прерывание, по приходу байтов.

Автор: Масяня 29.5.2004, 21:50
Щаз посмотрел в SoftIce’е на IRQ4: Share interrupt = FALSE, а это значит, что с помощью IoConnectInterrupt() обработчик не поставить в WinXP!

Цитата(shedon)

вроде есть такой глюк почти у всех микросхем UART, они не всегда формируют прерывание, по приходу байтов

Не знаю, надо искать по нему инфо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)