正在编写Windows驱动程序

Writing drivers for Windows

本文关键字:Windows 驱动程序      更新时间:2023-10-16

我最近问了一个问题,我是否可以通过像NetLimiter和NetBalancer这样的C#WinForms应用程序来限制带宽。有人告诉我有两种方法可以做到这一点。要么通过适当的QoS,要么按照"NDIS网络筛选器驱动程序"的思路编写一些内容。使用QoS不是我想要的方式。所以我查阅了一些编写驱动程序所需的资料,发现了一些有趣的地方。重点是对C/C++有很好的理解,因为执行的代码很容易出现BSOD,因为它可以在所谓的"内核模式"中运行。我还发现了一个GitHub"dump",它看起来很有趣,吸引我在里面调查和四处看看。

正如你所看到的,我还远远不够专业。忽略这一点,这将是一个很好的开始,让我开始写驱动程序来监控,并进一步操纵网络来引入节流。

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

附言:我不确定这是否是一个过于宽泛的问题,无法在Stack Overflow上回答(如前所述)。如果是的话,我会去哪里问这个问题?

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

这就引出了为什么你想这么做的问题。

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

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

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

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

最后,当您觉得已经很好地掌握了以上内容时,请访问MSDN并开始阅读有关驱动程序开发的内容。将会有很长的文章和示例程序让你开始。调整它们并在虚拟机中玩,直到你得到你需要的东西。

而且。。。读这个。