C#驱动程序开发?

时间:2008-09-16 19:14:49

标签: c# kernel drivers device

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

我一直觉得C或者C ++最适合在Windows上开发驱动程序。我并不热衷于在.NET机器上开发驱动程序。

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

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

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

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

- 亚当

7 个答案:

答案 0 :(得分:25)

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

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

目前正在开展工作,将一些设备驱动程序升级到用户模式,您可以看到与UDMF(用户模式驱动程序框架)团队的Peter Wieland进行的访谈here

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

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

答案 1 :(得分:4)

这将以某种方式帮助您:Windows Driver Kit

答案 2 :(得分:3)

这不是您问题的直接答案,但如果您感兴趣,可以查看Singularity project

答案 3 :(得分:2)

  

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

C#在.NET虚拟机中运行,你不能将它移动到比VM更接近Ring 0,并且VM在用户空间中运行。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

Microsoft拥有托管代码操作系统领域的许多研究项目,换句话说就是使用Win32 API进行杀戮。

参见Mary Jo Foley的文章:Rebuilding a Legacy

答案 6 :(得分:1)

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

<投机>
有传言称MS正在投入大量资金将Singularity提升到新的水平。只需查看Midori即可。但那是2015 +年 < /猜测>