#ifndef __PROTO__ #define __PROTO__ NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); NTSTATUS FilterDriverDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID FilterDriverUnload( IN PDRIVER_OBJECT DriverObject ); VOID SetupExternalNaming( IN PUNICODE_STRING ntname ); VOID TearDownExternalNaming(); BOOL InitFilterDriver(); BOOL CloseFilterDriver(); BOOL MatchLocalLook(DWORD Addr, DWORD dwIndex); NTSTATUS SetForwarderEntryPoint( IPPacketFilterPtr pfnMatch ); BOOL AllocateCacheStructures(); VOID FreeExistingCache(); //FORWARD_ACTION __fastcall FORWARD_ACTION MatchFilter( IPHeader UNALIGNED *pIpHeader, PBYTE pbRestOfPacketPacket, UINT uiPacketLength, UINT RecvInterfaceIndex, UINT SendInterfaceIndex, IPAddr RecvLinkNextHop, IPAddr SendLinkNextHop ); FORWARD_ACTION MatchFilterp( UNALIGNED IPHeader *pIpHeader, BYTE *pbRestOfPacket, UINT uiPacketLength, UINT RecvInterfaceIndex, UINT SendInterfaceIndex, IPAddr RecvLinkNextHop, IPAddr SendLinkNextHop, INTERFACE_CONTEXT RecvInterfaceContext, INTERFACE_CONTEXT SendInterfaceContext, BOOL fInnerCall, BOOL fIoctlCall ); NTSTATUS AddInterface( IN PVOID pvRtrMgrCtxt, IN DWORD dwRtrMgrIndex, IN DWORD dwAdapterId, IN PPFFCB Fcb, OUT PVOID *ppvFltrDrvrCtxt ); NTSTATUS DeleteInterface( IN PVOID pvIfContext ); NTSTATUS UnSetFiltersEx( IN PPFFCB Fcb, IN PPAGED_FILTER_INTERFACE pPage, DWORD dwLength, IN PFILTER_DRIVER_SET_FILTERS pRtrMgrInfo ); NTSTATUS SetFiltersEx( IN PPFFCB Fcb, IN PPAGED_FILTER_INTERFACE pPage, DWORD dwLength, IN PFILTER_DRIVER_SET_FILTERS pRtrMgrInfo ); NTSTATUS SetFilters( IN PFILTER_DRIVER_SET_FILTERS pRtrMgrInfo ); NTSTATUS UpdateBindingInformation( PFILTER_DRIVER_BINDING_INFO pBindInfo, PVOID pvContext ); NTSTATUS GetFilters( IN PVOID pvIfContext, IN BOOL fClear, OUT PFILTER_IF pInfo ); PFILTER_INTERFACE NewInterface( IN PVOID pvContext, IN DWORD dwIndex, IN FORWARD_ACTION inAction, IN FORWARD_ACTION outAction, IN PVOID pvOldContext, IN DWORD dwIpIndex, IN DWORD dwName ); VOID DeleteFilters( IN PFILTER_INTERFACE pIf, IN DWORD dwInOrOut ); VOID ClearCache(); NTSTATUS MakeNewFilters( IN DWORD dwNumFilters, IN PFILTER_INFO pFilterInfo, IN BOOL fInFilter, OUT PLIST_ENTRY pList ); PRTR_TOC_ENTRY GetPointerToTocEntry( DWORD dwType, PRTR_INFO_BLOCK_HEADER pInfoHdr ); NTSTATUS DoIpIoctl( IN PWCHAR DriverName, IN DWORD Ioctl, IN PVOID pvInArg, IN DWORD dwInSize, IN PVOID pvOutArg, IN DWORD dwOutSize, OUT PDWORD pdwFinalSize OPTIONAL); NTSTATUS AddNewInterface(PPFINTERFACEPARAMETERS pInfo, PPFFCB Fcb); VOID DereferenceLog(PPFLOGINTERFACE pLog); VOID AddRefToLog(PPFLOGINTERFACE pLog); NTSTATUS ReferenceLogByHandleId(PFLOGGER LogId, PPFFCB Fcb, PPFLOGINTERFACE * ppLog); BOOL DereferenceFilter(PFILTER pFilt, PFILTER_INTERFACE pIf); NTSTATUS DeletePagedInterface(PPFFCB Fcb, PPAGED_FILTER_INTERFACE pPage); VOID InitLogs(); NTSTATUS PfLogCreateLog(PPFLOG pLog, PPFFCB Fcb, PIRP Irp); NTSTATUS PfDeleteLog(PPFDELETELOG pfDel, PPFFCB Fcb); NTSTATUS PfLogSetBuffer( PPFSETBUFFER pSet, PPFFCB Fcb, PIRP Irp ); NTSTATUS GetInterfaceParameters(PPAGED_FILTER_INTERFACE pPage, PPFGETINTERFACEPARAMETERS pp, PDWORD pdwSize); VOID AdvanceLog(PPFLOGINTERFACE pLog); DWORD GetIpStackIndex(IPAddr Addr, BOOL fNew); KIRQL LockLog(PPFLOGINTERFACE pLog); NTSTATUS SetInterfaceBinding(PINTERFACEBINDING pBind, PPAGED_FILTER_INTERFACE pPage); NTSTATUS SetInterfaceBinding2(PINTERFACEBINDING2 pBind, PPAGED_FILTER_INTERFACE pPage); NTSTATUS ClearInterfaceBinding(PPAGED_FILTER_INTERFACE pPage, PINTERFACEBINDING pBind); VOID ClearCacheEntry(PFILTER pFilt, PFILTER_INTERFACE pIf); VOID ClearAnyCacheEntry(PFILTER pFilt, PFILTER_INTERFACE pIf); NTSTATUS UpdateBindingInformationEx( PFILTER_DRIVER_BINDING_INFO pBindInfo, PPAGED_FILTER_INTERFACE pPage ); NTSTATUS SetExtensionPointer( PPF_SET_EXTENSION_HOOK_INFO Info, PFILE_OBJECT FileObject ); PFILTER_INTERFACE FilterDriverLookupInterface( IN ULONG Index, IN IPAddr LinkNextHop ); BOOL WildFilter(PFILTER pf); __inline BMAddress(DWORD dwAddr) /*++ Routine Description: Check if the given address is the broadcast address or a multicast address. --*/ { UCHAR cPtr = (UCHAR)dwAddr; if((dwAddr == BCASTADDR) || ((cPtr >= MCASTSTART) && (cPtr <= MCASTEND) ) ) { return(TRUE); } return(FALSE); } #endif