3.Внутреннее устройство Windows (гл. 8-11) :: Руссинович Марк
Страница:
106 из 255
Чтобы избежать краха из-за ссылки на недопустимый адрес, драйверы могут обращаться к буферам пользовательского режима из кода обработки исключений (блоков try/except), который перехватывает любые попытки доступа по неправильным адресам и транслирует их в коды ошибок для передачи приложению.
Запрос ввода-вывода к одноуровневому драйверу
B этом разделе вы увидите, как обрабатывается запрос синхронного ввода-вывода к одноуровневому драйверу режима ядра. Такая обработка проходит в семь этапов.
1. Запрос на ввод-вывод передается через DLL подсистемы.
2. DLL подсистемы вызывает сервис NtWriteFile диспетчера ввода-вывода.
3. Диспетчер ввода-вывода создает IRP, описывающий запрос, и посылает его драйверу (в данном случае — драйверу устройства), вызывая свою функцию IoCallDriver.
4. Драйвер передает данные из IRP на устройство и инициирует операцию ввода-вывода.
5. Драйвер уведомляет о завершении ввода-вывода, генерируя прерывание.
6. Когда устройство завершает операцию и вызывает прерывание, драйвер устройства обслуживает прерывание.
7. Драйвер вызывает функцию IoCompleteRequest диспетчера ввода-вывода, чтобы уведомить его о завершении обработки IRP, и диспетчер ввода-вывода завершает данный запрос на ввод-вывод.
Эти семь этапов показаны на рис. 9-10.
Теперь, когда мы знаем, как инициируется ввод-вывод, рассмотрим обслуживание прерывания и завершение ввода-вывода.
|< Пред. 104 105 106 107 108 След. >|