Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Сетевые технологии > функции winapi rras(pfCreate Interface и тд)


Автор: Guest 7.1.2006, 16:21
Использую функцию PfAddFiltersToInterface для добавления правил фильтрации сетевому интерфейсу(фаервол пишу). Фаервол не работает, помогите найти ощибку.

вот вся софтина http://users.oskol.ru/~maximoff/firewall.rar

DWORD PfAddFiltersToInterface(
INTERFACE_HANDLE ih,
DWORD cInFilters,
PPF_FILTER_DESCRIPTOR pfiltIn,
DWORD cOutFilters,
PPF_FILTER_DESCRIPTOR pfiltOut,
PFILTER_HANDLE pfHandle
);
Парметры PPF_FILTER_DESCRIPTOR pfiltIn и PPF_FILTER_DESCRIPTOR pfiltOut указетли на массивы входных и выходных правил, соответсвенно (это вольный первод, вот оригинал Pointer to an array of filter descriptions to use as input(output) filters MSDN).

Для организации массивов использую DynamicArray(Borland C++Builder6):
DynamicArray <PF_FILTER_DESCRIPTOR> pfiltIn;
DynamicArray <PF_FILTER_DESCRIPTOR> pfiltOut;
Затем передаю в функцию:
PfAddFiltersToInterface(
*ppInterface,
pfiltIn.Length,
(PPF_FILTER_DESCRIPTOR)&(pfiltIn[0]),
pfiltOut.Length,
(PPF_FILTER_DESCRIPTOR)&(pfiltOut[0]),
NULL);

Естественно, фаервол не работает, точнее он либо только все запрещает, либо все разрешает: не получается привязать правила интерфейсу. Может быть это из-за DynamicArray?
Далее: в структуре правила мне понятно поле dwRule - определяет правило для фильтра, что ему присваивать? У меня dwRule=0.
typedef struct _PF_FILTER_DESCRIPTOR {
DWORD dwFilterFlags;
DWORD dwRule;//Specifies the rule for the filter.
PFADDRESSTYPE pfatType;
PBYTE SrcAddr;
PBYTE SrcMask;
PBYTE DstAddr;
PBYTE DstMask;
DWORD dwProtocol;
DWORD fLateBound;
WORD wSrcPort;
WORD wDstPort;
WORD wSrcPortHighRange;
WORD wDstPortHighRange;
} PF_FILTER_DESCRIPTOR

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