Пример запроса ввода-вывода — обзор
На следующем рисунке показано, что происходит, когда подсистема открывает объект файла, представляющий файл данных от имени приложения.
Подсистема вызывает системную службу ввода-вывода для открытия именованного файла.
Диспетчер операций ввода-вывода вызывает диспетчер объектов для поиска именованного файла и разрешения символьных ссылок для объекта файла. Он также вызывает монитор ссылок на безопасность, чтобы проверка, что подсистема имеет правильные права доступа для открытия этого объекта файла.
Если том еще не подключен, диспетчер операций ввода-вывода временно приостанавливает открытый запрос и вызывает одну или несколько файловых систем, пока одна из них не распознает файловый объект как объект, сохраненный на одном из запоминающих устройств, которые использует файловая система. Когда файловая система подключила том, диспетчер операций ввода-вывода возобновляет запрос.
Диспетчер ввода-вывода выделяет память и инициализирует IRP для открытого запроса. Для драйверов открытый запрос эквивалентен запросу на создание.
Диспетчер ввода-вывода вызывает драйвер файловой системы, передав ему IRP. Драйвер файловой системы обращается к расположению стека ввода-вывода в IRP, чтобы определить, какую операцию он должен выполнить, проверяет параметры, определяет, находится ли запрошенный файл в кэше, и, если нет, настраивает расположение стека ввода-вывода следующего ниже драйвера в IRP.
Оба драйвера обрабатывают IRP и выполняют запрошенную операцию ввода-вывода, вызывая подпрограммы поддержки режима ядра, предоставляемые диспетчером ввода-вывода и другими системными компонентами (не показано на предыдущем рисунке).
Драйверы возвращают IRP диспетчеру операций ввода-вывода с блоком состояния ввода-вывода, заданным в IRP, чтобы указать, успешно ли выполнена запрошенная операция или почему она завершилась сбоем.
Диспетчер операций ввода-вывода получает состояние ввода-вывода из IRP, поэтому он может возвращать сведения о состоянии через защищенную подсистему исходному вызывающему объекту.
Диспетчер ввода-вывода освобождает завершенное IRP.
Если операция открытия была успешной, диспетчер ввода-вывода возвращает дескриптор объекта файла в подсистему. Если произошла ошибка, подсистеме возвращается соответствующее состояние.
После успешного открытия подсистемой объекта файла, представляющего файл данных, устройство или том, подсистема использует возвращенный дескриптор для идентификации файлового объекта в последующих запросах операций ввода-вывода устройства (обычно это запросы на чтение, запись или ввод-вывод устройства). Для выполнения такого запроса подсистема вызывает системные службы ввода-вывода. Диспетчер ввода-вывода направляет эти запросы в виде irP, отправленных соответствующим драйверам.