Принципы построения Firewalls в операционных системах Windows NT и Linux
Принципы реализации Firewalls, общая структура драйвера, стек протоколов в операционных системах Windows и Linux. Технологии и пользовательский режим сетевой фильтрации трафика. Процедуры отправки и получения данных TCP/IP, точки входа драйверов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 05.06.2011 |
Размер файла | 2,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
struct completion completion;
memset(&completion, 0, sizeof(completion));
// Analyze MajorFunction
switch (irps->MajorFunction) {
case IRP_MJ_CREATE: /* create fileobject */
result = tdi_create(irp, irps, &completion);
status = tdi_dispatch_complete(DeviceObject, irp, result,
completion.routine, completion.context);
break;
case IRP_MJ_DEVICE_CONTROL:
KdPrint(("[tdi_fw] DeviceDispatch: IRP_MJ_DEVICE_CONTROL, control 0x%x for 0x%08X\n",
irps->Parameters.DeviceIoControl.IoControlCode, irps->FileObject));
if (KeGetCurrentIrql() == PASSIVE_LEVEL) {
/*
* try to convert it to IRP_MJ_INTERNAL_DEVICE_CONTROL
* (works on PASSIVE_LEVEL only!)
*/
status = TdiMapUserRequest(DeviceObject, irp, irps);
} else
status = STATUS_NOT_IMPLEMENTED; // set fake status
if (status!= STATUS_SUCCESS) {
void *buf = (irps->Parameters.DeviceIoControl.IoControlCode == IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER) ?
irps->Parameters.DeviceIoControl.Type3InputBuffer: NULL;
// send IRP to original driver
status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW, NULL, NULL);
if (buf!= NULL && status == STATUS_SUCCESS) {
g_TCPSendData = *(TCPSendData_t **)buf;
KdPrint(("[tdi_fw] DeviceDispatch: IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER: TCPSendData = 0x%x\n",
g_TCPSendData));
*(TCPSendData_t **)buf = new_TCPSendData;
}
break;
}
// don't break! go to internal device control!
case IRP_MJ_INTERNAL_DEVICE_CONTROL: {
/*
* Analyze ioctl for TDI driver
*/
int i;
for (i = 0; g_tdi_ioctls[i].MinorFunction!= 0; i++)
if (g_tdi_ioctls[i].MinorFunction == irps->MinorFunction) {
#if DBG
// print description
KdPrint(("[tdi_fw] DeviceDispatch: %s (0x%x) for 0x%x\n",
g_tdi_ioctls[i].desc,
irps->MinorFunction,
irps->FileObject));
#endif
if (g_tdi_ioctls[i].fn == NULL) {
// send IRP to original driver
status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,
NULL, NULL);
break;
}
// call dispatch function
result = g_tdi_ioctls[i].fn(irp, irps, &completion);
// complete request
status = tdi_dispatch_complete(DeviceObject, irp, result,
completion.routine, completion.context);
break;
}
// if dispatch function hasn't been found
if (g_tdi_ioctls[i].MinorFunction == 0) {
// send IRP to original driver
status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW, NULL, NULL);
}
break;
}
result = tdi_cleanup(irp, irps, &completion);
status = tdi_dispatch_complete(DeviceObject, irp, result,
completion.routine, completion.context);
break;
case IRP_MJ_CLOSE:
KdPrint(("[tdi_fw] DeviceDispatch: IRP_MJ_CLOSE fileobj 0x%x\n", irps->FileObject));
// passthrough IRP
status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,
completion.routine, completion.context);
break;
default:
KdPrint(("[tdi_fw] DeviceDispatch: major 0x%x, minor 0x%x for 0x%x\n",
irps->MajorFunction, irps->MinorFunction, irps->FileObject));
// passthrough IRP
status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,
completion.routine, completion.context);
}
} else if (DeviceObject == g_devcontrol) {
/*
* this IRP is for control device
*/
// set default status
status = STATUS_SUCCESS;
if (irps->MajorFunction == IRP_MJ_CREATE) {
// initialize for user-mode part (exclusive access - 1 user-mode logging part)
filter_init_2();
g_got_log = TRUE;
// cleanup for user-mode logging part
filter_free_2();
g_got_log = FALSE;
} if (irps->MajorFunction == IRP_MJ_DEVICE_CONTROL) {
/*
* control request
*/
/* get original device object by filtered */
PDEVICE_OBJECT
get_original_devobj(PDEVICE_OBJECT flt_devobj, int *proto)
{
#ifndef USE_TDI_HOOKING
PDEVICE_OBJECT result;
int ipproto;
if (flt_devobj == g_tcpfltobj) {
result = g_tcpoldobj;
ipproto = IPPROTO_TCP;
} else if (flt_devobj == g_udpfltobj) {
result = g_udpoldobj;
ipproto = IPPROTO_UDP;
} else if (flt_devobj == g_ipfltobj) {
result = g_ipoldobj;
ipproto = IPPROTO_IP;
} else {
KdPrint(("[tdi_fw] get_original_devobj: Unknown DeviceObject 0x%x!\n",
flt_devobj));
ipproto = IPPROTO_IP; // what else?
result = NULL;
}
if (result!= NULL && proto!= NULL)
*proto = ipproto;
return result;
#else /* USE_TDI_HOOKING */
// just stub for original devobj; return proto by devobj
int ipproto;
if (flt_devobj == g_tcpfltobj)
ipproto = IPPROTO_TCP;
else if (flt_devobj == g_udpfltobj)
ipproto = IPPROTO_UDP;
else if (flt_devobj == g_ipfltobj)
ipproto = IPPROTO_IP;
else {
KdPrint(("[tdi_fw] get_original_devobj: Unknown DeviceObject 0x%x!\n",
flt_devobj));
ipproto = IPPROTO_IP; // what else?
flt_devobj = NULL;
}
if (proto!= NULL)
*proto = ipproto;
return flt_devobj;
#endif
}
/*
* Completion routines must call this function at the end of their execution
*/
NTSTATUS
tdi_generic_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
KdPrint(("[tdi_fw] tdi_generic_complete: STATUS = 0x%x\n", Irp->IoStatus.Status));
if (Irp->PendingReturned) {
KdPrint(("[tdi_fw] tdi_generic_complete: PENDING\n"));
IoMarkIrpPending(Irp);
}
return STATUS_SUCCESS;
}
/*
* for IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER
*/
NTSTATUS
new_TCPSendData(IN PIRP Irp, IN PIO_STACK_LOCATION IrpSp)
{
struct completion completion;
int result;
KdPrint(("[tdi_fw] new_TCPSendData\n"));
#if 1
memset(&completion, 0, sizeof(completion));
result = tdi_send(Irp, IrpSp, &completion);
// complete request
return tdi_dispatch_complete(IrpSp->DeviceObject, Irp, result,
completion.routine, completion.context);
#else
return g_TCPSendData(Irp, IrpSp);
#endif
}
/*
* deny stub for dispatch table
*/
int
tdi_deny_stub(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)
{
KdPrint(("[tdi_fw] tdi_deny_stub!\n"));
return FILTER_DENY;
}
Размещено на Allbest.ru
Подобные документы
История создания и общая характеристика операционных систем Windows Server 2003 и Red Hat Linux Enterprise 4. Особенности установки, файловых систем и сетевых инфраструктур данных операционных систем. Использование протокола Kerberos в Windows и Linux.
дипломная работа [142,7 K], добавлен 23.06.2012Основные сходства и отличия операционных систем Microsoft Windows и GNU/Linux: конфигурации, цена и широта технической поддержки; оценка стоимости владения и статистика использования на настольных компьютерах; простота инсталляции и наличие драйверов.
курсовая работа [294,9 K], добавлен 12.05.2011Назначение серверных операционных систем. Сравнительный анализ серверных операционных систем Windows и Linux и сравнение их по важным показателям таким как: пользовательский графический интерфейс, безопасность, стабильность работы, возможность и цена.
курсовая работа [50,1 K], добавлен 03.07.2012Назначение команды "diskcomp". Текст и запуск командного файла. Сравнение команды в Windows 7 и Windows XP. Разработка файла-сценария в ОС Linux. Создание файла в подкаталоге. Создание файла "oglavlenie.txt" с отсортированным по времени списком файлов.
курсовая работа [1,6 M], добавлен 22.08.2012Основные понятия об операционных системах. Виды современных операционных систем. История развития операционных систем семейства Windows. Характеристики операционных систем семейства Windows. Новые функциональные возможности операционной системы Windows 7.
курсовая работа [60,1 K], добавлен 18.02.2012Понятие и внутренняя структура операционных систем, их классификация и разновидности, предъявляемые требования, этапы становления и развития, функциональные особенности. Описание и назначение базовых компьютерных систем: DOS, Windows, Linux, Mac.
курсовая работа [44,9 K], добавлен 14.12.2013История развития операционных систем семейства Windows и основные понятия системного администрирования. Определение востребованности операционных систем Windows, сравнительная характеристика их функции и возможностей, особенности применения на практике.
курсовая работа [38,5 K], добавлен 08.05.2011Основные моменты истории операционных систем, связывающих аппаратное обеспечение и прикладные программы. Характеристика операционной системы Microsoft Windows Seven, анализ операционной системы Linux. Преимущества и недостатки каждой операционной системы.
курсовая работа [63,0 K], добавлен 07.05.2011Основные классификации операционных систем. Операционные системы семейства OS/2, UNIX, Linux и Windows. Разграничение прав доступа и многопользовательский режим работы. Пользовательский интерфейс и сетевые операции. Управление оперативной памятью.
реферат [22,8 K], добавлен 11.05.2011Графические интерфейсы и расширения для DOS. История развития операционной системы Microsoft Windows. Новшества ее современных версий: пользовательский интерфейс, языковая интеграция, системы защиты. Хронология развития и архитектура системы GNU/Linux.
реферат [38,9 K], добавлен 25.10.2010