Доступ к нестандартным портам ввода-вывода
От: BerkOff Россия  
Дата: 27.04.04 18:37
Оценка:
У меня проблема! Надо в ДОС программе под WinNT (работающей в защищенном режиме), получить доступ к нестандартным портам ввода-вывода. ЕСТЕСТВЕННО УРОВЕНЬ ПРИВЕЛЕГИЙ 3. Желательно это реализовать на ассемблере. Заранее большое спасибо.
VDD
От: SilverCloud Россия http://rodonist.wordpress.com
Дата: 01.05.04 18:04
Оценка: 9 (1)
Сабжевый раздел из DDK


By the grace of God Almighty
And the pressures of a marketplace
The human race has civilized itself
It's a miracle
Re: VDD
От: BerkOff Россия  
Дата: 02.05.04 10:05
Оценка:
Здравствуйте, SilverCloud, Вы писали:

SC>Сабжевый раздел из DDK

А можно поподробнее про это. А то мне поставили такую задачу. А с драйверами я никогда не сталкивался!
Спасибо.
Re[2]: VDD
От: OpenGL  
Дата: 02.05.04 15:35
Оценка:
Здравствуйте, BerkOff, Вы писали:

BO>Здравствуйте, SilverCloud, Вы писали:


SC>>Сабжевый раздел из DDK

BO>А можно поподробнее про это. А то мне поставили такую задачу. А с драйверами я никогда не сталкивался!
BO>Спасибо.

В принцепе пиши мне и с драйверами сталкивался и с чем угодно, помогу.
Re[2]: VDD
От: SilverCloud Россия http://rodonist.wordpress.com
Дата: 02.05.04 16:26
Оценка:
Здравствуйте, BerkOff, Вы писали:

BO>Здравствуйте, SilverCloud, Вы писали:


SC>>Сабжевый раздел из DDK

BO>А можно поподробнее про это. А то мне поставили такую задачу. А с драйверами я никогда не сталкивался!

Короче, так. В NT прямое обращение к IO-портам запрещено, по вполне понятным причинам. А DOS-овские программы такое хотят постоянно, потому что в DOS только так и можно было . Поэтому эмулятор DOS в NT, ntvdm.exe, должен перехватить такое обращение (in PORT или out PORT), понять, разрешено ли такое, и либо перевести в легальное с точки зрения NT обращение к драйверу девайса, к которому DOSовская программа пытается достучаться, либо обломать её с сообщением о попытке выполнить недопустимую операцию То же самое с физической памятью и аппаратными прерываниями.

Обращение к COM-портам (03F8-03FF, IRQ04, 02F8-02FF, IRQ03) ntvdm обрабатывает самостоятельно, а для остальных устройств предусмотрен механизм расширения, своего рода плагинов для ntvdm, которые и транслируют обращение к аппаратному ресурсу из DOS-программы в вызов драйвера NT. Вот эти плагины и называются VDD, Virtual Device Drivers. Это dll пользовательского режима, в DDK есть примеры реализации (как раз работа с COM-портом, если мне память не изменяет).

Таким образом, чтобы DOS-программа в NT могла работать с нестандартным железом, нужно
1) Иметь возможность работы с этим железом из Win32, т.е. нормальный драйвер, работающий в режиме ядра.
2) Иметь VDD, т.е. "посредник" между виртуальной машиной DOS и этим драйвером.

В твоём случае должно быть довольно просто, если тебе нужно просто обращение к портам IO, то драйвер для начала можешь взять готовый, какой-нибудь TotalIO или что-нибудь в этом духе, их море, таких. В готовом продукте стоит подрихтовать этот драйвер, чтобы заблокировать обращение к ненужным портам (ибо это дыра в безопасности размером с жопу Гулливера), но для отладки сойдёт и так. Тебе остаётся только сам VDD, это гораздо проще, т.к. это просто DLL пользовательского режима.

Насчёт реализации на ASMе — можно, конечно, но ИМХО для Win32 это не лучший выбор.

Удачи!


By the grace of God Almighty
And the pressures of a marketplace
The human race has civilized itself
It's a miracle
Re[3]: VDD
От: BerkOff Россия  
Дата: 03.05.04 11:07
Оценка:
Здравствуйте, SilverCloud, Вы писали:

SC>Здравствуйте, BerkOff, Вы писали:


BO>>Здравствуйте, SilverCloud, Вы писали:


SC>>>Сабжевый раздел из DDK

BO>>А можно поподробнее про это. А то мне поставили такую задачу. А с драйверами я никогда не сталкивался!

SC>Короче, так. В NT прямое обращение к IO-портам запрещено, по вполне понятным причинам. А DOS-овские программы такое хотят постоянно, потому что в DOS только так и можно было . Поэтому эмулятор DOS в NT, ntvdm.exe, должен перехватить такое обращение (in PORT или out PORT), понять, разрешено ли такое, и либо перевести в легальное с точки зрения NT обращение к драйверу девайса, к которому DOSовская программа пытается достучаться, либо обломать её с сообщением о попытке выполнить недопустимую операцию То же самое с физической памятью и аппаратными прерываниями.


SC>Обращение к COM-портам (03F8-03FF, IRQ04, 02F8-02FF, IRQ03) ntvdm обрабатывает самостоятельно, а для остальных устройств предусмотрен механизм расширения, своего рода плагинов для ntvdm, которые и транслируют обращение к аппаратному ресурсу из DOS-программы в вызов драйвера NT. Вот эти плагины и называются VDD, Virtual Device Drivers. Это dll пользовательского режима, в DDK есть примеры реализации (как раз работа с COM-портом, если мне память не изменяет).


SC>Таким образом, чтобы DOS-программа в NT могла работать с нестандартным железом, нужно

SC> 1) Иметь возможность работы с этим железом из Win32, т.е. нормальный драйвер, работающий в режиме ядра.
SC> 2) Иметь VDD, т.е. "посредник" между виртуальной машиной DOS и этим драйвером.

SC>В твоём случае должно быть довольно просто, если тебе нужно просто обращение к портам IO, то драйвер для начала можешь взять готовый, какой-нибудь TotalIO или что-нибудь в этом духе, их море, таких. В готовом продукте стоит подрихтовать этот драйвер, чтобы заблокировать обращение к ненужным портам (ибо это дыра в безопасности размером с жопу Гулливера), но для отладки сойдёт и так. Тебе остаётся только сам VDD, это гораздо проще, т.к. это просто DLL пользовательского режима.


SC>Насчёт реализации на ASMе — можно, конечно, но ИМХО для Win32 это не лучший выбор.


SC>Удачи!


Спасибо попробую разобраться! А свой драйвер написать сложно? Просто предполагается что я сам его должен написать. Это у меня такая лабораторная по программированию Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.