| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Создание обработчика прерываний под Win32 |
| Автор: shedon 22.5.2004, 21:22 |
| Добрый день, я пишу библиотеку для работы с COM портами. Работаю я с ними на уровне портов ввода/вывода UART`а. Для получения привилегий использую драйвер WinIO. Возникла проблемма как написать свой обработчик прерываний, желательно код должен быть на VC со вставками на асме, если необхадимо. Винда не позволяет выполнить комманду CLI и STI, хотя использую WinIO. Спасибо! |
| Автор: Baa 22.5.2004, 21:25 |
| Я тебе предлагаю отказаться от WinIO и написать самому промежуточный драйвер. Если интересно, то могу даже рассказать как |
| Автор: shedon 22.5.2004, 21:35 | ||
Была такая мысля, но пока не могу найти где скачать DDK |
| Автор: Baa 23.5.2004, 02:31 |
| shedon, на мелкомягких уже не скачаешь, теперь только через файлообеменную сеть eMule например. |
| Автор: shedon 23.5.2004, 18:21 | ||
Свершилось ! Я нашёл DDK !!!
Буду очень благодарен |
| Автор: Масяня 23.5.2004, 20:46 | ||
Но ведь все надо делать в режиме ядра, а CLI-STI ничего не дадут, WinNT это же не ДОС там есть такое понятие как IRQL.... на нем-то все и держится! А драйвер режима ядра может выполнить свою процедуру с CLI (запрет прерываний) да и только, а после все вернется на "круги своя" |
| Автор: shedon 23.5.2004, 23:16 |
| Ды к WinIo я и пытался использовать, для получения режима ядра. Но не фига не получилось. Эти операции похоже разрешены только в нулевом кольце, а по-этому придётся писать свой драйвер. |
| Автор: Sined 23.5.2004, 23:19 | ||
cli,sti идут прямо на ПКП насколько я помню, посему ни 1 винда не должна такого позволять.Ни на нулевом кольце--нигде...сама идея многозадачности летит на фиг. shedon, тут уже была подобная тема и даже выкладывалсь болванка драйвера--самая простая длл. Поищи, если не найдешь у меня вроде на винте валялось что-то похожее(работает с посл. портами)--поищу.... |
| Автор: shedon 23.5.2004, 23:42 | ||
А в нулевом кольце винду ни кто не спросит |
| Автор: Масяня 24.5.2004, 04:54 | ||||
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!
Не знаю, надо искать по нему инфо |