c++ - 在虚拟 PBDA 驱动程序 : what are the limitations? 中使用 C++

标签 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++?虽然 Microsoft 没有给出非常准确的保证是可以理解的,但文本让我对三年前甚至今天使用 C++ 的实际可能性感到有些困惑。

STL可以用在Kernel Drivers中吗? (通过查看 WDK:有“USE_STL”或“STL_VER”之类的标志,WDK 路径中有两个目录 STL60 和 STL70。我发现讨论主题有些不确定。我设法获得了 SWTuner 示例来构建“USE_STL=1”,但尚未对其进行任何进一步测试。)。 STL 容器可以用于管理内核驱动程序中的内存吗?

C++ 异常可用吗? 据我所知(例如 "Drivers, Exceptions and C++" ),似乎通常可以使用 C++ 异常(try/throw/catch),因为它们映射到 SEH,但仍然需要一些解决方法?

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

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

最佳答案

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

关于c++ - 在虚拟 PBDA 驱动程序 : what are the limitations? 中使用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275640/

相关文章:

c++ - windows中控制台输出流的编码

kernel - 为什么我不能将 perf 事件修饰符与 power/energy-cores/一起使用

linux - CFQ、Deadline 和 NOOP 有什么区别?

ruby - 我的流程发生了什么?

c - PCIE 区域未对齐,且不一致

c++ - 适用于 Apache Cassandra 的 DataStax C/C++ 驱动程序 : Blob Conversion (GCrypt Crypto Key) Issue

windows - 以编程方式安装 NDIS 筛选器驱动程序

c++ - static_cast 如何与虚拟继承一起使用?

c++ - 如何通过级联 QML 在黑莓 10 设备文档目录中创建 XML 文件?

c++ - Emacs、cedet 和 c++/c++11 支持