traffic.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef __TRAFFIC_H
  7. #define __TRAFFIC_H
  8. #include <_mingw_unicode.h>
  9. #include <ntddndis.h>
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #define CURRENT_TCI_VERSION 0x0002
  14. #define TC_NOTIFY_IFC_UP 1
  15. #define TC_NOTIFY_IFC_CLOSE 2
  16. #define TC_NOTIFY_IFC_CHANGE 3
  17. #define TC_NOTIFY_PARAM_CHANGED 4
  18. #define TC_NOTIFY_FLOW_CLOSE 5
  19. #define TC_INVALID_HANDLE ((HANDLE)0)
  20. #define MAX_STRING_LENGTH 256
  21. #ifndef CALLBACK
  22. #if defined(_ARM_)
  23. #define CALLBACK
  24. #else
  25. #define CALLBACK __stdcall
  26. #endif
  27. #endif
  28. #ifndef WINAPI
  29. #if defined(_ARM_)
  30. #define WINAPI
  31. #else
  32. #define WINAPI __stdcall
  33. #endif
  34. #endif
  35. #ifndef APIENTRY
  36. #define APIENTRY WINAPI
  37. #endif
  38. typedef VOID (CALLBACK *TCI_NOTIFY_HANDLER)(HANDLE ClRegCtx,HANDLE ClIfcCtx,ULONG Event,HANDLE SubCode,ULONG BufSize,PVOID Buffer);
  39. typedef VOID (CALLBACK *TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
  40. typedef VOID (CALLBACK *TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
  41. typedef VOID (CALLBACK *TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE ClFlowCtx,ULONG Status);
  42. typedef struct _TCI_CLIENT_FUNC_LIST {
  43. TCI_NOTIFY_HANDLER ClNotifyHandler;
  44. TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler;
  45. TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler;
  46. TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler;
  47. } TCI_CLIENT_FUNC_LIST,*PTCI_CLIENT_FUNC_LIST;
  48. typedef struct _ADDRESS_LIST_DESCRIPTOR {
  49. ULONG MediaType;
  50. NETWORK_ADDRESS_LIST AddressList;
  51. } ADDRESS_LIST_DESCRIPTOR,*PADDRESS_LIST_DESCRIPTOR;
  52. typedef struct _TC_IFC_DESCRIPTOR {
  53. ULONG Length;
  54. LPWSTR pInterfaceName;
  55. LPWSTR pInterfaceID;
  56. ADDRESS_LIST_DESCRIPTOR AddressListDesc;
  57. } TC_IFC_DESCRIPTOR,*PTC_IFC_DESCRIPTOR;
  58. typedef struct _TC_SUPPORTED_INFO_BUFFER {
  59. USHORT InstanceIDLength;
  60. WCHAR InstanceID[MAX_STRING_LENGTH];
  61. ADDRESS_LIST_DESCRIPTOR AddrListDesc;
  62. } TC_SUPPORTED_INFO_BUFFER,*PTC_SUPPORTED_INFO_BUFFER;
  63. typedef struct _TC_GEN_FILTER {
  64. USHORT AddressType;
  65. ULONG PatternSize;
  66. PVOID Pattern;
  67. PVOID Mask;
  68. } TC_GEN_FILTER,*PTC_GEN_FILTER;
  69. typedef struct _TC_GEN_FLOW {
  70. FLOWSPEC SendingFlowspec;
  71. FLOWSPEC ReceivingFlowspec;
  72. ULONG TcObjectsLength;
  73. QOS_OBJECT_HDR TcObjects[1];
  74. } TC_GEN_FLOW,*PTC_GEN_FLOW;
  75. typedef struct _IP_PATTERN {
  76. ULONG Reserved1;
  77. ULONG Reserved2;
  78. ULONG SrcAddr;
  79. ULONG DstAddr;
  80. union {
  81. struct { USHORT s_srcport,s_dstport; } S_un_ports;
  82. struct { UCHAR s_type,s_code; USHORT filler; } S_un_icmp;
  83. ULONG S_Spi;
  84. } S_un;
  85. UCHAR ProtocolId;
  86. UCHAR Reserved3[3];
  87. } IP_PATTERN,*PIP_PATTERN;
  88. #define tcSrcPort S_un.S_un_ports.s_srcport
  89. #define tcDstPort S_un.S_un_ports.s_dstport
  90. #define tcIcmpType S_un.S_un_icmp.s_type
  91. #define tcIcmpCode S_un.S_un_icmp.s_code
  92. #define tcSpi S_un.S_Spi
  93. typedef struct _IPX_PATTERN {
  94. struct {
  95. ULONG NetworkAddress;
  96. UCHAR NodeAddress[6];
  97. USHORT Socket;
  98. } Src,Dest;
  99. } IPX_PATTERN,*PIPX_PATTERN;
  100. typedef struct _ENUMERATION_BUFFER {
  101. ULONG Length;
  102. ULONG OwnerProcessId;
  103. USHORT FlowNameLength;
  104. WCHAR FlowName[MAX_STRING_LENGTH];
  105. PTC_GEN_FLOW pFlow;
  106. ULONG NumberOfFilters;
  107. TC_GEN_FILTER GenericFilter[1];
  108. } ENUMERATION_BUFFER,*PENUMERATION_BUFFER;
  109. #define QOS_TRAFFIC_GENERAL_ID_BASE 4000
  110. #define QOS_OBJECT_DS_CLASS (0x00000001 + QOS_TRAFFIC_GENERAL_ID_BASE)
  111. #define QOS_OBJECT_TRAFFIC_CLASS (0x00000002 + QOS_TRAFFIC_GENERAL_ID_BASE)
  112. #define QOS_OBJECT_DIFFSERV (0x00000003 + QOS_TRAFFIC_GENERAL_ID_BASE)
  113. #define QOS_OBJECT_TCP_TRAFFIC (0x00000004 + QOS_TRAFFIC_GENERAL_ID_BASE)
  114. #define QOS_OBJECT_FRIENDLY_NAME (0x00000005 + QOS_TRAFFIC_GENERAL_ID_BASE)
  115. typedef struct _QOS_FRIENDLY_NAME {
  116. QOS_OBJECT_HDR ObjectHdr;
  117. WCHAR FriendlyName[MAX_STRING_LENGTH];
  118. } QOS_FRIENDLY_NAME,*LPQOS_FRIENDLY_NAME;
  119. typedef struct _QOS_TRAFFIC_CLASS {
  120. QOS_OBJECT_HDR ObjectHdr;
  121. ULONG TrafficClass;
  122. } QOS_TRAFFIC_CLASS,*LPQOS_TRAFFIC_CLASS;
  123. typedef struct _QOS_DS_CLASS {
  124. QOS_OBJECT_HDR ObjectHdr;
  125. ULONG DSField;
  126. } QOS_DS_CLASS,*LPQOS_DS_CLASS;
  127. typedef struct _QOS_DIFFSERV {
  128. QOS_OBJECT_HDR ObjectHdr;
  129. ULONG DSFieldCount;
  130. UCHAR DiffservRule[1];
  131. } QOS_DIFFSERV,*LPQOS_DIFFSERV;
  132. typedef struct _QOS_DIFFSERV_RULE {
  133. UCHAR InboundDSField;
  134. UCHAR ConformingOutboundDSField;
  135. UCHAR NonConformingOutboundDSField;
  136. UCHAR ConformingUserPriority;
  137. UCHAR NonConformingUserPriority;
  138. } QOS_DIFFSERV_RULE,*LPQOS_DIFFSERV_RULE;
  139. typedef struct _QOS_TCP_TRAFFIC {
  140. QOS_OBJECT_HDR ObjectHdr;
  141. } QOS_TCP_TRAFFIC,*LPQOS_TCP_TRAFFIC;
  142. #define TcOpenInterface __MINGW_NAME_AW(TcOpenInterface)
  143. #define TcQueryFlow __MINGW_NAME_AW(TcQueryFlow)
  144. #define TcSetFlow __MINGW_NAME_AW(TcSetFlow)
  145. #define TcGetFlowName __MINGW_NAME_AW(TcGetFlowName)
  146. ULONG WINAPI TcRegisterClient(ULONG TciVersion,HANDLE ClRegCtx,PTCI_CLIENT_FUNC_LIST ClientHandlerList,PHANDLE pClientHandle);
  147. ULONG WINAPI TcEnumerateInterfaces(HANDLE ClientHandle,PULONG pBufferSize,PTC_IFC_DESCRIPTOR InterfaceBuffer);
  148. ULONG WINAPI TcOpenInterfaceA(LPSTR pInterfaceName,HANDLE ClientHandle,HANDLE ClIfcCtx,PHANDLE pIfcHandle);
  149. ULONG WINAPI TcOpenInterfaceW(LPWSTR pInterfaceName,HANDLE ClientHandle,HANDLE ClIfcCtx,PHANDLE pIfcHandle);
  150. ULONG WINAPI TcCloseInterface(HANDLE IfcHandle);
  151. ULONG WINAPI TcQueryInterface(HANDLE IfcHandle,LPGUID pGuidParam,BOOLEAN NotifyChange,PULONG pBufferSize,PVOID Buffer);
  152. ULONG WINAPI TcSetInterface(HANDLE IfcHandle,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
  153. ULONG WINAPI TcQueryFlowA(LPSTR pFlowName,LPGUID pGuidParam,PULONG pBufferSize,PVOID Buffer);
  154. ULONG WINAPI TcQueryFlowW(LPWSTR pFlowName,LPGUID pGuidParam,PULONG pBufferSize,PVOID Buffer);
  155. ULONG WINAPI TcSetFlowA(LPSTR pFlowName,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
  156. ULONG WINAPI TcSetFlowW(LPWSTR pFlowName,LPGUID pGuidParam,ULONG BufferSize,PVOID Buffer);
  157. ULONG WINAPI TcAddFlow(HANDLE IfcHandle,HANDLE ClFlowCtx,ULONG Flags,PTC_GEN_FLOW pGenericFlow,PHANDLE pFlowHandle);
  158. ULONG WINAPI TcGetFlowNameA(HANDLE FlowHandle,ULONG StrSize,LPSTR pFlowName);
  159. ULONG WINAPI TcGetFlowNameW(HANDLE FlowHandle,ULONG StrSize,LPWSTR pFlowName);
  160. ULONG WINAPI TcModifyFlow(HANDLE FlowHandle,PTC_GEN_FLOW pGenericFlow);
  161. ULONG WINAPI TcAddFilter(HANDLE FlowHandle,PTC_GEN_FILTER pGenericFilter,PHANDLE pFilterHandle);
  162. ULONG WINAPI TcDeregisterClient(HANDLE ClientHandle);
  163. ULONG WINAPI TcDeleteFlow(HANDLE FlowHandle);
  164. ULONG WINAPI TcDeleteFilter(HANDLE FilterHandle);
  165. ULONG WINAPI TcEnumerateFlows(HANDLE IfcHandle,PHANDLE pEnumHandle,PULONG pFlowCount,PULONG pBufSize,PENUMERATION_BUFFER Buffer);
  166. #ifdef __cplusplus
  167. }
  168. #endif
  169. #endif