Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция специального пула настраивает Windows для запроса выделения памяти из зарезервированного пула памяти при выделении памяти с указанным тегом пула или в пределах указанного диапазона размера.
Abbreviation |
spp |
Шестнадцатеричное значение |
(Нет) |
Символическое имя |
(Нет) |
Назначение |
Запись реестра на уровне системы (Windows Vista и более поздние версии) Запись реестра на уровне системы, флаг ядра |
Выбор тега пула
При запросе специального пула для определенного тега пула убедитесь, что драйвер или другая программа режима ядра использует уникальный тег пула.
Кроме того, при создании тега пула (например, с помощью ExAllocatePoolWithTag) рекомендуется вводить символы тегов в обратном порядке. Например, если тег фред, попробуйте ввести его как derF (0x64657246). Теги пула хранятся в реестре и отображаются в отладчике и других средствах в обратном порядке (нижнем конце). Если ввести их в обратном порядке, они отображаются в прямом порядке (0x46726564)
Если вы подозреваете, что драйвер использует весь специальный пул, рассмотрите возможность использования нескольких тегов пула в коде. Затем вы можете провести тестирование драйвера несколько раз, назначая специальный пул определенному тегу пула в каждом тесте.
Кроме того, выберите тег пула с шестнадцатеричным значением, превышающим размер страницы системы. Если вы вводите тег пула, значение которого меньше PAGE_SIZE, Gflags запрашивает специальный пул для всех выделений, размер которых находится в соответствующем диапазоне, и специальный пул для выделений с эквивалентным тегом пула. Например, при выборе размера 30 специальный пул будет использоваться для всех выделений в диапазоне от 17 до 32 байтов, а также для выделений с тегом пула 0x0030.
Выбор размера выделения
Используйте следующие рекомендации, чтобы выбрать размер выделения для функции специального пула.
На компьютере с процессором x86 PAGE_SIZE равен 0x1000, а размер выделения — 8 байт. Чтобы настроить функцию специального пула для всех выделений с размерами в этом диапазоне, введите число, равное максимуму этого диапазона плюс 8. (Это число всегда равно 8.) В следующей таблице показаны следующие значения:
Диапазон размеров | Введите это число |
---|---|
От 1 до 8 байт |
10 (в десятичной системе 16) |
От 9 до 16 байт |
18 (десятичное значение 24) |
От 17 до 24 байт |
20 (десятичная 32) |
... |
... |
0xFE9 до 0xFF0 байт |
FF8 (десятичный 4088) |
На компьютере с процессором AMD x86-64 значение PAGE_SIZE равно 0x1000, а размеры диапазонов выделения составляют 16 байтов. Чтобы настроить функцию специального пула для всех выделений с размерами в этом диапазоне, введите число, равное максимуму этого диапазона плюс 16. (Это число всегда равно 16.) В следующей таблице показаны следующие значения:
Диапазон размеров | Введите это число |
---|---|
От 1 до 16 байт |
20 (десятичная 32) |
17–32 байта |
30 (десятичная 48) |
33–48 байт |
40 (десятичная 64) |
... |
... |
0xFD1 – 0xFE0 байт |
FF0 (десятичный 4080) |
На компьютере с любым процессором можно использовать звездочку ( * ) или 0x2A (десятичное значение 42), чтобы настроить функцию специального пула для всех выделений памяти в системе.
Комментарии
Сведения о настройке функции специального пула в диалоговом окне "Глобальные флаги" см. в разделе "Настройка специального пула". Сведения о настройке функции специального пула в командной строке см. в разделе "Команды GFlags". Пример см. в примере 14. Настройка специального пула.
Функция специального пула в Gflags заставляет Windows запрашивать выделение памяти из зарезервированного пула, когда память выделяется с определённым тегом пула или в пределах заданного диапазона размеров. Чтобы запросить специальный пул для всех выделений определенным драйвером, используйте средство проверки драйверов. Дополнительные сведения см. в разделе "Специальный пул" в разделе "Средство проверки драйверов" комплекта драйверов Windows (WDK).
Специальные функции пула Gflags и средства проверки драйверов помогают обнаруживать и определять источник ошибок в использовании пула ядра, например запись за пределами выделенного пространства памяти или ссылку на память, которая уже освобождена.
Не все специальные запросы пула выполняются. Каждое выделение из специального пула использует одну страницу неизменяемой физической памяти и две страницы виртуального адресного пространства. Если специальный пул исчерпан, память выделяется из стандартного пула, пока специальный пул не станет доступным снова. Когда запрос на специальный пул обрабатывается из стандартного пула, функция запроса возвращает статус успешного выполнения. Она не возвращает ошибку, так как выделение выполнено успешно, даже если оно не было заполнено из специального пула.
Размер специального пула увеличивается с объемом физической памяти в системе; в идеале это должно быть не менее 1 Гигабайт (ГБ). На компьютерах x86, так как виртуальное пространство (в дополнение к физическому) используется, не используйте параметр загрузки /3GB при использовании специального пула. Рекомендуется также увеличить минимальное/максимальное количество файла страницы на два или три.
Вы также можете настроить функцию «Специальный пул», чтобы обеспечить корректность выделения памяти для выявления обращений к памяти до начала выделения ("перехват") или обращений за пределы выделенной памяти ("переполнение"). Эта функция доступна только в диалоговом окне "Глобальные флаги" во всех версиях Windows. Для получения подробностей см. Обнаружение перегрузок и недогрузок.
В Windows Vista и более поздних версиях Windows можно настроить функцию специального пула в качестве параметра реестра, требующего перезагрузки, но оставаться эффективным до тех пор, пока не измените его, или как параметр флага ядра, который не требует перезагрузки, но действует только до перезагрузки или завершения работы Windows. В более ранних версиях Windows специальный пул доступен только в качестве параметра реестра.
В Windows Vista и более поздних версиях Windows можно настроить функцию специального пула с помощью диалогового окна "Глобальные флаги" или в командной строке. В более ранней версии Windows эта функция доступна только в диалоговом окне "Глобальные флаги".