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

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

但是,当我创建一个空的内核模式驱动程序项目时,不能在其中使用随机
#include <random>
std::default_random_engine eng;//namespace "std" has no member "default_random_engine"

其他标准库,例如 vector 元组也不起作用,所有这些提醒我, namespace “std”没有成员XXX ( vector ,元组等)。

我该如何解决?

最佳答案

std库的实现需要正常工作的异常处理,代码才能正常工作。这就阻止了标准库的端口在内核中执行。

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

  • 魔术静态变量(局部变量的线程安全初始化-需要线程本地存储,这不在内核中)。
  • 对象的静态初始化。在DLL或EXE中,程序的全局数据在调用main之前由运行时初始化。该代码在内核
  • 中不存在
  • 堆栈大小。内核线程只有12kb的内存,这会使某些算法阻塞,从而导致异常。
  • 内存处理在内核中有所不同,内存是通过Tag分配的。如果您实现了带标签的分配器,那将会丢失,或者产生接口(interface)问题。

  • 如评论中所述
    RtlRandomEx
    

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

    对于密码安全随机性,此页面具有一定的值(value)。

    MS crypto primatives

    10-06 04:53
    查看更多