Могут ли драйверы Windows быть написаны на Python? - PullRequest
11 голосов
/ 11 июня 2009

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

Ответы [ 7 ]

17 голосов
/ 11 июня 2009

Да. Вы не можете создавать «классические» драйверы режима ядра. Однако, начиная с XP, Windows предлагает User-Mode Driver Framework . Очевидно, что они не могут делать все - любой драйвер, используемый при загрузке ОС, должен быть в режиме ядра. Но с UMDF вам нужно только реализовать компоненты COM.

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

  • Обработка прерываний
  • Прямой доступ к оборудованию, например, прямой доступ к памяти (DMA)
  • имеют строгие временные петли
  • Использовать невыгружаемый пул или другие ресурсы, зарезервированные для режима ядра.
3 голосов
/ 11 июня 2009

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

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

3 голосов
/ 11 июня 2009

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

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

1 голос
/ 11 июня 2009

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

1 голос
/ 11 июня 2009

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

НО:

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

0 голосов
/ 11 июня 2009

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

  1. Интерфейс с API на основе C
  2. Компилировать до машинного кода

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

0 голосов
/ 11 июня 2009

Никогда не говори никогда, но ... нет

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

...