Windows驱动程序可以用Python编写吗?

Windows驱动程序可以用Python编写吗?,python,windows,drivers,Python,Windows,Drivers,Windows驱动程序可以用Python编写吗?Python在虚拟机中运行,所以不能 但是: 您可以编写一个编译器,将Python代码翻译成机器语言。一旦你做到了,你就可以做到。永远不要说“永不”,而是“嗯…”。。没有 您可能能够一起破解一些东西,以便在python中运行驱动程序的用户模式部分。但是内核模式的东西只能在C或汇编中完成。不,它们不能。Windows驱动程序必须使用能够 与基于C的API的接口 编译成机器代码 再说一次,没有什么能阻止您编写将python转换为机器代码的编译器;) 我

Windows驱动程序可以用Python编写吗?

Python在虚拟机中运行,所以不能

但是:


您可以编写一个编译器,将Python代码翻译成机器语言。一旦你做到了,你就可以做到。

永远不要说“永不”,而是“嗯…”。。没有


您可能能够一起破解一些东西,以便在python中运行驱动程序的用户模式部分。但是内核模式的东西只能在C或汇编中完成。

不,它们不能。Windows驱动程序必须使用能够

  • 与基于C的API的接口
  • 编译成机器代码

  • 再说一次,没有什么能阻止您编写将python转换为机器代码的编译器;)

    我不知道windows上对驱动程序的限制(内存分配方案、库的动态加载等等),但是您可以在驱动程序中嵌入python解释器,在这一点上,您可以做任何您想做的事情。我并不认为这是一个好主意:)

    最终的答案不是不在C/汇编驱动程序中嵌入解释器。除非有人有可用的框架,否则答案是否定的。一旦解释器和绑定就位,其余的逻辑就可以在Python中完成


    然而,编写驱动程序是C最适合的事情之一。我猜想,结果得到的Python代码看起来就像C代码,并且能打败解释程序开销。

    < P>一个很好的方法来理解为什么这几乎是不可能的,这是通过阅读C++中的驱动程序来实现的。作为C的衍生物,C++的使用似乎是简单的。实际上并非如此


    例如,您必须决定每个函数(实际上是每个汇编指令)是在可分页内存中还是在不可分页内存中。这需要扩展C,谨慎使用新的C++特性,或者在这种情况下,对Python语言和VM进行特殊扩展。此外,与驱动程序兼容的VM还必须处理不同的IRQL——有一个“级别”层次结构,它限制了您可以做什么和不能做什么

    是的。您不能创建“经典”内核模式驱动程序。然而,从XP开始,Windows提供了一个新的解决方案。显然,它们不能做所有的事情——任何用于引导操作系统的驱动程序都必须是内核模式。但是使用UMDF,您只需要实现COM组件

    除了启动时驱动程序外,您还不能编写以下UMDF驱动程序:

    • 处理中断
    • 直接访问硬件,如直接内存访问(DMA)
    • 有严格的定时循环
    • 使用非分页池或为内核模式保留的其他资源

      • booh:(无论如何,谢谢你:)我想我必须学习C语言或汇编语言如何将解释器(用C编写)集成到驱动程序中,然后执行作为数据存储在驱动程序中的Python脚本?@Judge Maygarden:这可能在用户模式下工作,但内核模式对可以进行的调用有很大限制。很可能你的翻译也不会在那里运行。内核模式的开发是一门黑色艺术。它会使驱动程序变得“胖”和“慢”:)我也在想同样的事情。然而,Lua是一种更好的语言,它非常适合为300波特的调制解调器编写驱动程序@Maygarden法官,我也看不到用Lua写驱动程序。C或汇编最有意义。如果你不使用一种接近金属的语言,我不明白为什么一种解释语言会比另一种更好。但是你知道什么会很酷吗?一种看起来像Python但程序性像C的语言,或者您可以在驱动程序中嵌入Python解释器。或者说服微软在内核中包含Python解释器。从技术上讲,没有理由不这样做。Windows目前并没有为您提供很多支持。;)嗯。。如果我能写这种编译器。。。我真的不想用python编写驱动程序:谢谢大家的好答案:)我是我公司的linux驱动程序开发人员,现在我们正在探索python,以使我们的驱动程序平台独立。高级管理层的建议,这些天都在做RND。@sandundhammika:说得通俗一点,那是不会发生的。驱动程序不是独立于平台的,因为内核决定了它们必须做什么,不同的平台有完全不同的期望。因此Windows希望UMDF驱动程序通过COM进行通信,而Linux甚至没有COM。@MSalters最初的问题是为不同的发行版分发相同的二进制驱动程序。我们现在正在交付我们的C++本地二进制版本,但是它们的库名是平台依赖的,所以即使是相同的ABI也会在库名上断裂。@桑德蒙哈迈卡:听起来更好的解决方案是用Python编写的驱动程序安装程序,实际驱动程序仍然是C++。这可能足以满足您经理的愿望。