Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Ошибка при компиляции проекта WFP


Автор: F1scher 31.3.2012, 14:55
Здравствуйте, пишу проект под использование Windows Filtering Platform, при создании сессии вылетает ошибка, не понимаю как с ней бороться.
Менял флаги, но все равно не работает.

Сам код:
Код

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <Fwpmu.h>

//Глобальные переменные
//Возвращаемый результат работы функций
DWORD RetResult;


// Первый этап: открытие сеанса функцией FwpmEngineOpen0
//DWORD WINAPI FwpmEngineOpen0(
//  __in_opt  const wchar_t *serverName,
//  __in      UINT32 authnService,
//  __in_opt  SEC_WINNT_AUTH_IDENTITY_W *authIdentity,
//  __in_opt  const FWPM_SESSION0 *session,
//  __out     HANDLE *engineHandle
//);
//Вызов данной функции осуществляется из мейна

int _tmain(int argc, _TCHAR* argv[])
{
    //Первый этап открытие сеанса функцией FwpmEngineOpen0
    //Для этого нам нужно создать (объявить) объект типа HANDLE,
    //открываемый сыссией работы Windows Filtering Platform
    HANDLE gEngineHandle = NULL;
    RetResult = FwpmEngineOpen0(NULL,  RPC_C_AUTHN_WINNT, NULL, NULL, &gEngineHandle);
    //Проверяем создан ли хендл, открылась ли сессия.
    if (RetResult != ERROR_SUCCESS)
        printf("FwpmEngineOpen0 failed. Return value: %d.\n", RetResult); 
    else
        printf("Filter engine opened successfully.\n");
    getchar();
return;
}


Ошибка:
Код

1>------ Построение начато: проект: WFP 4, Конфигурация: Debug Win32 ------
1>Построение начато 31.03.2012 15:18:56.
1>InitializeBuildStatus:
1>  Обращение к "Debug\WFP 4.unsuccessfulbuild".
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  stdafx.cpp
1>  WFP 4.cpp
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwptypes.h(275): error C2059: синтаксическая ошибка: константа
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwptypes.h(333): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwptypes.h(333): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwptypes.h(336): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwptypes.h(345): error C2059: синтаксическая ошибка: константа
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(369): error C2059: синтаксическая ошибка: константа
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(371): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(371): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(390): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(418): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "v4Statistics"
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(418): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(418): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(419): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "v6Statistics"
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(419): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\iketypes.h(419): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwpmtypes.h(413): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "enumType"
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwpmtypes.h(413): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\fwpmtypes.h(413): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.68
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


первая ошибка:
Код

#define FWP_ACTION_BLOCK \

   (0x00000001 | FWP_ACTION_FLAG_TERMINATING)

Автор: feodorv 31.3.2012, 15:14
Код

#define FWP_ACTION_BLOCK \

   (0x00000001 | FWP_ACTION_FLAG_TERMINATING)


В оригинале точно присутствует пробельная строка между 
Код
#define FWP_ACTION_BLOCK \
 и 
Код
   (0x00000001 | FWP_ACTION_FLAG_TERMINATING)
? Если так, то её надо убрать:
Код

#define FWP_ACTION_BLOCK \
   (0x00000001 | FWP_ACTION_FLAG_TERMINATING)

Автор: F1scher 31.3.2012, 21:27
да, в оригинале строка присутствует, но это библиотека fwptypes.h, при убирании строки, подчеркивание ошибки исчезает, но сохранить изменения не позволяется, и все ошибки связаны с этой библиотекой. Как можно использовать отредактированный вариант этой библиотеки без ошибок. 

и ещё сейчас выдается ошибка с  #include <Fwpsk.h>, говорит что не удается открыть источник файл Fwpsk.h 

Автор: xvr 1.4.2012, 15:47
Цитата(F1scher @  31.3.2012,  21:27 Найти цитируемый пост)
да, в оригинале строка присутствует, но это библиотека fwptypes.h

Похоже на криво установленный SDK

Автор: GremlinProg 2.4.2012, 06:21
Цитата(F1scher @  31.3.2012,  23:27 Найти цитируемый пост)
в оригинале строка присутствует, но это библиотека fwptypes.h

если там таких строк много, то возможно проблема в формате файла,
конкретно - в соглашении о переводах строк, т.е. вместо \r\n используется \r\r\n, например или еще что-то такое,

хотя, по поводу ошибки есть googlink: http://connect.microsoft.com/VisualStudio/feedback/details/558662/c-winsdk-fwptypes-h-has-extra-lines-that-cause-compiles-to-fail

Автор: F1scher 2.4.2012, 10:38
еще ни как не удается найти библиотеку Fwpsk.h,  говорит не удаётся открыть источник файла, в чем тут может быть дело?

Автор: F1scher 3.4.2012, 10:27
при компиляции, теперь выдается только одна ошибка:

c:\users\f1-scher\documents\visual studio 2010\projects\wfp 4\wfp 4\wfp 4.cpp(8): fatal error C1083: Не удается открыть файл включение: Fwpsk.h: No such file or directory

можно ли где-нибудь скачать библиотеку Fwpsk.h? или есть какой то другой способ?

/////////////////////////////////////

если пытаюсь компилировать без нее, выдает такую ошибку:

c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(38): fatal error C1189: #error :  Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.

пареход по ошибке в файл ws2def.h, в котором подчеркнуто как ошибка  слово error во второй строчке этого фрагмента:

Код

#if !defined(_WINSOCK2API_) && defined(_WINSOCKAPI_)    
#error Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.
#endif


при наведении курсора на ошибку говорит: директива #error: Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.

не понимаю в чет тут дело?

