IRP_MJ_CLOSE (драйверы FS и фильтров)
При отправке
Диспетчер ввода-вывода отправляет запрос IRP_MJ_CLOSE, чтобы указать, что количество ссылок в объекте файла достигло нуля, как правило, потому, что драйвер файловой системы или другой компонент режима ядра вызвал ObDereferenceObject в объекте файла. Обычно этот запрос следует за запросом на очистку. Однако запрос на закрытие может быть получен не сразу после запроса на очистку.
Операция: драйверы файловой системы
Если целевой объект устройства является объектом управляющего устройства файловой системы, драйвер файловой системы должен завершить IRP после выполнения любой необходимой обработки.
В противном случае драйвер файловой системы должен обработать запрос на закрытие.
Операция: устаревшие драйверы фильтров файловой системы
Если целевой объект устройства является объектом управляющего устройства драйвера фильтра, драйвер фильтра должен выполнить необходимые действия, чтобы завершить обмен данными с объектом управляющего устройства, а затем завершить IRP.
В противном случае драйвер фильтра должен выполнить необходимую обработку, а затем передать IRP следующему драйверу в стеке. Обработка может включать такие операции, как удаление сведений контекста для каждого файла и каждого файла, которые поддерживает фильтр.
Модули записи драйверов фильтров файловой системы должны отметить, что IoCreateStreamFileObject вызывает отправку запроса IRP_MJ_CLEANUP в стек драйверов файловой системы для тома. Так как файловые системы часто создают объекты потоковых файлов в качестве побочных эффектов операций, отличных от IRP_MJ_CREATE, драйверам фильтров сложно надежно обнаружить создание объекта файла потока. Таким образом, драйвер фильтра должен получать IRP_MJ_CLEANUP и IRP_MJ_CLOSE запросы для ранее невиденных файловых объектов.
Кроме того, следует отметить, что в отличие от IoCreateStreamFileObject, IoCreateStreamFileObjectLite не приводит к отправке запроса IRP_MJ_CLEANUP в стек драйверов файловой системы. По этой причине и из-за того, что файловые системы часто создают объекты потоковых файлов в качестве побочных эффектов операций, отличных от IRP_MJ_CREATE, драйверам фильтров сложно надежно обнаруживать создание объекта файла потока. Таким образом, драйверы фильтров должны получать IRP_MJ_CLOSE запросы для ранее невиданных файловых объектов.
Параметры
Драйвер файловой системы или фильтра вызывает IoGetCurrentIrpStackLocation с заданной IRP, чтобы получить указатель на собственное расположение стека в IRP, как показано в следующем списке как IrpSp. (IRP отображается как Irp.) Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, при обработке запроса закрытия.
DeviceObject
Указатель на объект целевого устройства.
Флаги Irp>
Для этого запроса устанавливаются следующие флаги:
- IRP_CLOSE_OPERATION
- IRP_SYNCHRONOUS_API
Irp-IoStatus>
Указатель на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.
Irp-FileObject>
Указатель на объект файла, связанный с DeviceObject.
Параметр Irp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_CLEANUP и не должно использоваться.
Irp-MajorFunction>
Задает IRP_MJ_CLOSE.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по