Программирование драйверов Windows

       

Рабочая процедура обработки запросов закрытия драйвера


Процедура Close_File_IRPprocessing предназначена для обработки запросов Диспетчера ввода/вывода, которые он формирует в виде IRP пакетов с кодом IRP_MJ_CLOSE по результатам обращения к драйверу из пользовательских приложений с вызовами CloseHandle

или из кода режима ядра с вызовами ZwClose. В нашем примере эта функция не выполняет никаких особых действий, однако, выполнив регистрацию процедуры открытия файла, мы теперь просто обязаны зарегистрировать процедуру завершения работы клиента с открытым дескриптором. Заметим, что если клиент пользовательского режима забывает закрыть полученный при открытии доступа к драйверу дескриптор, то за него эти запросы выполняет операционная система (впрочем, как и в отношении всех открытых приложениями файлов, когда приложения завершаются без явного закрытия открытых файлов).

// (Файл init.cpp) // Close_File_IRPprocessing: Берет на себя обработку запросов с // кодом IRP_MJ_CLOSE. // Аргументы: // Указатель на объект нашего FDO // Указатель на структуру IRP, поступившего от Диспетчера ввода/вывода NTSTATUS Close_HandleIRPprocessing(IN PDEVICE_OBJECT fdo,IN PIRP Irp) { #if DBG // Задаем печать отладочных сообщений - если сборка отладочная DbgPrint("-Example- In Close handler."); #endif return CompleteIrp(Irp,STATUS_SUCCESS,0);// Успешное завершение }



Содержание раздела