【问题标题】:Using C++ in virtual PBDA driver: what are the limitations?在虚拟 PBDA 驱动程序中使用 C++:有什么限制?
【发布时间】:2011-07-13 15:16:12
【问题描述】:

我计划将现有的 C++ 项目(提供传输流数据)集成到 Windows7 下的虚拟 DVB 驱动程序中。明显的起点似乎是来自 Microsoft WDK(版本 7600.16385.1)的 SW Tuner 示例。微软提供的这个示例已经实现了一个虚拟 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++ 异常可用吗? 从我能找到的(例如"Drivers, Exceptions and C++")来看,似乎通常可以使用 C++ 异常(try/throw/catch),因为它们已映射到 SEH,但仍需要一些解决方法?

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

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

【问题讨论】:

    标签: c++ kernel driver wdm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2020-05-03
      • 2015-09-18
      相关资源
      最近更新 更多