//This était la conversion de Delphes de fltdefs.h, mais où est la source ?
fltdefs d'unité ;
////////////////////////////////////////////////////////////////////////////////
//
Conversion de // Delphes de fltdefs.h pour l'usage avec l'IPHLPAPI.DLL
//
////////////////////////////////////////////////////////////////////////////////
interface
utilisations
Windows ;
const
IPHLPAPI = « IPHLPAPI.DLL » ;
Rangée de byte de //
type
TByteArray = rangée [0. Pred (MaxInt)] du byte ;
PByteArray = ^TByteArray ;
Types de données de //
type
FILTER_HANDLE = indicateur ;
PFILTER_HANDLE = ^FILTER_HANDLE ;
INTERFACE_HANDLE = indicateur ;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE ;
Énumération de // GlobalFilter
const
GF_FRAGMENTS = 2 ;
GF_STRONGHOST = 8 ;
GF_FRAGCACHE = 9 ;
type
GLOBAL_FILTER = nombre entier ;
PGLOBAL_FILTER = ^GLOBAL_FILTER ;
Énumération de // PFAddressType
const
PF_IPV4 = 0 ;
PF_IPV6 = 1 ;
type
PFADDRESSTYPE = nombre entier ;
PPFADDRESSTYPE = ^PFADDRESSTYPE ;
Énumération de // PFForwardAction
const
PF_ACTION_FORWARD = 0 ;
PF_ACTION_DROP = 1 ;
type
PFFORWARD_ACTION = nombre entier ;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION ;
Énumération de // PFFrameType
const
PFFT_FILTER = 1 ;
PFFT_FRAG = 2 ;
PFFT_SPOOF = 3 ;
type
PFFRAMETYPE = nombre entier ;
PPFFRAMETYPE = ^PFFRAMETYPE ;
type
_PF_FILTER_DESCRIPTOR = disque emballé
dwFilterFlags : DWORD ;
dwRule : DWORD ;
pfatType : PFADDRESSTYPE ;
SrcAddr : PByteArray ;
SrcMask : PByteArray ;
DstAddr : PByteArray ;
DstMask : PByteArray ;
dwProtocol : DWORD ;
fLateBound : DWORD ;
wSrcPort : Mot ;
wDstPort : Mot ;
wSrcPortHighRange : Mot ;
wDstPortHighRange : Mot ;
extrémité ;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR ;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR ;
type
_PF_FILTER_STATS = disque emballé
dwNumPacketsFiltered : DWORD ;
information : PF_FILTER_DESCRIPTOR ;
extrémité ;
PF_FILTER_STATS = _PF_FILTER_STATS ;
PPF_FILTER_STATS = ^PF_FILTER_STATS ;
type
_PF_INTERFACE_STATS = disque emballé
pvDriverContext : Indicateur ;
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 : Rangée [0..0] de PF_FILTER_STATS ;
extrémité ;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS ;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS ;
type
_PF_LATEBIND_INFO = disque emballé
SrcAddr : PByteArray ;
DstAddr : PByteArray ;
Masque : PByteArray ;
extrémité ;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO ;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO ;
type
_PFLOGFRAME = disque emballé
Horodateur : LARGE_INTEGER ;
pfeTypeOfFrame : PFFRAMETYPE ;
dwTotalSizeUsed : DWORD ;
dwFilterRule : DWORD ;
wSizeOfAdditionalData : Mot ;
wSizeOfIpHeader : Mot ;
dwInterfaceName : DWORD ;
dwIPIndex : DWORD ;
bPacketData : Choix [0..0] de byte ;
extrémité ;
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) ; // n'est jamais retourné.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1) ;
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2) ;
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3) ;
////////////////////////////////////////////////////////////////////////////////
//
Fonctions de filtre de // exportées par IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
fonction PfCreateInterface (
dwName : DWORD ;
inaction : PFFORWARD_ACTION ;
outAction : PFFORWARD_ACTION ;
bUseLog : BOOL ;
bMustBeUnique : BOOL ;
ppInterface de variété : INTERFACE_HANDLE) : DWORD ;
stdcall ; nom externe « _PfCreateInterface@24 » d'IPHLPAPI ;
fonction PfDeleteInterface (
pInterface : INTERFACE_HANDLE) : DWORD ;
stdcall ; nom externe « _PfDeleteInterface@4 » d'IPHLPAPI ;
fonction PfAddFiltersToInterface (
ih : INTERFACE_HANDLE ;
cInFilters : DWORD ;
pfiltIn : PPF_FILTER_DESCRIPTOR ;
cOutFilters : DWORD ;
pfiltOut : PPF_FILTER_DESCRIPTOR ;
pfHandle : PFILTER_HANDLE) : DWORD ;
stdcall ; nom externe « _PfAddFiltersToInterface@24 » d'IPHLPAPI ;
fonction PfRemoveFiltersFromInterface (
ih : INTERFACE_HANDLE ;
cInFilters : DWORD ;
pfiltIn : PPF_FILTER_DESCRIPTOR ;
cOutFilters : DWORD ;
pfiltOut : PPF_FILTER_DESCRIPTOR) : DWORD ;
stdcall ; nom externe « _PfRemoveFiltersFromInterface@20 » d'IPHLPAPI ;
fonction PfRemoveFilterHandles (
pInterface : INTERFACE_HANDLE ;
cFilters : DWORD ;
pvHandles : PFILTER_HANDLE) : DWORD ;
stdcall ; nom externe « _PfRemoveFilterHandles@12 » d'IPHLPAPI ;
fonction PfUnBindInterface (
pInterface : INTERFACE_HANDLE) : DWORD ;
stdcall ; nom externe « _PfUnBindInterface@4 » d'IPHLPAPI ;
fonction PfBindInterfaceToIndex (
pInterface : INTERFACE_HANDLE ;
dwIndex : DWORD ;
pfatLinkType : PFADDRESSTYPE ;
LinkIPAddress : PByteArray) : DWORD ;
stdcall ; nom externe « _PfBindInterfaceToIndex@16 » d'IPHLPAPI ;
fonction PfBindInterfaceToIPAddress (
pInterface : INTERFACE_HANDLE ;
pfatLinkType : PFADDRESSTYPE ;
IP address : PByteArray) : DWORD ;
stdcall ; nom externe « _PfBindInterfaceToIPAddress@12 » d'IPHLPAPI ;
fonction PfRebindFilters (
pInterface : INTERFACE_HANDLE ;
pLateBindInfo : PPF_LATEBIND_INFO) : DWORD ;
stdcall ; nom externe « _PfRebindFilters@8 » d'IPHLPAPI ;
fonction PfAddGlobalFilterToInterface (
pInterface : INTERFACE_HANDLE ;
gfFilter : GLOBAL_FILTER) : DWORD ;
stdcall ; nom externe « _PfAddGlobalFilterToInterface@8 » d'IPHLPAPI ;
fonction PfRemoveGlobalFilterFromInterface (
pInterface : INTERFACE_HANDLE ;
gfFilter : GLOBAL_FILTER) : DWORD ;
stdcall ; nom externe « _PfRemoveGlobalFilterFromInterface@8 » d'IPHLPAPI ;
////////////////////////////////////////////////////////////////////////////////
//
Api de notation de //. Noter qu'il y a tout au plus une notation et elle doit être créée
// avant n'importe quelle interface ayant besoin de elle est créé. Il n'y a aucune manière de placer a
notation de // sur une interface existante. La notation peut être appliquée au quelques un ou tout de
// les interfaces.
//
///////////////////////////////////////////////////////////////////////
fonction PfMakeLog (
hEvent : Poignée en T) : DWORD ;
stdcall ; nom externe « _PfMakeLog@4 » d'IPHLPAPI ;
fonction PfSetLogBuffer (
pbBuffer : PByteArray ;
dwSize : DWORD ;
dwThreshold : DWORD ;
dwEntries : DWORD ;
pdwLoggedEntries : PDWORD ;
pdwLostEntries : PDWORD ;
pdwSizeUsed : PDWORD) : DWORD ;
stdcall ; nom externe « _PfSetLogBuffer@28 » d'IPHLPAPI ;
fonction PfDeleteLog (
) : DWORD ;
stdcall ; nom externe « _PfDeleteLog@0 » d'IPHLPAPI ;
////////////////////////////////////////////////////////////////////////////////
//
// obtiennent des statistiques. Noter pdwBufferSize dans un paramètre d'IN/OUT. Si
// ERROR_INSUFFICIENT_BUFFER est retourné, les statistiques communes sont
// disponible et le nombre d'octets correct est *pdwBufferSize dedans. Si seulement
les statistiques d'interface de // sont nécessaires, fournissent un amortisseur de taille
// PF_INTERFACE_STATS seulement. Si les descriptions de filtre sont nécessaires également,
// fournissent alors un grand amortisseur, ou emploient le compte retourné du premier appel
// pour assigner un amortisseur de taille suffisante. Noter cela pour une interface partagée,
// que cet deuxième appel peut échouer avec ERROR_INSUFFICIENT_BUFFER. Ceci peut se produire
// si les autres détenteurs ajoutent des filtres dans l'intérim. Ceci ne devrait pas se produire pour
// une interface UNIQUE.
//
////////////////////////////////////////////////////////////////////////////////
fonction PfGetInterfaceStatistics (
pInterface : INTERFACE_HANDLE ;
ppfStats : PPF_INTERFACE_STATS ;
pdwBufferSize : PDWORD ;
fResetCounters : BOOL) : DWORD ;
stdcall ; nom externe « _PfGetInterfaceStatistics@16 » d'IPHLPAPI ;
////////////////////////////////////////////////////////////////////////////////
//
Essai de // un paquet. Cet appel évaluera le paquet contre donné
les interfaces de // et renvoient l'action de filtrage.
//
////////////////////////////////////////////////////////////////////////////////
fonction PfTestPacket (
pInInterface : INTERFACE_HANDLE ;
pOutInterface : INTERFACE_HANDLE ;
cBytes : DWORD ;
pbPacket : PByteArray ;
ppAction : PPFFORWARD_ACTION) : DWORD ;
stdcall ; nom externe « _PfTestPacket@20 » d'IPHLPAPI ;
exécution
extrémité.
|