Windows内核开发:如何使用STL

前言

大家都知道应用层c++的STL非常强大,非常好用,但是在内核下就没法用了。针对这个问题,经过我不懈的寻找,终于找到了解决内核无法使用STL的方法。

使用new/delete关键字

先说一下常用关键字如何在内核中使用。其实只需要在一个全局头文件中重写这两个关键字就好了,如下:

c++ 复制代码
void * __cdecl operator new (size_t size )
{
    PAGED_CODE();
    return ExAllocatePoolWithTag(PagedPool, size, '.ppc');
}

void *__cdecl operator new[](size_t Size)
{
    PAGED_CODE();
    return ExAllocatePoolWithTag(PoolType, Size, '.ppc');
}

void __cdecl operator delete(void *Object)
{
    PAGED_CODE();
    if (Object != NULL) ExFreePoolWithTag(pObject, '.ppc');
}

void __cdecl operator delete[](void *Object)
{
    PAGED_CODE();
    if (Object != NULL) ExFreePoolWithTag(pObject, '.ppc');
}

内核中使用STL

这里需要用到一个开源库:内核下的STLPort。在visual studio 2019中打开你的项目,然后在项目属性-》VC++目录-》包含目录中输入STLPort项目中的stlport 文件夹目录。
为了更好的使用这个库,建议再引入一个第三方内核crt开源库。这个库我忘了是在哪找到的了,但我把他放到了我的github上,你可以在这里取得。

用同样的方法,加入到你的项目中。然后就可以畅快的使用STL了。

相关推荐
liulilittle5 小时前
.NET ExpandoObject 技术原理解析
开发语言·网络·windows·c#·.net·net·动态编程
cpsvps11 小时前
VR协作海外云:跨国企业沉浸式办公解决方案
windows·架构·vr·etw事件
义薄云天us13 小时前
019_工具集成与外部API调用
数据库·人工智能·windows·microsoft·claude code
RainbowSea13 小时前
安装win10出现“计算机意外的重新启动或遇到错误。Windows安装无法继续。若要安装Windows,请单击“确定”重新启动计算机,然后安装系统。”
windows·后端
bug攻城狮13 小时前
理解Grafana中`X-Scope-OrgID`的作用与配置
windows·grafana
cat&seven15 小时前
CISSP通过回顾
网络安全·cissp
扛枪的书生15 小时前
AD 提权-NTLM 中继攻击(强制认证)
windows·渗透·kali·提权·域渗透
hqxstudying16 小时前
Java行为型模式---观察者模式
java·开发语言·windows·观察者模式
hjh1982917 小时前
渗透前四天总结
网络·网络安全
Damon小智18 小时前
玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)
windows·ai·mac·wsl·claude code·vibe code