Windows驱动开发中一般的数据结构比如链表,平衡树,位图等都有API提供,使用起来也还方便。随着时代进步,驱动开发也开始支持C++,这时自然想到驱动中能够使用STL该多方便,网上也有不少类似的例子,和Visual studio结合都有这样那样的问题,最近通过网络搜索找到一个比较简易的办法。
一般的,要支持STL,要重写STL的allocator,重载new和delete及一些crt全局初始化的东西,这些需要知道一些与C++及VC编译器相关的知识,幸运的是,github上有一个开源工程HyperPlatform提供了最简单易用的支持,可以摘用如下:
1、使用visual studio 2017 + win 10 WDK
2、下载hyperplatform源码, 提取出global_object及kernel_stl加入你的工程(可能需要稍做修改)
kernel_stl里会重载new和delete使用内核函数ExAllocatePool和ExFreePool
3、在工程输入库里加上libcnptr.lib(为浮点操作提供支持的库)
4、在驱动中DriverEntry起始处注意调用
GlobalObjectInitialization,例子代码如下:
#include "global_object.h"
#include
#include
using namespace std;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);
GlobalObjectInitialization();
vector
tmp.push_back("123456");
.....
return STATUS_SUCCESS;
}
微软有一个开源wil库据说也提供了此类支持和封装,有兴趣的同学可以试用