Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Хотя драйверам в режиме ядра запрещается получать доступ к страничной памяти на высоком уровне IRQL или удерживая спинлок, такое действие может не быть замечено, если страница на самом деле не была удалена из рабочего набора и перемещена на диск.
При включении принудительной проверки IRQL средство проверки драйверов оказывает крайнее давление на использование системной памяти. Всякий раз, когда драйвер запрашивает блокировку спина, вызывает KeSynchronizeExecution или поднимает IRQL до DISPATCH_LEVEL или выше, весь системный постраничный пул, код и данные (включая подкачиваемые код и данные драйвера) обрезаются из рабочего набора. Если драйвер пытается получить доступ к любой из этих памяти, средство проверки драйверов выдает проверку ошибок.
Начиная с Windows Vista, этот параметр также приводит к тому, что средство проверки драйверов обнаруживает, когда некоторые объекты синхронизации включены в память, доступную для страниц. Эти объекты синхронизации не могут быть выгружены в память, так как ядро операционной системы обращается к ним на повышенном уровне IRQL. Средство проверки драйверов может обнаружить страничные KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE и структуры FAST_MUTEX .
Это давление на использование памяти не влияет непосредственно на драйверы, которые не выбраны для проверки. Если драйвер, который не выбран для проверки, вызывает IRQL, он не запускает действие обрезки. Однако, когда драйвер, проходящий проверку, повышает уровень IRQL, средство проверки драйверов сокращает количество страниц, которые могут использоваться драйверами, не проходящими проверку. Поэтому ошибки, совершенные драйверами, которые не проверяются, могут иногда быть обнаружены, когда этот параметр активирован.
Мониторинг повышения IRQL и спинлоков
Количество вызовов IRQL, спин-блокировки и вызовы KeSynchronizeExecution , сделанные драйверами, проверяемыми, можно отслеживать. Количество раз, когда средство проверки драйверов обрезало память для страниц из рабочего набора, также можно отслеживать. Эти статистические данные можно отобразить диспетчером проверки драйверов, командной строкой Verifier.exe или файлом журнала. Дополнительные сведения см. в разделе "Мониторинг глобальных счетчиков ".
Расширение отладчика ядра !verifier также можно использовать для мониторинга этих статистических данных. Он представляет аналогичную информацию диспетчеру проверки драйверов. В Windows XP и более поздних версиях расширение !verifier 0x8 отображает журнал последних изменений IRQL, внесенных проверяемыми драйверами. Сведения о расширениях отладчика см. в разделе "Отладка Windows".
Вызов KeEnterCriticalRegion или KeLeaveCriticalRegion на DISPATCH_LEVEL или выше
KeEnterCriticalRegion и KeLeaveCriticalRegion — это API, которые можно использовать для синхронизации выполнения критической последовательности кода драйвера с доставкой обычных вызовов асинхронных процедур ядра (APCs). API KeEnterCriticalRegion и KeLeaveCriticalRegion не могут вызываться на уровне IRQL = DISPATCH_LEVEL или выше. Вызов KeEnterCriticalRegion или KeLeaveCriticalRegion на DISPATCH_LEVEL или выше может привести к зависанию системы или повреждению памяти.
Начиная с Windows 7, Диспетчер проверки драйверов обнаруживает вызовы этих API-функций на уровне DISPATCH_LEVEL или выше, если включена функция проверки IRQL.
Активация этого параметра
Функцию принудительной проверки IRQL можно активировать для одного или нескольких драйверов с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе "Выбор параметров средства проверки драйвера".
В командной строке
В командной строке параметр принудительной проверки IRQL представлен битом 1 (0x2). Для активации принудительной проверки IRQL используйте значение флага 0x2 или добавьте 0x2 в значение флага. Рассмотрим пример.
verifier /flags 0x2 /driver MyDriver.sysФункция будет активна после следующей загрузки.
Вы также можете активировать и деактивировать проверку IRQL без перезагрузки компьютера, добавив параметр /volatile в команду. Рассмотрим пример.
verifier /volatile /flags 0x2 /adddriver MyDriver.sysЭтот параметр действует немедленно, но теряется при завершении работы или перезагрузке компьютера. Для получения подробной информации см. Использование изменяемых параметров.
Функция принудительной проверки IRQL также включена в стандартные параметры. Рассмотрим пример.
verifier /standard /driver MyDriver.sysИспользование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
- Выберите "Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
- Выберите отдельные параметры из полного списка.
- Выберите (отметив) Принудительную проверку IRQL.
Функция принудительной проверки IRQL также включена в стандартные параметры. Чтобы использовать эту функцию, в диспетчере проверки драйверов нажмите кнопку "Создать стандартные параметры".