No-Execute (NX) непагированные пулы

Рекомендуется, чтобы драйверы для Windows 8 и более поздних версий Windows выделяли большую или всю непагрегированную память из пула без выполнения (NX). Благодаря выделению памяти из невыграженного пула NX драйвер в режиме ядра повышает безопасность, предотвращая выполнение вредоносными программами инструкций в этой памяти.

Начиная с Windows 8, драйверы режима ядра могут выделять память из пула непагрегированных памяти NX. Этот пул управляется распределителем памяти общего назначения в режиме ядра, который работает аналогично распределителю кучи Win32 в пользовательском режиме. Память в этом пуле NX и не погашена. Архитектуры процессоров x86, x64 и Arm позволяют назначить страницы памяти как NX, чтобы предотвратить выполнение инструкций на этих страницах. Как правило, драйвер в режиме ядра использует память, выделенную из непагрегированного пула, для хранения данных и не требует возможности выполнения инструкций в этой памяти.

Поддержка устаревших драйверов

В Windows 7 и более ранних версиях Windows вся память, выделенная из непагированного пула, является исполняемой. Чтобы стимулировать перенос этих драйверов для использования непагированного пула NX в Windows 8 и более поздних версиях Windows, корпорация Майкрософт предоставляет несколько механизмов согласия, позволяющих разработчикам обновлять свои драйверы с минимальными усилиями. Дополнительные сведения см. в разделе Механизмы Opt-In пула NX.

Для обеспечения обратной совместимости двоичные файлы драйверов, которые выполняются в Windows 7 и более ранних версиях Windows и выделяют память из исполняемого пула без запагированных файлов, будут работать в Windows 8 и более поздних версиях Windows без изменений. Однако эти драйверы не пользуются преимуществами улучшенной безопасности пула NX без погромов.