Автор: GremlinProg 3.4.2012, 13:12
Цитата(F1scher @ 3.4.2012,  12:27)
при компиляции, теперь выдается только одна ошибка:

c:\users\f1-scher\documents\visual studio 2010\projects\wfp 4\wfp 4\wfp 4.cpp(8): fatal error C1083: Не удается открыть файл включение: Fwpsk.h: No such file or directory

можно ли где-нибудь скачать библиотеку Fwpsk.h? или есть какой то другой способ?

/////////////////////////////////////

если пытаюсь компилировать без нее, выдает такую ошибку:

c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(38): fatal error C1189: #error :  Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.

пареход по ошибке в файл ws2def.h, в котором подчеркнуто как ошибка  слово error во второй строчке этого фрагмента:

Код

#if !defined(_WINSOCK2API_) && defined(_WINSOCKAPI_)    
#error Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.
#endif


при наведении курсора на ошибку говорит: директива #error: Do not include winsock.h and ws2def.h in the same module. Instead include only winsock2.h.

не понимаю в чет тут дело?

это означает, что winsock.h уже подключает windows.h,
повторно это делать не нужно,
поэтому убирай
Код

#include <windows.h>


Добавлено через 1 минуту и 26 секунд
Цитата(GremlinProg @  3.4.2012,  15:12 Найти цитируемый пост)
winsock.h уже подключает windows.h

вернее, winsock2.h

Автор: F1scher 3.4.2012, 15:47
спасибо, да действительно в этом было дело

Автор: F1scher 3.4.2012, 16:22
по-прежнему есть проблема с #include <Fwpsk.h>, подскажите где можно скачать эту библиотеку или как-то подключить, библиотека нужна для функции FwpsCalloutRegister0, может есть какая-то альтернатива?

Автор: xvr 3.4.2012, 18:30
Цитата(F1scher @ 3.4.2012,  16:22)
по-прежнему есть проблема с #include <Fwpsk.h>, подскажите где можно скачать эту библиотеку или как-то подключить, библиотека нужна для функции FwpsCalloutRegister0, может есть какая-то альтернатива?

В первоисточнике (MSDN) смотреть не пробовали?
Цитата

fwpsk.h  Kernel-mode function prototypes and enumerated types for FWPS component. Available in the DDK only.
Вы уверены, что она вам нужна?

Автор: F1scher 3.4.2012, 19:53
В MSDN решения я не нашел, вообще я пишу проект с использованием Windows Filtering Platform, и для работы с этим, мне требуется функция FwpsCalloutRegister0, ну и соответственно в MSDN сказано что для данной функции требуется библиотека Fwpsk.h, как обойти это я не знаю.

Автор: xvr 3.4.2012, 20:22
Цитата(F1scher @  3.4.2012,  19:53 Найти цитируемый пост)
в MSDN сказано что для данной функции требуется библиотека Fwpsk.h,

Я же вам привел выдержку оттуда. Весь этот хидер относится к DDK, т.е. вся функциональность оттуда доступна только в device driver'ах. Если вам действительно нужна именно эта функция, вам надо скачивать с MS WDK (или DDK) и писать драйвер.

Автор: F1scher 3.4.2012, 20:47
хм, спасибо, может быть мне надо как то иначе решить мою задачу, драйвер мне писать не нужно, вообще мне нужно написать программу подсчета сетевого трафика с использованием Windows Filtering Platform, наверное я пошел не по тому пути решения, может быть вы сможете мне посоветовать, каким путем решить мою задачу?)

Автор: xvr 3.4.2012, 22:03
WFP вам похоже не поможет. Из User Mode он умеет только управлять уже существующими фильтрами. Вам скорее надо смотреть куда то в сторону WMI или исследовать чем пользуется netmon.exe

Автор: F1scher 4.4.2012, 09:17
использование WFP, это принципиальное условие, в этом и состоит задача, просто я не совсем понимаю путь решения, так как мне было сказано, что это не должен быть драйвер и использование WDK не должно потребоваться,есть ли варианты написания программы считающей трафик, но при этом не используя вышеупомянутые условия? просто решения над которым начал работать я, приводим меня все таки к драйверу, но это явно не то.

Автор: xvr 4.4.2012, 12:28
Цитата(F1scher @  4.4.2012,  09:17 Найти цитируемый пост)
есть ли варианты написания программы считающей трафик, но при этом не используя вышеупомянутые условия?

Изучите фильры, которые уже есть в WFP. Возможно вам что то из них подойдет. Если таких фильтров нет, то увы - WFP (без драйвера) вам не поможет. (Хотя я не спец по WFP, возможно что то и пропустил)


Автор: Miyka 10.4.2012, 17:04
Цитата

Изучите фильры, которые уже есть в WFP. Возможно вам что то из них подойдет. Если таких фильтров нет, то увы - WFP (без драйвера) вам не поможет. (Хотя я не спец по WFP, возможно что то и пропустил)


Подскажите пожалуйста какие фильтры вы имеете в виду? Спасибо.

Автор: xvr 10.4.2012, 19:48
Цитата(Miyka @  10.4.2012,  17:04 Найти цитируемый пост)
Подскажите пожалуйста какие фильтры вы имеете в виду?

Фреймворк WFP из User Space управляет фильтрами, реализованными в kernel Space в виде драйверов (или частей самого Kernel'а). Очевидно, что какие то фильтры уже должны там быть (от рождения). Какие именно я не знаю, т.к. с WFP не работал. http://msdn.microsoft.com/en-us/windows/hardware/gg463267 посмотрите, там названа пара фильтров  smile Хотя там и явные задачи фильтрации отписаны в User Space, возможно вам повезет и это все же можно сделать  smile http://msdn.microsoft.com/en-us/library/aa366504.aspx


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)