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

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


Процедура Create_File_IRPprocessing предназначена для обработки запросов Диспетчера ввода/вывода, которые он формирует в виде IRP пакетов с кодами IRP_MJ_CREATE по результатам обращения к драйверу из пользовательских приложений с вызовами CreateFile или из кода режима ядра с вызовами ZwCreateFile. В нашем примере эта функция не выполняет никаких особых действий (хотя можно было бы завести счетчик открытых дескрипторов и т.п.), однако без регистрации данной процедуры система просто не позволила бы клиенту "открыть" драйвер

для работы с ним (хотя сам драйвер мог бы успешно загружаться и стартовать).

// // (Файл init.cpp) // Create_File_IRPprocessing: Берет на себя обработку запросов с // кодом IRP_MJ_CREATE. // Аргументы: // Указатель на объект нашего FDO // Указатель на структуру IRP, поступившего от Диспетчера ВВ // NTSTATUS Create_File_IRPprocessing(IN PDEVICE_OBJECT fdo,IN PIRP Irp) { PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); // Задаем печать отладочных сообщений - если сборка отладочная #if DBG DbgPrint("-Example- Create File is %ws", &(IrpStack->FileObject->FileName.Buffer)); #endif return CompleteIrp(Irp,STATUS_SUCCESS,0); // Успешное завершение }



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