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

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

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

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

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

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

-亚当

===============>>#1 票数:25 已采纳

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

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

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

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

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

===============>>#2 票数:4

这将对您有所帮助: Windows Driver Kit

===============>>#3 票数:3

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

===============>>#4 票数:2

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

===============>>#5 票数:2

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

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

===============>>#6 票数:1

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

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


温和相关:

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

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

===============>>#7 票数:1

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

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

===============>>#8 票数:1

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

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

  ask by Adam Davis translate from so

未解决问题?本站智能推荐:

1回复

如何练习编写真正的Linux设备驱动程序?

我是一名中级程序员,在Linux内核编程方面有着不错的经验。 在我的实习期间,我主要参与调试内核和驱动程序代码。 我最近完成了Robert Love的内核开发研究。 我在Jonathan Corbet的Linux设备驱动程序书的中途。 但我现在面临一个令人不安的问题。 这些书都没有教会
1回复

设备驱动程序充当虚拟网络摄像头

我正在寻找编写虚拟相机驱动程序。 有人有主意吗? 任何有帮助的书或任何链接。 添加更多详细信息:我已经开发了一种设备驱动程序,可以将图像保存到磁盘,并且显示器使用该设备驱动程序来显示图像。 性能似乎不佳。 FNS。 我使用的是://捕获GetDesktopWindow()Cre
1回复

在C#中列出磁盘驱动器及其驱动程序

谁能建议如何列出以下内容,最好在.net列出? 我可以使用以下方法获得有关连接到计算机的驱动器的一些相当基本的信息: 我可以使用WMI获得更多信息,但无法获得与每个驱动器关联的设备驱动程序: 我可以使用Win.OBJECT_DIRECTORY_INFORMATION列出设
3回复

开发没有信息的驱动程序

开源/免费软件社区如何为不提供文档的产品开发驱动程序?
1回复

使用setupapi备份驱动程序

我被卡住了。 简而言之,任务是枚举所有驱动程序文件以进行备份。 对于像显示适配器驱动程序这样的驱动程序,我使 从setupapi可以正常工作,就像在DumpDeviceDriversCallback中一样,我可以获取设备驱动程序文件的Source,然后将其一一复制到备份位置。
2回复

设备驱动程序和中断服务程序

一个非常基本的问题。 我了解到设备驱动程序和中断服务程序只是一些程序或代码。 只要有需要,他们就可以执行。 执行意味着CPU正在执行其指令集ISA之外的一些指令。 那么它是否意味着设备驱动程序和ISR也是生成所需结果的机器指令? 究竟是什么类似的程序喜欢设备驱动程序和中断例程组成的
1回复

虚拟操纵杆驱动程序(VJoyD)和直接输入

我有几个问题: VJoyD用于什么? 基于我的阅读胜利WDK(Windows驱动程序工具包),它在Windows中提供了操纵杆服务(http://msdn.microsoft.com/en-us/library/ff542258(v=vs.85).aspx)。 如果是这种情况,我可
1回复

保持微控制器外设驱动程序独立

这是我一直在问自己一段时间的问题。 我试过找到关于这个的好读物,但我似乎找不到适合我认为应该如何的解决方案。 我认为,出于便携性和维护原因,驾驶员最好不要相互依赖。 但是,有时一个驱动程序可能需要其他驱动程序提供的功能。 例如,I²C总线的超时可能取决于定时器驱动程序。 直到现
1回复

Windows驱动程序-与用户进程进行通信

我已经在Qt中编写了一个应用程序,在Windows下与自定义USB设备(不属于任何类-需要为其编写自定义驱动程序)进行通信的最佳方法是什么。 在Linux中,我可以与/ dev或/ sys文件系统中的用户空间共享数据。 Windows中有哪些等效替代方案?
1回复

定制设备的USB用户空间设备驱动程序

什么是“用于自定义设备的USB用户空间设备驱动程序”?