在虚拟PBDA驱动程序中使用C ++:有哪些限制?

时间:2011-03-11 16:36:09

标签: c++ kernel driver wdm

我计划将现有的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 "Drivers, Exceptions and C++"),似乎通常可以使用C ++异常(try / throw / catch),因为它们被映射到SEH,但是仍然需要一些摆弄变通办法?

多线程代码会在内核空间中运行吗?

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

1 个答案:

答案 0 :(得分:0)

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