Home

Awesome

Universal C++ RunTime (UCXXRT)

Actions Status LICENSE Windows Visual Studio nuget

<br /> ----

Musa.Runtime is available, ucxxrt is no longer providing support!!!

Musa.Runtime is the implementation of the new architecture of ucxxrt.

Fewer changes, more features and standard libraries support.


<br />

UserMode support has been removed since March 29th, 2022. The final version known to support UserMode is e2f159f8f. Please use VC-LTL5 instead in UserMode.

1. About

ucxxrt is an open source runtime library based on MSVC. The highlight of this project is its usability in kernel-mode drivers, and it provides you nearly the same experience as developing user-mode applications in C++.

Before ucxxrt was born, in order to use C++ STL in kernel-mode drivers, users have to craft their own template libraries (eg. KTL, ustd, ...). There are still several problems. Like it does not support C++ exceptions, and mainly, it costs very much time to implement new language features when C++ ISO standard updates.

Then ucxxrt was born.

1.1 How ucxxrt works

1.2 Features

List of currently unsupported features ↓

1.3 Example

See project unittest for more information.

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());
    }
}

2. How to use

First, rename DriverEntry to DriverMain.

2.1 Method 1 (recommended)

Right click on the project, select "Manage NuGet Packages". Search for ucxxrt, choose the version that suits you, and then click "Install".

nuget

2.2 Method 2

  1. Download the latest package from Releases and unzip it.

  2. Add the property sheet ucxxrt.props to your project.

usage

3. How to build

IDE:Visual Studio 2022 latest version

and Windows SDK

and Windows Driver Kits

4. Acknowledgements

Thanks to JetBrains for providing free licenses such as Resharper C++ for my open-source projects.

<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/ReSharperCPP_icon.png" alt="ReSharper C++ logo." width=200>

5. References

Great thanks to these excellent projects. Without their existence, there would be no ucxxrt then.

6. List of currently unsupported features