Для обработки нарушений доступа к памяти при программировании драйверов рекомендуется:
- Заключать операции, которые могут вызвать исключение, в блок try/except. 2 Например, подпрограмма ProbeForWrite проверяет, может ли драйвер выполнять запись в буфер пользовательского режима. 2 Если это невозможно, подпрограмма создаёт исключение STATUSACCESSVIOLATION. 2
- Обрабатывать аварийные коды возврата функций выделения памяти. 1 Как правило, они связаны с нехваткой последней. 1 Если разработчики драйвера не запрограммировали обработку ошибок при выделении памяти, то рано или поздно будет сформирована недопустимая ссылка на ячейку памяти, и система сможет идентифицировать дефектный драйвер. 1
- Использовать параметр Special Pool. 1 Если он указан, система выделяет специальную область памяти ядра для работы компонента Verifier. 1 Запросы верифицируемого драйвера, связанные с распределением памяти, перенаправляются в Verifier, и память выделяется в специально отведённой области, а не в стандартном пуле памяти. 1 Установка Special Pool активизирует дополнительные возможности системы для обнаружения ошибок типа overrun и underrun сразу после их возникновения. 1
Также для мониторинга областей памяти, которые используются драйвером в процессе работы, можно использовать инструмент PoolMon, поставляемый в комплекте Device Driver Kit (DDK). 1 Он позволяет выявить так называемую «утечку памяти» — одну из ошибок в программировании драйвера, при которой не происходит освобождения уже ненужной приложению памяти. 1