¿estaba la conversión //This de delphi de fltdefs.h, pero donde es la fuente?
fltdefs de la unidad;
////////////////////////////////////////////////////////////////////////////////
//
Conversión de // Delphi de fltdefs.h para el uso con el IPHLPAPI.DLL
//
////////////////////////////////////////////////////////////////////////////////
interfaz
aplicaciones
Windows;
const
IPHLPAPI = “IPHLPAPI.DLL”;
Arsenal del octeto de //
tipo
TByteArray = arsenal [0. Pred (MaxInt)] del octeto;
PByteArray = ^TByteArray;
Tipos de datos de //
tipo
FILTER_HANDLE = indicador;
PFILTER_HANDLE = ^FILTER_HANDLE;
INTERFACE_HANDLE = indicador;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE;
Enumeración de // GlobalFilter
const
GF_FRAGMENTS = 2;
GF_STRONGHOST = 8;
GF_FRAGCACHE = 9;
tipo
GLOBAL_FILTER = número entero;
PGLOBAL_FILTER = ^GLOBAL_FILTER;
Enumeración de // PFAddressType
const
PF_IPV4 = 0;
PF_IPV6 = 1;
tipo
PFADDRESSTYPE = número entero;
PPFADDRESSTYPE = ^PFADDRESSTYPE;
Enumeración de // PFForwardAction
const
PF_ACTION_FORWARD = 0;
PF_ACTION_DROP = 1;
tipo
PFFORWARD_ACTION = número entero;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
Enumeración de // PFFrameType
const
PFFT_FILTER = 1;
PFFT_FRAG = 2;
PFFT_SPOOF = 3;
tipo
PFFRAMETYPE = número entero;
PPFFRAMETYPE = ^PFFRAMETYPE;
tipo
_PF_FILTER_DESCRIPTOR = expediente lleno
dwFilterFlags: DWORD;
dwRule: DWORD;
pfatType: PFADDRESSTYPE;
SrcAddr: PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray;
DstMask: PByteArray;
dwProtocol: DWORD;
fLateBound: DWORD;
wSrcPort: Palabra;
wDstPort: Palabra;
wSrcPortHighRange: Palabra;
wDstPortHighRange: Palabra;
extremo;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR;
tipo
_PF_FILTER_STATS = expediente lleno
dwNumPacketsFiltered: DWORD;
Info: PF_FILTER_DESCRIPTOR;
extremo;
PF_FILTER_STATS = _PF_FILTER_STATS;
PPF_FILTER_STATS = ^PF_FILTER_STATS;
tipo
_PF_INTERFACE_STATS = expediente lleno
pvDriverContext: Indicador;
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: Arsenal [0..0] de PF_FILTER_STATS;
extremo;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS;
tipo
_PF_LATEBIND_INFO = expediente lleno
SrcAddr: PByteArray;
DstAddr: PByteArray;
Máscara: PByteArray;
extremo;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO;
tipo
_PFLOGFRAME = expediente lleno
Reloj fechador: LARGE_INTEGER;
pfeTypeOfFrame: PFFRAMETYPE;
dwTotalSizeUsed: DWORD;
dwFilterRule: DWORD;
wSizeOfAdditionalData: Palabra;
wSizeOfIpHeader: Palabra;
dwInterfaceName: DWORD;
dwIPIndex: DWORD;
bPacketData: Arsenal [0..0] del octeto;
extremo;
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); // nunca volvió.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1);
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2);
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3);
////////////////////////////////////////////////////////////////////////////////
//
Funciones del filtro de // exportadas por IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
función PfCreateInterface (
dwName: DWORD;
inacción: PFFORWARD_ACTION;
outAction: PFFORWARD_ACTION;
bUseLog: BOOL;
bMustBeUnique: BOOL;
ppInterface del var: INTERFACE_HANDLE): DWORD;
stdcall; nombre externo “_PfCreateInterface@24” de IPHLPAPI;
función PfDeleteInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; nombre externo “_PfDeleteInterface@4” de IPHLPAPI;
función PfAddFiltersToInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE): DWORD;
stdcall; nombre externo “_PfAddFiltersToInterface@24” de IPHLPAPI;
función PfRemoveFiltersFromInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR): DWORD;
stdcall; nombre externo “_PfRemoveFiltersFromInterface@20” de IPHLPAPI;
función PfRemoveFilterHandles (
pInterface: INTERFACE_HANDLE;
cFilters: DWORD;
pvHandles: PFILTER_HANDLE): DWORD;
stdcall; nombre externo “_PfRemoveFilterHandles@12” de IPHLPAPI;
función PfUnBindInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; nombre externo “_PfUnBindInterface@4” de IPHLPAPI;
función PfBindInterfaceToIndex (
pInterface: INTERFACE_HANDLE;
dwIndex: DWORD;
pfatLinkType: PFADDRESSTYPE;
LinkIPAddress: PByteArray): DWORD;
stdcall; nombre externo “_PfBindInterfaceToIndex@16” de IPHLPAPI;
función PfBindInterfaceToIPAddress (
pInterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE;
IP address: PByteArray): DWORD;
stdcall; nombre externo “_PfBindInterfaceToIPAddress@12” de IPHLPAPI;
función PfRebindFilters (
pInterface: INTERFACE_HANDLE;
pLateBindInfo: PPF_LATEBIND_INFO): DWORD;
stdcall; nombre externo “_PfRebindFilters@8” de IPHLPAPI;
función PfAddGlobalFilterToInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; nombre externo “_PfAddGlobalFilterToInterface@8” de IPHLPAPI;
función PfRemoveGlobalFilterFromInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; nombre externo “_PfRemoveGlobalFilterFromInterface@8” de IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
APIs del registro de //. Observar que hay a lo más un registro y debe ser creado
// antes de cualquier interfaz que lo necesita se crea. No hay manera de fijar a
registro de // sobre un interfaz existente. El registro se puede aplicar a lo que sea de
// los interfaces.
//
///////////////////////////////////////////////////////////////////////
función PfMakeLog (
hEvent: Manilla en forma de T): DWORD;
stdcall; nombre externo “_PfMakeLog@4” de IPHLPAPI;
función PfSetLogBuffer (
pbBuffer: PByteArray;
dwSize: DWORD;
dwThreshold: DWORD;
dwEntries: DWORD;
pdwLoggedEntries: PDWORD;
pdwLostEntries: PDWORD;
pdwSizeUsed: PDWORD): DWORD;
stdcall; nombre externo “_PfSetLogBuffer@28” de IPHLPAPI;
función PfDeleteLog (
): DWORD;
stdcall; nombre externo “_PfDeleteLog@0” de IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
// consigue estadísticas. Observar pdwBufferSize en un parámetro de IN/OUT. Si
Se vuelve // ERROR_INSUFFICIENT_BUFFER, las estadísticas comunes es
// disponible y la cuenta de octeto correcta es adentro *pdwBufferSize. Si solamente
las estadísticas del interfaz de // son necesarias, proporcionan un almacenador intermediario del tamaño
// PF_INTERFACE_STATS solamente. Si las descripciones del filtro también se necesitan,
// entonces suministra un almacenador intermediario grande, o utiliza la cuenta vuelta de la primera llamada
// para asignar un almacenador intermediario del suficiente tamaño. Observar eso para un interfaz compartido,
// que esta segunda llamada puede fallar con ERROR_INSUFFICIENT_BUFFER. Esto puede suceder
// si los otros compartidores agregan los filtros en el interino. Esto no debe suceder para
// un interfaz ÚNICO.
//
////////////////////////////////////////////////////////////////////////////////
función PfGetInterfaceStatistics (
pInterface: INTERFACE_HANDLE;
ppfStats: PPF_INTERFACE_STATS;
pdwBufferSize: PDWORD;
fResetCounters: BOOL): DWORD;
stdcall; nombre externo “_PfGetInterfaceStatistics@16” de IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
Prueba de // un paquete. Esta llamada evaluará el paquete contra dado
los interfaces de // y vuelven la acción de filtración.
//
////////////////////////////////////////////////////////////////////////////////
función PfTestPacket (
pInInterface: INTERFACE_HANDLE;
pOutInterface: INTERFACE_HANDLE;
cBytes: DWORD;
pbPacket: PByteArray;
ppAction: PPFFORWARD_ACTION): DWORD;
stdcall; nombre externo “_PfTestPacket@20” de IPHLPAPI;
puesta en práctica
extremo.
|