Windows驱动程序中的c++

C++ in a Windows Driver

本文关键字:c++ 驱动程序 Windows      更新时间:2023-10-16

我正在编写一个简单的WDM驱动程序,并且我想在其中使用c++类。

我的问题是,我不确定我应该链接编译文件到哪个库文件。链接到msvcrt会创建对ntdll.dll的依赖,这在内核模式下当然不能满足。如果没有链接到msvcrt,就没有new/delete操作符——而且我得到了链接错误。

我如何为我的驱动程序启用c++功能?

显然,实现new/delete操作符就足以解决我的问题(只要我不使用异常和其他c++特性)。

所以我用下面的方式实现了这些运算符,现在一切正常了:

#include <ntddk.h>
void *__cdecl operator new(size_t count) {
    return ExAllocatePoolWithTag(NonPagedPool, count, 'TRCm');
}
void __cdecl operator delete(void *object) {
    ExFreePoolWithTag(object, 'TRCm');
}