Usermode 지원은 2022 년 3 월 29 일부터 제거되었습니다. Usermode를 지원하는 것으로 알려진 최종 버전은 E2F159F8F입니다. usermode에서 대신 vc-ltl5를 사용하십시오.
ucxxrt MSVC를 기반으로 한 오픈 소스 런타임 라이브러리입니다. 이 프로젝트의 하이라이트는 커널 모드 드라이버 의 유용성이며 C ++에서 사용자 모드 응용 프로그램을 개발하는 것과 거의 동일한 경험을 제공합니다.
ucxxrt 태어나 기 전에 커널 모드 드라이버에서 C ++ STL을 사용하기 위해 사용자는 자신의 템플릿 라이브러리 (예 : KTL, USTD, ...)를 만들어야합니다. 여전히 몇 가지 문제가 있습니다. C ++ 예외를 지원하지 않으며 주로 C ++ ISO 표준 업데이트 될 때 새로운 언어 기능을 구현하는 데 많은 시간이 걸립니다.
그런 다음 ucxxrt 태어났습니다.
ucxxrt 의 작동 방식 커널 모드 드라이버를 개발할 때는 속성 시트를 사용하여 커널 모드 플래그가 비활성화되어 컴파일러가 C ++ 예외를 강제로 만들 수 있습니다. 예외 플래그 ( /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 추가해야합니다.
오픈 소스 프로젝트에 Resharper C ++와 같은 무료 라이센스를 제공 한 JetBrains에게 감사드립니다.
이 훌륭한 프로젝트 덕분에 좋습니다. 그들의 존재가 없다면, 그때는
ucxxrt없을 것입니다.