使用简单的c ++进行内核模式编程?

dev*_*roy 11 c++ windows kernel wdk

我即将钻研核心土地.我的问题与编程语言有关.我已经看到大多数教程都是用C语言编写的.我目前用C++和Assembly编程.我在C++之前也学过C,但是我没有经常使用它.是否可以使用简单的C++在内核模式下编程而无需使用任何高级构造?基本上我试图避免两种语言之间存在的微小差异(比如boolC中没有,没有自动返回0 main,真正的微小差异).我不会使用模板,类等.那么可以使用简单的C++在内核模式下编程而不会有任何重大烦恼吗?

Thi*_*tti 18

即使没有得到官方支持,您也可以使用C++作为Windows内核开发的开发语言.您应该了解以下事项:

  • 你必须定义new和delete运算符以映射到ExAllocatePoolWithTag和ExFreePool.

  • 尽量避免使用虚函数.似乎无法控制对象的vtable的位置,如果它位于可分页部分并且您使用IRQL> = DISPATCH_LEVEL调用代码,则可能会产生意外结果.

  • 如果在IRQL> = DISPATCH_LEVEL上使用之前仍需要使用虚拟方法表而不是锁定.rdata段.

除了这些限制之外,您还可以使用C++进行驱动程序开发.

  • @ThierryFranzetti在WDK 8中,可以在类级别进行分页控制,从而确保vtable的位置.另一件值得一提的是不使用异常. (3认同)
  • 使用C++作为更好的C将正常工作.当编译器生成代码时会出现复杂情况 - 包括模板,vtable和默认构造函数以及标量删除存根等内容.您无法控制C++编译器决定将这些部分发送到您的可执行文件中的哪一部分,这意味着它们可以在需要它们的代码不可分页时进行分页.这可能会导致一些严重的问题.如果你小心,你可以避免这种情况. (2认同)