在我一头扎进C#之前...
我一直觉得C或者C ++最适合在Windows上开发驱动程序。我并不热衷于在.NET机器上开发驱动程序。
但.NET似乎是MS推动应用程序开发的方式,所以我现在想知道:
我希望我的设备可以在C#中使用,如果C#中的驱动程序开发成熟,这显然是要走的路,但如果不推荐,我不想在那里花费很多精力。
- 亚当
答案 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 +年
< /猜测>