1

我计划将现有的 C++ 项目(提供传输流数据)集成到 Windows7 下的虚拟 DVB 驱动程序中。明显的起点似乎是来自 Microsoft WDK(版本 7600.16385.1)的 SW Tuner 示例。Microsoft 提供的这个示例已经实现了一个虚拟 PBDA 驱动程序,该驱动程序从本地文件中读取传输流数据。

现在我的问题是:内核驱动程序中提供(或不提供)C++ 的哪些功能?

我已经阅读了 Microsoft 页面“C++ for Kernel Mode Drivers: Pros and Cons”,并且似乎通常可以在内核驱动程序中使用基本的 C++?虽然微软没有给出非常精确的保证是可以理解的,但这段文字让我对三年前甚至今天使用 C++ 实际可能发生的事情感到有些困惑。

STL 可以在内核驱动程序中使用吗?(通过查看 WDK:有像“USE_STL”或“STL_VER”这样的标志,以及 WDK 路径中有两个目录 STL60 和 STL70。我可以找到的讨论线程有些不确定。我设法让 SWTuner 示例构建“USE_STL=1”,但还没有做任何进一步的测试。)。STL 容器可以用于管理内核驱动程序中的内存吗?

C++ 异常可用吗?从我能找到的(fe at "Drivers, Exceptions and C++")看来,通常可以使用 C++ 异常(try/throw/catch),因为它们被映射到 SEH,但仍然需要一些解决方法?

多线程代码可以在内核空间中工作吗?

作为驱动程序新手,我尝试做出的一般设计决定是:将 C++ 项目集成到现有示例中是否更可行(这将节省接口的很多麻烦,但带有“内核驱动程序中的 C++” ” 包袱),还是将 C++ 项目封装在应用程序中更谨慎,然后通过尚未添加的接口与虚拟驱动程序进行通信。

4

1 回答 1

0

我使用 DDK 制作了一个虚拟打印机驱动程序(我认为较新的版本称为 DDK 而不是 WDK),并且使用 STL 没有问题。

于 2011-03-11T16:50:08.423 回答