Форум: "Система";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизЗапрет доступа к определенным портам на линейке Windows NT Найти похожие ветки
← →
Ученик (2003-08-26 23:06) [0]На незначительное время, в частности 1F0 (+6, +7), 170
Может кто-нибудь знает и подскажет название функции или нескольких функций или ссылку на форум, где этот вопрос можно задать ?
Каким образом реализуется в драйверах ?
В примерах DDK ничего подобного (в плане блокировки) не наблюдается :-(
← →
NightAngel (2003-08-27 00:47) [1]Можно перехватить обращение к портам см. здесь http://delphi.mastak.ru/cgi-bin/forum.pl?id=1061814394&n=2
А также Manual на любой из процессоров, начиная с Pentium, про отладочные регистры.
← →
MBo (2003-08-27 07:26) [2]Спросить можно на RSDN.
Запрет доступа встречал только в TVicHW или TVicLPT ( http://www.entechtaiwan.com/tools.htm), может, можно отследить, как это делается.
← →
Ученик (2003-08-27 23:05) [3]>NightAngel © (27.08.03 00:47) [1]
Перехват позволяет остановить обращение ?
Какая реакция будет на мое собственное обращение к портам (можно ли будет разобрать свое-чужое) ?
>MBo © (27.08.03 07:26) [2]
Если не затруднит, о вызове какой функции, которая блокирует обращение, в TVicHW идет речь ?
← →
MBo (2003-08-28 08:23) [4]>Ученик
Увы, я не разбираюсь в этом, просто вспомнил, что встречал когда-то в TVicHW функцию AcquirePort (монопольный захват порта).
← →
Digitman (2003-08-28 08:24) [5]
> Какая реакция будет на мое собственное обращение к портам
>
точно такая же, как и на "чужое".
т.е. во избежание входа в бесконечную рекурсию первым делом в обработчике отл.прерывания следует привести упр. и отл. регистры (см. NightAngel © (27.08.03 00:28) [3] в http://delphi.mastak.ru/cgi-bin/forum.pl?id=1061814394&n=2) в исходное состояние
концептуально это выглядит так :
после собственных обращений к порту (в ходе исполнения процедуры прерывания) перед возвратом из обработчика прерывания, если вновь требуется контроль за "чужими" обращениями к порту, регистры вновь устанавливаются указанным образом
← →
Ученик (2003-08-28 22:08) [6]>MBo © (28.08.03 08:23) [4]
Наверно, идет речь о AcquireLPT, к сожалению, судя по названию это для LPT
>Digitman © (28.08.03 08:24) [5]
Почему-то кажется, что после "...привести упр. и отл. регистры в исходное состояние..." может произойти чужое обращение к порту, особенно, если данный порт активно используется, например, идет поиск на диске
← →
Digitman (2003-08-29 09:03) [7]
> Ученик
с чего бы ему произойти ? если твой обработчик прерывания работает в PL0, он в состоянии запретить на время своей работы любые прочие прерывания.
а при запрещенных прерываниях переключение задач не произойдет
← →
Ученик (2003-08-30 21:02) [8]>Digitman © (29.08.03 09:03) [7]
"..запретить прерывания...", это для Windows NT нормально ? не "криминал" ? Т.е. можно использовать cli, sti ?
← →
Polevi (2003-09-01 09:35) [9]>Ученик © (30.08.03 21:02) [8]
обработчик прерывания запрещает прерывания - обычная практика, без этого никак
← →
Digitman (2003-09-01 16:16) [10]
> Ученик
см.
> Polevi © (01.09.03 09:35)
иначе представь себе катастрофическую ситуацию :
некое устр-во для исполнения некоего действия должно получить
секвенцию из двух out-инструкций : первая устанавливает активным внутренний регистр адреса, вторая шлет данные в адресованный предыдущей инструкцией внутренний регистр данных
возникло прерывание. в обработчике установили регистр адреса.
следом ожидалось послать значение в рег-р данных, и тут возникло другое прерывание ... в его обработчике рег-р адреса устанавливается иным ... после возврата из второго обработчика в первый отложенная (из-за вложенного прерывания) запись в рег-р данных вызовет непредсказуемую ситуацию, ибо рег-р адреса вполне мог и измениться в обработчике вложенного прерывания
← →
Ученик (2003-09-01 22:50) [11]>Polevi © (01.09.03 09:35) [9]
Digitman © (01.09.03 16:16) [10]
Для чтения из портов используютcя функции READ_PORT_????, для записи WRITE_PORT_???? (DDK), случайно, не в курсе, какие функции необходимо использовать для запрещения/разрешения прерываний ?
← →
NightAngel (2003-09-01 22:51) [12]> Ученик ©
> В примерах DDK ничего подобного (в плане блокировки) не > наблюдается :-(
В дополнение ко всему вышесказанному. Я не знаю как, и в каком DDK Вы смотрели, но информация об этом там есть (в плане блокировки). Специально посмотрел.
← →
NightAngel (2003-09-01 22:51) [13]> Ученик ©
> В примерах DDK ничего подобного (в плане блокировки) не > наблюдается :-(
В дополнение ко всему вышесказанному. Я не знаю как, и в каком DDK Вы смотрели, но информация об этом там есть (в плане блокировки). Специально посмотрел.
← →
NightAngel (2003-09-01 22:56) [14]> Ученик © (01.09.03 22:50) [11]
Ищите по: Port Driver Services.
← →
NightAngel (2003-09-01 23:28) [15]> случайно, не в курсе, какие функции необходимо использовать для запрещения/разрешения прерываний ?
cli/sti ?
Да и ещё... Не факт, что какой-то из драйверов не будет работать
с портами напрямую, ч/з - in/out, так-что делайте выводы.
← →
Ученик (2003-09-02 06:57) [16]>NightAngel © (01.09.03 22:51) [12]
Используется Windows NT DDK 4.0, если можно (и не затруднит), конкретнее, о вызове каких функций идет речь, надеюсь это, не великая тайна ?
На всякий случай, речь не идет о драйвере какого-либо устройства, речь идет о чтении/записи произвольного порта.
← →
Polevi (2003-09-02 10:16) [17]может не в тему но чтото всплывает в голове насчет запрета аппартных прерываний со времен Доса - cli + out 20h,20h ??
>Ученик © (02.09.03 06:57) [16]
чем не устраивает in out ?
← →
Digitman (2003-09-02 13:39) [18]
> Ученик
да какие еще ф-ции ?! если ты имеешь СPL = 0, то манипулируй прерываниями непосредственно инструкциями cli/sti, портами - непосредственно инструкциями in[s], out[s] !)
более того - при СPL = 0 ты можешь обращаться и напрямую к физической памяти, и опять же - безо всяких на то ф-ций
← →
Ученик (2003-09-03 07:07) [19]>Polevi © (02.09.03 10:16) [17]
>Digitman © (02.09.03 13:39) [18]
Спасибо, за ответы
>Модератор
Тема, наверно, закрыта
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.032 c