为 Windows 编写驱动程序

Writing drivers for Windows

我最近问了 the question if I could limit bandwidth via a C# WinForms applications much like NetLimiter and NetBalancer. I was told that there's two ways to do this. Either via proper QoS or writing something along the lines of an "NDIS Network Filter Driver". Using QoS isn't the way I want to take. So I've looked up some of the stuff required to write drivers and found some interesting points. Points such as a good understanding of C/C++, because the executed code being very prone to BSODs since it could be run in something called "Kernel mode". I also found a GitHub "dump”,这看起来很有趣,并且诱使我进行调查并四处看看。

如您所见,我还没有达到专业水平来深入研究这个问题。忽略这一点,开始我的冒险之旅以编写要监视的驱动程序并进一步操纵网络以引入节流将是一个好的开始。

任何可能有帮助的帮助、指南或信息都将不胜感激。

PS:我不确定这是否(如前文对我之前问题的评论中所述)过于宽泛,无法在 Stack Overflow 上回答。如果是这样,我去哪里问这个?

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

这让我们想到了 为什么 你想要这样做的问题。

如果您需要它来工作并且有截止日期 - 算了吧。找一个已经知道这些东西的人。或者那里可能有一个图书馆可以满足需要。这些选项中的任何一个都比您花时间学习所有这些东西要便宜。

但是,如果这是出于您自己的好奇心,那就去吧!我建议先开始学习 C。不是 C++,它更复杂,而且对于驱动程序来说,无论如何使用 C 会更容易。但是你也可以稍后再学习 C++,这是个好东西。 C++ 大部分 与 C 兼容,因此您可以从 C 开始,然后继续使用 C++。

同时,获得一本关于 OS 设计的好书。不是因为你想设计一个 OS,而是为了理解它所基于的基本概念。您应该对内核 Mode/User 模式、虚拟内存、中断、进程调度等内容有很好的了解

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

最后,当您觉得自己已经很好地掌握了上述内容时,请转到 MSDN 并开始阅读有关驱动程序开发的内容。将有很长的文章和示例程序来帮助您入门。调整它们并在虚拟机中试用,直到获得所需的内容。

还有...阅读this