既存の C++ プロジェクト (トランスポート ストリーム データを提供する) を Windows7 の仮想 DVB ドライバーに統合する予定です。明らかな出発点は、Microsoft WDK (バージョン 7600.16385.1) の SW Tuner サンプルのようです。Microsoft が提供するこのサンプルは、ローカル ファイルからトランスポート ストリーム データを読み取る仮想 PBDA ドライバーを既に実装しています。
私の質問は次のとおりです。カーネル ドライバーで使用できる (または使用できない) C++ の機能は何ですか?
Microsoft のページ"C++ for Kernel Mode Drivers: Pros and Cons"を読みましたが、基本的な C++ をカーネル ドライバーで使用することは一般的に可能ですか? Microsoft が正確な保証を提供していないことは理解できますが、3 年前、または現在でも、C++ を使用して実際に何が可能であったかについて、このテキストを読んで少し当惑しました。
STL はカーネル ドライバーで使用できますか? (WDK を見ると、"USE_STL" や "STL_VER" などのフラグと、WDK パスに STL60 と STL70 の 2 つのディレクトリがあります。ディスカッション スレッドは、やや不確実な場所で見つけることができました。SWTuner サンプルをビルドすることができました。 「USE_STL=1」ですが、それ以上のテストはまだ行っていません。) STL コンテナを使用してカーネル ドライバのメモリを管理できますか?
C++ 例外は利用できますか? 私が見つけたもの (fe at "Drivers, Exceptions and C++" ) から、C++ 例外 (try/throw/catch) は SEH にマップされているため、一般的に使用できるようですが、それでも回避策をいじる必要がありますか?
マルチスレッド コードはカーネル空間で動作しますか?
ドライバーの初心者として私が行おうとしている一般的な設計上の決定は次のとおりです。C++ プロジェクトを既存のサンプルに統合する方が実現可能でしょうか (これにより、インターフェイスに関する多くの手間が省けますが、"C++ in kernel driver" が付属しています)。または、C++ プロジェクトをアプリケーションにカプセル化し、まだ追加する必要があるインターフェイスを介して仮想ドライバーと通信する方が賢明でしょうか。