为Windows编写驱动程序

我最近问的问题是否可以像NetLimiter和NetBalancer一样通过C#WinForms应用程序来限制带宽。 我被告知有两种方法可以做到这一点。 通过适当的QoS或写一些“ NDISnetworkingfilter驱动程序 ”的东西。 使用QoS不是我想要的方式。 所以我查了一下编写驱动所需的一些东西,发现了一些有趣的地方。 诸如对C / C ++的很好的理解,因为执行的代码很容易出现BSOD,因为它可以运行在称为“内核模式”的东西上。 我还发现了一个GitHub的“ 转储 ”,看起来很有趣,并诱使我去调查和环顾。

正如你所看到的,我没有接近先进的专业水平。 忽略这一点,开始我的冒险开始编写驱动程序来监视是一个很好的开始 – 并进一步操纵networking来引入节stream。

任何帮助,指导或信息可能会有所帮助,总是赞赏。

PS:我不确定这是否(如前面提到的在我的上一个问题中提到的那样)在堆栈溢出时要回答的问题太广泛了。 如果是的话,我会去哪里问这个?

Solutions Collecting From Web of "为Windows编写驱动程序"

事实上,这太宽泛了。 驾驶员的写作是一件复杂的事情,需要对计算机和操作系统的工作原理有一个很好的理解。 另外,C#(和.NET本身)在内核模式下确实不可用,因此C / C ++是首选方式。 虽然理论上任何非托管语言(如帕斯卡)都可以做,但我还没有听说有人在写驱动程序。 微软自己的开发人员资源也是用C / C ++编写的。

这给我们带来了你为什么要这样做的问题。

如果你需要它的工作,并有一个最后期限 – 忘记它。 找别人谁已经知道这个东西。 或者可能有一个图书馆满足需求。 这些选项中的任何一个都比你学习所有这些东西的时间便宜。

如果这是为了你自己的好奇心 – 去吧! 我建议先开始学C吧。 不是C ++,这是更复杂的,对于驱动程序来说,无论如何,它会更容易。 但是你也可以稍后拿起C ++,这是很好的东西。 C ++ 大多与C兼容,所以你可以从C开始,然后继续C ++。

同时,得到一本关于操作系统设计的好书。 不是因为你想设计一个操作系统,而是为了理解它所基于的基本概念。 你应该很好的理解诸如内核模式/用户模式,虚拟内存,中断,进程调度等等。

学习一些汇编也可能有用(尽管不是必需的)。

最后,当你感觉自己已经掌握了以上的内容时,请转到MSDN并开始阅读驱动程序开发。 将有很长的文章和示例程序,让你开始。 调整他们,并在虚拟机中玩,直到你得到你所需要的。

还…读这个 。