为 Windows 编写驱动程序

Far*_*ada -4 c++ windows networking driver

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

正如你所看到的,我还远远不够先进,无法在专业水平上深入研究。忽略这一点,开始我编写驱动程序以进行监控的冒险是一个好的开始 - 并进一步操纵网络以引入节流。

任何可能有帮助的帮助、指南或信息总是受到赞赏。

PS:我不确定这是否(如前面对我上一个问题的评论中提到的)太宽泛而无法在 Stack Overflow 上回答。如果是这样,我要去哪里问这个?

Vil*_*lx- 5

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

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

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

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

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

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

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

还有……阅读这个