Search code examples
c++windowskernelwdk

Kernel mode programming using simplistic c++?


I am about to delve into kernel land. My question relates to the programming language. I have seen most tutorials to be written in C. I currently program in C++ and Assembly. I also studied C before C++, but I didn't use it a lot. Would it be possible to program in kernel mode using simplistic C++without using any advanced constructs? Basically I am trying to avoid the minor differences that exist between the two languages(like no bool in C, no automatic returning of 0 from main, really minor differences). I won't be using templates, classes and the like. So would it be possible to program in kernel mode using simplistic C++ without any major annoyances?


Solution

  • Even if not officially supported, you can use C++ as the development language for Windows kernel development. You should be aware of the following things :

    • you MUST define the new and delete operator to map to ExAllocatePoolWithTag and ExFreePool.

    • try to avoid virtual functions. It seems not possible to control the location of the vtable of the object and this may have unexpected results if it is in a pageable portion and you code is called with IRQL >= DISPATCH_LEVEL.

    • if you still need to use virtual methods table than lock .rdata segment before using it on IRQL >= DISPATCH_LEVEL.

    Apart from these kinds of limitations, you can use C++ for your driver development.