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