197 lines
6.7 KiB
C
197 lines
6.7 KiB
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the w64 mingw-runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER within this package.
|
|
*/
|
|
#ifndef __TRAFFIC_H
|
|
#define __TRAFFIC_H
|
|
|
|
#include <ntddndis.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define CURRENT_TCI_VERSION 0x0002
|
|
|
|
#define TC_NOTIFY_IFC_UP 1
|
|
#define TC_NOTIFY_IFC_CLOSE 2
|
|
#define TC_NOTIFY_IFC_CHANGE 3
|
|
#define TC_NOTIFY_PARAM_CHANGED 4
|
|
#define TC_NOTIFY_FLOW_CLOSE 5
|
|
#define TC_INVALID_HANDLE ((HANDLE)0)
|
|
|
|
#define MAX_STRING_LENGTH 256
|
|
|
|
#ifndef CALLBACK
|
|
#define CALLBACK __stdcall
|
|
#endif
|
|
|
|
#ifndef WINAPI
|
|
#define WINAPI __stdcall
|
|
#endif
|
|
|
|
#ifndef APIENTRY
|
|
#define APIENTRY WINAPI
|
|
#endif
|
|
|
|
typedef VOID (CALLBACK *TCI_NOTIFY_HANDLER)(HANDLE ClRegCtx,HANDLE ClIfcCtx,ULONG Event,HANDLE SubCode,ULONG BufSize,PVOID Buffer);
|
|
typedef VOID (CALLBACK *TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
|
|
typedef VOID (CALLBACK *TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
|
|
typedef VOID (CALLBACK *TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
|
|
|
|
typedef struct _TCI_CLIENT_FUNC_LIST {
|
|
TCI_NOTIFY_HANDLER ClNotifyHandler;
|
|
TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler;
|
|
TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler;
|
|
TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler;
|
|
} TCI_CLIENT_FUNC_LIST,*PTCI_CLIENT_FUNC_LIST;
|
|
|
|
typedef struct _ADDRESS_LIST_DESCRIPTOR {
|
|
ULONG MediaType;
|
|
NETWORK_ADDRESS_LIST AddressList;
|
|
} ADDRESS_LIST_DESCRIPTOR,*PADDRESS_LIST_DESCRIPTOR;
|
|
|
|
typedef struct _TC_IFC_DESCRIPTOR {
|
|
ULONG Length;
|
|
LPWSTR pInterfaceName;
|
|
LPWSTR pInterfaceID;
|
|
ADDRESS_LIST_DESCRIPTOR AddressListDesc;
|
|
} TC_IFC_DESCRIPTOR,*PTC_IFC_DESCRIPTOR;
|
|
|
|
typedef struct _TC_SUPPORTED_INFO_BUFFER {
|
|
USHORT InstanceIDLength;
|
|
WCHAR InstanceID[MAX_STRING_LENGTH];
|
|
ADDRESS_LIST_DESCRIPTOR AddrListDesc;
|
|
} TC_SUPPORTED_INFO_BUFFER,*PTC_SUPPORTED_INFO_BUFFER;
|
|
|
|
typedef struct _TC_GEN_FILTER {
|
|
USHORT AddressType;
|
|
ULONG PatternSize;
|
|
PVOID Pattern;
|
|
PVOID Mask;
|
|
} TC_GEN_FILTER,*PTC_GEN_FILTER;
|
|
|
|
typedef struct _TC_GEN_FLOW {
|
|
FLOWSPEC SendingFlowspec;
|
|
FLOWSPEC ReceivingFlowspec;
|
|
ULONG TcObjectsLength;
|
|
QOS_OBJECT_HDR TcObjects[1];
|
|
} TC_GEN_FLOW,*PTC_GEN_FLOW;
|
|
|
|
typedef struct _IP_PATTERN {
|
|
ULONG Reserved1;
|
|
ULONG Reserved2;
|
|
ULONG SrcAddr;
|
|
ULONG DstAddr;
|
|
union {
|
|
struct { USHORT s_srcport,s_dstport; } S_un_ports;
|
|
struct { UCHAR s_type,s_code; USHORT filler; } S_un_icmp;
|
|
ULONG S_Spi;
|
|
} S_un;
|
|
UCHAR ProtocolId;
|
|
UCHAR Reserved3[3];
|
|
} IP_PATTERN,*PIP_PATTERN;
|
|
|
|
#define tcSrcPort S_un.S_un_ports.s_srcport
|
|
#define tcDstPort S_un.S_un_ports.s_dstport
|
|
#define tcIcmpType S_un.S_un_icmp.s_type
|
|
#define tcIcmpCode S_un.S_un_icmp.s_code
|
|
#define tcSpi S_un.S_Spi
|
|
|
|
typedef struct _IPX_PATTERN {
|
|
struct {
|
|
ULONG NetworkAddress;
|
|
UCHAR NodeAddress[6];
|
|
USHORT Socket;
|
|
} Src,Dest;
|
|
} IPX_PATTERN,*PIPX_PATTERN;
|
|
|
|
typedef struct _ENUMERATION_BUFFER {
|
|
ULONG Length;
|
|
ULONG OwnerProcessId;
|
|
USHORT FlowNameLength;
|
|
WCHAR FlowName[MAX_STRING_LENGTH];
|
|
PTC_GEN_FLOW pFlow;
|
|
ULONG NumberOfFilters;
|
|
TC_GEN_FILTER GenericFilter[1];
|
|
} ENUMERATION_BUFFER,*PENUMERATION_BUFFER;
|
|
|
|
#define QOS_TRAFFIC_GENERAL_ID_BASE 4000
|
|
#define QOS_OBJECT_DS_CLASS (0x00000001 + QOS_TRAFFIC_GENERAL_ID_BASE)
|
|
#define QOS_OBJECT_TRAFFIC_CLASS (0x00000002 + QOS_TRAFFIC_GENERAL_ID_BASE)
|
|
#define QOS_OBJECT_DIFFSERV (0x00000003 + QOS_TRAFFIC_GENERAL_ID_BASE)
|
|
#define QOS_OBJECT_TCP_TRAFFIC (0x00000004 + QOS_TRAFFIC_GENERAL_ID_BASE)
|
|
#define QOS_OBJECT_FRIENDLY_NAME (0x00000005 + QOS_TRAFFIC_GENERAL_ID_BASE)
|
|
|
|
typedef struct _QOS_FRIENDLY_NAME {
|
|
QOS_OBJECT_HDR ObjectHdr;
|
|
WCHAR FriendlyName[MAX_STRING_LENGTH];
|
|
} QOS_FRIENDLY_NAME,*LPQOS_FRIENDLY_NAME;
|
|
|
|
typedef struct _QOS_TRAFFIC_CLASS {
|
|
QOS_OBJECT_HDR ObjectHdr;
|
|
ULONG TrafficClass;
|
|
} QOS_TRAFFIC_CLASS,*LPQOS_TRAFFIC_CLASS;
|
|
|
|
typedef struct _QOS_DS_CLASS {
|
|
QOS_OBJECT_HDR ObjectHdr;
|
|
ULONG DSField;
|
|
} QOS_DS_CLASS,*LPQOS_DS_CLASS;
|
|
|
|
typedef struct _QOS_DIFFSERV {
|
|
QOS_OBJECT_HDR ObjectHdr;
|
|
ULONG DSFieldCount;
|
|
UCHAR DiffservRule[1];
|
|
} QOS_DIFFSERV,*LPQOS_DIFFSERV;
|
|
|
|
typedef struct _QOS_DIFFSERV_RULE {
|
|
UCHAR InboundDSField;
|
|
UCHAR ConformingOutboundDSField;
|
|
UCHAR NonConformingOutboundDSField;
|
|
UCHAR ConformingUserPriority;
|
|
UCHAR NonConformingUserPriority;
|
|
} QOS_DIFFSERV_RULE,*LPQOS_DIFFSERV_RULE;
|
|
|
|
typedef struct _QOS_TCP_TRAFFIC {
|
|
QOS_OBJECT_HDR ObjectHdr;
|
|
} QOS_TCP_TRAFFIC,*LPQOS_TCP_TRAFFIC;
|
|
|
|
#ifdef UNICODE
|
|
#define TcOpenInterface TcOpenInterfaceW
|
|
#define TcQueryFlow TcQueryFlowW
|
|
#define TcSetFlow TcSetFlowW
|
|
#define TcGetFlowName TcGetFlowNameW
|
|
#else
|
|
#define TcOpenInterface TcOpenInterfaceA
|
|
#define TcQueryFlow TcQueryFlowA
|
|
#define TcSetFlow TcSetFlowA
|
|
#define TcGetFlowName TcGetFlowNameA
|
|
#endif
|
|
|
|
ULONG WINAPI TcRegisterClient(ULONG TciVersion,HANDLE ClRegCtx,PTCI_CLIENT_FUNC_LIST ClientHandlerList,PHANDLE pClientHandle);
|
|
ULONG WINAPI TcEnumerateInterfaces(HANDLE ClientHandle,PULONG pBufferSize,PTC_IFC_DESCRIPTOR InterfaceBuffer);
|
|
ULONG WINAPI TcOpenInterfaceA(LPSTR pInterfaceName,HANDLE ClientHandle,HANDLE ClIfcCtx,PHANDLE pIfcHandle);
|
|
ULONG WINAPI TcOpenInterfaceW(LPWSTR pInterfaceName,HANDLE ClientHandle,HANDLE ClIfcCtx,PHANDLE pIfcHandle);
|
|
ULONG WINAPI TcCloseInterface(HANDLE IfcHandle);
|
|
ULONG WINAPI TcQueryInterface(HANDLE IfcHandle,LPGUID pGuidParam,BOOLEAN NotifyChange,PULONG pBufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcSetInterface(HANDLE IfcHandle,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcQueryFlowA(LPSTR pFlowName,LPGUID pGuidParam,PULONG pBufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcQueryFlowW(LPWSTR pFlowName,LPGUID pGuidParam,PULONG pBufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcSetFlowA(LPSTR pFlowName,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcSetFlowW(LPWSTR pFlowName,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
|
|
ULONG WINAPI TcAddFlow(HANDLE IfcHandle,HANDLE ClFlowCtx,ULONG Flags,PTC_GEN_FLOW pGenericFlow,PHANDLE pFlowHandle);
|
|
ULONG WINAPI TcGetFlowNameA(HANDLE FlowHandle,ULONG StrSize,LPSTR pFlowName);
|
|
ULONG WINAPI TcGetFlowNameW(HANDLE FlowHandle,ULONG StrSize,LPWSTR pFlowName);
|
|
ULONG WINAPI TcModifyFlow(HANDLE FlowHandle,PTC_GEN_FLOW pGenericFlow);
|
|
ULONG WINAPI TcAddFilter(HANDLE FlowHandle,PTC_GEN_FILTER pGenericFilter,PHANDLE pFilterHandle);
|
|
ULONG WINAPI TcDeregisterClient(HANDLE ClientHandle);
|
|
ULONG WINAPI TcDeleteFlow(HANDLE FlowHandle);
|
|
ULONG WINAPI TcDeleteFilter(HANDLE FilterHandle);
|
|
ULONG WINAPI TcEnumerateFlows(HANDLE IfcHandle,PHANDLE pEnumHandle,PULONG pFlowCount,PULONG pBufSize,PENUMERATION_BUFFER Buffer);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|