为Windows编写驱动程序

时间:2017-01-24 22:52:17

标签: c++ windows networking driver

我最近问过the question是否可以通过C#WinForms应用程序限制带宽,就像NetLimiter和NetBalancer一样。我被告知有两种方法可以做到这一点。通过适当的QoS或写一些" NDIS Network Filter Driver"的内容。使用QoS并不是我想要的方式。因此,我查找了编写驱动程序所需的一些内容,并发现了一些有趣的观点。诸如对C / C ++的良好理解之类的要点,因为执行的代码非常容易出现BSOD,因为它可以在称为"内核模式"的东西中运行。我还找到了一个GitHub" dump"看起来很有趣,诱惑我调查并环顾四周。

正如你所看到的那样,我没有足够先进的地方在专业水平上钻研这个。忽略这一点,开始冒险编写驱动程序以进行监控是一个良好的开端 - 并且进一步操作网络以引入限制。

任何可能有帮助的帮助,指南或信息都会受到赞赏。

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

1 个答案:

答案 0 :(得分:3)

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

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

如果您需要工作并且有最后期限 - 请忘掉它。找到已经知道这些东西的其他人。或者可能有一个库满足了需求。任何这些选项都比你学习所有这些东西的时间便宜。

如果这是为了你自己的好奇心 - 那就去吧!我建议先开始学习C语言。不是C ++,这更复杂,对于驱动程序来说,无论如何C都会更容易。但你也可以稍后拿起C ++,这是件好事。 C ++ 主要与C兼容,因此您可以从C开始,然后继续使用C ++。

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

学习一些装配可能也很有用(尽管不是必需的)。

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

并且......阅读this