IRP_MJ_CLEANUP (фильтры FS и FS)
При отправке
Получение запроса IRP_MJ_CLEANUP указывает, что количество ссылок на дескриптор в объекте файла достигло нуля. (Другими словами, все дескрипторы объекта файла были закрыты.) Часто он отправляется, когда приложение в пользовательском режиме вызывает функцию Win32 CloseHandle (или когда драйвер режима ядра называется ZwClose) для последнего выдающегося дескриптора для объекта файла.
Важно отметить, что объект file может по-прежнему использоваться, если все дескрипторы для объекта файла были закрыты. Системные компоненты, такие как диспетчер кэша и диспетчер памяти, могут содержать невыполненные ссылки на файловый объект. Эти компоненты по-прежнему могут выполнять чтение или запись из файла даже после получения запроса IRP_MJ_CLEANUP.
Операция: драйверы файловой системы
Если целевой объект устройства является объектом управляющего устройства файловой системы, драйвер файловой системы должен завершить 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_CLEANUP.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по