Giter Club home page Giter Club logo

ucxxrt's Introduction

Actions Status LICENSE Windows Visual Studio nuget

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

  • When developing kernel-mode drivers, kernel-mode flag is disabled by using property sheets, forcibly making the compiler support C++ exceptions. Exception flag(/EHsc) is also enabled.

  • Implements exception functions like throw, catch. Simulates the exception dispatcher in throw and handles the exception in callback functions.

1.2 Features

  • support x86, x64, ARM(experimental), ARM64(experimental).
  • support new/delete operators.
  • support C++ exception (/EHa, /EHsc).
  • support SAFESEH、GS (Buffer Security Check).
  • support STL (not fully).
  • support static objects.

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

  • git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git

  • Open ucxxrt.sln and build.

  • For clang-cl or llvm-msvc, you will have to add -march=native in the compiler flags.

4. Acknowledgements

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

ReSharper C++ logo.

5. References

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

6. List of currently unsupported features

  • Thread Local Storage (TLS): thread_local、TlsAlloc ...
  • std::filesystem
  • std::chrono
  • std::stacktrace_entry
  • std::locale
  • std::stream (std::fstream、std::iostream、std::cin、std::cout、std::cerr)
  • std::future
  • std::latch
  • std::semaphore (std::counting_semaphore、std::binary_semaphore)
  • ...

ucxxrt's People

Contributors

hzqst avatar luciouskami avatar mirokaku avatar ranni0225 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.