Поделиться через


Сбой проверки объектов устройства

Многие драйверы создают несколько типов объектов устройства, вызывая IoCreateDevice. Некоторые драйверы создают объекты управляющих устройств в своих подпрограммах DriverEntry , чтобы разрешить приложениям взаимодействовать с драйвером еще до того, как драйвер создаст FDO. Например, драйверы файловой системы создают объекты устройств для обработки уведомлений файловой системы при регистрации в качестве файловых систем в IoRegisterFileSystem.

Драйвер должен быть готов к IRP_MJ_CREATE запросам для любого создаваемого объекта устройства. После завершения запроса с состоянием успешного выполнения драйвер должен ожидать получения всех доступных пользователем запросов ввода-вывода в созданном объекте файла. Следовательно, любой драйвер, создающий несколько объектов устройства, должен проверка, какой объект устройства указывается в каждом запросе ввода-вывода.

Например, предположим, что драйвер создает общие объекты управляющих устройств в DriverEntry, а затем создает другой набор объектов устройств в своей процедуре AddDevice . Предположим, что подпрограмма AddDevice инициализирует расширение устройства сведениями о драйверах более низкого уровня, но объекты управляющего устройства не содержат этих сведений. В этом случае все подпрограммы диспетчеризации должны быть осторожны, чтобы проверка каждого объекта устройства, который они получают. В противном случае при попытке использовать сведения о расширении устройства может произойти сбой драйвера.