2011-03-11 2 views
1

Je prévois d'intégrer un projet C++ existant (qui fournit des données de flux de transport) dans un pilote DVB virtuel sous Windows7. Le point de départ évident semble être l'exemple SW Tuner de Microsoft WDK (version 7600.16385.1). Cet exemple fourni par Microsoft implémente déjà un pilote PBDA virtuel qui lit les données de flux de transport à partir de fichiers locaux. Maintenant, ma question est: Quelles sont les fonctionnalités de C++ sont (ou ne sont pas) disponibles dans un pilote de noyau?Utilisation de C++ dans un pilote PBDA virtuel: quelles sont les limites?

J'ai lu la page Microsoft "C++ for Kernel Mode Drivers: Pros and Cons", et il semble généralement possible d'utiliser C++ de base dans les pilotes du noyau? Bien qu'il soit compréhensible que Microsoft ne donne pas de garanties très précises, le texte m'a laissé un peu perplexe quant à ce qui était réellement possible en utilisant C++ il y a trois ans, ou même aujourd'hui.

Est-ce que STL peut être utilisé dans les pilotes de noyau? (En regardant le WDK: Il y a des drapeaux comme "USE_STL" ou "STL_VER", et deux répertoires STL60 et STL70 dans le chemin WDK.Les fils de discussion que je pourrais trouver étaient quelque peu peu concluants.J'ai réussi à obtenir l'exemple SWTuner avec "USE_STL = 1", mais n'a pas encore fait de tests sur ce point.). Les conteneurs STL peuvent-ils être utilisés pour gérer la mémoire dans un pilote de noyau?

Des exceptions C++ sont-elles disponibles? D'après ce que j'ai pu trouver (c'est-à-dire "Drivers, Exceptions and C++"), il semble généralement possible d'utiliser des exceptions C++ (try/throw/catch) car elles sont mappées à SEH, mais nécessitent encore quelques manipulations de contournement?

Le code multi-threading fonctionnerait-il dans l'espace noyau? La décision de conception générale que j'essaye de faire en tant que débutant de pilote est: Serait-il plus faisable d'intégrer le projet C++ dans l'échantillon existant (ce qui permettrait d'économiser beaucoup de tracas avec les interfaces, mais est livré avec le " C++ dans le pilote du noyau "baggage", ou serait-il plus prudent d'encapsuler le projet C++ dans une application, qui communique alors avec le pilote virtuel via des interfaces qui devront encore être ajoutées.

Répondre

0

J'ai fait un pilote d'imprimante virtuelle en utilisant le DDK (les versions plus récentes sont appelées DDK au lieu de WDK je pense), et je n'ai eu aucun problème en utilisant STL.

Questions connexes