我计划将现有的 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++ 项目封装在应用程序中更谨慎,然后通过尚未添加的接口与虚拟驱动程序进行通信。