Подтвердить что ты не робот

Написание драйверов в С#

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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