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"
其他标准库,如 vector 和 tuple 也不起作用,都提醒我 namespace "std" 没有成员 XXX(向量、元组等)
我该如何解决这个问题?
std 库的实现需要有效的异常处理才能使代码正常工作。这已停止在内核中执行标准库的端口。
在内核中不起作用的其他代码示例是
- 魔法静态(局部变量的线程安全初始化 - 需要线程局部存储,它不在内核中)。
- 对象的静态初始化。在 DLL 或 EXE 中,程序的全局数据在调用 main 之前由运行时初始化。该代码不存在于内核中
- 筹码量。一个内核线程只有12kb的内存,这让一些算法卡住了,导致异常。
- 内核中的内存处理方式不同,内存是通过标签分配的。如果您使用标签实现分配器,那将丢失或产生接口问题。
如评论所述
RtlRandomEx
产生伪随机数,在内核中可用。
对于加密安全随机性,此页面具有一定的价值。
我正在使用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"
其他标准库,如 vector 和 tuple 也不起作用,都提醒我 namespace "std" 没有成员 XXX(向量、元组等)
我该如何解决这个问题?
std 库的实现需要有效的异常处理才能使代码正常工作。这已停止在内核中执行标准库的端口。
在内核中不起作用的其他代码示例是
- 魔法静态(局部变量的线程安全初始化 - 需要线程局部存储,它不在内核中)。
- 对象的静态初始化。在 DLL 或 EXE 中,程序的全局数据在调用 main 之前由运行时初始化。该代码不存在于内核中
- 筹码量。一个内核线程只有12kb的内存,这让一些算法卡住了,导致异常。
- 内核中的内存处理方式不同,内存是通过标签分配的。如果您使用标签实现分配器,那将丢失或产生接口问题。
如评论所述
RtlRandomEx
产生伪随机数,在内核中可用。
对于加密安全随机性,此页面具有一定的价值。