El soporte de USERMode se ha eliminado desde el 29 de marzo de 2022. La versión final que se sabe que admite Usermode es E2F159F8F. Utilice VC-LTL5 en su lugar en Usermode.
ucxxrt es una biblioteca de tiempo de ejecución de código abierto basada en MSVC. Lo más destacado de este proyecto es su usabilidad en los controladores de modo de núcleo , y le proporciona casi la misma experiencia que desarrollar aplicaciones en modo de usuario en C ++.
Antes de que naciera ucxxrt , para usar C ++ STL en los controladores de modo de núcleo, los usuarios tienen que crear sus propias bibliotecas de plantillas (por ejemplo, KTL, USTD, ...). Todavía hay varios problemas. Al igual que no admite las excepciones de C ++, y principalmente, cuesta mucho tiempo implementar nuevas características del idioma cuando C ++ ISO se actualiza.
Entonces nació ucxxrt .
ucxxrt Al desarrollar controladores de modo de núcleo, el indicador de modo de kernel se deshabilita mediante el uso de hojas de propiedades, haciendo que el compilador admita las excepciones de C ++. Exception Flag ( /EHsc ) también está habilitado.
Implementa funciones de excepción como throw , catch . Simula el despachador de excepciones en throw y maneja la excepción en las funciones de devolución de llamada.
Lista de características actualmente no compatibles ↓
Consulte Project Unittest para obtener más información.
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 ());
}
} Primero, cambie el nombre DriverEntry a DriverMain .
Haga clic derecho en el proyecto, seleccione "Administrar paquetes NUGET". Busque ucxxrt , elija la versión que se adapte a usted y luego haga clic en "Instalar".
Descargue el último paquete de los lanzamientos y descompone.
Agregue la hoja de propiedades ucxxrt.props a su proyecto.
IDE: Visual Studio 2022 Última versión
y Windows SDK
y kits de controlador de Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
Abra ucxxrt.sln y construya.
Para CLANG-CL o LLVM-MSVC, deberá agregar -march=native en los indicadores del compilador.
Gracias a JetBrains por proporcionar licencias gratuitas como Resharper C ++ para mis proyectos de código abierto.
Gran gracias a estos excelentes proyectos. Sin su existencia, no habría
ucxxrtentonces.