277 lines
6.3 KiB
C
277 lines
6.3 KiB
C
#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
|