Вопрос

Прежде чем я с головой окунусь в C #...

Я всегда считал, что C, или, может быть, C ++, лучше всего подходит для разработки драйверов под Windows.Я не в восторге от идеи разработки драйвера на компьютере с .NET.

Но .NET, похоже, является тем путем, которым MS движется в разработке приложений, и поэтому мне сейчас интересно:

  • Используют ли люди C # для разработки драйверов?
  • Вам нужно делать много перехватов API, или у C # есть средства для взаимодействия с ядром без особого взлома?
  • Может ли кто-нибудь рассказать о надежности и безопасности запуска программы на C # ближе к Ring 0, чем это было бы в обычном случае?

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

  • Какие есть хорошие ресурсы для начала, скажем, разработки простого драйвера виртуального последовательного порта?

-Адам

Это было полезно?

Решение

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

Кроме того, C # не создает двоичные файлы, подходящие для загрузки в качестве драйверов устройств, особенно в отношении точек входа, которые драйверы должны предоставлять.Зависимость от среды выполнения для перехода, анализа и JIT двоичного файла во время загрузки запрещает прямой доступ, необходимый подсистеме драйвера для загрузки двоичного файла.

Однако ведется работа по переводу некоторых драйверов устройств в пользовательский режим, вы можете посмотреть интервью здесь совместно с Питером Виландом из команды UDMF (User Mode Driver Framework).

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

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

Другие советы

Это должно вам в какой-то мере помочь: Комплект драйверов для Windows

Это не прямой ответ на ваш вопрос, но если вам интересно, вы могли бы взглянуть на Проект сингулярности.

Может ли кто-нибудь рассказать о надежности и безопасности запуска программы на C # ближе к Ring 0, чем это было бы в обычном случае?

C # выполняется на виртуальной машине .NET, вы не можете переместить ее ближе к кольцу 0, чем виртуальную машину, и виртуальная машина работает в пользовательском пространстве.

Если вы готовы попробовать использовать проприетарный фреймворк, Инструментарий WindRiver от Jungo поддерживает разработку драйверов в пользовательском режиме (даже в виде управляемого кода) для устройств USB, PCI и PCI-E.

У Microsoft есть ряд исследовательских проектов в области создания ОС с управляемым кодом, другими словами, kill с помощью Win32 API.

Смотрите статью Мэри Джо Фоули: Восстановление наследия

Написание драйверов устройств в .net не имеет смысла для текущих версий Windows.

<speculation>
Ходят слухи, что MS вкладывает много денег в то, чтобы вывести Singularity на новый уровень.Просто поищи Мидори.Но это 2015 год +
</speculation>

Если я правильно помню, то Проект " Докан " является драйвером файловой системы пользовательского режима, который также позволяет .СЕТЕВОЙ код должен выполняться системным драйвером: https://github.com/dokan-dev/dokan-dotnet.

Итак, вы могли бы разработать "драйвер" C # (на самом деле приложение пользовательского режима), который затем вызывается драйвером режима ядра C ++.Драйвер ядра мог бы просто передавать все вместе, не манипулируя данными, и действовать как простая оболочка.
Излишне упоминать, что это очень небезопасно, и вы, скорее всего, закончите с BSOD (я пробовал это).


Слабо связанный:

Тот Самый Космический проект это операционная система с открытым исходным кодом, которая разработана на C # и работает
"драйверы (ядра)" и приложения пользовательского уровня, полностью написанные на C #/F #/VB.NET/...

Хотя технически это драйверы уровня ядра, операционная система больше не Windows, а ваша собственная, поэтому я предполагаю, что это неправильный ответ ......

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top