Le support Usermode a été supprimé depuis le 29 mars 2022. La version finale connue pour prendre en charge UserMode est E2F159F8F. Veuillez utiliser VC-LTL5 à la place dans UserMode.
ucxxrt est une bibliothèque d'exécution open source basée sur MSVC. Le point culminant de ce projet est sa convivialité dans les pilotes en mode noyau , et il vous offre presque la même expérience que le développement d'applications en mode utilisateur en C ++.
Avant la naissance ucxxrt , afin d'utiliser C ++ STL dans les pilotes en mode noyau, les utilisateurs doivent créer leurs propres bibliothèques de modèles (par exemple, Ktl, USTD, ...). Il y a encore plusieurs problèmes. Comme il ne prend pas en charge les exceptions C ++, et principalement, il coûte beaucoup de temps pour implémenter de nouvelles fonctionnalités linguistiques lorsque les mises à jour standard ISO C ++.
Ensuite, ucxxrt est né.
ucxxrt Lors du développement de pilotes en mode noyau, l'indicateur en mode noyau est désactivé en utilisant des feuilles de propriété, ce qui rend le compilateur en charge les exceptions C ++. L'indicateur d'exception ( /EHsc ) est également activé.
Implémente les fonctions d'exception comme throw , catch . Simule le répartiteur d'exception dans throw et gère l'exception dans les fonctions de rappel.
Liste des fonctionnalités actuellement non soutenues ↓
Voir Project Unittest pour plus d'informations.
void Test$ThrowUnknow()
{
try
{
try
{
try
{
throw std::wstring ();
}
catch ( int & e)
{
ASSERT ( false );
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: %d n " , e);
}
}
catch (std::string& e)
{
ASSERT ( false );
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: %s n " , e. c_str ());
}
}
catch (...)
{
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: ... n " );
}
}
void Test$HashMap()
{
auto Rand = std::mt19937_64 (:: rand ());
auto Map = std::unordered_map< uint32_t , std::string>();
for ( auto i = 0u ; i < 10 ; ++i)
{
Map[i] = std::to_string ( Rand ());
}
for ( const auto & Item : Map)
{
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
" map[%ld] = %s n " , Item. first , Item. second . c_str ());
}
} Tout d'abord, renommez DriverEntry à DriverMain .
Faites un clic droit sur le projet, sélectionnez "Gérer les packages NuGet". Recherchez ucxxrt , choisissez la version qui vous convient, puis cliquez sur "Installer".
Téléchargez le dernier package à partir des versions et décompressez-la.
Ajoutez la feuille de propriété ucxxrt.props à votre projet.
IDE: Visual Studio 2022 Dernière version
et SDK Windows
et les kits de pilote Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
Ouvrez ucxxrt.sln et construire.
Pour Clang-CL ou LLVM-MSVC, vous devrez ajouter -march=native dans les drapeaux du compilateur.
Merci à JetBrains d'avoir fourni des licences gratuites telles que Resharper C ++ pour mes projets open-source.
Un grand merci à ces excellents projets. Sans leur existence, il n'y aurait alors pas
ucxxrt.