WindowsドライバーはPythonで記述できますか?
7 に答える
はい。"クラシック" カーネル モード ドライバーを作成することはできません。ただし、XP 以降、Windows はUser-Mode Driver Framework を提供します。明らかに、すべてを行うことはできません-OSの起動に使用されるドライバーは、明らかにカーネルモードでなければなりません。ただし、UMDF を使用すると、COM コンポーネントを実装するだけで済みます。
ブート時ドライバーに加えて、次のような UMDF ドライバーを作成することもできません。
- 割り込みを処理する
- ダイレクト メモリ アクセス (DMA) などのハードウェアに直接アクセスする
- 厳密なタイミング ループがある
- カーネル モード用に予約されている非ページ プールまたはその他のリソースを使用する
これが事実上不可能である理由を理解する良い方法は、ドライバーでの C++ の使用に関するMicrosoft のアドバイスを読むことです。C の派生物として、C++ の使用は簡単に見えます。実際には、そうではありません。
たとえば、すべての関数 (および実際にはすべてのアセンブリ命令) について、それがページング可能なメモリにあるか、ページングできないメモリにあるかを決定する必要があります。これには、C への拡張、新しい C++ 機能の慎重な使用、またはこの場合は Python 言語と VM への特別な拡張が必要です。さらに、ドライバー互換の VM もさまざまな IRQL を処理する必要があります。できることとできないことを制限する「レベル」の階層があります。
決定的な答えは、それ以外の場合は C/アセンブリ ドライバーにインタープリターを埋め込まないことではありません。誰かが利用可能なフレームワークを持っていない限り、答えはノーです。インタープリターとバインディングを配置したら、残りのロジックを Python で実行できます。
ただし、ドライバの作成は、C が最も適しているものの 1 つです。結果として得られる Python コードは、C コードに非常によく似ており、インタープリターのオーバーヘッドの目的を無効にしていると思います。
Pythonは仮想マシンで実行されるため、違います。
しかし:
Pythonコードを機械語に変換するコンパイラを書くことができます。あなたがそれをしたら、あなたはそれをすることができます。
Windows 上のドライバーの制限 (メモリ割り当てスキーム、ライブラリの動的ロードなど) はわかりませんが、ドライバーに Python インタープリターを埋め込むことができるかもしれません。私はそれが良い考えだとは思いません:)
決して言わないでくださいええ..いいえ
何かを一緒にハックして、Pythonでドライバーのユーザーモード部分を実行できる可能性があります。しかし、カーネルモードのものはCまたはアセンブリでのみ実行できます。
いいえ、できません。Windows ドライバーは、次のことができる言語で作成する必要があります。
- C ベースの API とのインターフェース
- マシンコードにコンパイルする
繰り返しになりますが、Python を機械語コードに変換するコンパイラーを作成することを妨げるものは何もありません ;)