C#驱动程序开发?

时间:2020-03-05 18:56:54  来源:igfitidea点击:

在我跳入C#之前...

我一直觉得C或者C ++最适合在Windows上开发驱动程序。我不喜欢在.NET机器上开发驱动程序的想法。

但是.NET似乎是MS走向应用程序开发的方式,所以我现在想知道:

  • 人们正在使用C#开发驱动程序吗?
  • 我们是否必须做很多API挂钩,或者C#是否具有无需过多黑客就可以与内核进行交互的功能?
  • 谁能说出比通常情况下更接近Ring 0的C#程序的可靠性和安全性?

我希望我的设备可以在C#中使用,并且如果Cis中的驱动程序开发人员成熟了,那显然就是要走的路,但是如果不建议这样做,我不想在这里花费很多精力。

  • 例如,开发一个简单的虚拟串行端口驱动程序,有什么好的入门资源?

-亚当

解决方案

回答

这不是我们问题的直接答案,但是如果我们有兴趣,可以看一下Singularity项目。

回答

这将在某种程度上为我们提供帮助:Windows Driver Kit

回答

微软在拥有托管代码OS方面有许多研究项目,换言之,它们被Win32 API杀死了。

参见Mary Jo Foley的文章:重建传统

回答

我们无法在Cas中创建内核模式设备驱动程序,因此无法将运行时安全地加载到ring0并按预期运行。

此外,C不会创建适合作为设备驱动程序加载的二进制文件,特别是关于驱动程序需要公开的入口点。在加载过程中依赖于运行时跳转并分析二进制文件并对其进行JIT禁止了驱动程序子系统加载二进制文件所需的直接访问。

但是,正在进行一些工作以使某些设备驱动程序进入用户模式,我们可以在此处看到UDMF(用户模式驱动程序框架)团队的Peter Wieland的专访。

用户模式驱动程序将更适合于托管工作,但是我们必须在Google上进行一些搜索,以确定是否可以直接支持Cand .NET。我所知道的是,内核级驱动程序仅在C#中不可用。

但是,如果我们绝对必须用C#编写很多代码,则可以制作一个C / C ++驱动程序和一个Cservice(或者类似服务)并使驱动程序与托管代码对话。

回答

Can anyone speak to the reliability and safety of running a C# program closer to Ring 0 than would normally be the case?

在.NET虚拟机中出现问题时,我们无法将其移动到比VM更靠近Ring 0的位置,并且VM在用户空间中运行。

回答

在.net中编写设备驱动程序对于Windows的当前版本没有任何意义。

<推测>
有传言称,微软正投入大量资金将奇点提升到一个新的水平。只是寻找Midori。但是那是2015年以上
</ speculation>

回答

如果我们愿意使用专有框架,Jungo的WinDriver工具包支持针对USB,PCI和PCI-E设备的用户模式驱动程序开发(即使使用托管代码)。