Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Фильтрация TCP пакетов на Висте  (Прочитано 6072 раз)
0 Пользователей и 1 Гость смотрят эту тему.
augap
Гость
« : 30-01-2009 16:41 » 

Доброго времени суток, уважаемые!

Пишу драйвер для фильтрации пакетов на основе статьи.
Под ХП все прекрасно работает, на висте нет! Никаких синих экранов, просто невозможно установить фильтрующую функцию.
В коде пометил момент, после которого валится ошибка. Фаервол отключен, уже весь МСДН перерыл в поисках проблемы, может плохо рыл... Не понял Помогите пожалуйста люди добрые  Здесь была моя ладья...

Код:
NTSTATUS SetFilterFunction(PacketFilterExtensionPtr filterFunction)
{
NTSTATUS status = STATUS_SUCCESS, waitStatus=STATUS_SUCCESS;
UNICODE_STRING filterName;
PDEVICE_OBJECT ipDeviceObject=NULL;
PFILE_OBJECT ipFileObject=NULL;
PF_SET_EXTENSION_HOOK_INFO filterData;

KEVENT event;
IO_STATUS_BLOCK ioStatus;
PIRP irp;

DebugPrint(("Getting pointer to IpFilterDriver\n"));

//first of all, we have to get a pointer to IpFilterDriver Device
RtlInitUnicodeString(&filterName, DD_IPFLTRDRVR_DEVICE_NAME);
status = IoGetDeviceObjectPointer(&filterName,STANDARD_RIGHTS_ALL, &ipFileObject, &ipDeviceObject); //здесь все отрабатывает

if(NT_SUCCESS(status))
{
//initialize the struct with functions parameters
filterData.ExtensionPointer = filterFunction;

//we need initialize the event used later by the IpFilterDriver to signal us
//when it finished its work
KeInitializeEvent(&event, NotificationEvent, FALSE);

//we build the irp needed to establish fitler function
irp = IoBuildDeviceIoControlRequest(IOCTL_PF_SET_EXTENSION_POINTER,
      ipDeviceObject,
(PVOID) &filterData,
sizeof(PF_SET_EXTENSION_HOOK_INFO),
NULL,
0,
FALSE,
&event,
&ioStatus); //это тоже работает


if(irp != NULL)
{
// we send the IRP
status = IoCallDriver(ipDeviceObject, irp); //здесь возвращается 0

//and finally, we wait for "acknowledge" of IpDriverFilter
if (status == STATUS_PENDING)
{
waitStatus = KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);

if (waitStatus != STATUS_SUCCESS )
DebugPrint(("Error waiting for IpFilterDriver response."));
}

status = ioStatus.Status;

if(!NT_SUCCESS(status))
DebugPrint(("Error, IO error with ipFilterDriver %d\n", status));
}

else
{
//if we cant allocate the space, we return the corresponding code error
status = STATUS_INSUFFICIENT_RESOURCES;

DebugPrint(("Error building IpFilterDriver IRP\n"));
}

if(ipFileObject != NULL)
ObDereferenceObject(ipFileObject);

ipFileObject = NULL;
ipDeviceObject = NULL;
}

else
DebugPrint(("Error while getting the pointer\n"));

return status;
}
Записан
gektor333
Гость
« Ответ #1 : 30-01-2009 21:16 » 

Я тоже изучаю эту статью, если у тебя все ок с хп, подскажи в чем проблема. Не могу скомпилировать сорцы firewallа на VS 9
Код:
1>------ Build started: Project: FirewallApp, Configuration: Debug Win32 ------
1>Compiling...
1>FirewallAppView.cpp
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\sockutil.h(6) : error C2373: 'htons' : redefinition; different type modifiers
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1708) : see declaration of 'htons'
1>MainFrm.cpp
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\sockutil.h(6) : error C2373: 'htons' : redefinition; different type modifiers
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1708) : see declaration of 'htons'
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(354) : error C2440: '=' : cannot convert from 'u_short (__stdcall *)(u_short)' to 'USHORT'
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(354) : error C2440: '=' : cannot convert from 'u_short (__stdcall *)(u_short)' to 'USHORT'
1>        There is no context in which this conversion is possible
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(354) : error C3861: 'htons': identifier not found
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(355) : error C2440: '=' : cannot convert from 'u_short (__stdcall *)(u_short)' to 'USHORT'
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(355) : error C2440: '=' : cannot convert from 'u_short (__stdcall *)(u_short)' to 'USHORT'
1>        There is no context in which this conversion is possible
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\mainfrm.cpp(355) : error C3861: 'htons': identifier not found
1>RuleDlg.cpp
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\sockutil.h(6) : error C2373: 'htons' : redefinition; different type modifiers
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1708) : see declaration of 'htons'
1>SockUtil.cpp
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\sockutil.h(6) : error C2373: 'htons' : redefinition; different type modifiers
1>        c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1708) : see declaration of 'htons'
1>c:\documents and settings\ckopiiuoh\рабочий стол\firewallfhk_src\sockutil.cpp(74) : error C2491: 'htons' : definition of dllimport function not allowed
1>Generating Code...
1>Creating browse information file...
1>Microsoft Browse Information Maintenance Utility Version 9.00.21022
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Build log was saved at "file://c:\Documents and Settings\CkopIIuoH\Рабочий стол\FirewallFHK_src\Debug\BuildLog.htm"
1>FirewallApp - 11 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Пишет, что уже определен htons, но ведь я не подключаю winsock2.h, так что по-идее эти функции должны браться из моих листингов? Что не так?
Записан
augap
Гость
« Ответ #2 : 30-01-2009 21:20 » 

ну я сам фаервол компилить не пробовал, только драйвер
Записан
augap
Гость
« Ответ #3 : 02-02-2009 09:51 » 

если кому интересно, то ответ найден тут
вкратце там говорится о том, что под вистой этот метод работать не будет, предлагают использовать другой, пример которого есть в ддк
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines