Могут ли драйверы Windows быть написаны на Python?

могут ли драйверы Windows быть написаны на Python?

7 ответов


да. Вы не можете создать "классические" драйверы режима ядра. Однако, начиная с XP, Windows предлагает Пользовательский Режим Driver Framework. Очевидно, они не могут делать все - любой драйвер, используемый при загрузке ОС, очевидно, должен быть в режиме ядра. Но с UMDF вам нужно только реализовать com-компоненты.

помимо драйверов времени загрузки, вы также не можете писать драйверы UMDF, которые:

  • обрабатывать прерывания
  • сразу оборудование доступа, как прямой доступ к памяти (DMA)
  • имеют строгие временные циклы
  • используйте невыгружаемый пул или другие ресурсы, зарезервированные для режима ядра

окончательный ответ не без встраивания интерпретатора в ваш в противном случае драйвер c/assembly. Если у кого-то есть рамки, то ответ нет. Как только у вас есть интерпретатор и привязки на месте, остальная часть логики может быть выполнена в Python.

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


хороший способ получить представление о том, почему это практически невозможно, - это прочитать совет Microsoft об использовании C++ в драйверах. Как производная от C, использование C++ кажется простым. На практике это не так.

например, вы должны решить для каждой функции (и действительно для каждой инструкции по сборке), находится ли она в подкачиваемой или не подкачиваемой памяти. Это требует расширения до C, тщательного использования новых функций C++ или в этом случае специального расширения для язык Python и виртуальная машина. Кроме того, ваша совместимая с драйверами виртуальная машина также должна иметь дело с различными IRQLs-существует иерархия "уровней", которые ограничивают то, что вы можете и не можете сделать.


Python работает на виртуальной машине, поэтому нет.

но:

вы можете написать компилятор, который переводит код Python на машинный язык. Как только вы это сделаете, вы сможете это сделать.


Я не знаю ограничений на драйверы в windows (схемы выделения памяти, динамическая загрузка библиотек и все), но вы можете встроить интерпретатор python в свой драйвер, и в этот момент Вы можете делать все, что захотите. Не думаю, что это хорошая идея :)


никогда не говори никогда, Но да.. нет!--1-->

вы можете взломать что-то вместе, чтобы запустить пользовательские части драйверов в python. Но материал в режиме ядра может быть выполнен только в C или сборке.


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

  1. интерфейс с API на основе C
  2. компиляции в машинный код

опять же, ничто не мешает вам написать компилятор, который переводит python в машинный код;)