Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Мониторинг пула отслеживает выделения памяти, сделанные драйвером. Когда драйвер выгружается, средство проверки драйверов (Driver Verifier) гарантирует, что все выделения, сделанные драйвером, были освобождены.
Нефрездные выделения памяти (также называемые утечками памяти) являются распространенной причиной снижения производительности операционной системы. Они могут фрагментировать системные пулы и в конечном итоге вызвать сбои системы.
Если этот параметр активен, Верификатор драйверов вызовет ошибку проверки 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Использование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
- Выберите "Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
- Выберите отдельные параметры из полного списка.
- Выберите (отметьте) отслеживание пула.
Функция отслеживания пула также включена в стандартные параметры. Чтобы использовать эту функцию, в диспетчере проверки драйверов нажмите кнопку "Создать стандартные параметры".