#pragma alloc_text (PAGE, имя функции) - PullRequest
4 голосов
/ 27 февраля 2011
#pramga alloc_text(PAGE, foo)

void foo(){ return; }

Этот код обычно используется в драйверах устройств.
Функция foo будет заменена при необходимости в системе.

Вопросы.

  • Это работает в коде пользовательского пространства?Будет ли функция также разбита на страницы?
  • Без прагмы, я имею в виду по умолчанию, все ли функции уровня ядра распределяются в невыгружаемой памяти?
  • Решает ли загрузчик PE-файлов, где должны быть распределены функции?*

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Если вы скомпилируете простой драйвер hello world, то вы увидите, что в разделе PE (Portable Executable) под названием .text будет установлен флаг характеристик «Not pageable».Так что да, по умолчанию весь код драйвера находится в этом разделе, если вы не пометите его как страничный, который приведет к тому, что он окажется в разделе «PAGE» вместо раздела «.text».

2 голосов
/ 27 февраля 2011

Программы пользовательского режима заменяются по умолчанию. Это необычно, что вам нужно что-то еще. Похоже, требование к драйверу устройства должно быть резидентным для обработки прерываний или подобных вещей. Программы пользовательского режима этого не делают.

...