Visual Studio 如何在内核模式驱动项目中使用C++标准库?

Visual Studio How to use C++ standard library in a kernel mode driver project?

我正在使用vs2015和wdk10,我可以在一个空项目中使用random

#include <random>
std::default_random_engine eng;//works fine .

但是当我创建一个空的内核模式驱动程序项目时,我不能在其中使用random

#include <random>
std::default_random_engine eng;//namespace "std" has no member "default_random_engine"

其他标准库,如 vectortuple 也不起作用,都提醒我 namespace "std" 没有成员 XXX(向量、元组等)

我该如何解决这个问题?

std 库的实现需要有效的异常处理才能使代码正常工作。这已停止在内核中执行标准库的端口。

在内核中不起作用的其他代码示例是

  • 魔法静态(局部变量的线程安全初始化 - 需要线程局部存储,它不在内核中)。
  • 对象的静态初始化。在 DLL 或 EXE 中,程序的全局数据在调用 main 之前由运行时初始化。该代码不存在于内核中
  • 筹码量。一个内核线程只有12kb的内存,这让一些算法卡住了,导致异常。
  • 内核中的内存处理方式不同,内存是通过标签分配的。如果您使用标签实现分配器,那将丢失或产生接口问题。

如评论所述

RtlRandomEx

产生伪随机数,在内核中可用。

对于加密安全随机性,此页面具有一定的价值。

MS crypto primatives