indows驅動開發中一般的數據結構比如鏈表,平衡樹,位圖等都有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 <vector>
#include <string>
using namespace std;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);
GlobalObjectInitialization();
vector<string> tmp;
tmp.push_back("123456");
.....
return STATUS_SUCCESS;
}
微軟有一個開源wil庫據說也提供了此類支持和封裝,有興趣的同學可以試用
IT之家 7 月 17 日消息,微軟公司在 Windows 11 24H2、Windows Server 2025 系統中引入全新的 checkpoint 累積更新模式之外,還計劃為 Windows 驅動程序引入全新的 WDK(Windows Driver Kit)NuGet 打包方式。
MSI(Microsoft Installer)文件或者 ISO 鏡像目前已部署使用 WDK,而微軟在最新發布的社區技術博文中,詳細介紹了 WDK NuGet 打包方式,IT之家附上相關優勢如下:
體積較小,可以減少下載和設置時間。
可以在不同的機器和環境中移植使用。
可以集成到大型 CI / CD 管道和源代碼控制系統中。
能更好地支持敏捷的 WDK 發布模式,可以輕松更新最新的 WDK 功能和修正。