Разработал пример приложения для фильтрации трафика. В консольном приложении компилируется замечательно. Требуется создать формы используя Windows Forms. При добавлении этого файла к проекту сразу начинаются ошибки:
Error 9 error LNK1120: 8 unresolved externals
Error 5 error LNK2001: unresolved external symbol FWPM_CONDITION_ALE_APP_ID
Error 7 error LNK2001: unresolved external symbol FWPM_CONDITION_IP_REMOTE_ADDRESS
Error 6 error LNK2001: unresolved external symbol FWPM_CONDITION_IP_REMOTE_PORT
Error 8 error LNK2001: unresolved external symbol FWPM_LAYER_ALE_AUTH_CONNECT_V4
Error 1 error LNK2020: unresolved token (0A000019) FWPM_CONDITION_IP_REMOTE_PORT
Error 2 error LNK2020: unresolved token (0A00001A) FWPM_CONDITION_ALE_APP_ID
Error 3 error LNK2020: unresolved token (0A000020) FWPM_LAYER_ALE_AUTH_CONNECT_V4
Error 4 error LNK2020: unresolved token (0A000029) FWPM_CONDITION_IP_REMOTE_ADDRESS
код файла
#include <windows.h>
#include <fwpmu.h>
#include <stdio.h>
#pragma comment(lib, "fwpuclnt.lib")
#pragma comment (lib, "advapi32.lib")
#pragma comment(lib, "rpcrt4.lib")
#define EXIT_ON_ERROR(fnName) \
if (result != ERROR_SUCCESS) \
{ \
printf(#fnName " = 0x%08X\n", result); \
goto CLEANUP; \
}
#define SubLayer_name L"SubLayerName";
// {2504835B-485B-442A-99E3-8DDB7AC1E617}
const GUID subLayer_GUID =
{ 0x2504835b, 0x485b, 0x442a, { 0x99, 0xe3, 0x8d, 0xdb, 0x7a, 0xc1, 0xe6, 0x17 } };
void CreateFWL(){
HANDLE hEngine=NULL;
//переменная хранящая код ошибки
DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
//инициализация движка
//Initialization Engine
try
{
dwFwAPiRetCode=FwpmEngineOpen0(NULL, RPC_C_AUTHN_WINNT,NULL,NULL,&hEngine);
}
catch (...)
{
//обработчик
}
//структура SubLayer
FWPM_SUBLAYER0 SubLayer;
SubLayer.subLayerKey=subLayer_GUID;
SubLayer.displayData.name=SubLayer_name;
SubLayer.displayData.description=SubLayer_name;
SubLayer.flags=FWPM_SUBLAYER_FLAG_PERSISTENT;
SubLayer.weight=0x01;
//Добавление Sublayer'a
dwFwAPiRetCode=FwpmSubLayerAdd0(hEngine,&SubLayer,NULL);
//Создание фильтра
FWPM_FILTER0 Filter;
FWPM_FILTER_CONDITION0 Condition[3];
memset(&Filter,0,sizeof(Filter));
Filter.action.type = FWP_ACTION_BLOCK;
Filter.subLayerKey = subLayer_GUID;
Filter.displayData.name = L"Test Sublayer";
Filter.weight.type = FWP_EMPTY;
Filter.layerKey= FWPM_LAYER_ALE_AUTH_CONNECT_V4;//FWPM_LAYER_INBOUND_TRANSPORT_V4
Filter.numFilterConditions=3; ///количество условий фильтрации !!!!!
Filter.filterCondition=Condition;
//структура хранит IP адрес v4 и маску подсети
FWP_V4_ADDR_AND_MASK AddrMask;
AddrMask.addr=0xC1CB3C15;//lanta-net.ru C1CB3C15; C0A80201 - 192.168.2.1
AddrMask.mask=0xffffffff;
//создаем условие по IP удаленному адресу
Condition[0].fieldKey=FWPM_CONDITION_IP_REMOTE_ADDRESS;
//тип сравнения. Так же можно задать диапозон и т.п. FWP_MATCH_RANGE
Condition[0].matchType=FWP_MATCH_EQUAL;
Condition[0].conditionValue.type=FWP_V4_ADDR_MASK;
Condition[0].conditionValue.v4AddrMask=&AddrMask;
UINT16 port_block;
port_block = 80;
//создаем условие по удаленному порту
Condition[1].fieldKey=FWPM_CONDITION_IP_REMOTE_PORT;
//тип сравнения. Так же можно задать диапозон и т.п. FWP_MATCH_RANGE
Condition[1].matchType=FWP_MATCH_EQUAL;
Condition[1].conditionValue.type=FWP_UINT16;
Condition[1].conditionValue.uint16=port_block;
/*
Condition[1].fieldKey = FWPM_CONDITION_IP_PROTOCOL;
Condition[1].matchType = FWP_MATCH_EQUAL;
Condition[1].conditionValue.type = FWP_UINT8;
Condition[1].conditionValue.uint8 = 0;
*/
FWP_BYTE_BLOB *applicationID=NULL;
dwFwAPiRetCode=FwpmGetAppIdFromFileName0(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",&applicationID);
//по приложению
Condition[2].fieldKey=FWPM_CONDITION_ALE_APP_ID;
//тип сравнения. Так же можно задать диапозон и т.п. FWP_MATCH_RANGE
Condition[2].matchType=FWP_MATCH_EQUAL;
Condition[2].conditionValue.type=FWP_BYTE_BLOB_TYPE;
Condition[2].conditionValue.byteBlob=applicationID;
UINT64 filterId;
//Добавляем фильтр к движку, и сохраняем ID фильтра в переменную filterId
dwFwAPiRetCode = FwpmFilterAdd0(hEngine,&Filter,NULL,&filterId);
//Ожидание нажатия кнопки
// Удаляем фильтр по ID (если не удалить, то при закрытии программы фильтр не исчезает)
FwpmFilterDeleteById0(hEngine,filterId);
//Удаляем Sublayer по ключу
FwpmSubLayerDeleteByKey0(hEngine,&subLayer_GUID);
//Закрываем engine
FwpmEngineClose0(hEngine);
}
буду благодарен за любые советы.