Диссертация Кочарян С.Г — копия (1195360), страница 9
Текст из файла (страница 9)
Otherwise, complete the IRP.//Irp->IoStatus.Status = status;IoCompleteRequest(Irp, IO_NO_INCREMENT);return(status);}65Ниже приведена 64-разрядная версия драйвера:Header File#define REGISTER_FUNCTION 0 // Define the IOCTL function code#ifdef _WIN64#define CLIENT_64BIT 0x800#define REGISTER_FUNCTION 0#define IOCTL_REGISTER CTL_CODE(FILE_DEVICE_UNKNOWN, \CLIENT_64BIT|REGISTER_FUNCTION, METHOD_BUFFERED,FILE_ANY_ACCESS)#else#define IOCTL_REGISTER CTL_CODE(FILE_DEVICE_UNKNOWN, \REGISTER_FUNCTION, METHOD_BUFFERED, FILE_ANY_ACCESS)#endiftypedef struct _IOCTL_PARAMETERS {PVOID Addr;SIZE_T Length;HANDLE Handle;} IOCTL_PARAMETERS, *PIOCTL_PARAMETERS;DeviceControl Dispatch Routine#ifdef _WIN64#define IOCTL_REGISTER_32 CTL_CODE(FILE_DEVICE_UNKNOWN, \REGISTER_FUNCTION, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif...66#ifdef _WIN64typedef struct _IOCTL_PARAMETERS_32 {VOID*POINTER_32 Addr;INT32 Length;VOID*POINTER_32 Handle;} IOCTL_PARAMETERS_32, *PIOCTL_PARAMETERS_32;#endif...NTSTATUSTestdrvDeviceControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){PIO_STACK_LOCATION irpSp;NTSTATUS status;PIOCTL_PARAMETERS params;IOCTL_PARAMETERS LocalParam;PIOCTL_PARAMETERS_32 params32;////Get a pointer to the current parameters for this request.
The//information is contained in the current stack location.//irpSp = IoGetCurrentIrpStackLocation(Irp);//// Case on the device control code//67switch (irpSp->Parameters.DeviceIoControl.IoControlCode) {#ifdef _WIN64case IOCTL_REGISTER_32:params32 = (PIOCTL_PARAMETERS_32)(Irp->AssociatedIrp.SystemBuffer);if (irpSp->Parameters.DeviceIoControl.InputBufferLength <sizeof(IOCTL_PARAMETERS_32)) {status = STATUS_INVALID_PARAMETER;} else {LocalParam.Addr = params32->Addr;LocalParam.Handle = params32->Handle;LocalParam.Length = params32->Length;/* Handle the ioctl here */status = STATUS_SUCCESS;Irp->IoStatus.Information = 0;}break;#endifcase IOCTL_REGISTER:params = (PIOCTL_PARAMETERS)(Irp->AssociatedIrp.SystemBuffer);if (irpSp->Parameters.DeviceIoControl.InputBufferLength <sizeof(IOCTL_PARAMETERS)) {status = STATUS_INVALID_PARAMETER;} else {RtlCopyMemory(&LocalParam, params,sizeof(IOCTL_PARAMETERS));/* Handle the ioctl here */status = STATUS_SUCCESS;}68Irp->IoStatus.Information = 0;break;//// Unrecognized device control request//default:Irp->IoStatus.Information = 0;status = STATUS_INVALID_PARAMETER;break;}//// If status is pending, mark the IRP pending and start the// request in a cancelable state.
Otherwise, complete the IRP.//Irp->IoStatus.Status = status;IoCompleteRequest(Irp, IO_NO_INCREMENT);return(status);}698 Установка драйвераПри установки любого драйвера его необходимо зарегистрировать вреестре системы. Чтобы это осуществить в ОС предусмотрено множествоспособов. Но кроме регистрации необходимо привязать драйвер к конкретнымустройствам, а также произвести настройку драйвера.Мой драйвер является NDIS Miniport драйвером, для таких драйверов всистеме есть встроенные средства установки и настройки драйверов. Чтобызапустить мастер установки необходимо открыть свойства любого сетевогосоединения в окне «Сетевые подключения» (рисунок 8.1).Рисунок 8.1 – Окно сетевые подключенияВ открывшихся свойствах на закладке «Общие» (рисунок 8.2.1) или «Сеть»(рисунок 8.2.2), в зависимости от типа сетевого подключения, необходимонажать кнопку «Установить» для запуска мастера установки сетевыхкомпонентов.701)2)Рисунок 8.2 – Закладка «Общие» для сетевой карты(1) и Закладка «Сеть»для виртуальных соединений и модемов(2)В открывшемся окне мастера (рисунок 8.3) выбрать тип компонентаслужба и нажать кнопку «Добавить».
Появится стандартное окно установкидрайверов с заголовком «Выбор сетевой службы» (рисунок 8.4.1). Еслидрайвер не разу не устанавливался, то его не будет в списке сетевых служб, втаком случае необходимо нажать кнопку установить с диска. В открывшемсяокне необходимо указать папку, в которой находятся следующие файлы:netsf.inf, netsf_m.inf, MyFireWall.dll, MyFireWall.sys. После этого опятьпоявится окно «Выбор сетевой службы» в котором будут перечисленыдрайвера сетевых служб, находящихся в выбранной папке (рисунок 8.4.2).71Рисунок 8.3 – Окно мастера установки компонентов1)2)Рисунок 8.4 – Окно установки драйверов сетевых служб, установленных всистеме(1) и из выбранной папки (2)Из них необходимо выбрать драйвер «MyFireWall driver».
После этогосистема сама установит и пропишет драйверы, но при этом сообщит чтодрайвер не имеет цифровой подписи (рисунок 8.5), которую выдаёт толькокорпорация Microsoft, в открывшемся окне необходимо будет на жать «Всеравно продолжить».72Рисунок 8.5 – Сообщение об отсутствии цифровой подписи у драйвераПосле всех выполненных действий, система запустит драйвер. Которыйнеобходимо будет настроить с помощью мастера. Для запуска мастеранеобходимо будет запустить программу Master.exe. После настройки драйвербудет работать в полностью автономном режиме.739 Проверка и тестирование межсетевого экранаКак и любую другую программу, драйвер межсетевого экрана необходимопротестировать, прежде чем начинать работу с ним. Так как у драйвераневозможно использовать режим отладки, будет проводиться тестирование, тебудут задаваться разные режимы и настройки драйвера, после этого будетанализироваться лог работы драйвера, на соответствие выбранному режиму.Тестирование будет проводиться на компьютере, подключенном сразу кИнтернету и локальной сети.9.1 Взаимодействие с драйверомДля взаимодействия с драйвером был разработан класс TFireWall, которыйи осуществляет доступ ко всем функциям драйвера.
Такая организацияпозволяет достаточно просто взаимодействовать с драйвером.При создании объекта класса используется конструктор, который вкачестве параметров получает имя драйвера в системе, и указатель на объекткласса TStrings, который используется в качестве лога работы класса. Длядоступа получения доступа к драйверу используется функция API CreateFileкоторой в качестве параметра передаётся имя драйвера.Для непосредственного доступ к функциям драйвера используетсяфункция DeviceIOCTRL которая в качестве параметров принимает номерфункции, указатель на буфер и максимальный передаваемый и получаемыйразмер буфера, а возвращает размер полученных данных в буфере/6/.DeviceIOCTRL использует функцию API DeviceIoControl для взаимодействияс драйвером.ФункцииGetQP_PacketData,ReadLog,GetQueryPacket,QP_PacketDel,GetQP_PacketDataSize,WritePraviloTable,ReadPraviloTable,SetTableHTTPHost и SetTableHTTPURL функции, обращающиеся напрямуюксоответствующимфункциямдрайвераIOCTRLGetLog,74IOCTRLGetQueryPacket,IOCTRLGetQP_PacketDataSize,IOCTRLGetQP_PacketData, IOCTRLQP_PacketDel, IOCTRLWriteTablePravilo,IOCTRLReadTablePravilo,IOCTRLWriteTableHTTPHostиIOCTRLWriteTableHTTPURL.9.2 Загрузка драйвераПрежде чем начинать проверку драйвера необходимо проверить загруженли сам драйвер и если загружен, то удостоверится, что версия загруженногодрайвера является последней.
Для того чтобы проверить, что программаполучила доступ к драйверу необходимо просмотреть лог работы программы.В случае если программа получила доступ, то лог будет содержать следующиестроки:Device openVersion:V0.5aА если программа не смогла открыть драйвер, то лог будет содержатьстроку:Error:device not openТак что для проверки необходимо всего лишь просмотреть лог работыпрограмм, который выводится в нижнюю часть основной формы.
Также дляповторногоподключенияможноиспользоватьменюпрограммы(ДрайверОткрыть). В появившемся окне надо будет указать имя драйвера.С помощью утилиты DriverView (рисунок 9.1) можно убедиться чтодрайвер MyFirewall.sys действительно установился на рабочую станцию.7576Рисунок 9.1 – Программа DriverViewУтилита DriverView (рисунок 9.1) отображает список всех драйверовустройств, загруженных в настоящий момент в вашу систему.
Для каждогодрайвера в списке отображается дополнительная полезная информация: адресзагрузки драйвера, описание, версия, название продукта, компания, создавшаядрайвер, и многое другое.Также, с помощью программы DebugView (рисунок 9.2) можно отследитьвывод отладки драйвера в нашей системе.Рисунок 9.2 – Результат программы DebugView779.3 Результат работы драйвераВсе действия, которые выполняет драйвер с пакетами, отображаются влоге работы драйвера. Мастер настройки драйвера выводит данный лог вотдельном окне (Рисунок 9.3). В этот лог выводится информация обобработанных пакетах. Одна запись в логе означает один обработанный пакет.Для всех пакетов выводится следующая информация: IP адрес отправителя, IPадрес получателя, Направление, Действие, Размер пакета, Размер данных,время и правило которое было применено при обработке пакета.Рисунок 9.3 – Окно «Результат работы драйвера»В поле «Направление» может значение только «In» или «Out».
«In» - пакетполучаемый из сети, а «Out» - пакет отправляемый в сеть. Поле Протоколпоказывает, к какому протоколу из семейства протоколов TCP/IP, относитсяпакет, может иметь одно из следующих значений: IP, ICMP, IGMP, GGP, TCP,PUP, UDP, IDP, IPV6, ND, ICLFXBM, RAW. Поле «Действие» показываетдействие, которое выполнил драйвер над пакетом. Драйвер выполняет всегодва действия над пакетом: удаление(«Del»), пропуск пакета(«Skip»). Поле«Размер пакета» показывает полный размер пакета, а поле «Размер данных»показывает размер пакета за вычетом заголовков. Поле «Правило ID»78показывает под какое правило попал пакет и выводит номер этого правила изтаблицы правил, если данное поле содержит надпись «Default» значил пакетне подпал не под одно из правил. Поля «Локальный порт» и «Удалённый порт»выводятся только у протоколов TCP и UDP.
Поле «Время» показывает, в какоймомент произошла обработка пакета по системному времени. Используемыйформат времени «DD.MM.YYYY hh:mm:ss.ms», где DD – день, MM – месяц,YYYY – год, hh – часы, mm – минуты, ss – секунды, ms – миллисекунды.Обновление лога происходит примерно 3 раза в секунду. Что позволяетнесильно загружать процессор и в тоже время достаточно быстро длявосприятия человека.9.4 Отладка брандмауэраВ общем случае, тесты для драйвера (предполагая, что аппаратноеобеспечение тестируется дополнительно) можно разделить на следующиекатегории:тесты на нормальную реакцию должны подтверждать полноту иточность функций драйвера.
Откликается ли драйвер на команды, как это отнего ожидается;тесты на ошибочные воздействия должны удостовериться, правильноли реагирует драйвер на воздействия, которые, вообще говоря, не должны кнему применяться. "Ошибочное" воздействие может также состоять в плохомнаборе данных, поступившем в пользовательском запросе;тесты граничных условий испытывают анонсированные пределыфункционирования драйвера и устройства. Не исключено, что в силу работыдрайвера в системе конечные предельные параметры окажутся хужепрогнозируемых;тесты на предельную нагрузку проверяют драйвер и устройство привысоких уровнях активности;79тесты на функционирование в условиях ограниченности ресурсов, тоесть работа при ограниченной доступности центрального процессора,ограниченность объемов доступной оперативной памяти;Фирма Microsoft предлагает тесты на аппаратурную совместимость (HCT,Hardware Compatibility Tests), которые являются официальными тестами дляаппаратуры по поводу возможности ее работы под Windows 2000/XP/2003.Набор включает следующие тесты:общие системные тесты, которые экзаменуют центральныйпроцессор, последовательные и параллельные порты материнской платы,клавиатуру и средства поддержки слоя аппаратный абстракций HAL;атесты по проверке специфических типов аппаратного обеспечения,именно–видеоадаптеров,мультимедийныхустройств,сетевыхинтерфейсов, накопителей на магнитной ленте, SCSI устройств и т.п;общие тесты по тестированию работы системы под действиемвысоких нагрузок на системные ресурсы и устройства ввода/вывода;Тестирование проходит под управлением тест-менеджера с графическиминтерфейсом,которыйавтоматизируетпрохождениетестовисборрезультатов.