Написание драйверов в С#
Я написал ранее в C/С++, но в настоящее время мне нужно его преобразовать в С#.
Может ли кто-нибудь сказать мне код/способ Как писать драйверы на С#?
В настоящее время у меня есть некоторые проблемы с моим старым приложением, написанным на С++, и мы должны писать драйверы наших LPT1, COM-принтеров и других USB-драйверов на С#.
Ответы
Ответ 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
Вы не можете писать драйверы на С#; драйверы должны работать с повышенными привилегиями, чтобы иметь возможность разговаривать с оборудованием; управляемый код не может быть запущен в соответствующей среде.