Поддержка Usermode была удалена с 29 марта 2022 года. Окончательная версия, известная для поддержки Usermode, - E2F159F8F. Пожалуйста, используйте VC-LTL5 вместо этого в USERMODE.
ucxxrt - это библиотека времени выполнения с открытым исходным кодом на основе MSVC. Основным моментом этого проекта является его удобство использования в драйверах режима ядра , и он предоставляет вам почти тот же опыт, что и разработка приложений пользовательского режима в C ++.
Перед тем, как ucxxrt , чтобы использовать C ++ STL в драйверах режима ядра, пользователи должны создавать свои собственные библиотеки шаблонов (например, KTL, USTD, ...). Есть еще несколько проблем. Как будто он не поддерживает исключения C ++, и, в основном, стоит очень много времени на реализацию новых языковых функций, когда стандартные обновления C ++ ISO.
Затем родился ucxxrt .
ucxxrt При разработке драйверов режима ядра флаг ядра отключается с использованием листов свойств, что насильно заставляет компилятор поддержку C ++ исключениями. Флаг исключения ( /EHsc ) также включен.
Реализует исключения функций, таких как throw , catch . Совместно имитирует диспетчер исключений в throw и обрабатывает исключение в функциях обратного вызова.
Список непревзойденных в настоящее время функций ↓
Смотрите проект Unittest для получения дополнительной информации.
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 ());
}
} Во -первых, переименовать DriverEntry в DriverMain .
Щелкните правой кнопкой мыши проект, выберите «Управление пакетами Nuget». Поиск ucxxrt , выберите версию, которая вам подходит, а затем нажмите «Установить».
Загрузите последний пакет из выпусков и разкачивайте его.
Добавьте лист свойств ucxxrt.props в ваш проект.
IDE : Visual Studio 2022 Последняя версия
и Windows SDK
и наборы для драйверов Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
Откройте ucxxrt.sln и построить.
Для Clang-Cl или LLVM-MSVC вам придется добавить -march=native в флагах компилятора.
Спасибо Jetbrains за предоставление бесплатных лицензий, таких как Resharper C ++ для моих проектов с открытым исходным кодом.
Отлично спасибо этим превосходным проектам. Без их существования не было бы никакого
ucxxrt.