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

问题描述 投票:2回答:1

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

#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和tuple也不起作用,都提醒我命名空间“std”没有成员XXX(vector,tuple等)

我怎么解决这个问题?

c++ visual-studio c++11 driver kmdf
1个回答
4
投票

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

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

  • magic statics(局部变量的线程安全初始化 - 需要线程本地存储,这不在内核中)。
  • 静态初始化对象。在DLL或EXE中,程序的全局数据在调用main之前由运行时初始化。该代码不存在于内核中
  • 堆栈大小。内核线程只有12kb的内存,这使得一些算法扼流,导致异常。
  • 内核中的内存处理不同,内存使用Tag分配。如果您使用标记实现了分配器,那么这将丢失,或者创建接口问题。

正如评论中所提到的那样

RtlRandomEx

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

对于加密安全随机性,此页面保留一些值。

MS crypto primatives

© www.soinside.com 2019 - 2024. All rights reserved.