Die Unterstützung der UsMode -Unterstützung wurde seit dem 29. März 2022 entfernt. Die endgültige Version, von der bekannt ist, dass sie UsMode unterstützt, lautet E2F159F8F. Bitte verwenden Sie VC-LTL5 stattdessen in Usmode.
ucxxrt ist eine Open -Source -Laufzeitbibliothek basierend auf MSVC. Der Höhepunkt dieses Projekts ist die Verwendbarkeit in Kernel-Mode-Treibern und bietet Ihnen nahezu die gleiche Erfahrung wie die Entwicklung von Benutzer-Mode-Anwendungen in C ++.
Bevor ucxxrt geboren wurde, müssen Benutzer ihre eigenen Vorlagenbibliotheken herstellen (z. B. KTL, Ustd, ...), um C ++ STL in Kernel-Mode-Treibern zu verwenden. Es gibt noch einige Probleme. So wie es keine C ++ - Ausnahmen unterstützt, kostet es hauptsächlich viel Zeit, um neue Sprachfunktionen zu implementieren, wenn C ++ ISO -Standard -Aktualisierungen.
Dann wurde ucxxrt geboren.
ucxxrt funktioniert Bei der Entwicklung von Kernel-Mode-Treibern wird das Kernel-Mode-Flag unter Verwendung von Eigenschaftsblättern deaktiviert, wodurch die Compiler-Unterstützung C ++ -Annahmen zwangsweise unterstützt werden. Ausnahmeflag ( /EHsc ) ist ebenfalls aktiviert.
Implementiert Ausnahmefunktionen wie throw , catch . Simuliert den Ausnahme -Dispatcher in throw und behandelt die Ausnahme in Rückruffunktionen.
Liste der derzeit nicht unterstützten Funktionen ↓
Weitere Informationen finden Sie unter Projekt 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 ());
}
} Benennen Sie zuerst DriverEntry in DriverMain .
Klicken Sie mit der rechten Maustaste auf das Projekt. Wählen Sie "Nuget -Pakete verwalten". Suchen Sie nach ucxxrt , wählen Sie die Version, die zu Ihnen passt, und klicken Sie dann auf "Installieren".
Laden Sie das neueste Paket von Releases herunter und entpacken Sie es.
Fügen Sie das Eigenschaftsblatt ucxxrt.props Ihrem Projekt hinzu.
IDE: Visual Studio 2022 Neueste Version
und Windows SDK
und Windows -Treiber -Kits
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
Öffnen Sie ucxxrt.sln und bauen.
Für Clang-CL oder LLVM-MSVC müssen Sie in den Compiler-Flags -march=native hinzufügen.
Vielen Dank an JetBrains für die Bereitstellung von kostenlosen Lizenzen wie Resharper C ++ für meine Open-Source-Projekte.
Toll Dank an diese hervorragenden Projekte. Ohne ihre Existenz würde es damals kein
ucxxrtgeben.