Можно ли написать драйверы Windows на Python?
Можно ли написать драйверы Windows на Python?
Ответы (7)
да. Вы не можете создать «классические» драйверы режима ядра. Однако, начиная с XP, Windows предлагает платформу драйверов пользовательского режима. Очевидно, они не могут делать все - любой драйвер, используемый для загрузки ОС, очевидно, должен работать в режиме ядра. Но с UMDF вам нужно только реализовать компоненты COM.
Помимо драйверов времени загрузки, вы также не можете написать драйверы UMDF, которые:
- Обработка прерываний
- Прямой доступ к оборудованию, например, прямой доступ к памяти (DMA)
- иметь строгие временные петли
- Используйте невыгружаемый пул или другие ресурсы, зарезервированные для режима ядра.
Окончательный ответ не обойдется без встраивания интерпретатора в ваш драйвер C / assembly. Если у кого-то нет доступной структуры, ответ - нет. Когда у вас есть интерпретатор и привязки, остальная логика может быть выполнена на Python.
Однако написание драйверов - одна из тех вещей, для которых C лучше всего подходит. Я предполагаю, что полученный код Python будет очень похож на код C и лишит смысла накладные расходы интерпретатора.
Хороший способ понять, почему это практически невозможно, - это прочитать совет Microsoft об использовании C ++ в драйверах. Как производное от C, использование C ++ кажется простым. На практике все не так.
Например, вы должны решить для каждой функции (и действительно для каждой инструкции сборки), находится ли она в выгружаемой или невыгружаемой памяти. Это требует расширений для C, осторожного использования новых функций C ++ или, в данном случае, специального расширения для языка Python и виртуальной машины. Кроме того, вашей виртуальной машине, совместимой с драйверами, также придется иметь дело с различными IRQL - существует иерархия «уровней», которая ограничивает то, что вы можете и что не можете делать.
Python работает на виртуальной машине, поэтому нет.
НО:
Вы можете написать компилятор, который переводит код Python на машинный язык. Как только вы это сделаете, вы сможете это сделать.
Я не знаю ограничений для драйверов в Windows (схемы распределения памяти, динамическая загрузка библиотек и все такое), но вы можете встроить интерпретатор Python в свой драйвер, после чего вы можете делать все, что захотите. Не то чтобы я считаю это хорошей идеей :)
Никогда не говори никогда, но э ... нет
Возможно, вы сможете что-то вместе взломать, чтобы запускать части драйверов в пользовательском режиме на python. Но все, что связано с режимом ядра, может быть выполнено только на C или сборке.
Нет, они не могут. Драйверы Windows должны быть написаны на языке, который может
- Интерфейс с API на основе C
- Компилировать до машинного кода
Опять же, ничто не мешает вам написать компилятор, переводящий python в машинный код;)