การสนับสนุน USERMODE ได้ถูกลบออกตั้งแต่วันที่ 29 มีนาคม 2565 รุ่นสุดท้ายที่รู้จักกันดีในการสนับสนุน USERMODE คือ E2F159F8F โปรดใช้ VC-LTL5 แทนใน USERMODE
ucxxrt เป็นไลบรารีโอเพ่นซอร์สรันไทม์ตาม MSVC ไฮไลต์ของโครงการนี้คือการใช้งานใน ไดรเวอร์โหมดเคอร์เนล และมอบประสบการณ์เกือบเดียวกับคุณในการพัฒนาแอปพลิเคชันโหมดผู้ใช้ใน C ++
ก่อนที่ ucxxrt จะเกิดเพื่อใช้ C ++ STL ในไดรเวอร์โหมดเคอร์เนลผู้ใช้จะต้องสร้างไลบรารีเทมเพลตของตัวเอง (เช่น KTL, USTD, ... ) ยังมีปัญหาหลายอย่าง เช่นเดียวกับที่ไม่รองรับข้อยกเว้น C ++ และส่วนใหญ่ใช้เวลามากในการใช้คุณสมบัติภาษาใหม่เมื่อการอัปเดตมาตรฐาน C ++ ISO
จากนั้น ucxxrt ก็เกิด
ucxxrt เมื่อพัฒนาไดรเวอร์โหมดเคอร์เนลค่าสถานะเคอร์เนลโหมดจะถูกปิดใช้งานโดยใช้แผ่นคุณสมบัติโดยใช้การสนับสนุนคอมไพเลอร์ข้อยกเว้น C ++ Flag Exception ( /EHsc ) ยังเปิดใช้งาน
ใช้ฟังก์ชั่นข้อยกเว้นเช่น throw catch จำลองการแจกจ่ายข้อยกเว้นใน throw และจัดการข้อยกเว้นในฟังก์ชั่นการโทรกลับ
รายการคุณสมบัติที่ไม่ได้รับการสนับสนุนในปัจจุบัน↓
ดู Project 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 ());
}
} ก่อนอื่นให้เปลี่ยนชื่อ DriverEntry เป็น DriverMain
คลิกขวาที่โครงการเลือก "จัดการแพ็คเกจ NuGet" ค้นหา ucxxrt เลือกรุ่นที่เหมาะสมกับคุณแล้วคลิก "ติดตั้ง"
ดาวน์โหลดแพ็คเกจล่าสุดจากรีลีสและคลายซิป
เพิ่มแผ่นคุณสมบัติ ucxxrt.props ลงในโครงการของคุณ
IDE: Visual Studio 2022 เวอร์ชันล่าสุด
และ Windows SDK
และชุดไดรเวอร์ Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
เปิด ucxxrt.sln แล้วสร้าง
สำหรับ Clang-CL หรือ LLVM-MSVC คุณจะต้องเพิ่ม -march=native ในธงคอมไพเลอร์
ขอบคุณ Jetbrains ที่ให้ใบอนุญาตฟรีเช่น Resharper C ++ สำหรับโครงการโอเพ่นซอร์สของฉัน
ขอขอบคุณโครงการที่ยอดเยี่ยมเหล่านี้ หากไม่มีการดำรงอยู่ของพวกเขาจะไม่มี
ucxxrtแล้ว