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

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

Прежде чем перейти в С#...

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

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

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

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

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

-Adam

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Это поможет вам в некотором роде: Windows Driver Kit

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

< предположение, >
Слухи о том, что MS вкладывает большие деньги в то, чтобы привнести Singularity на новый уровень. Просто найдите Midori. Но что 2015+
</& спекуляция GT;

Ответ 7

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

Ответ 8

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

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


Немного связаны:

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

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