Musa.Runtime
0.6.0
Requires NuGet 2.5 or higher.
dotnet add package Musa.Runtime --version 0.6.0
NuGet\Install-Package Musa.Runtime -Version 0.6.0
<PackageReference Include="Musa.Runtime" Version="0.6.0" />
<PackageVersion Include="Musa.Runtime" Version="0.6.0" />
<PackageReference Include="Musa.Runtime" />
paket add Musa.Runtime --version 0.6.0
#r "nuget: Musa.Runtime, 0.6.0"
#:package Musa.Runtime@0.6.0
#addin nuget:?package=Musa.Runtime&version=0.6.0
#tool nuget:?package=Musa.Runtime&version=0.6.0
Musa.Runtime - Universal C++ RunTime Library
Overview
Musa.Runtime is a Microsoft MSVC runtime library adapted for Windows kernel-mode development. Built on Musa.Core, it carries forward the architecture pioneered by ucxxrt.
Core goal: Give kernel developers the same C++ experience that application developers enjoy.
Design highlight: Inspired by Docker's layered filesystem, Musa.Runtime uses an overlay mechanism to selectively replace files on top of the original MSVC SDK source — no fork, no independent copy to maintain. See Architecture for details.
Quick Start
1. Install
NuGet (recommended):
<ItemGroup>
<PackageReference Include="Musa.Runtime">
<Version>0.5.1</Version>
</PackageReference>
</ItemGroup>
Or right-click your project → Manage NuGet Packages → search Musa.Runtime → Install.
Manual import: Download from Releases and unzip:
<PropertyGroup>
<MusaRuntimeOnlyHeader>false</MusaRuntimeOnlyHeader>
</PropertyGroup>
<Import Project="..\Musa.Runtime\config\Musa.Runtime.Config.props" />
<Import Project="..\Musa.Runtime\config\Musa.Runtime.Config.targets" />
2. Rename DriverEntry → DriverMain
Musa.Runtime provides its own DriverEntry (which handles CRT initialization). Your driver entry point must be renamed to DriverMain:
EXTERN_C NTSTATUS DriverMain(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = [](auto obj) { MusaLOG("Unload."); };
// Your code here
return STATUS_SUCCESS;
}
3. Use C++ in Kernel
#include <vector>
#include <string>
#include "kext/kallocator.h"
void Example()
{
std::vector<std::string, kallocator<std::string>> vec;
vec.push_back("hello from kernel");
}
⚠️
kallocatordefaults toPagedPool. When used atDISPATCH_LEVELor above, specifyNonPagedPoolexplicitly.
Features
| Feature | Status | Notes |
|---|---|---|
| x64 | ✅ | Primary platform |
| ARM64 | ⚠️ | Experimental |
| New / Delete | ✅ | Backed by ExAllocatePoolWithTag |
C++ Exception (/EHa, /EHsc) |
✅ | IRQL ≤ APC_LEVEL |
| Static Object Construction | ✅ | Runs at driver load time |
| SAFESEH / GS | ✅ | Buffer security check |
| STL (OneCore / CoreCRT) | ✅ | Full container / algorithm support |
thread_local |
❌ | Compiler-level limitation (fs/gs register access) |
Documentation
| Document | Content |
|---|---|
| 📐 Architecture | Design philosophy (overlay pattern), component architecture, kernel-mode adaptations |
| 📝 Developer Guide | Installation, STL usage, exception handling, kallocator, troubleshooting |
| 🔧 Build System | Project structure, build process, version management, publish pipeline |
| 🔬 Overlay Diff Report | Per-file differential analysis of all overlay files |
Build from Source
> git clone --recurse-submodules https://github.com/MiroKaku/Musa.Runtime.git
> cd Musa.Runtime
> .\BuildAllTargets.cmd
Prerequisites: Visual Studio 2026 (latest) + WDK
References
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| native | native is compatible. |
-
- Musa.Core (>= 0.5.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Upgrade UCRT to 10.0.28000.0, remove 10.0.22621.0