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

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

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

  • 人们正在使用 C# 来开发驱动程序吗?
  • 您是否必须执行大量 API 挂钩,或者 C# 是否具有与内核交互的设施,而无需进行大量黑客操作?
  • 谁能谈谈在比通常情况更接近 Ring 0 的位置运行 C# 程序的可靠性和安全性吗?

我希望我的设备可以在 C# 中使用,如果 C# 中的驱动程序开发成熟,这显然是可行的方法,但如果不推荐的话,我不想在那里花费大量精力。

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

-亚当

有帮助吗?

解决方案

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

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

不过,正在进行的工作是将某些设备驱动程序提升到用户模式,您可以看到采访 这里 与 UDMF(用户模式驱动程序框架)团队的 Peter Wieland 合作。

用户模式驱动程序更适合托管工作,但您必须在 google 上搜索一下以了解是否直接支持 C# 和 .NET。我所知道的是内核级驱动程序不能仅在 C# 中实现。

但是,如果您绝对必须用 C# 编写大量代码,那么您可以制作一个 C/C++ 驱动程序和一个 C# 服务(或类似服务),并让驱动程序与托管代码对话。

其他提示

这将以某种方式帮助您: Windows 驱动程序套件

这不是您问题的直接答案,但如果您有兴趣,可以看看 奇点项目.

谁能谈谈在比通常情况更接近 Ring 0 的位置运行 C# 程序的可靠性和安全性吗?

C# 在 .NET 虚拟机中运行,您不能将其移至比 VM 更靠近 Ring 0 的位置,并且 VM 在用户空间中运行。

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

微软在托管代码操作系统领域有许多研究项目,换句话说,用 Win32 API 进行杀戮。

请参阅玛丽·乔·福利的文章: 重建遗产

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

<推测>
有传言称微软正在投入大量资金来将奇点提升到一个新的水平。只要寻找 绿. 。但这是2015年以后的事了
</推测>

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

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


轻度相关:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top