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


Процедура DriverEntry и предварительные объявления


Все приведенные ниже отрывки кода следует последовательно поместить в один файл (обычно, файл, содержащий описание DriverEntry, разработчики называют Init.c). Редактирование, разумеется, удобнее всего выполнять в каком-нибудь редакторе интегрированной среды. Рекомендуется использовать редактор из среды Visual Studio, поскольку в нем производится динамический контроль синтаксиса и типов данных языка С. В главе 2 приводится содержимое файлов настройки проекта для драйвера Example, соблюдение которых позволит воспользоваться динамическими подсказками среды во время редактирования и позволит также выполнять контрольную компиляцию кода. Последнее весьма удобно, поскольку в интегрированной среде легко перейти к месту возникновения ошибки по диагностическому сообщению.

Окончательную компиляцию драйвера (как чистовую, так и отладочную) категорически рекомендуется выполнять утилитой Build из среды DDK, поскольку иные способы компиляции могут быть источником необъяснимых странностей в поведении драйвера.

///////////////////////////////////////////////////////////////////// // init.cpp: Инициализация драйвера // Замечание. Рабочая версия данного драйвера должна быть // скомпилирована как не-WDM версия. В противном случае - драйвер // не сможет корректно загружаться и выгружаться с использованием // программы monitor (пакет Numega Driver Studio) и сервисов SCM // Менеджера.

///////////////////////////////////////////////////////////////////// // DriverEntry Главная точка входа в драйвер // UnloadRoutine Процедура выгрузки драйвера // DeviceControlRoutine Обработчик DeviceIoControl IRP пакетов ///////////////////////////////////////////////////////////////////// #include "Driver.h"

// Предварительные объявления функций: NTSTATUS DeviceControlRoutine( IN PDEVICE_OBJECT fdo, IN PIRP Irp ); VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject); NTSTATUS ReadWrite_IRPhandler( IN PDEVICE_OBJECT fdo, IN PIRP Irp ); NTSTATUS Create_File_IRPprocessing(IN PDEVICE_OBJECT fdo, IN PIRP Irp); NTSTATUS Close_HandleIRPprocessing(IN PDEVICE_OBJECT fdo, IN PIRP Irp);




Начало  Назад  Вперед



Книжный магазин