JwaQosSp.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:39k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Winsock2 QOS Service Provider API interface Unit for Object Pascal           }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: qossp.h, released August 2001. The original Pascal     }
  9. { code is: QosSp.pas, released December 2000. The initial developer of the     }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaQosSp;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "qossp.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51. {$IFDEF STANDALONE}
  52.   JwaWinTypes,
  53. {$ELSE}
  54.   Windows,
  55. {$ENDIF}
  56.   JwaWinSock2, JwaQos;
  57. (*
  58.  * Definition of object Types
  59.  *
  60.  *
  61.  * define the values for ObjectType above - RSVP Objects ids start at an
  62.  * offset from zero to allow for ATM objects that might be defined in the
  63.  * lower number range.
  64.  *)
  65. const
  66.   RSVP_OBJECT_ID_BASE     = 1000;
  67.   {$EXTERNALSYM RSVP_OBJECT_ID_BASE}
  68.   RSVP_OBJECT_STATUS_INFO = ($00000000 + RSVP_OBJECT_ID_BASE);
  69.   {$EXTERNALSYM RSVP_OBJECT_STATUS_INFO}
  70.   (* RSVP_STATUS_INFO structure passed *)
  71.   RSVP_OBJECT_RESERVE_INFO = ($00000001 + RSVP_OBJECT_ID_BASE);
  72.   {$EXTERNALSYM RSVP_OBJECT_RESERVE_INFO}
  73.   (* RSVP_RESERVE_INFO structure passed *)
  74.   RSVP_OBJECT_ADSPEC = ($00000002 + RSVP_OBJECT_ID_BASE);
  75.   {$EXTERNALSYM RSVP_OBJECT_ADSPEC}
  76.   (* RSVP_ADSPEC structure passed *)
  77.   RSVP_OBJECT_POLICY_INFO = ($00000003 + RSVP_OBJECT_ID_BASE);
  78.   {$EXTERNALSYM RSVP_OBJECT_POLICY_INFO}
  79.   (* RSVP POLICY ELEMENT(S) retrieved *)
  80.   RSVP_OBJECT_FILTERSPEC_LIST = ($00000004 + RSVP_OBJECT_ID_BASE);
  81.   {$EXTERNALSYM RSVP_OBJECT_FILTERSPEC_LIST}
  82.   (* RSVP SENDER LIST returned *)
  83. (*
  84.  * IPV4 addressing for RSVP FILTERSPECS
  85.  *)
  86. type
  87.   _IN_ADDR_IPV4 = record
  88.     Addr: ULONG;
  89.     AddrBytes: array [0..3] of UCHAR;
  90.   end;
  91.   {$EXTERNALSYM _IN_ADDR_IPV4}
  92.   IN_ADDR_IPV4 = _IN_ADDR_IPV4;
  93.   {$EXTERNALSYM IN_ADDR_IPV4}
  94.   LPIN_ADDR_IPV4 = ^IN_ADDR_IPV4;
  95.   {$EXTERNALSYM LPIN_ADDR_IPV4}
  96.   TInAddrIPV4 = IN_ADDR_IPV4;
  97.   PInAddrIPV4 = LPIN_ADDR_IPV4;
  98. (*
  99.  * IPV6 addressing for RSVP FILTERSPECS
  100.  *)
  101.   _IN_ADDR_IPV6 = record
  102.     Addr: array [0..15] of UCHAR;               //IPV6 address
  103.   end;
  104.   {$EXTERNALSYM _IN_ADDR_IPV6}
  105.   IN_ADDR_IPV6 = _IN_ADDR_IPV6;
  106.   {$EXTERNALSYM IN_ADDR_IPV6}
  107.   LPIN_ADDR_IPV6 = ^IN_ADDR_IPV6;
  108.   {$EXTERNALSYM LPIN_ADDR_IPV6}
  109.   TInAddrIPV6 = IN_ADDR_IPV6;
  110.   PInAddrIPV6 = LPIN_ADDR_IPV6;
  111.   LPCIN_ADDR_IPV6 = ^IN_ADDR_IPV6;
  112.   {$EXTERNALSYM LPCIN_ADDR_IPV6}
  113. (*
  114.  * IPV4 addressing for RSVP FILTERSPECS
  115.  *)
  116.   LPRSVP_FILTERSPEC_V4 = ^RSVP_FILTERSPEC_V4;
  117.   {$EXTERNALSYM LPRSVP_FILTERSPEC_V4}
  118.   _RSVP_FILTERSPEC_V4 = record
  119.     Address: IN_ADDR_IPV4;
  120.     Unused: USHORT;
  121.     Port: USHORT;
  122.   end;
  123.   {$EXTERNALSYM _RSVP_FILTERSPEC_V4}
  124.   RSVP_FILTERSPEC_V4 = _RSVP_FILTERSPEC_V4;
  125.   {$EXTERNALSYM RSVP_FILTERSPEC_V4}
  126.   TRsvpFilterSpecV4 = RSVP_FILTERSPEC_V4;
  127.   PRsvpFilterSpecV4 = LPRSVP_FILTERSPEC_V4;
  128.   LPRSVP_FILTERSPEC_V6 = ^RSVP_FILTERSPEC_V6;
  129.   {$EXTERNALSYM LPRSVP_FILTERSPEC_V6}
  130.   _RSVP_FILTERSPEC_V6 = record
  131.     Address: IN_ADDR_IPV6;
  132.     UnUsed: USHORT;
  133.     Port: USHORT;
  134.   end;
  135.   {$EXTERNALSYM _RSVP_FILTERSPEC_V6}
  136.   RSVP_FILTERSPEC_V6 = _RSVP_FILTERSPEC_V6;
  137.   {$EXTERNALSYM RSVP_FILTERSPEC_V6}
  138.   TRsvpFilterSpecV6 = RSVP_FILTERSPEC_V6;
  139.   PRsvpFilterSpecV6 = LPRSVP_FILTERSPEC_V6;
  140.   LPRSVP_FILTERSPEC_V6_FLOW = ^RSVP_FILTERSPEC_V6_FLOW;
  141.   {$EXTERNALSYM LPRSVP_FILTERSPEC_V6_FLOW}
  142.   _RSVP_FILTERSPEC_V6_FLOW = record
  143.     Address: IN_ADDR_IPV6;
  144.     UnUsed: UCHAR;
  145.     FlowLabel: array [0..2] of UCHAR;
  146.   end;
  147.   {$EXTERNALSYM _RSVP_FILTERSPEC_V6_FLOW}
  148.   RSVP_FILTERSPEC_V6_FLOW = _RSVP_FILTERSPEC_V6_FLOW;
  149.   {$EXTERNALSYM RSVP_FILTERSPEC_V6_FLOW}
  150.   TRsvpFilterSpecV6Flow = RSVP_FILTERSPEC_V6_FLOW;
  151.   PRsvpFilterSpecV6Flow = LPRSVP_FILTERSPEC_V6_FLOW;
  152.   LPRSVP_FILTERSPEC_V4_GPI = ^RSVP_FILTERSPEC_V4_GPI;
  153.   {$EXTERNALSYM LPRSVP_FILTERSPEC_V4_GPI}
  154.   _RSVP_FILTERSPEC_V4_GPI = record
  155.     Address: IN_ADDR_IPV4;
  156.     GeneralPortId: ULONG;
  157.   end;
  158.   {$EXTERNALSYM _RSVP_FILTERSPEC_V4_GPI}
  159.   RSVP_FILTERSPEC_V4_GPI = _RSVP_FILTERSPEC_V4_GPI;
  160.   {$EXTERNALSYM RSVP_FILTERSPEC_V4_GPI}
  161.   TRsvpFilterSpecV4Gpi = RSVP_FILTERSPEC_V4_GPI;
  162.   PRsvpFilterSpecV4Gpi = LPRSVP_FILTERSPEC_V4_GPI;
  163.   LPRSVP_FILTERSPEC_V6_GPI = ^RSVP_FILTERSPEC_V6_GPI;
  164.   {$EXTERNALSYM LPRSVP_FILTERSPEC_V6_GPI}
  165.   _RSVP_FILTERSPEC_V6_GPI = record
  166.     Address: IN_ADDR_IPV6;
  167.     GeneralPortId: ULONG;
  168.   end;
  169.   {$EXTERNALSYM _RSVP_FILTERSPEC_V6_GPI}
  170.   RSVP_FILTERSPEC_V6_GPI = _RSVP_FILTERSPEC_V6_GPI;
  171.   {$EXTERNALSYM RSVP_FILTERSPEC_V6_GPI}
  172.   TRsvpFilterSpecV6Gpi = RSVP_FILTERSPEC_V6_GPI;
  173.   PRsvpFilterSpecV6Gpi = LPRSVP_FILTERSPEC_V6_GPI;
  174. (*
  175.  * FILTERSPEC TYPES used in making reservations.
  176.  *)
  177. const
  178.   FILTERSPECV4 = 1;
  179.   {$EXTERNALSYM FILTERSPECV4}
  180.   FILTERSPECV6 = 2;
  181.   {$EXTERNALSYM FILTERSPECV6}
  182.   FILTERSPECV6_FLOW = 3;
  183.   {$EXTERNALSYM FILTERSPECV6_FLOW}
  184.   FILTERSPECV4_GPI = 4;
  185.   {$EXTERNALSYM FILTERSPECV4_GPI}
  186.   FILTERSPECV6_GPI = 5;
  187.   {$EXTERNALSYM FILTERSPECV6_GPI}
  188.   FILTERSPEC_END = 6;
  189.   {$EXTERNALSYM FILTERSPEC_END}
  190. type
  191.   FilterType = DWORD;
  192.   {$EXTERNALSYM FilterType}
  193. type
  194.   LPRSVP_FILTERSPEC = ^RSVP_FILTERSPEC;
  195.   {$EXTERNALSYM LPRSVP_FILTERSPEC}
  196.   _RSVP_FILTERSPEC = record
  197.     Type_: FilterType;
  198.     case Integer of
  199.       0: (FilterSpecV4: RSVP_FILTERSPEC_V4);
  200.       1: (FilterSpecV6: RSVP_FILTERSPEC_V6);
  201.       2: (FilterSpecV6Flow: RSVP_FILTERSPEC_V6_FLOW);
  202.       3: (FilterSpecV4Gpi: RSVP_FILTERSPEC_V4_GPI);
  203.       4: (FilterSpecV6Gpi: RSVP_FILTERSPEC_V6_GPI);
  204.   end;
  205.   {$EXTERNALSYM _RSVP_FILTERSPEC}
  206.   RSVP_FILTERSPEC = _RSVP_FILTERSPEC;
  207.   {$EXTERNALSYM RSVP_FILTERSPEC}
  208.   TRsvpFilterSpec = RSVP_FILTERSPEC;
  209.   PRsvpFilterSpec = LPRSVP_FILTERSPEC;
  210. (*
  211.  * FLOWDESCRIPTOR Structure used for specifying one or more
  212.  * Filters per Flowspec.
  213.  *)
  214.   LPFLOWDESCRIPTOR = ^FLOWDESCRIPTOR;
  215.   {$EXTERNALSYM LPFLOWDESCRIPTOR}
  216.   _FLOWDESCRIPTOR = record
  217.     FlowSpec: FLOWSPEC;
  218.     NumFilters: ULONG;
  219.     FilterList: LPRSVP_FILTERSPEC;
  220.   end;
  221.   {$EXTERNALSYM _FLOWDESCRIPTOR}
  222.   FLOWDESCRIPTOR = _FLOWDESCRIPTOR;
  223.   {$EXTERNALSYM FLOWDESCRIPTOR}
  224.   TFlowDescriptor = FLOWDESCRIPTOR;
  225.   PFlowDescriptor = LPFLOWDESCRIPTOR;
  226. (*
  227.  * RSVP_POLICY contains undefined policy data.  RSVP transports this
  228.  * data on behalf of the Policy Control component.
  229.  *)
  230.   LPRSVP_POLICY = ^RSVP_POLICY;
  231.   {$EXTERNALSYM LPRSVP_POLICY}
  232.   _RSVP_POLICY = record
  233.     Len: USHORT;
  234.     Type_: USHORT;
  235.     Info: array [0..4 - 1] of UCHAR;
  236.   end;
  237.   {$EXTERNALSYM _RSVP_POLICY}
  238.   RSVP_POLICY = _RSVP_POLICY;
  239.   {$EXTERNALSYM RSVP_POLICY}
  240.   TRsvpPolicy = RSVP_POLICY;
  241.   PRsvpPolicy = LPRSVP_POLICY;
  242.   LPCRSVP_POLICY = ^RSVP_POLICY;
  243.   {$EXTERNALSYM LPCRSVP_POLICY}
  244. const
  245.   RSVP_POLICY_HDR_LEN = SizeOf(USHORT) + SizeOf(USHORT);
  246.   {$EXTERNALSYM RSVP_POLICY_HDR_LEN}
  247. (*
  248.  * RSVP_POLICY_INFO contains undefined policy element(s) retrieved from RSVP.  
  249.  *)
  250. type
  251.   LPRSVP_POLICY_INFO = ^RSVP_POLICY_INFO;
  252.   {$EXTERNALSYM LPRSVP_POLICY_INFO}
  253.   _RSVP_POLICY_INFO = record
  254.     ObjectHdr: QOS_OBJECT_HDR;
  255.     NumPolicyElement: ULONG; // count of the number of policy elements
  256.     PolicyElement: array [0..0] of RSVP_POLICY; // a list of the policy elements retrieved
  257.   end;
  258.   {$EXTERNALSYM _RSVP_POLICY_INFO}
  259.   RSVP_POLICY_INFO = _RSVP_POLICY_INFO;
  260.   {$EXTERNALSYM RSVP_POLICY_INFO}
  261.   TRsvpPolicyInfo = RSVP_POLICY_INFO;
  262.   PRsvpPolicyInfo = LPRSVP_POLICY_INFO;
  263. (*
  264.  * RSVP_RESERVE_INFO Structure used for storing RSVP specific
  265.  * information for fine tuning interaction via the Winsock2
  266.  * Generic QoS API via the provider specific buffer. This structure
  267.  * includes the QOS_OBJECT_HDR structure directly
  268.  *)
  269.   LPRSVP_RESERVE_INFO = ^RSVP_RESERVE_INFO;
  270.   {$EXTERNALSYM LPRSVP_RESERVE_INFO}
  271.   _RSVP_RESERVE_INFO = record
  272.     ObjectHdr: QOS_OBJECT_HDR; // type and length of this object
  273.     Style: ULONG; // RSVP Style (FF,WF,SE)
  274.     ConfirmRequest: ULONG; // Non Zero for Confirm Request (receive only)
  275.     PolicyElementList: LPRSVP_POLICY_INFO; // Points to the set of policy elements
  276.     NumFlowDesc: ULONG; // Number of FlowDesc
  277.     FlowDescList: LPFLOWDESCRIPTOR; // Points to the FlowDesc list
  278.   end;
  279.   {$EXTERNALSYM _RSVP_RESERVE_INFO}
  280.   RSVP_RESERVE_INFO = _RSVP_RESERVE_INFO;
  281.   {$EXTERNALSYM RSVP_RESERVE_INFO}
  282.   TRsvpReserveInfo = RSVP_RESERVE_INFO;
  283.   PRsvpReserveInfo = LPRSVP_RESERVE_INFO;
  284.   LPCRSVP_RESERVE_INFO = ^RSVP_RESERVE_INFO;
  285.   {$EXTERNALSYM LPCRSVP_RESERVE_INFO}
  286. (*
  287.  * definitions for the ulStyle in the previous structure
  288.  *)
  289. const
  290.   RSVP_DEFAULT_STYLE         = $00000000;
  291.   {$EXTERNALSYM RSVP_DEFAULT_STYLE}
  292.   RSVP_WILDCARD_STYLE        = $00000001;
  293.   {$EXTERNALSYM RSVP_WILDCARD_STYLE}
  294.   RSVP_FIXED_FILTER_STYLE    = $00000002;
  295.   {$EXTERNALSYM RSVP_FIXED_FILTER_STYLE}
  296.   RSVP_SHARED_EXPLICIT_STYLE = $00000003;
  297.   {$EXTERNALSYM RSVP_SHARED_EXPLICIT_STYLE}
  298. (*
  299.  * RSVP_STATUS_INFO Structure used for storing RSVP specific
  300.  * error of status indications.  This also serves as a header
  301.  * for additional objects in the provider specific buffer when
  302.  * interacting via Winsock2 Generic QoS API. This structure includes
  303.  * the QOS_OBJECT_COUNT and QOS_OBJECT_HDR structures directly It is
  304.  * expected to be the first structure in the provider specific structure
  305.  * since it includes the QOS_OBJECT_COUNT
  306.  *)
  307. type
  308.   LPRSVP_STATUS_INFO = ^RSVP_STATUS_INFO;
  309.   {$EXTERNALSYM LPRSVP_STATUS_INFO}
  310.   _RSVP_STATUS_INFO = record
  311.     ObjectHdr: QOS_OBJECT_HDR; // Object Hdr
  312.     StatusCode: ULONG; // Error or Status Information see Winsock2.h
  313.     ExtendedStatus1: ULONG; // Provider specific status extension
  314.     ExtendedStatus2: ULONG; // Provider specific status extension
  315.   end;
  316.   {$EXTERNALSYM _RSVP_STATUS_INFO}
  317.   RSVP_STATUS_INFO = _RSVP_STATUS_INFO;
  318.   {$EXTERNALSYM RSVP_STATUS_INFO}
  319.   TRsvpStatusInfo = RSVP_STATUS_INFO;
  320.   PRsvpStatusInfo = LPRSVP_STATUS_INFO;
  321.   LPCRSVP_STATUS_INFO = ^RSVP_STATUS_INFO;
  322.   {$EXTERNALSYM LPCRSVP_STATUS_INFO}
  323. (*
  324.  * QOS_DestAddr structure -- used for WSAIoctl(SIO_SET_QOS) when we
  325.  * do not want to issue a connect for a sending socket.  The destination
  326.  * address is required so we can generate the session information for
  327.  * RSVP signalling.
  328. *)
  329.   LPQOS_DESTADDR = ^QOS_DESTADDR;
  330.   {$EXTERNALSYM LPQOS_DESTADDR}
  331.   _QOS_DESTADDR = record
  332.     ObjectHdr: QOS_OBJECT_HDR; // Object header
  333.     SocketAddress: PSockAddr; // Destination socket address
  334.     SocketAddressLength: ULONG; // Length of the address structure
  335.   end;
  336.   {$EXTERNALSYM _QOS_DESTADDR}
  337.   QOS_DESTADDR = _QOS_DESTADDR;
  338.   {$EXTERNALSYM QOS_DESTADDR}
  339.   TQosDestAddr = QOS_DESTADDR;
  340.   PQosDestAddr = LPQOS_DESTADDR;
  341.   LPCQOS_DESTADDR = ^QOS_DESTADDR;
  342.   {$EXTERNALSYM LPCQOS_DESTADDR}
  343. (*
  344.  * this structure defines the "General Characterization Parameters" contained in
  345.  * the RSVP Adspec object
  346.  *)
  347.   LPAD_GENERAL_PARAMS = ^AD_GENERAL_PARAMS;
  348.   {$EXTERNALSYM LPAD_GENERAL_PARAMS}
  349.   _AD_GENERAL_PARAMS = record
  350.     IntServAwareHopCount: ULONG; // number of hops that conform to
  351.     // Integrated Services requirements *)
  352.     PathBandwidthEstimate: ULONG; // minimum bandwidth available from
  353.     // sender to receiver *)
  354.     MinimumLatency: ULONG; // sum of minimum latency of the packet
  355.     // forwarding process in routers
  356.     // (in usec)*)
  357.     PathMTU: ULONG; // max transmission unit end to end that
  358.     // will not incur fragmentation *)
  359.     Flags: ULONG; // used to hold break bits.*)
  360.   end;
  361.   {$EXTERNALSYM _AD_GENERAL_PARAMS}
  362.   AD_GENERAL_PARAMS = _AD_GENERAL_PARAMS;
  363.   {$EXTERNALSYM AD_GENERAL_PARAMS}
  364.   TAdGeneralParams = AD_GENERAL_PARAMS;
  365.   PAdGeneralParams = LPAD_GENERAL_PARAMS;
  366. (*
  367.  * Minimum Latency may be set to this "undefined" value
  368.  *)
  369. const
  370.   INDETERMINATE_LATENCY = DWORD($FFFFFFFF);
  371.   {$EXTERNALSYM INDETERMINATE_LATENCY}
  372. (*
  373.  * This Flag is used to indicate the existence of a network element not 
  374.  * supporting  QoS control services somewhere in the data path. If this bit 
  375.  * is set in the specific service override then it indicates that that
  376.  * service was not supported at at least one hop.
  377.  *)
  378.   AD_FLAG_BREAK_BIT = $00000001;
  379.   {$EXTERNALSYM AD_FLAG_BREAK_BIT}
  380. (*
  381.  * this structure describes the Guaranteed service parameters
  382.  *)
  383. type
  384.   LPAD_GUARANTEED = ^AD_GUARANTEED;
  385.   {$EXTERNALSYM LPAD_GUARANTEED}
  386.   _AD_GUARANTEED = record
  387.     CTotal: ULONG;
  388.     DTotal: ULONG;
  389.     CSum: ULONG;
  390.     DSum: ULONG;
  391.   end;
  392.   {$EXTERNALSYM _AD_GUARANTEED}
  393.   AD_GUARANTEED = _AD_GUARANTEED;
  394.   {$EXTERNALSYM AD_GUARANTEED}
  395.   TAdGuaranteed = AD_GUARANTEED;
  396.   PAdGuaranteed = LPAD_GUARANTEED;
  397. (*
  398.  * this structure describes the format of the parameter buffer that can be
  399.  * included in the Service_Type structure below.  This structure allows an
  400.  * application to include any valid Int Serv service parameter in the Buffer 
  401.  * value, after providing the Int Serv parameter id in the ParameterId field.
  402.  *)
  403.   LPPARAM_BUFFER = ^PARAM_BUFFER;
  404.   {$EXTERNALSYM LPPARAM_BUFFER}
  405.   _PARAM_BUFFER = record
  406.     ParameterId: ULONG; // Int Server parameter ID
  407.     Length: ULONG; // total length of this structure
  408.     // ( 8 bytes + length of Buffer )
  409.     Buffer: array [0..1 - 1] of UCHAR; // Paramter itself
  410.   end;
  411.   {$EXTERNALSYM _PARAM_BUFFER}
  412.   PARAM_BUFFER = _PARAM_BUFFER;
  413.   {$EXTERNALSYM PARAM_BUFFER}
  414.   TParamBuffer = PARAM_BUFFER;
  415.   PParamBuffer = LPPARAM_BUFFER;
  416. (*
  417.  * this structure contains the service types supported
  418.  *)
  419.   LPCONTROL_SERVICE = ^CONTROL_SERVICE;
  420.   {$EXTERNALSYM LPCONTROL_SERVICE}
  421.   _CONTROL_SERVICE = record
  422.     //
  423.     // the length of this entire structure including the following buffer.
  424.     // This length value can be added to the ptr to the structure to get the ptr
  425.     // to the next SERVICE_TYPE structure in the list, until the
  426.     // NumberOfServices count has been exhausted.
  427.     //
  428.     Length: ULONG;
  429.     Service: SERVICETYPE;
  430.     Overrides: AD_GENERAL_PARAMS;
  431.     //
  432.     // service specific information ( controlled load has no service specific
  433.     // info here )
  434.     //
  435.     case Integer of
  436.       0: (Guaranteed: AD_GUARANTEED);
  437.       1: (ParamBuffer: array [0..0] of PARAM_BUFFER); // allows for other services down the road
  438.   end;
  439.   {$EXTERNALSYM _CONTROL_SERVICE}
  440.   CONTROL_SERVICE = _CONTROL_SERVICE;
  441.   {$EXTERNALSYM CONTROL_SERVICE}
  442.   TControlService = CONTROL_SERVICE;
  443.   PControlService = LPCONTROL_SERVICE;
  444. (*
  445.  * This structure defines the information which is carried in the Rsvp 
  446.  * Adspec.  This Rsvp object typically indicates which service types are 
  447.  * available ( Controlled Load and/or Guaranteed Service ), if a non-Rsvp
  448.  * hop has been encountered by the Path message, and the minumum MTU along 
  449.  * the path. The services array indicates which services are supported
  450.  *)
  451.   LPRSVP_ADSPEC = ^RSVP_ADSPEC;
  452.   {$EXTERNALSYM LPRSVP_ADSPEC}
  453.   _RSVP_ADSPEC = record
  454.     ObjectHdr: QOS_OBJECT_HDR;
  455.     GeneralParams: AD_GENERAL_PARAMS; // contains the general characterization paramters
  456.     NumberOfServices: ULONG; // count of the number of services
  457.     Services: array [0..0] of CONTROL_SERVICE; // a list of the services supported/requested
  458.   end;
  459.   {$EXTERNALSYM _RSVP_ADSPEC}
  460.   RSVP_ADSPEC = _RSVP_ADSPEC;
  461.   {$EXTERNALSYM RSVP_ADSPEC}
  462.   TRsvpAdSpec = RSVP_ADSPEC;
  463.   PRsvpAdSpec = LPRSVP_ADSPEC;
  464. //
  465. // Opcode for the SIO_CHK_QOS ioctl
  466. // (specific for the Microsoft QOS Service Provider
  467. //
  468. // Bascially:
  469. //
  470. // SIO_CHK_QOS = _WSAIORW(IOC_VENDOR,1)
  471. //             = mIOC_IN | mIOC_OUT | mIOC_VENDOR | mCOMPANY | ioctl_code
  472. //    where
  473. //         mIOC_IN     = 0x80000000
  474. //         mIOC_OUT    = 0x40000000
  475. //         mIOC_VENDOR = 0x04000000
  476. //         mCOMPANY    = 0x18000000
  477. //         ioctl_code  = 0x00000001
  478. //         
  479. // See WSAIoctl man page for details.
  480. //
  481. const
  482.   mIOC_IN     = DWORD($80000000);
  483.   {$EXTERNALSYM mIOC_IN}
  484.   mIOC_OUT    = $40000000;
  485.   {$EXTERNALSYM mIOC_OUT}
  486.   mIOC_VENDOR = $04000000;
  487.   {$EXTERNALSYM mIOC_VENDOR}
  488.   mCOMPANY    = $18000000;
  489.   {$EXTERNALSYM mCOMPANY}
  490.   ioctl_code  = $00000001;
  491.   {$EXTERNALSYM ioctl_code}
  492.   SIO_CHK_QOS = mIOC_IN or mIOC_OUT or mIOC_VENDOR or mCOMPANY or ioctl_code;
  493.   {$EXTERNALSYM SIO_CHK_QOS}
  494. //
  495. // The following may be specified in the input buffer 
  496. // of the SIO_CHK_IOCTL ioctl call 
  497. //
  498.   QOSSPBASE = 50000;
  499.   {$EXTERNALSYM QOSSPBASE}
  500.   ALLOWED_TO_SEND_DATA = (QOSSPBASE+1); // query the SBM/BEST_EFFORT limit
  501.   {$EXTERNALSYM ALLOWED_TO_SEND_DATA}
  502.                                                 //   -- result is based on a comparison between
  503.                                                 //      the user-specified token rate and the
  504.                                                 //      SBM/BEST_EFFORT bandwidth parameters in
  505.                                                 //      the system
  506.                                                 //   -- result is a YES(1) or NO(0) answer
  507.                                                 //      in the output buffer 
  508.   ABLE_TO_RECV_RSVP = (QOSSPBASE+2); // query the SBM/BEST_EFFORT limit
  509.   {$EXTERNALSYM ABLE_TO_RECV_RSVP}
  510.                                                 //   -- result is based on a comparison between
  511.                                                 //      the user-specified token rate and the
  512.                                                 //      SBM/BEST_EFFORT bandwidth parameters in
  513.                                                 //      the system
  514.                                                 //   -- result is a YES(1) or NO(0) answer
  515.                                                 //      in the output buffer 
  516.   LINE_RATE = (QOSSPBASE+3); // query the interface capacity
  517.   {$EXTERNALSYM LINE_RATE}
  518.                                                 //   -- result returned in the output buffer
  519.                                                 //      in kilo-bits per second
  520.   LOCAL_TRAFFIC_CONTROL = (QOSSPBASE+4); // check if Kernel Traffic Control is available or not
  521.   {$EXTERNALSYM LOCAL_TRAFFIC_CONTROL}
  522.                                                 //   -- 0 if not available
  523.                                                 //   -- 1 if avaiable
  524.                                                 //   -- INFO_NOT_AVAILABLE if there is no way to check
  525.   LOCAL_QOSABILITY = (QOSSPBASE+5); // The followings are for
  526.   {$EXTERNALSYM LOCAL_QOSABILITY}
  527.                                                 // the Discovery of Local QOSability
  528.                                                 //   -- 0 if no local QOS support
  529.                                                 //   -- 1 if local QOS support available
  530.                                                 //   -- INFO_NOT_AVAILABLE if there is no way to check
  531.   END_TO_END_QOSABILITY = (QOSSPBASE+6); // The followings are for
  532.   {$EXTERNALSYM END_TO_END_QOSABILITY}
  533.                                                 // the Discovery of End-to-End QOSability
  534.                                                 //   -- 0 if no end-to-end QOS support
  535.                                                 //   -- 1 if end-to-end QOS support available
  536.                                                 //   -- INFO_NOT_AVAILABLE if there is no way to check
  537.   INFO_NOT_AVAILABLE = DWORD($FFFFFFFF); // used when LINE_RATE is not known
  538.   {$EXTERNALSYM INFO_NOT_AVAILABLE}
  539.   ANY_DEST_ADDR = DWORD($FFFFFFFF); // for QOS_OBJECT_DEST_ADDR
  540.   {$EXTERNALSYM ANY_DEST_ADDR}
  541. // The followings are for Guaranteed_Service+Latency -> ISSLOW_Traffic_Class Mapping
  542.   MODERATELY_DELAY_SENSITIVE = DWORD($FFFFFFFD);
  543.   {$EXTERNALSYM MODERATELY_DELAY_SENSITIVE}
  544.   HIGHLY_DELAY_SENSITIVE = DWORD($FFFFFFFE);
  545.   {$EXTERNALSYM HIGHLY_DELAY_SENSITIVE}
  546. //
  547. // QOSSP Error Code/Value
  548. //
  549.   QOSSP_ERR_BASE = (QOSSPBASE+6000);
  550.   {$EXTERNALSYM QOSSP_ERR_BASE}
  551. // No error
  552.   GQOS_NO_ERRORCODE = (0);
  553.   {$EXTERNALSYM GQOS_NO_ERRORCODE}
  554.   GQOS_NO_ERRORVALUE = (0);
  555.   {$EXTERNALSYM GQOS_NO_ERRORVALUE}
  556. // Unknown error
  557.   GQOS_ERRORCODE_UNKNOWN = DWORD($FFFFFFFF);
  558.   {$EXTERNALSYM GQOS_ERRORCODE_UNKNOWN}
  559.   GQOS_ERRORVALUE_UNKNOWN = DWORD($FFFFFFFF);
  560.   {$EXTERNALSYM GQOS_ERRORVALUE_UNKNOWN}
  561. // Admission (Resource) Error
  562.   GQOS_NET_ADMISSION = (QOSSP_ERR_BASE+100);
  563.   {$EXTERNALSYM GQOS_NET_ADMISSION}
  564.   GQOS_OTHER     = (QOSSP_ERR_BASE+100+1);
  565.   {$EXTERNALSYM GQOS_OTHER}
  566.   GQOS_DELAYBND  = (QOSSP_ERR_BASE+100+2);
  567.   {$EXTERNALSYM GQOS_DELAYBND}
  568.   GQOS_BANDWIDTH = (QOSSP_ERR_BASE+100+3);
  569.   {$EXTERNALSYM GQOS_BANDWIDTH}
  570.   GQOS_MTU       = (QOSSP_ERR_BASE+100+4);
  571.   {$EXTERNALSYM GQOS_MTU}
  572.   GQOS_FLOW_RATE = (QOSSP_ERR_BASE+100+5);
  573.   {$EXTERNALSYM GQOS_FLOW_RATE}
  574.   GQOS_PEAK_RATE = (QOSSP_ERR_BASE+100+6);
  575.   {$EXTERNALSYM GQOS_PEAK_RATE}
  576.   GQOS_AGG_PEAK_RATE = (QOSSP_ERR_BASE+100+7);
  577.   {$EXTERNALSYM GQOS_AGG_PEAK_RATE}
  578. // Policy Error
  579.   GQOS_NET_POLICY = (QOSSP_ERR_BASE+200);
  580.   {$EXTERNALSYM GQOS_NET_POLICY}
  581.   GQOS_POLICY_ERROR_UNKNOWN = (QOSSP_ERR_BASE+200+0);
  582.   {$EXTERNALSYM GQOS_POLICY_ERROR_UNKNOWN}
  583.   GQOS_POLICY_GLOBAL_DEF_FLOW_COUNT      = (QOSSP_ERR_BASE+200+1);
  584.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_FLOW_COUNT}
  585.   GQOS_POLICY_GLOBAL_GRP_FLOW_COUNT      = (QOSSP_ERR_BASE+200+2);
  586.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_FLOW_COUNT}
  587.   GQOS_POLICY_GLOBAL_USER_FLOW_COUNT     = (QOSSP_ERR_BASE+200+3);
  588.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_FLOW_COUNT}
  589.   GQOS_POLICY_GLOBAL_UNK_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+4);
  590.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_FLOW_COUNT}
  591.   GQOS_POLICY_SUBNET_DEF_FLOW_COUNT      = (QOSSP_ERR_BASE+200+5);
  592.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_FLOW_COUNT}
  593.   GQOS_POLICY_SUBNET_GRP_FLOW_COUNT      = (QOSSP_ERR_BASE+200+6);
  594.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_FLOW_COUNT}
  595.   GQOS_POLICY_SUBNET_USER_FLOW_COUNT     = (QOSSP_ERR_BASE+200+7);
  596.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_FLOW_COUNT}
  597.   GQOS_POLICY_SUBNET_UNK_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+8);
  598.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_FLOW_COUNT}
  599.   GQOS_POLICY_GLOBAL_DEF_FLOW_DURATION      = (QOSSP_ERR_BASE+200+9);
  600.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_FLOW_DURATION}
  601.   GQOS_POLICY_GLOBAL_GRP_FLOW_DURATION      = (QOSSP_ERR_BASE+200+10);
  602.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_FLOW_DURATION}
  603.   GQOS_POLICY_GLOBAL_USER_FLOW_DURATION     = (QOSSP_ERR_BASE+200+11);
  604.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_FLOW_DURATION}
  605.   GQOS_POLICY_GLOBAL_UNK_USER_FLOW_DURATION = (QOSSP_ERR_BASE+200+12);
  606.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_FLOW_DURATION}
  607.   GQOS_POLICY_SUBNET_DEF_FLOW_DURATION      = (QOSSP_ERR_BASE+200+13);
  608.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_FLOW_DURATION}
  609.   GQOS_POLICY_SUBNET_GRP_FLOW_DURATION      = (QOSSP_ERR_BASE+200+14);
  610.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_FLOW_DURATION}
  611.   GQOS_POLICY_SUBNET_USER_FLOW_DURATION     = (QOSSP_ERR_BASE+200+15);
  612.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_FLOW_DURATION}
  613.   GQOS_POLICY_SUBNET_UNK_USER_FLOW_DURATION = (QOSSP_ERR_BASE+200+16);
  614.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_FLOW_DURATION}
  615.   GQOS_POLICY_GLOBAL_DEF_FLOW_RATE      = (QOSSP_ERR_BASE+200+17);
  616.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_FLOW_RATE}
  617.   GQOS_POLICY_GLOBAL_GRP_FLOW_RATE      = (QOSSP_ERR_BASE+200+18);
  618.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_FLOW_RATE}
  619.   GQOS_POLICY_GLOBAL_USER_FLOW_RATE     = (QOSSP_ERR_BASE+200+19);
  620.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_FLOW_RATE}
  621.   GQOS_POLICY_GLOBAL_UNK_USER_FLOW_RATE = (QOSSP_ERR_BASE+200+20);
  622.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_FLOW_RATE}
  623.   GQOS_POLICY_SUBNET_DEF_FLOW_RATE      = (QOSSP_ERR_BASE+200+21);
  624.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_FLOW_RATE}
  625.   GQOS_POLICY_SUBNET_GRP_FLOW_RATE      = (QOSSP_ERR_BASE+200+22);
  626.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_FLOW_RATE}
  627.   GQOS_POLICY_SUBNET_USER_FLOW_RATE     = (QOSSP_ERR_BASE+200+23);
  628.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_FLOW_RATE}
  629.   GQOS_POLICY_SUBNET_UNK_USER_FLOW_RATE = (QOSSP_ERR_BASE+200+24);
  630.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_FLOW_RATE}
  631.   GQOS_POLICY_GLOBAL_DEF_PEAK_RATE      = (QOSSP_ERR_BASE+200+25);
  632.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_PEAK_RATE}
  633.   GQOS_POLICY_GLOBAL_GRP_PEAK_RATE      = (QOSSP_ERR_BASE+200+26);
  634.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_PEAK_RATE}
  635.   GQOS_POLICY_GLOBAL_USER_PEAK_RATE     = (QOSSP_ERR_BASE+200+27);
  636.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_PEAK_RATE}
  637.   GQOS_POLICY_GLOBAL_UNK_USER_PEAK_RATE = (QOSSP_ERR_BASE+200+28);
  638.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_PEAK_RATE}
  639.   GQOS_POLICY_SUBNET_DEF_PEAK_RATE      = (QOSSP_ERR_BASE+200+29);
  640.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_PEAK_RATE}
  641.   GQOS_POLICY_SUBNET_GRP_PEAK_RATE      = (QOSSP_ERR_BASE+200+30);
  642.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_PEAK_RATE}
  643.   GQOS_POLICY_SUBNET_USER_PEAK_RATE     = (QOSSP_ERR_BASE+200+31);
  644.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_PEAK_RATE}
  645.   GQOS_POLICY_SUBNET_UNK_USER_PEAK_RATE = (QOSSP_ERR_BASE+200+32);
  646.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_PEAK_RATE}
  647.   GQOS_POLICY_GLOBAL_DEF_SUM_FLOW_RATE      = (QOSSP_ERR_BASE+200+33);
  648.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_SUM_FLOW_RATE}
  649.   GQOS_POLICY_GLOBAL_GRP_SUM_FLOW_RATE      = (QOSSP_ERR_BASE+200+34);
  650.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_SUM_FLOW_RATE}
  651.   GQOS_POLICY_GLOBAL_USER_SUM_FLOW_RATE     = (QOSSP_ERR_BASE+200+35);
  652.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_SUM_FLOW_RATE}
  653.   GQOS_POLICY_GLOBAL_UNK_USER_SUM_FLOW_RATE = (QOSSP_ERR_BASE+200+36);
  654.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_SUM_FLOW_RATE}
  655.   GQOS_POLICY_SUBNET_DEF_SUM_FLOW_RATE      = (QOSSP_ERR_BASE+200+37);
  656.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_SUM_FLOW_RATE}
  657.   GQOS_POLICY_SUBNET_GRP_SUM_FLOW_RATE      = (QOSSP_ERR_BASE+200+38);
  658.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_SUM_FLOW_RATE}
  659.   GQOS_POLICY_SUBNET_USER_SUM_FLOW_RATE     = (QOSSP_ERR_BASE+200+39);
  660.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_SUM_FLOW_RATE}
  661.   GQOS_POLICY_SUBNET_UNK_USER_SUM_FLOW_RATE = (QOSSP_ERR_BASE+200+40);
  662.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_SUM_FLOW_RATE}
  663.   GQOS_POLICY_GLOBAL_DEF_SUM_PEAK_RATE      = (QOSSP_ERR_BASE+200+41);
  664.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_SUM_PEAK_RATE}
  665.   GQOS_POLICY_GLOBAL_GRP_SUM_PEAK_RATE      = (QOSSP_ERR_BASE+200+42);
  666.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_SUM_PEAK_RATE}
  667.   GQOS_POLICY_GLOBAL_USER_SUM_PEAK_RATE     = (QOSSP_ERR_BASE+200+43);
  668.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_SUM_PEAK_RATE}
  669.   GQOS_POLICY_GLOBAL_UNK_USER_SUM_PEAK_RATE = (QOSSP_ERR_BASE+200+44);
  670.   {$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_SUM_PEAK_RATE}
  671.   GQOS_POLICY_SUBNET_DEF_SUM_PEAK_RATE      = (QOSSP_ERR_BASE+200+45);
  672.   {$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_SUM_PEAK_RATE}
  673.   GQOS_POLICY_SUBNET_GRP_SUM_PEAK_RATE      = (QOSSP_ERR_BASE+200+46);
  674.   {$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_SUM_PEAK_RATE}
  675.   GQOS_POLICY_SUBNET_USER_SUM_PEAK_RATE     = (QOSSP_ERR_BASE+200+47);
  676.   {$EXTERNALSYM GQOS_POLICY_SUBNET_USER_SUM_PEAK_RATE}
  677.   GQOS_POLICY_SUBNET_UNK_USER_SUM_PEAK_RATE = (QOSSP_ERR_BASE+200+48);
  678.   {$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_SUM_PEAK_RATE}
  679.   GQOS_POLICY_UNKNOWN_USER       = (QOSSP_ERR_BASE+200+49);
  680.   {$EXTERNALSYM GQOS_POLICY_UNKNOWN_USER}
  681.   GQOS_POLICY_NO_PRIVILEGES      = (QOSSP_ERR_BASE+200+50);
  682.   {$EXTERNALSYM GQOS_POLICY_NO_PRIVILEGES}
  683.   GQOS_POLICY_EXPIRED_USER_TOKEN = (QOSSP_ERR_BASE+200+51);
  684.   {$EXTERNALSYM GQOS_POLICY_EXPIRED_USER_TOKEN}
  685.   GQOS_POLICY_NO_RESOURCES       = (QOSSP_ERR_BASE+200+52);
  686.   {$EXTERNALSYM GQOS_POLICY_NO_RESOURCES}
  687.   GQOS_POLICY_PRE_EMPTED         = (QOSSP_ERR_BASE+200+53);
  688.   {$EXTERNALSYM GQOS_POLICY_PRE_EMPTED}
  689.   GQOS_POLICY_USER_CHANGED       = (QOSSP_ERR_BASE+200+54);
  690.   {$EXTERNALSYM GQOS_POLICY_USER_CHANGED}
  691.   GQOS_POLICY_NO_ACCEPTS         = (QOSSP_ERR_BASE+200+55);
  692.   {$EXTERNALSYM GQOS_POLICY_NO_ACCEPTS}
  693.   GQOS_POLICY_NO_MEMORY          = (QOSSP_ERR_BASE+200+56);
  694.   {$EXTERNALSYM GQOS_POLICY_NO_MEMORY}
  695.   GQOS_POLICY_CRAZY_FLOWSPEC     = (QOSSP_ERR_BASE+200+57);
  696.   {$EXTERNALSYM GQOS_POLICY_CRAZY_FLOWSPEC}
  697.   GQOS_POLICY_NO_MORE_INFO                = (QOSSP_ERR_BASE+200+58);
  698.   {$EXTERNALSYM GQOS_POLICY_NO_MORE_INFO}
  699.   GQOS_POLICY_UNSUPPORTED_CREDENTIAL_TYPE = (QOSSP_ERR_BASE+200+59);
  700.   {$EXTERNALSYM GQOS_POLICY_UNSUPPORTED_CREDENTIAL_TYPE}
  701.   GQOS_POLICY_INSUFFICIENT_PRIVILEGES     = (QOSSP_ERR_BASE+200+60);
  702.   {$EXTERNALSYM GQOS_POLICY_INSUFFICIENT_PRIVILEGES}
  703.   GQOS_POLICY_EXPIRED_CREDENTIAL          = (QOSSP_ERR_BASE+200+61);
  704.   {$EXTERNALSYM GQOS_POLICY_EXPIRED_CREDENTIAL}
  705.   GQOS_POLICY_IDENTITY_CHANGED            = (QOSSP_ERR_BASE+200+62);
  706.   {$EXTERNALSYM GQOS_POLICY_IDENTITY_CHANGED}
  707.   GQOS_POLICY_NO_QOS_PROVIDED             = (QOSSP_ERR_BASE+200+63);
  708.   {$EXTERNALSYM GQOS_POLICY_NO_QOS_PROVIDED}
  709.   GQOS_POLICY_DO_NOT_SEND                 = (QOSSP_ERR_BASE+200+64);
  710.   {$EXTERNALSYM GQOS_POLICY_DO_NOT_SEND}
  711.   GQOS_POLICY_ERROR_USERID = (QOSSP_ERR_BASE+200+99);
  712.   {$EXTERNALSYM GQOS_POLICY_ERROR_USERID}
  713. // RSVP Error
  714.   GQOS_RSVP = (QOSSP_ERR_BASE+300);
  715.   {$EXTERNALSYM GQOS_RSVP}
  716.   GQOS_NO_PATH        = (QOSSP_ERR_BASE+300+1);
  717.   {$EXTERNALSYM GQOS_NO_PATH}
  718.   GQOS_NO_SENDER      = (QOSSP_ERR_BASE+300+2);
  719.   {$EXTERNALSYM GQOS_NO_SENDER}
  720.   GQOS_BAD_STYLE      = (QOSSP_ERR_BASE+300+3);
  721.   {$EXTERNALSYM GQOS_BAD_STYLE}
  722.   GQOS_UNKNOWN_STYLE  = (QOSSP_ERR_BASE+300+4);
  723.   {$EXTERNALSYM GQOS_UNKNOWN_STYLE}
  724.   GQOS_BAD_DSTPORT    = (QOSSP_ERR_BASE+300+5);
  725.   {$EXTERNALSYM GQOS_BAD_DSTPORT}
  726.   GQOS_BAD_SNDPORT    = (QOSSP_ERR_BASE+300+6);
  727.   {$EXTERNALSYM GQOS_BAD_SNDPORT}
  728.   GQOS_AMBIG_FILTER   = (QOSSP_ERR_BASE+300+7);
  729.   {$EXTERNALSYM GQOS_AMBIG_FILTER}
  730.   GQOS_PREEMPTED      = (QOSSP_ERR_BASE+300+8);
  731.   {$EXTERNALSYM GQOS_PREEMPTED}
  732.   GQOS_UNKN_OBJ_CLASS = (QOSSP_ERR_BASE+300+9);
  733.   {$EXTERNALSYM GQOS_UNKN_OBJ_CLASS}
  734.   GQOS_UNKNOWN_CTYPE  = (QOSSP_ERR_BASE+300+10);
  735.   {$EXTERNALSYM GQOS_UNKNOWN_CTYPE}
  736.   GQOS_INVALID        = (QOSSP_ERR_BASE+300+11);
  737.   {$EXTERNALSYM GQOS_INVALID}
  738. // API Error
  739.   GQOS_API = (QOSSP_ERR_BASE+400);
  740.   {$EXTERNALSYM GQOS_API}
  741.   GQOS_API_BADSEND  = (QOSSP_ERR_BASE+400+1); (* Sender addr not my interface *)
  742.   {$EXTERNALSYM GQOS_API_BADSEND}
  743.   GQOS_API_BADRECV  = (QOSSP_ERR_BASE+400+2); (* Recv addr not my interface *)
  744.   {$EXTERNALSYM GQOS_API_BADRECV}
  745.   GQOS_API_BADSPORT = (QOSSP_ERR_BASE+400+3); (* Sport !=0 but Dport == 0 *)
  746.   {$EXTERNALSYM GQOS_API_BADSPORT}
  747. // TC System Error
  748.   GQOS_KERNEL_TC_SYS = (QOSSP_ERR_BASE+500);
  749.   {$EXTERNALSYM GQOS_KERNEL_TC_SYS}
  750.   GQOS_TC_GENERIC       = (QOSSP_ERR_BASE+500+1);
  751.   {$EXTERNALSYM GQOS_TC_GENERIC}
  752.   GQOS_TC_INVALID       = (QOSSP_ERR_BASE+500+2);
  753.   {$EXTERNALSYM GQOS_TC_INVALID}
  754.   GQOS_NO_MEMORY        = (QOSSP_ERR_BASE+500+3);
  755.   {$EXTERNALSYM GQOS_NO_MEMORY}
  756.   GQOS_BAD_ADDRESSTYPE  = (QOSSP_ERR_BASE+500+4);
  757.   {$EXTERNALSYM GQOS_BAD_ADDRESSTYPE}
  758.   GQOS_BAD_DUPLICATE    = (QOSSP_ERR_BASE+500+5);
  759.   {$EXTERNALSYM GQOS_BAD_DUPLICATE}
  760.   GQOS_CONFLICT         = (QOSSP_ERR_BASE+500+6);
  761.   {$EXTERNALSYM GQOS_CONFLICT}
  762.   GQOS_NOTREADY         = (QOSSP_ERR_BASE+500+7);
  763.   {$EXTERNALSYM GQOS_NOTREADY}
  764.   GQOS_WOULDBLOCK       = (QOSSP_ERR_BASE+500+8);
  765.   {$EXTERNALSYM GQOS_WOULDBLOCK}
  766.   GQOS_INCOMPATIBLE     = (QOSSP_ERR_BASE+500+9);
  767.   {$EXTERNALSYM GQOS_INCOMPATIBLE}
  768.   GQOS_BAD_SDMODE       = (QOSSP_ERR_BASE+500+10);
  769.   {$EXTERNALSYM GQOS_BAD_SDMODE}
  770.   GQOS_BAD_QOSPRIORITY  = (QOSSP_ERR_BASE+500+11);
  771.   {$EXTERNALSYM GQOS_BAD_QOSPRIORITY}
  772.   GQOS_BAD_TRAFFICCLASS = (QOSSP_ERR_BASE+500+12);
  773.   {$EXTERNALSYM GQOS_BAD_TRAFFICCLASS}
  774.   GQOS_NO_SYS_RESOURCES = (QOSSP_ERR_BASE+500+13);
  775.   {$EXTERNALSYM GQOS_NO_SYS_RESOURCES}
  776. // RSVP System Error
  777.   GQOS_RSVP_SYS = (QOSSP_ERR_BASE+600);
  778.   {$EXTERNALSYM GQOS_RSVP_SYS}
  779.   GQOS_OTHER_SYS            = (QOSSP_ERR_BASE+600+1);
  780.   {$EXTERNALSYM GQOS_OTHER_SYS}
  781.   GQOS_MEMORY_SYS           = (QOSSP_ERR_BASE+600+2);
  782.   {$EXTERNALSYM GQOS_MEMORY_SYS}
  783.   GQOS_API_SYS              = (QOSSP_ERR_BASE+600+3);
  784.   {$EXTERNALSYM GQOS_API_SYS}
  785.   GQOS_SETQOS_NO_LOCAL_APPS = (QOSSP_ERR_BASE+600+4);
  786.   {$EXTERNALSYM GQOS_SETQOS_NO_LOCAL_APPS}
  787. // TC Error
  788.   GQOS_KERNEL_TC = (QOSSP_ERR_BASE+700);
  789.   {$EXTERNALSYM GQOS_KERNEL_TC}
  790.   GQOS_CONFLICT_SERV = (QOSSP_ERR_BASE+700+1);
  791.   {$EXTERNALSYM GQOS_CONFLICT_SERV}
  792.   GQOS_NO_SERV       = (QOSSP_ERR_BASE+700+2);
  793.   {$EXTERNALSYM GQOS_NO_SERV}
  794.   GQOS_BAD_FLOWSPEC  = (QOSSP_ERR_BASE+700+3);
  795.   {$EXTERNALSYM GQOS_BAD_FLOWSPEC}
  796.   GQOS_BAD_TSPEC     = (QOSSP_ERR_BASE+700+4);
  797.   {$EXTERNALSYM GQOS_BAD_TSPEC}
  798.   GQOS_BAD_ADSPEC    = (QOSSP_ERR_BASE+700+5);
  799.   {$EXTERNALSYM GQOS_BAD_ADSPEC}
  800. // GQOS API ERRORS
  801. // WSAIoctl Error
  802.   GQOS_IOCTL_SYSTEMFAILURE   = (QOSSP_ERR_BASE+800+1);
  803.   {$EXTERNALSYM GQOS_IOCTL_SYSTEMFAILURE}
  804.   GQOS_IOCTL_NOBYTESRETURNED = (QOSSP_ERR_BASE+800+2);
  805.   {$EXTERNALSYM GQOS_IOCTL_NOBYTESRETURNED}
  806.   GQOS_IOCTL_INVALIDSOCKET   = (QOSSP_ERR_BASE+800+3);
  807.   {$EXTERNALSYM GQOS_IOCTL_INVALIDSOCKET}
  808.   GQOS_IOCTL_INV_FUNCPTR     = (QOSSP_ERR_BASE+800+4);
  809.   {$EXTERNALSYM GQOS_IOCTL_INV_FUNCPTR}
  810.   GQOS_IOCTL_INV_OVERLAPPED  = (QOSSP_ERR_BASE+800+5);
  811.   {$EXTERNALSYM GQOS_IOCTL_INV_OVERLAPPED}
  812. // SIO_SET_QOS error
  813.   GQOS_SETQOS_BADINBUFFER      = (QOSSP_ERR_BASE+810+1);
  814.   {$EXTERNALSYM GQOS_SETQOS_BADINBUFFER}
  815.   GQOS_SETQOS_BADFLOWSPEC      = (QOSSP_ERR_BASE+810+2);
  816.   {$EXTERNALSYM GQOS_SETQOS_BADFLOWSPEC}
  817.   GQOS_SETQOS_COLLISION        = (QOSSP_ERR_BASE+810+3);
  818.   {$EXTERNALSYM GQOS_SETQOS_COLLISION}
  819.   GQOS_SETQOS_BADPROVSPECBUF   = (QOSSP_ERR_BASE+810+4);
  820.   {$EXTERNALSYM GQOS_SETQOS_BADPROVSPECBUF}
  821.   GQOS_SETQOS_ILLEGALOP        = (QOSSP_ERR_BASE+810+5);
  822.   {$EXTERNALSYM GQOS_SETQOS_ILLEGALOP}
  823.   GQOS_SETQOS_INVALIDADDRESS   = (QOSSP_ERR_BASE+810+6);
  824.   {$EXTERNALSYM GQOS_SETQOS_INVALIDADDRESS}
  825.   GQOS_SETQOS_OUTOFMEMORY      = (QOSSP_ERR_BASE+810+7);
  826.   {$EXTERNALSYM GQOS_SETQOS_OUTOFMEMORY}
  827.   GQOS_SETQOS_EXCEPTION        = (QOSSP_ERR_BASE+810+8);
  828.   {$EXTERNALSYM GQOS_SETQOS_EXCEPTION}
  829.   GQOS_SETQOS_BADADDRLEN       = (QOSSP_ERR_BASE+810+9);
  830.   {$EXTERNALSYM GQOS_SETQOS_BADADDRLEN}
  831.   GQOS_SETQOS_NOSOCKNAME       = (QOSSP_ERR_BASE+810+10);
  832.   {$EXTERNALSYM GQOS_SETQOS_NOSOCKNAME}
  833.   GQOS_SETQOS_IPTOSFAIL        = (QOSSP_ERR_BASE+810+11);
  834.   {$EXTERNALSYM GQOS_SETQOS_IPTOSFAIL}
  835.   GQOS_SETQOS_OPENSESSIONFAIL  = (QOSSP_ERR_BASE+810+12);
  836.   {$EXTERNALSYM GQOS_SETQOS_OPENSESSIONFAIL}
  837.   GQOS_SETQOS_SENDFAIL         = (QOSSP_ERR_BASE+810+13);
  838.   {$EXTERNALSYM GQOS_SETQOS_SENDFAIL}
  839.   GQOS_SETQOS_RECVFAIL         = (QOSSP_ERR_BASE+810+14);
  840.   {$EXTERNALSYM GQOS_SETQOS_RECVFAIL}
  841.   GQOS_SETQOS_BADPOLICYOBJECT  = (QOSSP_ERR_BASE+810+15);
  842.   {$EXTERNALSYM GQOS_SETQOS_BADPOLICYOBJECT}
  843.   GQOS_SETQOS_UNKNOWNFILTEROBJ = (QOSSP_ERR_BASE+810+16);
  844.   {$EXTERNALSYM GQOS_SETQOS_UNKNOWNFILTEROBJ}
  845.   GQOS_SETQOS_BADFILTERTYPE    = (QOSSP_ERR_BASE+810+17);
  846.   {$EXTERNALSYM GQOS_SETQOS_BADFILTERTYPE}
  847.   GQOS_SETQOS_BADFILTERCOUNT   = (QOSSP_ERR_BASE+810+18);
  848.   {$EXTERNALSYM GQOS_SETQOS_BADFILTERCOUNT}
  849.   GQOS_SETQOS_BADOBJLENGTH     = (QOSSP_ERR_BASE+810+19);
  850.   {$EXTERNALSYM GQOS_SETQOS_BADOBJLENGTH}
  851.   GQOS_SETQOS_BADFLOWCOUNT     = (QOSSP_ERR_BASE+810+20);
  852.   {$EXTERNALSYM GQOS_SETQOS_BADFLOWCOUNT}
  853.   GQOS_SETQOS_UNKNOWNPSOBJ     = (QOSSP_ERR_BASE+810+21);
  854.   {$EXTERNALSYM GQOS_SETQOS_UNKNOWNPSOBJ}
  855.   GQOS_SETQOS_BADPOLICYOBJ     = (QOSSP_ERR_BASE+810+22);
  856.   {$EXTERNALSYM GQOS_SETQOS_BADPOLICYOBJ}
  857.   GQOS_SETQOS_BADFLOWDESC      = (QOSSP_ERR_BASE+810+23);
  858.   {$EXTERNALSYM GQOS_SETQOS_BADFLOWDESC}
  859.   GQOS_SETQOS_BADPROVSPECOBJ   = (QOSSP_ERR_BASE+810+24);
  860.   {$EXTERNALSYM GQOS_SETQOS_BADPROVSPECOBJ}
  861.   GQOS_SETQOS_NOLOOPBACK       = (QOSSP_ERR_BASE+810+25);
  862.   {$EXTERNALSYM GQOS_SETQOS_NOLOOPBACK}
  863.   GQOS_SETQOS_MODENOTSUPPORTED = (QOSSP_ERR_BASE+810+26);
  864.   {$EXTERNALSYM GQOS_SETQOS_MODENOTSUPPORTED}
  865.   GQOS_SETQOS_MISSINGFLOWDESC  = (QOSSP_ERR_BASE+810+27);
  866.   {$EXTERNALSYM GQOS_SETQOS_MISSINGFLOWDESC}
  867. // SIO_GET_QOS error
  868.   GQOS_GETQOS_BADOUTBUFFER    = (QOSSP_ERR_BASE+840+1);
  869.   {$EXTERNALSYM GQOS_GETQOS_BADOUTBUFFER}
  870.   GQOS_GETQOS_SYSTEMFAILURE   = (QOSSP_ERR_BASE+840+2);
  871.   {$EXTERNALSYM GQOS_GETQOS_SYSTEMFAILURE}
  872.   GQOS_GETQOS_EXCEPTION       = (QOSSP_ERR_BASE+840+3);
  873.   {$EXTERNALSYM GQOS_GETQOS_EXCEPTION}
  874.   GQOS_GETQOS_INTERNALFAILURE = (QOSSP_ERR_BASE+840+4);
  875.   {$EXTERNALSYM GQOS_GETQOS_INTERNALFAILURE}
  876. // SIO_CHK_QOS error
  877.   GQOS_CHKQOS_BADINBUFFER     = (QOSSP_ERR_BASE+850+1);
  878.   {$EXTERNALSYM GQOS_CHKQOS_BADINBUFFER}
  879.   GQOS_CHKQOS_BADOUTBUFFER    = (QOSSP_ERR_BASE+850+2);
  880.   {$EXTERNALSYM GQOS_CHKQOS_BADOUTBUFFER}
  881.   GQOS_CHKQOS_SYSTEMFAILURE   = (QOSSP_ERR_BASE+850+3);
  882.   {$EXTERNALSYM GQOS_CHKQOS_SYSTEMFAILURE}
  883.   GQOS_CHKQOS_INTERNALFAILURE = (QOSSP_ERR_BASE+850+4);
  884.   {$EXTERNALSYM GQOS_CHKQOS_INTERNALFAILURE}
  885.   GQOS_CHKQOS_BADPARAMETER    = (QOSSP_ERR_BASE+850+5);
  886.   {$EXTERNALSYM GQOS_CHKQOS_BADPARAMETER}
  887.   GQOS_CHKQOS_EXCEPTION       = (QOSSP_ERR_BASE+850+6);
  888.   {$EXTERNALSYM GQOS_CHKQOS_EXCEPTION}
  889. implementation
  890. end.