O suporte do Usermode foi removido desde 29 de março de 2022. A versão final conhecida pelo suporte a Usermode é E2F159F8F. Por favor, use o VC-LTL5 no Usermode.
ucxxrt é uma biblioteca de tempo de execução de código aberto com base no MSVC. O destaque deste projeto é sua usabilidade em drivers de modo de kernel e fornece quase a mesma experiência que o desenvolvimento de aplicativos no modo de usuário no C ++.
Antes de nascer ucxxrt , a fim de usar o C ++ STL em drivers de modo de kernel, os usuários precisam criar suas próprias bibliotecas de modelos (por exemplo, ktl, ustd, ...). Ainda existem vários problemas. Como não suporta exceções C ++ e, principalmente, custa muito tempo para implementar novos recursos de idioma quando as atualizações padrão do C ++ ISO.
Então ucxxrt nasceu.
ucxxrt Ao desenvolver drivers de modo de kernel, o sinalizador de modo de kernel é desativado usando folhas de propriedades, fazendo com que o compilador suporta exceções C ++. O sinalizador de exceção ( /EHsc ) também está ativado.
Implementa funções de exceção como throw , catch . Simula o throw de exceção e lida com a exceção nas funções de retorno de chamada.
Lista de recursos atualmente não suportados ↓
Consulte o Project Unittest para obter mais informações.
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 ());
}
} Primeiro, renomeie DriverEntry para DriverMain .
Clique com o botão direito do mouse no projeto, selecione "Gerenciar pacotes Nuget". Pesquise ucxxrt , escolha a versão que combina com você e clique em "Instalar".
Faça o download do pacote mais recente de lançamentos e descompacte -o.
Adicione a folha de propriedades ucxxrt.props ao seu projeto.
IDE: Visual Studio 2022 versão mais recente
e Windows SDK
e kits de driver do Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
Abra ucxxrt.sln e construa.
Para CLANG-CL ou LLVM-MSVC, você precisará adicionar -march=native nos sinalizadores do compilador.
Agradecemos à JetBrains por fornecer licenças gratuitas, como o Resharper C ++, para meus projetos de código aberto.
Muito obrigado a esses excelentes projetos. Sem a existência deles, não haveria
ucxxrtentão.