//This было преобразованием delphi fltdefs.h, но где будет источником?
fltdefs блока;
////////////////////////////////////////////////////////////////////////////////
//
Преобразование // Делфи fltdefs.h для пользы с IPHLPAPI.DLL
//
////////////////////////////////////////////////////////////////////////////////
поверхность стыка
пользы
Windows;
const
IPHLPAPI = «IPHLPAPI.DLL»;
Блок байта //
тип
TByteArray = блок [0. Pred (MaxInt)] байта;
PByteArray = ^TByteArray;
Типы данным по //
тип
FILTER_HANDLE = указатель;
PFILTER_HANDLE = ^FILTER_HANDLE;
INTERFACE_HANDLE = указатель;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE;
Обозначение // GlobalFilter
const
GF_FRAGMENTS = 2;
GF_STRONGHOST = 8;
GF_FRAGCACHE = 9;
тип
GLOBAL_FILTER = интежер;
PGLOBAL_FILTER = ^GLOBAL_FILTER;
Обозначение // PFAddressType
const
PF_IPV4 = 0;
PF_IPV6 = 1;
тип
PFADDRESSTYPE = интежер;
PPFADDRESSTYPE = ^PFADDRESSTYPE;
Обозначение // PFForwardAction
const
PF_ACTION_FORWARD = 0;
PF_ACTION_DROP = 1;
тип
PFFORWARD_ACTION = интежер;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
Обозначение // PFFrameType
const
PFFT_FILTER = 1;
PFFT_FRAG = 2;
PFFT_SPOOF = 3;
тип
PFFRAMETYPE = интежер;
PPFFRAMETYPE = ^PFFRAMETYPE;
тип
_PF_FILTER_DESCRIPTOR = упакованный показатель
dwFilterFlags: DWORD;
dwRule: DWORD;
pfatType: PFADDRESSTYPE;
SrcAddr: PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray;
DstMask: PByteArray;
dwProtocol: DWORD;
fLateBound: DWORD;
wSrcPort: Слово;
wDstPort: Слово;
wSrcPortHighRange: Слово;
wDstPortHighRange: Слово;
конец;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR;
тип
_PF_FILTER_STATS = упакованный показатель
dwNumPacketsFiltered: DWORD;
info: PF_FILTER_DESCRIPTOR;
конец;
PF_FILTER_STATS = _PF_FILTER_STATS;
PPF_FILTER_STATS = ^PF_FILTER_STATS;
тип
_PF_INTERFACE_STATS = упакованный показатель
pvDriverContext: Указатель;
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: Блок [0..0] PF_FILTER_STATS;
конец;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS;
тип
_PF_LATEBIND_INFO = упакованный показатель
SrcAddr: PByteArray;
DstAddr: PByteArray;
Маска: PByteArray;
конец;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO;
тип
_PFLOGFRAME = упакованный показатель
Фиксация времени: LARGE_INTEGER;
pfeTypeOfFrame: PFFRAMETYPE;
dwTotalSizeUsed: DWORD;
dwFilterRule: DWORD;
wSizeOfAdditionalData: Слово;
wSizeOfIpHeader: Слово;
dwInterfaceName: DWORD;
dwIPIndex: DWORD;
bPacketData: Блок [0..0] байта;
конец;
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); // никогда не возвращало.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1);
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2);
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3);
////////////////////////////////////////////////////////////////////////////////
//
Функции фильтра // ехпортированные IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
функция PfCreateInterface (
dwName: DWORD;
бездействие: PFFORWARD_ACTION;
outAction: PFFORWARD_ACTION;
bUseLog: BOOL;
bMustBeUnique: BOOL;
ppInterface var: INTERFACE_HANDLE): DWORD;
stdcall; внешнее имя «_PfCreateInterface@24» IPHLPAPI;
функция PfDeleteInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; внешнее имя «_PfDeleteInterface@4» IPHLPAPI;
функция PfAddFiltersToInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE): DWORD;
stdcall; внешнее имя «_PfAddFiltersToInterface@24» IPHLPAPI;
функция PfRemoveFiltersFromInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR): DWORD;
stdcall; внешнее имя «_PfRemoveFiltersFromInterface@20» IPHLPAPI;
функция PfRemoveFilterHandles (
pInterface: INTERFACE_HANDLE;
cFilters: DWORD;
pvHandles: PFILTER_HANDLE): DWORD;
stdcall; внешнее имя «_PfRemoveFilterHandles@12» IPHLPAPI;
функция PfUnBindInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; внешнее имя «_PfUnBindInterface@4» IPHLPAPI;
функция PfBindInterfaceToIndex (
pInterface: INTERFACE_HANDLE;
dwIndex: DWORD;
pfatLinkType: PFADDRESSTYPE;
LinkIPAddress: PByteArray): DWORD;
stdcall; внешнее имя «_PfBindInterfaceToIndex@16» IPHLPAPI;
функция PfBindInterfaceToIPAddress (
pInterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE;
IPAddress: PByteArray): DWORD;
stdcall; внешнее имя «_PfBindInterfaceToIPAddress@12» IPHLPAPI;
функция PfRebindFilters (
pInterface: INTERFACE_HANDLE;
pLateBindInfo: PPF_LATEBIND_INFO): DWORD;
stdcall; внешнее имя «_PfRebindFilters@8» IPHLPAPI;
функция PfAddGlobalFilterToInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; внешнее имя «_PfAddGlobalFilterToInterface@8» IPHLPAPI;
функция PfRemoveGlobalFilterFromInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; внешнее имя «_PfRemoveGlobalFilterFromInterface@8» IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
APIs журнала //. Заметьте что по большей мере один журнал и его необходимо создаться
// перед любой поверхностью стыка оно создано. Не будет дороги установить a
журнал // на существующий поверхность стыка. Журнал может быть прикладной к любому
// поверхности стыка.
//
///////////////////////////////////////////////////////////////////////
функция PfMakeLog (
hEvent: Т-образная рукоятка): DWORD;
stdcall; внешнее имя «_PfMakeLog@4» IPHLPAPI;
функция PfSetLogBuffer (
pbBuffer: PByteArray;
dwSize: DWORD;
dwThreshold: DWORD;
dwEntries: DWORD;
pdwLoggedEntries: PDWORD;
pdwLostEntries: PDWORD;
pdwSizeUsed: PDWORD): DWORD;
stdcall; внешнее имя «_PfSetLogBuffer@28» IPHLPAPI;
функция PfDeleteLog (
): DWORD;
stdcall; внешнее имя «_PfDeleteLog@0» IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
// получает статистик. Заметьте pdwBufferSize в параметре IN/OUT. Если
Возвращено // ERROR_INSUFFICIENT_BUFFER, обычный статистик
имеющееся // и правильно отсчет байта внутри *pdwBufferSize. Если только
статистик поверхности стыка // необходимы, обеспечивают буфер размера
// PF_INTERFACE_STATS только. Если описания фильтра также необходимы, то
// после этого поставляет большой буфер, или использует возвращенный отсчет от первого звонока
// для того чтобы размещать буфер достаточно размера. Заметьте то для, котор делят поверхности стыка,
// этот второй, котор звонок может потерпеть неудачу с ERROR_INSUFFICIENT_BUFFER. Это может случиться
// если другие sharers добавляют фильтры в промежутке времени. Это не должно случиться для
// УНИКАЛЬНО поверхность стыка.
//
////////////////////////////////////////////////////////////////////////////////
функция PfGetInterfaceStatistics (
pInterface: INTERFACE_HANDLE;
ppfStats: PPF_INTERFACE_STATS;
pdwBufferSize: PDWORD;
fResetCounters: BOOL): DWORD;
stdcall; внешнее имя «_PfGetInterfaceStatistics@16» IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
Испытание // пакет. Этот звонок оценит пакет против дали, котор
поверхности стыка // и возвращают фильтруя действие.
//
////////////////////////////////////////////////////////////////////////////////
функция PfTestPacket (
pInInterface: INTERFACE_HANDLE;
pOutInterface: INTERFACE_HANDLE;
cBytes: DWORD;
pbPacket: PByteArray;
ppAction: PPFFORWARD_ACTION): DWORD;
stdcall; внешнее имя «_PfTestPacket@20» IPHLPAPI;
вставка
конец.
|