Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

252 lines
7.2 KiB

/*
- QOS.H
-
* Microsoft NetMeeting
* Quality of Service DLL
* Header file
*
* Revision History:
*
* When Who What
* -------- ------------------ ---------------------------------------
* 10.23.96 Yoram Yaacovi Created
*
*/
#ifndef _NMQOS_H_
#define _NMQOS_H_
#include <pshpack8.h> /* Assume 8 byte packing throughout */
/*
* Constants
*/
// Properties stuff
// Property types
#define PT_NULL ((ULONG) 1) /* NULL property value */
#define PT_I2 ((ULONG) 2) /* Signed 16-bit value */
#define PT_LONG ((ULONG) 3) /* Signed 32-bit value */
#define PT_BOOLEAN ((ULONG) 11) /* 16-bit boolean (non-zero true) */
#define PT_STRING8 ((ULONG) 30) /* Null terminated 8-bit character string */
#define PT_UNICODE ((ULONG) 31) /* Null terminated Unicode string */
#define PT_CLSID ((ULONG) 72) /* OLE GUID */
#define PT_BINARY ((ULONG) 258) /* Uninterpreted (counted byte array) */
// Property IDs
#define QOS_PROPERTY_BASE 0x3000
#define PR_QOS_WINDOW_HANDLE PROPERTY_TAG( PT_LONG, QOS_PROPERTY_BASE+1)
// hresult codes, facility QOS = 0x300
#define QOS_E_RES_NOT_ENOUGH_UNITS 0x83000001
#define QOS_E_RES_NOT_AVAILABLE 0x83000002
#define QOS_E_NO_SUCH_REQUEST 0x83000003
#define QOS_E_NO_SUCH_RESOURCE 0x83000004
#define QOS_E_NO_SUCH_CLIENT 0x83000005
#define QOS_E_REQ_ERRORS 0x83000006
#define QOS_W_MAX_UNITS_EXCEEDED 0x03000007
#define QOS_E_INTERNAL_ERROR 0x83000008
#define QOS_E_NO_SUCH_PROPERTY 0x83000100
// Resource IDs
#define RESOURCE_NULL 0
#define RESOURCE_OUTGOING_BANDWIDTH 1 /* units: bps */
#define RESOURCE_INCOMING_BANDWIDTH 2 /* units: bps */
#define RESOURCE_OUTGOING_LATENCY 3 /* units: */
#define RESOURCE_INCOMING_LATENCY 4 /* units: */
#define RESOURCE_CPU_CYCLES 10 /* units: */
#define QOS_CLIENT_NAME_ZISE 20
// For use as dimension for variable size arrays
#define VARIABLE_DIM 1
/*
* Macros
*/
#define PROPERTY_TYPE_MASK ((ULONG)0x0000FFFF) /* Mask for Property type */
#define PROPERTY_TYPE(ulPropTag) (((ULONG)(ulPropTag))&PROPERTY_TYPE_MASK)
#define PROPERTY_ID(ulPropTag) (((ULONG)(ulPropTag))>>16)
#define PROPERTY_TAG(ulPropType,ulPropID) ((((ULONG)(ulPropID))<<16)|((ULONG)(ulPropType)))
#ifndef GUARANTEE
// this used to be defined in the original winsock2.h
typedef enum
{
BestEffortService,
ControlledLoadService,
PredictiveService,
GuaranteedDelayService,
GuaranteedService
} GUARANTEE;
#endif
/*
* Data Structures
*/
// Properties part
typedef struct _binaryvalue
{
ULONG cb;
LPBYTE lpb;
} BINARYVALUE, *PBINARYVALUE;
typedef union _propvalue
{
short int i; /* case PT_I2 */
LONG l; /* case PT_LONG */
ULONG_PTR ul; /* alias for PT_LONG */
unsigned short int b; /* case PT_BOOLEAN */
LPSTR lpszA; /* case PT_STRING8 */
BINARYVALUE bin; /* case PT_BINARY */
LPWSTR lpszW; /* case PT_UNICODE */
LPGUID lpguid; /* case PT_CLSID */
} PROPVALUE;
typedef struct _property
{
ULONG ulPropTag;
ULONG hResult;
union _propvalue Value;
} PROPERTY, *PPROPERTY;
typedef struct _proptagarray
{
ULONG cValues;
ULONG aulPropTag[VARIABLE_DIM];
} PROPTAGARRAY, *PPROPTAGARRAY;
// QoS part
typedef struct _resource
{
DWORD resourceID;
DWORD ulResourceFlags; /* 0 in NetMeeting 2.0 */
int nUnits; /* Total units of the resource */
DWORD reserved; /* Must be 0 */
} RESOURCE, *LPRESOURCE;
typedef struct _resourcerequest
{
DWORD resourceID;
DWORD ulRequestFlags; /* 0 in NetMeeting 2.0 */
GUARANTEE levelOfGuarantee; /* Guaranteed, Predictive */
int nUnitsMin; /* # of units to reserve */
int nUnitsMax; /* 0 in NetMeeting 2.0 */
SOCKET socket; /* Socket where the */
/* reservation will be used */
HRESULT hResult; /* result code for this resource */
DWORD reserved; /* Must be 0 */
} RESOURCEREQUEST, *LPRESOURCEREQUEST;
typedef struct _resourcelist
{
ULONG cResources;
RESOURCE aResources[VARIABLE_DIM];
} RESOURCELIST, *LPRESOURCELIST;
typedef struct _resourcerequestlist
{
ULONG cRequests;
RESOURCEREQUEST aRequests[VARIABLE_DIM];
} RESOURCEREQUESTLIST, *LPRESOURCEREQUESTLIST;
typedef struct _client
{
GUID guidClientGUID;
int priority; /* 1 highest, 9 lowest, 0 invalid */
WCHAR wszName[QOS_CLIENT_NAME_ZISE]; /* name of the client */
DWORD reserved; /* Must be 0 */
} CLIENT, *LPCLIENT;
typedef struct _clientlist
{
ULONG cClients;
CLIENT aClients[VARIABLE_DIM];
} CLIENTLIST, *LPCLIENTLIST;
/*
* Functions
*/
typedef HRESULT (CALLBACK *LPFNQOSNOTIFY)
(LPRESOURCEREQUESTLIST lpResourceRequestList,
DWORD_PTR dwParam);
/*
* Interfaces
*/
#ifndef DECLARE_INTERFACE_PTR
#ifdef __cplusplus
#define DECLARE_INTERFACE_PTR(iface, piface) \
interface iface; typedef iface FAR * piface
#else
#define DECLARE_INTERFACE_PTR(iface, piface) \
typedef interface iface iface, FAR * piface
#endif
#endif /* DECLARE_INTERFACE_PTR */
#define IUNKNOWN_METHODS(IPURE) \
STDMETHOD (QueryInterface) \
(THIS_ REFIID riid, LPVOID FAR * ppvObj) IPURE; \
STDMETHOD_(ULONG,AddRef) (THIS) IPURE; \
STDMETHOD_(ULONG,Release) (THIS) IPURE; \
#define IQOS_METHODS(IPURE) \
STDMETHOD(RequestResources) \
(THIS_ LPGUID lpStreamGUID, \
LPRESOURCEREQUESTLIST lpResourceRequestList, \
LPFNQOSNOTIFY lpfnQoSNotify, \
DWORD_PTR dwParam) IPURE; \
STDMETHOD (ReleaseResources) \
(THIS_ LPGUID lpStreamGUID, \
LPRESOURCEREQUESTLIST lpResourceRequestList) IPURE; \
STDMETHOD (SetResources) (THIS_ LPRESOURCELIST lpResourceList) IPURE; \
STDMETHOD (GetResources) (THIS_ LPRESOURCELIST *lppResourceList) IPURE; \
STDMETHOD (SetClients) (THIS_ LPCLIENTLIST lpClientList) IPURE; \
STDMETHOD (NotifyNow) (THIS) IPURE; \
STDMETHOD (FreeBuffer) (THIS_ LPVOID lpBuffer) IPURE; \
#define IPROP_METHODS(IPURE) \
STDMETHOD (SetProps) \
(THIS_ ULONG cValues, \
PPROPERTY pPropArray) IPURE; \
STDMETHOD (GetProps) \
(THIS_ PPROPTAGARRAY pPropTagArray, \
ULONG ulFlags, \
ULONG *pcValues, \
PPROPERTY *ppPropArray) IPURE; \
#undef INTERFACE
#define INTERFACE IQoS
DECLARE_INTERFACE_(IQoS, IUnknown)
{
IUNKNOWN_METHODS(PURE)
IQOS_METHODS(PURE)
IPROP_METHODS(PURE)
};
DECLARE_INTERFACE_PTR(IQoS, LPIQOS);
EXTERN_C HRESULT WINAPI CreateQoS ( IUnknown *punkOuter,
REFIID riid,
void **ppv);
typedef HRESULT (WINAPI *PFNCREATEQOS)
(IUnknown *punkOuter, REFIID riid, void **ppv);
// QoS Class GUID
// {085C06A0-3CAA-11d0-A00E-00A024A85A2C}
DEFINE_GUID(CLSID_QoS, 0x085c06a0, 0x3caa, 0x11d0, 0xa0, 0x0e, 0x0, 0xa0, 0x24, 0xa8, 0x5a, 0x2c);
// QoS Interface GUID
// {DFC1F900-2DCE-11d0-92DD-00A0C922E6B2}
DEFINE_GUID(IID_IQoS, 0xdfc1f900, 0x2dce, 0x11d0, 0x92, 0xdd, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xb2);
#include <poppack.h> /* End byte packing */
#endif // _NMQOS_H_