C++ 异常处理在 Windows 驱动中的开源解决方案介绍
vcrtl C++ Exceptions in Windows Drivers 项目地址: https://gitcode.com/gh_mirrors/vc/vcrtl
该项目是一个开源项目,旨在为 Windows 内核模式驱动程序提供 C++ 异常处理的支持。它实现了 Visual Studio 运行时库中处理 C++ 异常所需的部分功能。目前,该项目支持 x86 和 x64 平台。项目的主要编程语言是 C++,同时包含少量的汇编语言和 CMake 配置文件。
以下是新手在使用这个项目时可能会遇到的三个常见问题及其详细解决步骤:
问题一:如何在驱动项目中集成该异常处理库?
解决步骤:
- 首先从项目的 GitHub 页面下载预编译的二进制文件。
- 然后,将
vcrtl_driver.props
文件添加到你的驱动项目中。 - 在项目配置中,确保启用了 C++ 异常处理。
问题二:如何确保异常不会离开抛出异常的模块?
解决步骤:
- 确保所有的异常处理都在抛出异常的同一个模块内部完成。
- 不要让任何 SEH 异常通过包含 C++ 异常处理的函数帧,这包括
try/catch
块、标记为noexcept
的函数,或者包含非平凡析构函数的自动变量的函数。 - 如果违反上述规则,系统会检测到并触发蓝屏错误。
问题三:如何减少异常处理时的栈空间使用?
解决步骤:
- 项目的异常处理代码已经优化,以显著减少所需的栈空间。
- 在 x86 平台上,栈空间的使用几乎可以忽略不计。
- 在 x64 平台上,异常处理期间大约需要 300 字节的栈空间,但在调用
catch
处理程序之前,这些空间会被回收。
请注意,虽然 /GS
功能被支持,但框架cookie尚未被检查。在使用该库时,需要特别注意这一点。
vcrtl C++ Exceptions in Windows Drivers 项目地址: https://gitcode.com/gh_mirrors/vc/vcrtl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考