31

我之前用 C/C++ 编写过,但目前,我需要将其转换为 C#。

谁能告诉我如何用 C# 编写驱动程序的代码/方式?

实际上,目前我用 C++ 编写的旧应用程序存在一些问题,我们必须用 C# 编写 LPT1、COM 打印机和其他 USB 驱动程序的驱动程序。

4

5 回答 5

29

实际上,如果您使用 UMDF,您可以在 C# 中编写一些驱动程序,因为它在用户模式下运行(请参阅UMDF 入门)。但我的建议是使用 C/C++。

于 2009-06-15T07:15:23.760 回答
27

简直不能。C# 生成由虚拟机 (.NET) 解释的中间语言。所有这些东西都在用户模式下运行,而 WDM 驱动程序在内核模式下运行。

有一个 DDK,但 VStudio 也不支持它(但您可以制作一个 makefile 项目进行编译)。

驱动程序开发很复杂,容易出现蓝屏,并且需要对 C、内核结构和内存操作有很好的理解。C# 和 .NET 不需要这些技能,因此培训路径漫长而痛苦。

于 2009-06-16T14:25:28.757 回答
11

您不能在 C# 中编写内核模式驱动程序(运行时在用户模式下执行,因此您无法进入 ring0)。此 SO Q/A 提供了一些您可能会觉得有帮助的链接:

C#驱动程序开发?

于 2009-06-15T05:39:00.637 回答
9

从您的描述中不清楚您是打算开发 Windows 设备驱动程序还是通过现有设备驱动程序与硬件交互。

例如,要与连接到您的串口的设备进行交互,您不需要编写自己的驱动程序,事实上,您可以通过 .NET 的SerialPort类访问它。

甚至 USB 设备也可以通过libusb-win32WinUSB等框架从用户空间(以及最终的托管代码)访问。

于 2009-06-28T14:19:36.937 回答
1

你不能用 C# 编写驱动程序;驱动程序需要以提升的权限运行才能与硬件通信;托管代码不能在适当的环境中运行。

于 2009-06-15T05:38:00.343 回答