//This var den delphi omvandlingen av fltdefs.h, men var är källan?
enhetsfltdefs;
////////////////////////////////////////////////////////////////////////////////
//
// Delphi omvandling av fltdefs.h för bruk med IPHLPAPI.DLLEN
//
////////////////////////////////////////////////////////////////////////////////
ha kontakt
bruk
Windows;
const
IPHLPAPI = ”IPHLPAPI.DLL”;
// bytesamling
typ
TByteArray = samling [0. Pred (MaxInt)] av byten;
PByteArray = ^TByteArray;
// datatyper
typ
FILTER_HANDLE = pekare;
PFILTER_HANDLE = ^FILTER_HANDLE;
INTERFACE_HANDLE = pekare;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE;
// GlobalFilter uppräkning
const
GF_FRAGMENTS = 2;
GF_STRONGHOST = 8;
GF_FRAGCACHE = 9;
typ
GLOBAL_FILTER = heltal;
PGLOBAL_FILTER = ^GLOBAL_FILTER;
// PFAddressType uppräkning
const
PF_IPV4 = 0;
PF_IPV6 = 1;
typ
PFADDRESSTYPE = heltal;
PPFADDRESSTYPE = ^PFADDRESSTYPE;
// PFForwardAction uppräkning
const
PF_ACTION_FORWARD = 0;
PF_ACTION_DROP = 1;
typ
PFFORWARD_ACTION = heltal;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
// PFFrameType uppräkning
const
PFFT_FILTER = 1;
PFFT_FRAG = 2;
PFFT_SPOOF = 3;
typ
PFFRAMETYPE = heltal;
PPFFRAMETYPE = ^PFFRAMETYPE;
typ
_PF_FILTER_DESCRIPTOR = packat rekord
dwFilterFlags: DWORD;
dwRule: DWORD;
pfatType: PFADDRESSTYPE;
SrcAddr: PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray;
DstMask: PByteArray;
dwProtocol: DWORD;
fLateBound: DWORD;
wSrcPort: Uttrycka;
wDstPort: Uttrycka;
wSrcPortHighRange: Uttrycka;
wDstPortHighRange: Uttrycka;
avsluta;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR;
typ
_PF_FILTER_STATS = packat rekord
dwNumPacketsFiltered: DWORD;
info: PF_FILTER_DESCRIPTOR;
avsluta;
PF_FILTER_STATS = _PF_FILTER_STATS;
PPF_FILTER_STATS = ^PF_FILTER_STATS;
typ
_PF_INTERFACE_STATS = packat rekord
pvDriverContext: Pekare;
dwFlags: DWORD;
dwInDrops: DWORD;
dwOutDrops: DWORD;
eaInAction: PFFORWARD_ACTION;
eaOutAction: PFFORWARD_ACTION;
dwNumInFilters: DWORD;
dwNumOutFilters: DWORD;
dwFrag: DWORD;
dwSpoof: DWORD;
dwReserved1: DWORD;
dwReserved2: DWORD;
liSyn: LARGE_INTEGER;
liTotalLogged: LARGE_INTEGER;
dwLostLogEntries: DWORD;
FilterInfo: Samling [0..0] av PF_FILTER_STATS;
avsluta;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS;
typ
_PF_LATEBIND_INFO = packat rekord
SrcAddr: PByteArray;
DstAddr: PByteArray;
Maskera: PByteArray;
avsluta;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO;
typ
_PFLOGFRAME = packat rekord
Tidsstämpel: LARGE_INTEGER;
pfeTypeOfFrame: PFFRAMETYPE;
dwTotalSizeUsed: DWORD;
dwFilterRule: DWORD;
wSizeOfAdditionalData: Uttrycka;
wSizeOfIpHeader: Uttrycka;
dwInterfaceName: DWORD;
dwIPIndex: DWORD;
bPacketData: Samling [0..0] av byten;
avsluta;
PFLOGFRAME = _PFLOGFRAME;
PPFLOGFRAME = ^PFLOGFRAME;
const
FILTER_PROTO_ANY = $00;
FILTER_PROTO_ICMP = $01;
FILTER_PROTO_TCP = $06;
FILTER_PROTO_UDP = $11;
FILTER_TCPUDP_PORT_ANY = $00;
const
FILTER_ICMP_TYPE_ANY = $FF;
FILTER_ICMP_CODE_ANY = $FF;
const
FD_FLAGS_NOSYN = $01;
FD_FLAGS_ALLFLAGS = FD_FLAGS_NOSYN;
const
LB_SRC_ADDR_USE_SRCADDR_FLAG = $00000001;
LB_SRC_ADDR_USE_DSTADDR_FLAG = $00000002;
LB_DST_ADDR_USE_SRCADDR_FLAG = $00000004;
LB_DST_ADDR_USE_DSTADDR_FLAG = $00000008;
LB_SRC_MASK_LATE_FLAG = $00000010;
LB_DST_MASK_LATE_FLAG = $00000020;
const
ERROR_BASE = 23000;
PFERROR_NO_PF_INTERFACE = (ERROR_BASE + 0); // gick tillbaka aldrig.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1);
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2);
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3);
////////////////////////////////////////////////////////////////////////////////
//
// filtrerar fungerar exporterat av IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
fungera PfCreateInterface (
dwName: DWORD;
inAction: PFFORWARD_ACTION;
outAction: PFFORWARD_ACTION;
bUseLog: BOOL;
bMustBeUnique: BOOL;
var-ppInterface: INTERFACE_HANDLE): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfCreateInterface@24”;
fungera PfDeleteInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfDeleteInterface@4”;
fungera PfAddFiltersToInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfAddFiltersToInterface@24”;
fungera PfRemoveFiltersFromInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfRemoveFiltersFromInterface@20”;
fungera PfRemoveFilterHandles (
pInterface: INTERFACE_HANDLE;
cFilters: DWORD;
pvHandles: PFILTER_HANDLE): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfRemoveFilterHandles@12”;
fungera PfUnBindInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfUnBindInterface@4”;
fungera PfBindInterfaceToIndex (
pInterface: INTERFACE_HANDLE;
dwIndex: DWORD;
pfatLinkType: PFADDRESSTYPE;
LinkIPAddress: PByteArray): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfBindInterfaceToIndex@16”;
fungera PfBindInterfaceToIPAddress (
pInterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE;
IP address: PByteArray): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfBindInterfaceToIPAddress@12”;
fungera PfRebindFilters (
pInterface: INTERFACE_HANDLE;
pLateBindInfo: PPF_LATEBIND_INFO): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfRebindFilters@8”;
fungera PfAddGlobalFilterToInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfAddGlobalFilterToInterface@8”;
fungera PfRemoveGlobalFilterFromInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfRemoveGlobalFilterFromInterface@8”;
////////////////////////////////////////////////////////////////////////////////
//
// loggar APIs. Notera att det finns på mest en loggar och den måste skapas
// för några har kontakt behöva det skapas. Det finns inget långt till uppsättning a
// loggar på ett existerande har kontakt. Logga kan appliceras till några eller alla av
// har kontakt.
//
///////////////////////////////////////////////////////////////////////
fungera PfMakeLog (
hEvent: THandle): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfMakeLog@4”;
fungera PfSetLogBuffer (
pbBuffer: PByteArray;
dwSize: DWORD;
dwThreshold: DWORD;
dwEntries: DWORD;
pdwLoggedEntries: PDWORD;
pdwLostEntries: PDWORD;
pdwSizeUsed: PDWORD): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfSetLogBuffer@28”;
fungera PfDeleteLog (
): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfDeleteLog@0”;
////////////////////////////////////////////////////////////////////////////////
//
// får statistik. Notera pdwBufferSize i en IN-/OUTparameter. Om
// ERROR_INSUFFICIENT_BUFFER gås tillbaka, allmänningstatistiken är
tillgängliga // och den korrekta byteräkningen är *pdwBufferSize in. Om endast
// har kontakt statistik är nödvändig, ger en fungera som buffert av storleksanpassar
// PF_INTERFACE_STATS endast. Om filtrerabeskrivningarna behövs också,
// levererar därefter ett stort fungera som buffert eller använder den gångna tillbaka räkningen från den första appellen
// som tilldelar en fungera som buffert av tillräckligt, storleksanpassar. Notera det för delad har kontakt,
// som detta understöder appell, kan missa med ERROR_INSUFFICIENT_BUFFER. Detta kan hända
//, om de andra sharersna tillfogar, filtrerar i interimsen. Detta bör inte hända för
// som ett UNIKT har kontakt.
//
////////////////////////////////////////////////////////////////////////////////
fungera PfGetInterfaceStatistics (
pInterface: INTERFACE_HANDLE;
ppfStats: PPF_INTERFACE_STATS;
pdwBufferSize: PDWORD;
fResetCounters: BOOL): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfGetInterfaceStatistics@16”;
////////////////////////////////////////////////////////////////////////////////
//
// testar ett paket. Denna ska appell utvärderar paketet mot given
// har kontakt och går den filtrera handlingen tillbaka.
//
////////////////////////////////////////////////////////////////////////////////
fungera PfTestPacket (
pInInterface: INTERFACE_HANDLE;
pOutInterface: INTERFACE_HANDLE;
cBytes: DWORD;
pbPacket: PByteArray;
ppAction: PPFFORWARD_ACTION): DWORD;
stdcall; utsidan IPHLPAPI namnger ”_PfTestPacket@20”;
genomförande
avsluta.
|