Windows 驱动程序可以用 Python 编写吗?
7 回答
是的。您不能创建“经典”内核模式驱动程序。但是,从 XP 开始,Windows 提供了用户模式驱动程序框架。显然,他们不能做所有事情——任何用于引导操作系统的驱动程序显然都必须是内核模式。但是使用 UMDF,您只需要实现 COM 组件。
除了启动时驱动程序之外,您也不能编写以下 UMDF 驱动程序:
- 处理中断
- 直接访问硬件,例如直接内存访问 (DMA)
- 有严格的时序循环
- 使用为内核模式保留的非分页池或其他资源
最终的答案并非没有在您的 C/程序集驱动程序中嵌入解释器。除非有人有可用的框架,否则答案是否定的。一旦有了解释器和绑定,其余的逻辑就可以在 Python 中完成。
但是,编写驱动程序是 C 最适合的事情之一。我想生成的 Python 代码看起来很像 C 代码,并且破坏了解释器开销的目的。
了解为什么这实际上是不可能的一个好方法是阅读Microsoft关于在驱动程序中使用 C++ 的建议。作为 C 的派生词,C++ 的使用似乎很简单。在实践中,并非如此。
例如,您必须为每个函数(实际上是每个汇编指令)决定它是在可分页内存中还是在不可分页内存中。这需要对 C 的扩展,仔细使用新的 C++ 功能,或者在这种情况下对 Python 语言和 VM 进行特殊扩展。此外,与驱动程序兼容的 VM 还必须处理不同的 IRQL——“级别”的层次结构限制了您可以做什么和不可以做什么。
Python 在虚拟机中运行,所以没有。
但:
您可以编写一个编译器,将 Python 代码翻译成机器语言。一旦你做到了,你就可以做到。
我不知道 Windows 上驱动程序的限制(内存分配方案、库的动态加载等等),但你可以在驱动程序中嵌入一个 python 解释器,此时你可以做任何你想做的事情。并不是说我认为这是个好主意:)
永远不要说永远,但是呃..不
您可能可以一起破解某些东西以在 python 中运行驱动程序的用户模式部分。但是内核模式的东西只能在 C 或汇编中完成。
不,他们不能。Windows 驱动程序必须以一种语言编写
- 与基于 C 的 API 的接口
- 编译成机器码
再说一次,没有什么能阻止你编写一个将 python 转换为机器代码的编译器;)