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

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

14 голосов
/ 16 сентября 2008

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

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

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

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

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

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

-Adam

Ответы [ 8 ]

25 голосов
/ 16 сентября 2008

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

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

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

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

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

4 голосов
/ 16 сентября 2008

Это поможет вам: Windows Driver Kit

3 голосов
/ 16 сентября 2008

Это не прямой ответ на ваш вопрос, но если вам интересно, вы можете посмотреть Singularity project .

2 голосов
/ 18 ноября 2009

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

2 голосов
/ 16 сентября 2008

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

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

1 голос
/ 12 мая 2018

Если я правильно помню, Dokan Project - это драйвер файловой системы пользовательского режима, который также позволяет выполнять код .NET системным драйвером: https://github.com/dokan-dev/dokan-dotnet.

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

<Ч />

Мягко связаны:

Cosmos Project - это операционная система с открытым исходным кодом, которая разработана на C # и работает
«(ядро) драйверы» и приложения уровня пользователя, полностью написанные на C # / F # / VB.NET /...

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

1 голос
/ 17 сентября 2008

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


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

1 голос
/ 16 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...