Visual Studio 2010. Windows Forms. Ошибка линковки
От: fwd_ex Россия  
Дата: 18.05.11 08:28
Оценка:
Разработал пример приложения для фильтрации трафика. В консольном приложении компилируется замечательно. Требуется создать формы используя 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);
}


буду благодарен за любые советы.
windows forms link error
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.