Написание драйверов на C # - PullRequest
28 голосов
/ 15 июня 2009

Я писал ранее на C / C ++, но в настоящее время мне нужно преобразовать его в C #.

Может кто-нибудь сказать мне код / ​​способ Как писать драйверы на C #?

На самом деле в настоящее время у меня есть некоторые проблемы с моим старым приложением, написанным на C ++, и мы должны написать драйверы наших LPT1, COM-принтеров и других драйверов USB на C #.

Ответы [ 5 ]

27 голосов
/ 15 июня 2009

На самом деле, вы можете написать некоторые драйверы на C #, если используете UMDF, потому что он работает в пользовательском режиме (см. Начало работы с UMDF ). Но я рекомендую использовать C / C ++.

24 голосов
/ 16 июня 2009

Просто ты не можешь. C # создает промежуточный язык, который интерпретируется виртуальной машиной (.NET). Все это работает в пользовательском режиме, а драйверы WDM - в режиме ядра.

Существует DDK, но он не поддерживается и в VStudio (но вы можете сделать проект makefile для компиляции).

Разработка драйверов сложна, склонна к голубому экрану и требует хорошего понимания C, структур ядра и работы с mem. Ни один из этих навыков не требуется для C # и .NET, поэтому существует длинный и мучительный путь обучения.

11 голосов
/ 15 июня 2009

Вы не можете писать драйверы режима ядра в C # (среда выполнения выполняется в пользовательском режиме, поэтому вы не можете войти в ring0). Это SO Q / A содержит некоторые ссылки, которые могут быть вам полезны:

Разработка драйвера C #?

8 голосов
/ 28 июня 2009

Из вашего описания неясно, намереваетесь ли вы разрабатывать драйверы устройств Windows или взаимодействовать с оборудованием через существующие драйверы устройств.

Например, для взаимодействия с устройствами, подключенными к вашему последовательному порту, вам не нужно писать собственный драйвер, и вы можете получить к нему доступ через .NET SerialPort класс.

Даже к USB-устройствам можно получить доступ из пользовательского пространства (и, в конечном счете, из управляемого кода) через такие платформы, как libusb-win32 , WinUSB и т. Д.

1 голос
/ 15 июня 2009

Вы не можете писать драйверы на C #; драйверы должны работать с повышенными привилегиями, чтобы иметь возможность общаться с оборудованием; Управляемый код не может быть запущен в соответствующей среде.

...