2017-01-24 67 views
-3

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

正如你所看到的,我不是那些接近先进的专业水平的人。忽略这一点,开始我的冒险编写驱动程序来监视 - 并进一步操纵网络来引入节流是一个好开始。

任何帮助,指南或信息,可能会有所帮助,总是赞赏。 PS:我不确定这是否(如前面对我的上一个问题的评论中所述)在Stack Overflow上回答太宽泛的问题。如果是这样,我会去哪里问这个问题?

+1

这看起来太宽泛了(与教程/指南问题题外话)给我。你可以去一个更传统的论坛,试着找一位导师/导师,或者如果是我,可以根据你已经找到的东西开始写点东西,然后在这里问一些关于它的具体问题。 – BradleyDotNET

+0

我在哪里可以找到这样的导师/导师,尽管@BradleyDotNET。有没有我可以注册的表单?而且我发现了一些我不了解的东西,因此我把它包括在内。尽管如果我从此开始,它可能会更好。 – Farcrada

+0

Pluralsight有一个导师/帮助程序,我确定还有其他人。 Vilx的建议是我至少会从头开始的道路。 – BradleyDotNET

回答

2

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

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

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

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

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

学习一点程序集也许很有用(尽管不是必需的)。

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

并且还...读取this