Использование C ++ в виртуальном драйвере PBDA: каковы ограничения? - PullRequest
1 голос
/ 11 марта 2011

Я планирую интегрировать существующий проект C ++ (который предоставляет данные транспортного потока) в виртуальный драйвер DVB под Windows7. Очевидной отправной точкой является образец SW Tuner от Microsoft WDK (версия 7600.16385.1). Этот образец, предоставленный Microsoft, уже реализует виртуальный драйвер PBDA, который считывает данные транспортного потока из локальных файлов.

Теперь мой вопрос: какие функции C ++ доступны (или нет) в драйвере ядра?

Я прочитал страницу Microsoft «C ++ для драйверов режима ядра: плюсы и минусы» , и кажется ли вообще возможным использовать базовый C ++ в драйверах ядра? Понятно, что Microsoft не дает очень точных гарантий, но текст оставил меня несколько озадаченным из-за того, что на самом деле было возможно с использованием C ++ три года назад или даже сегодня.

Можно ли использовать STL в драйверах ядра? (Из взгляда на WDK: в пути WDK есть флаги типа «USE_STL» или «STL_VER» и два каталога STL60 и STL70. Потоки обсуждений, которые я мог найти, были несколько неубедительными. Мне удалось получить образец SWTuner для сборки с помощью "USE_STL = 1", но дальнейших тестов пока не проводилось.). Можно ли использовать контейнеры STL для управления памятью в драйвере ядра?

Доступны ли исключения C ++? Из того, что я смог найти (например, в «Драйверы, исключения и C ++» ), представляется возможным использовать исключения C ++ (try / throw / catch), поскольку они отображаются в SEH, но все еще требуют немного возиться с обходными путями?

Будет ли многопоточный код работать в пространстве ядра?

Общее дизайнерское решение, которое я пытаюсь принять как новичка в драйвере: будет ли более целесообразным интегрировать проект C ++ в существующий образец (который избавит от многих хлопот с интерфейсами, но поставляется с "C ++" в драйвере ядра «багаж», или было бы более разумно инкапсулировать проект C ++ в приложение, которое затем связывается с виртуальным драйвером через интерфейсы, которые еще должны быть добавлены.

1 Ответ

0 голосов
/ 11 марта 2011

Я сделал драйвер виртуального принтера с использованием DDK (более новые версии называются DDK вместо WDK, я думаю), и у меня не было проблем с использованием STL.

...