C#驱动程序开发?

在我一头扎进C#之前……

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

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

  • 人们是否正在使用C#来开发驱动程序?
  • 你是否需要做很多API挂钩,或者C#是否具备与内核接口的设施而没有太多的hackery?
  • 任何人都可以谈到比通常情况下更接近环0运行C#程序的可靠性和安全性吗?

我希望我的设备可以在C#中使用,如果C#中的驱动程序开发成熟,这显然是要走的路,但如果不推荐,我不想在那里花费很多精力。

  • 开始使用简单的虚拟串口驱动程序有哪些好的资源?

-亚当

您无法在C#中创建内核模式设备驱动程序,因为运行时无法安全地加载到ring0并按预期运行。

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

然而,正在进行的工作是将一些设备驱动程序升级到用户模式,你可以在这里看到UDMF(用户模式驱动程序框架)团队的Peter Wieland的采访。

用户模式驱动程序将更适合托管工作,但您必须谷歌一点,以了解是否将直接支持C#和.NET。 我所知道的只是C#中的内核级驱动程序不可行。

但是,如果您必须在C#中编写大量代码,则可以创建C / C ++驱动程序和C#服务(或类似)并让驱动程序与托管代码通信。

这将在某种程度上帮助您: Windows驱动程序工具包

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

任何人都可以谈到比通常情况下更接近环0运行C#程序的可靠性和安全性吗?

C#在.NET虚拟机中运行,您无法将其移动到比VM更接近Ring 0,并且VM在用户空间中运行。

微软在拥有托管代码操作系统方面有许多研究项目,换句话说就是使用Win32 API进行杀戮。

请参阅Mary Jo Foley的文章: 重建遗产

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

<投机>
有传言称MS正在投入大量资金将Singularity提升到新的水平。 只是寻找Midori 。 但这是2015年以上

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

如果我没记错的话, Dokan项目是一个用户模式文件系统驱动程序,它还允许.NET代码由系统驱动程序执行: https : //github.com/dokan-dev/dokan-dotnet 。

因此,您可以开发一个C#“驱动程序”(实际上是用户模式应用程序),然后由C ++内核模式驱动程序调用/调用。 内核驱动程序可以简单地传递所有内容而无需操作数据并充当简单的包装器。
不用说,它是非常不安全的,你最有可能以BSOD结束(我试过)。


温和相关:

Cosmos项目是一个开源操作系统,使用C#开发并运行
“(内核)驱动程序”和完全用C#/ F#/ VB.NET /编写的用户级应用程序

虽然这些是技术上的内核级驱动程序,但操作系统不再是Windows而是你自己的,所以我猜这不是一个正确的答案……