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

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

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

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

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

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

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

-Адам


person Adam Davis    schedule 16.09.2008    source источник
comment
Я сомневаюсь, что мы увидим драйверы с управляемым кодом до тех пор, пока ОС не будет построена поверх фреймворка - в настоящее время это не так.   -  person RobS    schedule 10.04.2009


Ответы (7)


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

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

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

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

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

person Lasse V. Karlsen    schedule 16.09.2008
comment
Я хотел бы добавить, что некоторые драйверы не разрешены MS в любом случае быть драйверами режима ядра, поэтому в этом случае подойдет управляемый или неуправляемый код пользовательского режима. - person RomanM; 22.09.2008

Это поможет вам в некоторой степени: Комплект драйверов для Windows

person scable    schedule 16.09.2008

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

person Mladen Janković    schedule 16.09.2008

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

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

person FlySwat    schedule 16.09.2008
comment
Не существует виртуальной машины .NET. В среде выполнения .NET не используется виртуальная машина, в отличие, например, от Java. CIL всегда перед выполнением компилируется в собственный код. Никакой виртуализации. - person IInspectable; 09.06.2014
comment
Акцент на до исполнения. В остальном .NET CLR очень похож на традиционную виртуальную машину, такую ​​как JVM. - person antikbd; 27.02.2021

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

person Jeffrey Hantin    schedule 18.11.2009

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

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

person Robert Gatliff    schedule 16.09.2008

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

‹Speculation›
Ходят слухи, что MS вкладывает много денег, чтобы вывести Singularity на новый уровень. Просто найдите Midori. Но это 2015+
‹/speculation›

person Thomas Danecker    schedule 16.09.2008