Форум — Ответы     (  К темам )
 ?  Алексей: Создание драйвера виртуального устройства (26-11-2002 09:53:33)
Всем привет!!!
Помогите разобраться со следующей проблемой. Я пишу прогу, которая через свой порт общается с аппаратурой удаленного управления. Свой протокол, скорость 50-200бод. Внешний девайс генерит интервалы в 20мс. Пргога на С (tsr) перехватывает прерывания IRQ10 обрабатывает их и передает\принимает данные. Весь интерфейс управления написан на Builder 5.0. Работает но коряво и не красиво. Как написать под эту железку vxd драйвер и заставить его общаться с прогой на Builder. Что для этого нужно и на чем и как пишутся драйвера виртуальных устройств.
 Devnvd (29-11-2002 10:29:30)
Попробуйте разыскать NuMega Driver Studio. Он знает про Builder и поможет сделать драйвер, там есть примеры. Вам потребуется также Win32 DDK. Его вам нужно будет скачать у Microsoft'а.
Обратитесь также на страничку http://www.lvr.com/serport.htm там есть ссылки на freeware пакеты с исходниками драйверов.
Вообще-то в Builder'е предусмотрена возможность собирать драйвера, для этого был добавлен ключик для linker'а:
Syntax

__declspec( naked ) declarator

Use of the naked argument suppresses the prolog/epilog code. Be aware when using __declspec(naked) that it does not set up a normal stack frame. A function with __declspec(naked) will not preserve the register values that are normally preserved. It is the programmer's responsibility to conform to whatever conventions the caller of the function expects.
You can use this feature to write your own prolog/epilog code using inline assembler code. Naked functions are particularly useful in writing virtual device drivers.

The naked attribute is relevant only to the definition of a function and is not a type modifier.
Example
This code defines a function with the naked attribute:

// Example of the naked attribute
__declspec( naked ) int func( formal_parameters )
{
// Function body
}
Но дальше этого почему-то Borland не пошёл. И полноценно собрать драйвер средствами Builder'а проблематично. Именно поэтому обратите внимание на NuMega. Но VC вам тоже всё-таки понадобиться. Какая версия? Это зависит от того какую версию DDK вы скачаете.