Вы не можете сделать драйверы устройств режима ядра в C #, так как среда выполнения не может быть безопасно загружена в ring0 и работать должным образом.
Кроме того, C # не создает двоичные файлы, подходящие для загрузки в качестве драйверов устройств, особенно в отношении точек входа, которые необходимо предоставить драйверам. Зависимость от времени выполнения для перехода, анализа и JIT двоичного файла во время загрузки запрещает прямой доступ, необходимый подсистеме драйвера для загрузки двоичного файла.
Идет работа, однако, чтобы перевести некоторые драйверы устройств в пользовательский режим, вы можете увидеть интервью здесь с Питером Виландом из команды UDMF (User Driver Driver Framework).
Драйверы пользовательского режима были бы гораздо более подходящими для управляемой работы, но вам придется немного погуглить, чтобы узнать, будут ли C # и .NET поддерживаться напрямую. Все, что я знаю, это то, что драйверы уровня ядра не выполнимы только в C #.
Однако, возможно, вы можете создать драйвер C / C ++ и службу C # (или аналогичную) и заставить драйвер общаться с управляемым кодом, если вам абсолютно необходимо написать много кода на C #.