Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Драйверы могут включать следующие диспетчерские подпрограммы:
-
IRP_MJ_CLEANUP указывает, что последний дескриптор для объекта файла, связанного с целевым объектом устройства, закрывается. Невыполненные запросы ввода-вывода для объекта файла могут по-прежнему существовать. Драйверы могут реализовать подпрограмму DispatchCleanup для выполнения очистки, которая не связана с определенным дескриптором файла. Драйверы также могут использовать подпрограмму DispatchClose для той же цели.
DispatchQueryInformation, DispatchSetInformation
Некоторые драйверы высокого уровня могут обрабатывать IRP_MJ_QUERY_INFORMATION и IRP_MJ_SET_INFORMATION IRP. Такие запросы указывают на то, что приложение в пользовательском режиме, компонент режима ядра или драйвер запрашивает сведения о длине объекта файла (представляющего объект устройства драйвера), для которого запрашиватель пользовательского режима имеет дескриптор или пытается задать конечный объект файла.
Параллельные классы и драйверы серийных устройств обрабатывают эти запросы, задав FILE_STANDARD_INFORMATION или FILE_POSITION_INFORMATION длину или позицию нулю. Другие драйверы устройств высокого уровня должны поддерживать эти запросы, особенно если драйвер в пользовательском режиме или драйвер в режиме ядра может вызывать функции среды выполнения C для управления объектом файла. Драйверы файловой системы должны поддерживать эти запросы более полно, чем эти драйверы устройств верхнего уровня.
-
Драйвер, который кэширует данные на устройстве или буферизирует данные внутри памяти, выделенной драйвером, может получать IRP_MJ_FLUSH_BUFFERS. Получение этого запроса указывает, что драйвер должен записывать свои буферные данные или сбрасывать кэшированные данные на устройство или удалять буферные или кэшированные данные, считываемые с устройства.
Например, системные драйверы класса клавиатуры и мыши, имеющие кольцевые буферы для входных данных со своих устройств, поддерживают запрос на очистку. Драйверы устройств массового хранения и драйверы, размещенные выше их, также поддерживают этот запрос.
-
Любой драйвер, который, скорее всего, будет вызван до завершения работы системы, должен обрабатывать IRP_MJ_SHUTDOWN. Подпрограмма DispatchShutdown должна выполнять очистку, определяемую драйвером, прежде чем диспетчер питания отправляет системный набор данных IRP для завершения работы системы. Драйвер может вызвать IoRegisterShutdownNotification или IoRegisterLastChanceShutdownNotification, чтобы зарегистрировать уведомление о завершении работы.
Драйверы устройств массового хранения и промежуточные драйверы, наложенные на них, могут полагаться на драйвер файловой системы высокого уровня, чтобы получить IRP завершения работы, когда система завершает работу. То есть FSD отвечает за то, что все кэшированные данные файлов записываются на периферийные устройства, вызывая базовые драйверы для очистки данных из кэша устройств или буферов (если таковые есть), и т. д. перед завершением работы системы.
Драйвер устройства массового хранилища, который кэширует данные внутри системы, должен предоставлять подпрограммы DispatchShutdown и DispatchFlushBuffers . Если драйвер массового хранилища буферизирует данные в памяти, но его устройство не имеет внутреннего кэша, он также должен предоставлять подпрограммы DispatchShutdown и DispatchFlushBuffers .
Любой промежуточный драйвер, наложенный выше драйвера, обрабатывающего IRP_MJ_FLUSH_BUFFERS и IRP_MJ_SHUTDOWN запросы, также предоставляют подпрограммы DispatchShutdown и DispatchFlushBuffers .