Отслеживание пула
Отслеживание пула отслеживает выделение памяти драйвером. Во время выгрузки драйвера средство проверки драйверов гарантирует, что все выделения, сделанные драйвером, были освобождены.
Нередкие выделения памяти (также называемые утечками памяти) являются распространенной причиной снижения производительности операционной системы. Они могут фрагментировать системные пулы и в конечном итоге вызвать сбои системы.
Если этот параметр активен, средство проверки драйверов выдает проверка 0xC4 ошибок (с параметром 1, равным 0x62), если драйвер выгружается без освобождения всех выделений.
Если средство проверки драйверов выдает эту ошибку проверка с параметром 1, равным 0x51, 0x52, 0x53, 0x54 или 0x59, драйвер записывается в память за пределами выделенных ресурсов. В этом случае следует включить функцию "Специальный пул ", чтобы найти источник ошибки.
Список параметров проверка ошибок см. в разделе 0xC4 проверки ошибок (DRIVER_VERIFIER_DETECTED_VIOLATION).
Начиная с Windows Vista включение параметра Отслеживание пула также позволяет отслеживать заблокированные страницы. Если этот параметр активен, средство проверки драйверов выдает 0xCB проверки ошибок (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS), если драйверу не удается освободить заблокированные страницы после операции ввода-вывода.
В Windows 7 и более поздних версиях операционной системы Windows параметр Отслеживания пула поддерживает память, выделенную с помощью следующих API ядра:
IoAllocateIrp и другие подпрограммы, которые могут выделять структуры данных пакета запросов ввода-вывода (IRP)
RtlAnsiStringToUnicodeString и другие строковые подпрограммы библиотеки времени выполнения (RTL)
В Windows 7 и более поздних версиях операционной системы Windows при активации отслеживания пула средство проверки драйверов может обнаруживать попытки выделения памяти пула ядра с квотой в контексте процесса простоя. Такие попытки обычно означают, что драйвер выделяет память из подпрограммы DPC. Контекст потока или процесса для подпрограмм DPC ненадежный, поэтому попытка взимания квоты для этого процесса неверна.
Отслеживание пула мониторинга
Статистику выделения пула памяти можно отслеживать отдельно для каждого проверяемого драйвера. Эти статистические данные могут отображаться диспетчером проверки драйверов, Verifier.exe командной строке или в файле журнала. Дополнительные сведения см. в разделе Мониторинг отдельных счетчиков .
Расширение отладчика ядра !verifier 0x3 можно использовать для поиска невыполненных выделений памяти после выгрузки драйвера или для отслеживания текущих выделений во время работы драйвера. Это расширение также показывает тег пула, размер пула и адрес распределителя для каждого выделения. Дополнительные сведения о расширениях отладчика см. в разделе Отладка Windows.
Затраты на квоту пула из подпрограммы DPC
Драйверы ядра могут вызывать ExAllocatePoolWithQuotaTag для выделения памяти пула ядра и оплаты количества байтов, выделенных квоте пула текущего процесса. Драйверы обычно используют квоту для выделения памяти, непосредственно связанной с запросом, поступающим от приложения.
Подпрограммы отложенного вызова процедур (DPC) могут выполняться в контексте любого процесса. Таким образом, при зарядке квоты из обычной процедуры DPC взимается случайный процесс. Что еще хуже, когда подпрограмма DPC выполняется в контексте процесса простоя, это условие может привести к повреждению памяти или сбою системы.
Начиная с Windows 7 средство проверки драйверов обнаруживает вызовы ExAllocatePoolWithQuotaTag из подпрограмм DPC.
Активация этого параметра
Функцию отслеживания пула для одного или нескольких драйверов можно активировать с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов.
В командной строке
В командной строке параметр Отслеживания пула представлен битом 3 (0x8). Чтобы активировать отслеживание пула, используйте значение флага 0x8 или добавьте 0x8 к значению флага. Пример:
verifier /flags 0x8 /driver MyDriver.sys
Функция будет активна после следующей загрузки.
В Windows Vista и более поздних версиях Windows можно также активировать и отключить отслеживание пула без перезагрузки компьютера, добавив параметр /volatile в команду . Пример:
verifier /volatile /flags 0x8 /adddriver MyDriver.sys
Этот параметр вступает в силу немедленно, но теряется при завершении работы или перезагрузке компьютера. Дополнительные сведения см. в разделе Использование переменных параметров.
Функция отслеживания пула также включена в стандартные параметры. Пример:
verifier /standard /driver MyDriver.sys
Использование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. Введите Verifier в окне командной строки.
- Выберите Создать пользовательские параметры (для разработчиков кода) и нажмите кнопку Далее.
- Выберите Выбрать отдельные параметры из полного списка.
- Выберите (проверка) Отслеживание пула.
Функция отслеживания пула также включена в стандартные параметры. Чтобы использовать эту функцию, в диспетчере проверки драйверов щелкните Создать стандартные параметры.