Visual Studio Как использовать стандартную библиотеку C ++ в проекте драйвера режима ядра? - PullRequest
0 голосов
/ 17 сентября 2018

Я использую 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 тоже не будут работать, все напоминают мне, что Пространство имен "std" не имеет члена XXX (вектор, кортеж и т. Д.)

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 17 сентября 2018

Реализация библиотеки std требует правильной обработки исключений для правильной работы кода.Это остановило выполнение порта стандартной библиотеки в ядре.

Другими примерами кода, который не работает в ядре, является

  • магическая статика (поточно-ориентированная инициализация локальнойпеременные - требуется локальное хранилище потока, которого нет в ядре).
  • статическая инициализация объектов.В DLL или EXE глобальные данные программы инициализируются средой выполнения перед вызовом main.Этот код отсутствует в размере стека ядра
  • .Поток ядра занимает всего 12 КБ памяти, что приводит к тому, что некоторые алгоритмы блокируются, вызывая исключения.
  • Обработка памяти отличается в ядре, при этом память выделяется с помощью тега.Это будет потеряно или создаст проблемы сопряжения, если вы внедрите распределитель с тегом.

Как упоминалось в комментариях

RtlRandomEx

создает псевдослучайные числа и доступен вkernel.

Для криптографической безопасной случайности, эта страница содержит некоторое значение.

MS криптопримативы

...