| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Сетевые технологии > функции 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 |