Память выгружаемого пула или память невыгружаемого пула (разработка драйвера для Windows) - PullRequest
5 голосов
/ 28 апреля 2009

Я новичок в разработке драйверов для Windows. Я просто хочу знать, что глобальная переменная в драйвере будет использовать память выгружаемого пула или память невыгружаемого пула?

Спасибо и всего наилучшего

Наваниет

Ответы [ 3 ]

8 голосов
/ 28 апреля 2009

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

См. здесь для получения дополнительной информации.

Глядя на this (хотя в нем обсуждается c ++, а не C), может показаться, что по умолчанию глобальные переменные могут находиться в #pragma. Также на p22 из this мы видим, как это сделать. Наконец, это обсуждение здесь мы видим, что сегмент данных по умолчанию не должен быть разрешен.

2 голосов
/ 28 апреля 2009

Глобальные переменные в драйвере режима ядра выделяются из NonPagedPool.

Вы также можете использовать расширение устройства (когда вы вызываете IoCreateDevice), оно всегда выделяется из памяти NonPaged.

Надеюсь, это поможет, Martin

0 голосов
/ 14 марта 2019

Другой хороший ответ, который я нахожу: «Не выгружаемый пул - это память ядра, которая не может быть выгружена в файл подкачки, когда в Windows не хватает свободной физической памяти. Она используется драйверами для выделения памяти, которая им нужна». от здесь

...