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.

575 lines
20 KiB

  1. /*==========================================================================;
  2. *
  3. * Copyright (C) 1998-2001 Microsoft Corporation. All Rights Reserved.
  4. *
  5. * File: DPSP8.h
  6. * Content: Service provider include file
  7. //@@BEGIN_MSINTERNAL
  8. * History:
  9. * Date By Reason
  10. * ============
  11. * 10/12/98 jwo created
  12. * 03/22/2000 jtk Changed interface names
  13. * 05/16/2000 jtk Derived from DNSP.h
  14. * 07/17/2001 vanceo MSINTERNAL cleanup so header can be released
  15. //@@END_MSINTERNAL
  16. ***************************************************************************/
  17. #ifndef __DIRECTPLAY_SERVICE_PROVIDER_8__
  18. #define __DIRECTPLAY_SERVICE_PROVIDER_8__
  19. #include <ole2.h> // for DECLARE_INTERFACE and HRESULT
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /****************************************************************************
  24. *
  25. * DirectPlay8 Interface IIDs
  26. *
  27. ****************************************************************************/
  28. //
  29. // GUIDS used by DP8ServiceProvider objects
  30. //
  31. // {85F1A470-61D5-11D2-AE0F-006097B01411}
  32. DEFINE_GUID(IID_IDP8ServiceProvider, 0x85f1a470, 0x61d5, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
  33. // {85F1A472-61D5-11D2-AE0F-006097B01411}
  34. DEFINE_GUID(IID_IDP8SPCallback, 0x85f1a472, 0x61d5, 0x11d2, 0xae, 0xf, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
  35. /****************************************************************************
  36. *
  37. * DirectPlay8 Interface Pointer definitions
  38. *
  39. ****************************************************************************/
  40. typedef struct IDP8SPCallback FAR *PDP8SPCALLBACK;
  41. typedef struct IDP8ServiceProvider IDP8ServiceProvider;
  42. //**************************************************************************
  43. // Constant definitions
  44. //**************************************************************************
  45. //
  46. // Registry key under HKLM where the service provider info lives
  47. //
  48. #define DPN_REG_LOCAL_SP_ROOT L"Software\\Microsoft\\DirectPlay8"
  49. #define DPN_REG_LOCAL_SP_SUB L"\\Service Providers"
  50. #define DPN_REG_LOCAL_SP_SUBKEY DPN_REG_LOCAL_SP_ROOT DPN_REG_LOCAL_SP_SUB
  51. //
  52. // Registry values used by DirectPlay
  53. //
  54. #define DPN_REG_KEYNAME_FRIENDLY_NAME L"Friendly Name"
  55. #define DPN_REG_KEYNAME_GUID L"GUID"
  56. //
  57. // Enumerated values for service provider events
  58. //
  59. typedef enum _SP_EVENT_TYPE
  60. {
  61. SPEV_UNKNOWN = 0,
  62. SPEV_DATA,
  63. SPEV_CONNECT,
  64. SPEV_DISCONNECT,
  65. SPEV_ENUMQUERY,
  66. SPEV_QUERYRESPONSE,
  67. SPEV_LISTENSTATUS,
  68. SPEV_LISTENADDRESSINFO,
  69. SPEV_ENUMADDRESSINFO,
  70. SPEV_CONNECTADDRESSINFO
  71. } SP_EVENT_TYPE;
  72. /* Flags */
  73. //@@BEGIN_MSINTERNAL
  74. //#define DPNSPF_OKTOSHOWSTATUS 0x00000001 // unused
  75. //@@END_MSINTERNAL
  76. #define DPNSPF_OKTOQUERY 0x00000002 // OK for SP to ask the user for clarification on addresses
  77. //@@BEGIN_MSINTERNAL
  78. //#define DPNSPF_RELIABLE 0x00000004 // unused
  79. //#define DPNSPF_UNRELIABLE 0x00000008 // unused
  80. //@@END_MSINTERNAL
  81. #define DPNSPF_NOBROADCASTFALLBACK 0x00000010 // don't allow SP to fallback to broadcast with insufficient information
  82. // (only if the SP supports broadcast)
  83. #define DPNSPF_BINDLISTENTOGATEWAY 0x00000020 // when performing a 'listen' attempt create a mapping between the local
  84. // 'port' to the same 'port' on the network 'gateway'.
  85. #define DPNSPF_ADDITIONALMULTIPLEXADAPTERS 0x00000040 // there will be more adapters for this connect operation
  86. //
  87. // flags for getting address information
  88. //
  89. typedef enum
  90. {
  91. SP_GET_ADDRESS_INFO_LOCAL_ADAPTER = 0x00000001, // local adapter address
  92. SP_GET_ADDRESS_INFO_LISTEN_HOST_ADDRESSES, // local adapter address (in 'host' form to be passed to connect/enum)
  93. SP_GET_ADDRESS_INFO_LOCAL_HOST_PUBLIC_ADDRESS, // local adapter address as mapped on the 'gateway' (in 'host' form for connect/enum)
  94. SP_GET_ADDRESS_INFO_REMOTE_HOST // address of other end of an endpoint (in 'host' form to be passed to connect/enum)
  95. } SP_GET_ADDRESS_INFO_FLAGS;
  96. //**************************************************************************
  97. // Structure definitions
  98. //**************************************************************************
  99. //
  100. // data received from the SP
  101. //
  102. typedef struct _SPRECEIVEDBUFFER
  103. {
  104. struct _SPRECEIVEDBUFFER *pNext; // link to next item in list
  105. DWORD dwProtocolData; // reserved for protocol
  106. PVOID pServiceProviderDescriptor; // reserved for protocol
  107. BUFFERDESC BufferDesc; // received buffer description
  108. } SPRECEIVEDBUFFER, *PSPRECEIVEDBUFFER;
  109. //
  110. // connect indication
  111. //
  112. typedef struct _SPIE_CONNECT
  113. {
  114. HANDLE hEndpoint; // handle of the new endpoint
  115. void *pEndpointContext; // user context associated with this endpoint
  116. void *pCommandContext; // user context for associated command
  117. } SPIE_CONNECT, *PSPIE_CONNECT;
  118. //
  119. // disconnect indication
  120. //
  121. typedef struct _SPIE_DISCONNECT
  122. {
  123. HANDLE hEndpoint; // handle of endpoint being disconnected
  124. void *pEndpointContext; // user context associated with this endpoint
  125. } SPIE_DISCONNECT, *PSPIE_DISCONNECT;
  126. //
  127. // user data indication
  128. //
  129. typedef struct _SPIE_DATA
  130. {
  131. HANDLE hEndpoint; // EP from which this data was received
  132. void *pEndpointContext; // user context associated with this endpoint
  133. SPRECEIVEDBUFFER *pReceivedData; // pointer to received data
  134. } SPIE_DATA, *PSPIE_DATA;
  135. //
  136. // enum data indication
  137. //
  138. typedef struct _SPIE_QUERY
  139. {
  140. IDirectPlay8Address *pAddressSender; // address from which the query came (may be NULL)
  141. IDirectPlay8Address *pAddressDevice; // address of device on which query was received
  142. SPRECEIVEDBUFFER *pReceivedData; // pointer to received data
  143. void *pUserContext; // user context passed into listen command
  144. } SPIE_QUERY, *PSPIE_QUERY;
  145. //
  146. // enum response data indication
  147. //
  148. typedef struct _SPIE_QUERYRESPONSE
  149. {
  150. IDirectPlay8Address *pAddressSender; // address from which the query came (may be NULL)
  151. IDirectPlay8Address *pAddressDevice; // address of device on which query response was received
  152. SPRECEIVEDBUFFER *pReceivedData; // pointer to received data
  153. DWORD dwRoundTripTime; // round trip time for enum (milliseconds)
  154. void *pUserContext; // user context passed into enum command
  155. } SPIE_QUERYRESPONSE, *PSPIE_QUERYRESPONSE;
  156. //
  157. // event sent to indicate status of 'listen' on an adapter
  158. //
  159. typedef struct _SPIE_LISTENSTATUS
  160. {
  161. GUID ListenAdapter; // adapter GUID
  162. HRESULT hResult; // result of listen
  163. HANDLE hCommand; // handle of associated command
  164. void *pUserContext; // user context passed into command
  165. HANDLE hEndpoint; // handle of endpoint associated with this listen
  166. } SPIE_LISTENSTATUS, *PSPIE_LISTENSTATUS;
  167. //
  168. // event sent to indicate address info for 'listen' on an adapter
  169. //
  170. typedef struct _SPIE_LISTENADDRESSINFO
  171. {
  172. IDirectPlay8Address *pDeviceAddress; // device address used to complete this command
  173. HRESULT hCommandStatus; // command status
  174. void *pCommandContext; // command context
  175. } SPIE_LISTENADDRESSINFO, *PSPIE_LISTENADDRESSINFO;
  176. //
  177. // event sent to indicate address info for 'enum' on an adapter
  178. //
  179. typedef struct _SPIE_ENUMADDRESSINFO
  180. {
  181. IDirectPlay8Address *pHostAddress; // host address used to complete this command
  182. IDirectPlay8Address *pDeviceAddress; // device address used to complete this command
  183. HRESULT hCommandStatus; // command status
  184. void *pCommandContext; // command context
  185. } SPIE_ENUMADDRESSINFO, *PSPIE_ENUMADDRESSINFO;
  186. //
  187. // event sent to indicate status of 'connect' on an adapter
  188. //
  189. typedef struct _SPIE_CONNECTADDRESSINFO
  190. {
  191. IDirectPlay8Address *pHostAddress; // host address used to complete this command
  192. IDirectPlay8Address *pDeviceAddress; // device address used to complete this command
  193. HRESULT hCommandStatus; // command status
  194. void *pCommandContext; // command context
  195. } SPIE_CONNECTADDRESSINFO, *PSPIE_CONNECTADDRESSINFO;
  196. //
  197. // data passed through the service provider interface
  198. //
  199. typedef struct IDP8SPCallback FAR *PDP8SPCALLBACK;
  200. typedef struct IDP8SPCallback IDP8SPCallback;
  201. // Love to use SPINITDATA, but the old DPlay already took it, and compilers
  202. // don't like namespace collisions for some strange reason.
  203. typedef struct _SPINITIALIZEDATA
  204. {
  205. IDP8SPCallback *pIDP; // pointer to callback interface
  206. DWORD dwFlags; // flags
  207. } SPINITIALIZEDATA, *PSPINITIALIZEDATA;
  208. typedef struct _SPGETCAPSDATA
  209. {
  210. DWORD dwSize; // size of this structure
  211. HANDLE hEndpoint; // Handle of endpoint to check. If this parameter
  212. // is NULL, the best-case capabilities of the SP are
  213. // returned.
  214. DWORD dwUserFrameSize; // Maximum data payload allowed in an outgoing
  215. // message from this SP. It is the SP's responsibility
  216. // to account for any extra header information it's
  217. // going to attach when sending a message, and for any
  218. // underlying protocol overhead (IP packet headers).
  219. DWORD dwEnumFrameSize; // maximum payload for an enum query (NOT ENUM RESPONSE!)
  220. DWORD dwLocalLinkSpeed; // speed of link in bits per second
  221. DWORD dwIOThreadCount; // count of threads in operation by this SP
  222. DWORD dwDefaultEnumRetryCount; // default retry count
  223. DWORD dwDefaultEnumRetryInterval; // default retry interval
  224. DWORD dwDefaultEnumTimeout; // default timeout
  225. DWORD dwFlags; // SP flags
  226. DWORD dwBuffersPerThread; // buffers per thread
  227. DWORD dwSystemBufferSize; // system buffer size
  228. } SPGETCAPSDATA, *PSPGETCAPSDATA;
  229. typedef struct _SPSETCAPSDATA
  230. {
  231. DWORD dwSize; // size of this structure
  232. DWORD dwIOThreadCount; // number of threads in operation by this SP
  233. DWORD dwBuffersPerThread; // buffers per thread
  234. DWORD dwSystemBufferSize; // system buffer size
  235. } SPSETCAPSDATA, *PSPSETCAPSDATA;
  236. typedef struct _SPGETADDRESSINFODATA
  237. {
  238. HANDLE hEndpoint; // handle of endpoint to check
  239. IDirectPlay8Address *pAddress; // pointer to output address
  240. SP_GET_ADDRESS_INFO_FLAGS Flags; // flags
  241. } SPGETADDRESSINFODATA, *PSPGETADDRESSINFODATA;
  242. typedef struct _SPENUMQUERYDATA
  243. {
  244. IDirectPlay8Address *pAddressHost; // address to which to send
  245. IDirectPlay8Address *pAddressDeviceInfo; // device to enumerate on
  246. BUFFERDESC *pBuffers; // pointer to buffers to send
  247. DWORD dwBufferCount; // count of buffers to send
  248. DWORD dwTimeout; // how long to wait for replies (0 means infinite)
  249. DWORD dwRetryCount; // how many times to send it (0 means infinite)
  250. DWORD dwRetryInterval; // how long to wait between retries
  251. DWORD dwFlags;
  252. void *pvContext; // caller's toy, returned in the completion indication
  253. HANDLE hCommand; // Returned
  254. DWORD dwCommandDescriptor; // Returned
  255. } SPENUMQUERYDATA, *PSPENUMQUERYDATA;
  256. typedef struct _SPENUMRESPONDDATA
  257. {
  258. SPIE_QUERY *pQuery; // pointer to the query indication to which you're responding
  259. BUFFERDESC *pBuffers;
  260. DWORD dwBufferCount;
  261. DWORD dwFlags; // must be zero!
  262. void *pvContext; // caller's toy, returned in the completion indication
  263. HANDLE hCommand; // Returned
  264. DWORD dwCommandDescriptor; // Returned
  265. } SPENUMRESPONDDATA, *PSPENUMRESPONDDATA;
  266. typedef struct _SPCONNECTDATA
  267. {
  268. IDirectPlay8Address *pAddressHost; // address to which to connect
  269. IDirectPlay8Address *pAddressDeviceInfo; // address to which to connect
  270. DWORD dwReserved; // unused, must be zero
  271. DWORD dwFlags;
  272. void *pvContext; // caller's toy, returned in the completion indication
  273. HANDLE hCommand; // Returned
  274. DWORD dwCommandDescriptor; // Returned
  275. } SPCONNECTDATA, *PSPCONNECTDATA;
  276. typedef struct _SPDISCONNECTDATA
  277. {
  278. HANDLE hEndpoint; // handle to the endpoint to disconnect
  279. DWORD dwFlags; // must be zero!
  280. void *pvContext; // caller's toy, returned in the completion indication
  281. HANDLE hCommand; // Returned
  282. DWORD dwCommandDescriptor; // Returned
  283. } SPDISCONNECTDATA, *PSPDISCONNECTDATA;
  284. typedef struct _SPLISTENDATA
  285. {
  286. IDirectPlay8Address *pAddressDeviceInfo; // address to listen on
  287. DWORD dwFlags;
  288. void *pvContext; // caller's toy, returned in the completion indication
  289. HANDLE hCommand; // Returned
  290. DWORD dwCommandDescriptor; // Returned
  291. } SPLISTENDATA, *PSPLISTENDATA;
  292. typedef struct _SPSENDDATA
  293. {
  294. HANDLE hEndpoint; // handle of endpoint on which to send the data
  295. BUFFERDESC *pBuffers; // data to send
  296. DWORD dwBufferCount; // count of buffers to send
  297. DWORD dwFlags; // send flags
  298. void *pvContext; // caller's toy, returned in the completion indication
  299. HANDLE hCommand; // Returned
  300. DWORD dwCommandDescriptor; // Returned
  301. } SPSENDDATA, *PSPSENDDATA;
  302. typedef struct _SPCREATEGROUPDATA SPCREATEGROUPDATA, *PSPCREATEGROUPDATA;
  303. typedef struct _SPADDTOGROUPDATA SPADDTOGROUPDATA, *PSPADDTOGROUPDATA;
  304. typedef struct _SPREMOVEFROMGROUPDATA SPREMOVEFROMGROUPDATA, *PSPREMOVEFROMGROUPDATA;
  305. typedef struct _SPDELETEGROUPDATA SPDELETEGROUPDATA, *PSPDELETEGROUPDATA;
  306. typedef struct _SPISAPPLICATIONSUPPORTEDDATA
  307. {
  308. const GUID *pApplicationGuid;
  309. DWORD dwFlags;
  310. } SPISAPPLICATIONSUPPORTEDDATA, *PSPISAPPLICATIONSUPPORTEDDATA;
  311. typedef struct _SPENUMADAPTERSDATA
  312. {
  313. DPN_SERVICE_PROVIDER_INFO *pAdapterData;
  314. DWORD dwAdapterDataSize;
  315. DWORD dwAdapterCount;
  316. DWORD dwFlags;
  317. } SPENUMADAPTERSDATA, *PSPENUMADAPTERSDATA;
  318. typedef struct _SPPROXYENUMQUERYDATA
  319. {
  320. DWORD dwFlags;
  321. SPIE_QUERY *pIncomingQueryData;
  322. IDirectPlay8Address *pDestinationAdapter;
  323. } SPPROXYENUMQUERYDATA, *PSPPROXYENUMQUERYDATA;
  324. //**************************************************************************
  325. // Variable definitions
  326. //**************************************************************************
  327. //**************************************************************************
  328. // Function prototypes
  329. //**************************************************************************
  330. //**************************************************************************
  331. // Function definitions
  332. //**************************************************************************
  333. /***************************************************************************
  334. * IDP8SPCallback interface
  335. ***************************************************************************/
  336. #undef INTERFACE
  337. #define INTERFACE IDP8SPCallback
  338. DECLARE_INTERFACE_( IDP8SPCallback, IUnknown )
  339. {
  340. /*** IUnknown methods ***/
  341. STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  342. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  343. STDMETHOD_(ULONG,Release) (THIS) PURE;
  344. /*** IDP8SPCallback methods ***/
  345. STDMETHOD(IndicateEvent) (THIS_ SP_EVENT_TYPE,LPVOID) PURE;
  346. STDMETHOD(CommandComplete) (THIS_ HANDLE,HRESULT,LPVOID) PURE;
  347. };
  348. /***************************************************************************
  349. * IDP8SPCallback interface macros
  350. ***************************************************************************/
  351. #if !defined(__cplusplus) || defined(CINTERFACE)
  352. #define IDP8SPCallback_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  353. #define IDP8SPCallback_AddRef(p) (p)->lpVtbl->AddRef(p)
  354. #define IDP8SPCallback_Release(p) (p)->lpVtbl->Release(p)
  355. #define IDP8SPCallback_IndicateEvent(p,a,b) (p)->lpVtbl->IndicateEvent(p,a,b)
  356. #define IDP8SPCallback_CommandComplete(p,a,b,c) (p)->lpVtbl->CommandComplete(p,a,b,c)
  357. #else /* C++ */
  358. #define IDP8SPCallback_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  359. #define IDP8SPCallback_AddRef(p) (p)->AddRef()
  360. #define IDP8SPCallback_Release(p) (p)->Release()
  361. #define IDP8SPCallback_IndicateEvent(p,a,b) (p)->IndicateEvent(a,b)
  362. #define IDP8SPCallback_CommandComplete(p,a,b,c) (p)->CommandComplete(a,b,c)
  363. #endif
  364. /***************************************************************************
  365. * IDP8ServiceProvider interface
  366. ***************************************************************************/
  367. #undef INTERFACE
  368. #define INTERFACE IDP8ServiceProvider
  369. DECLARE_INTERFACE_( IDP8ServiceProvider, IUnknown )
  370. {
  371. /*** IUnknown methods ***/
  372. STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  373. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  374. STDMETHOD_(ULONG,Release) (THIS) PURE;
  375. /*** IDP8ServiceProvider methods ***/
  376. STDMETHOD(Initialize) (THIS_ PSPINITIALIZEDATA) PURE;
  377. STDMETHOD(Close) (THIS) PURE;
  378. STDMETHOD(Connect) (THIS_ PSPCONNECTDATA) PURE;
  379. STDMETHOD(Disconnect) (THIS_ PSPDISCONNECTDATA) PURE;
  380. STDMETHOD(Listen) (THIS_ PSPLISTENDATA) PURE;
  381. STDMETHOD(SendData) (THIS_ PSPSENDDATA) PURE;
  382. STDMETHOD(EnumQuery) (THIS_ PSPENUMQUERYDATA) PURE;
  383. STDMETHOD(EnumRespond) (THIS_ PSPENUMRESPONDDATA) PURE;
  384. STDMETHOD(CancelCommand) (THIS_ HANDLE, DWORD) PURE;
  385. STDMETHOD(CreateGroup) (THIS_ PSPCREATEGROUPDATA) PURE;
  386. STDMETHOD(DeleteGroup) (THIS_ PSPDELETEGROUPDATA) PURE;
  387. STDMETHOD(AddToGroup) (THIS_ PSPADDTOGROUPDATA) PURE;
  388. STDMETHOD(RemoveFromGroup) (THIS_ PSPREMOVEFROMGROUPDATA) PURE;
  389. STDMETHOD(GetCaps) (THIS_ PSPGETCAPSDATA) PURE;
  390. STDMETHOD(SetCaps) (THIS_ PSPSETCAPSDATA) PURE;
  391. STDMETHOD(ReturnReceiveBuffers) (THIS_ PSPRECEIVEDBUFFER) PURE;
  392. STDMETHOD(GetAddressInfo) (THIS_ PSPGETADDRESSINFODATA) PURE;
  393. STDMETHOD(IsApplicationSupported) (THIS_ PSPISAPPLICATIONSUPPORTEDDATA) PURE;
  394. STDMETHOD(EnumAdapters) (THIS_ PSPENUMADAPTERSDATA) PURE;
  395. STDMETHOD(ProxyEnumQuery) (THIS_ PSPPROXYENUMQUERYDATA) PURE;
  396. };
  397. /***************************************************************************
  398. * IDP8ServiceProvider interface macros
  399. ***************************************************************************/
  400. #if !defined(__cplusplus) || defined(CINTERFACE)
  401. #define IDP8ServiceProvider_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  402. #define IDP8ServiceProvider_AddRef(p) (p)->lpVtbl->AddRef(p)
  403. #define IDP8ServiceProvider_Release(p) (p)->lpVtbl->Release(p)
  404. #define IDP8ServiceProvider_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
  405. #define IDP8ServiceProvider_Connect(p,a) (p)->lpVtbl->Connect(p,a)
  406. #define IDP8ServiceProvider_Disconnect(p,a) (p)->lpVtbl->Disconnect(p,a)
  407. #define IDP8ServiceProvider_Listen(p,a) (p)->lpVtbl->Listen(p,a)
  408. #define IDP8ServiceProvider_SendData(p,a) (p)->lpVtbl->SendData(p,a)
  409. #define IDP8ServiceProvider_EnumQuery(p,a) (p)->lpVtbl->EnumQuery(p,a)
  410. #define IDP8ServiceProvider_EnumRespond(p,a) (p)->lpVtbl->EnumRespond(p,a)
  411. #define IDP8ServiceProvider_CancelCommand(p,a,b) (p)->lpVtbl->CancelCommand(p,a,b)
  412. #define IDP8ServiceProvider_Close(p) (p)->lpVtbl->Close(p)
  413. #define IDP8ServiceProvider_CreateGroup(p,a) (p)->lpVtbl->CreateGroup(p,a)
  414. #define IDP8ServiceProvider_DeleteGroup(p,a) (p)->lpVtbl->DeleteGroup(p,a)
  415. #define IDP8ServiceProvider_AddToGroup(p,a) (p)->lpVtbl->AddToGroup(p,a)
  416. #define IDP8ServiceProvider_RemoveFromGroup(p,a) (p)->lpVtbl->RemoveFromGroup(p,a)
  417. #define IDP8ServiceProvider_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
  418. #define IDP8ServiceProvider_SetCaps(p,a) (p)->lpVtbl->SetCaps(p,a)
  419. #define IDP8ServiceProvider_ReturnReceiveBuffers(p,a) (p)->lpVtbl->ReturnReceiveBuffers(p,a)
  420. #define IDP8ServiceProvider_GetAddressInfo(p,a) (p)->lpVtbl->GetAddressInfo(p,a)
  421. #define IDP8ServiceProvider_IsApplicationSupported(p,a) (p)->lpVtbl->IsApplicationSupported(p,a)
  422. #define IDP8ServiceProvider_EnumAdapters(p,a) (p)->lpVtbl->EnumAdapters(p,a)
  423. #define IDP8ServiceProvider_ProxyEnumQuery(p,a) (p)->lpVtbl->ProxyEnumQuery(p,a)
  424. #else /* C++ */
  425. #define IDP8ServiceProvider_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  426. #define IDP8ServiceProvider_AddRef(p) (p)->AddRef()
  427. #define IDP8ServiceProvider_Release(p) (p)->Release()
  428. #define IDP8ServiceProvider_Initialize(p,a) (p)->Initialize(a)
  429. #define IDP8ServiceProvider_Connect(p,a) (p)->Connect(a)
  430. #define IDP8ServiceProvider_Disconnect(p,a) (p)->Disconnect(a)
  431. #define IDP8ServiceProvider_Listen(p,a) (p)->Listen(a)
  432. #define IDP8ServiceProvider_SendData(p,a) (p)->SendData(a)
  433. #define IDP8ServiceProvider_EnumQuery(p,a) (p)->EnumQuery(a)
  434. #define IDP8ServiceProvider_EnumRespond(p,a) (p)->EnumRespond(a)
  435. #define IDP8ServiceProvider_CancelCommand(p,a,b) (p)->CancelCommand(a,b)
  436. #define IDP8ServiceProvider_Close(p) (p)->Close()
  437. #define IDP8ServiceProvider_CreateGroup(p,a) (p)->CreateGroup(a)
  438. #define IDP8ServiceProvider_DeleteGroup(p,a) (p)->DeleteGroup(a)
  439. #define IDP8ServiceProvider_AddToGroup(p,a) (p)->AddToGroup(a)
  440. #define IDP8ServiceProvider_RemoveFromGroup(p,a) (p)->RemoveFromGroup(a)
  441. #define IDP8ServiceProvider_GetCaps(p,a) (p)->GetCaps(a)
  442. #define IDP8ServiceProvider_SetCaps(p,a) (p)->SetCaps(a)
  443. #define IDP8ServiceProvider_GetAddressInfo(p,a) (p)->GetAddressInfo(a)
  444. #define IDP8ServiceProvider_IsApplicationSupported(p,a) (p)->IsApplicationSupported(a)
  445. #define IDP8ServiceProvider_EnumAdapters(p,a) (p)->EnumAdapters(a)
  446. #define IDP8ServiceProvider_ProxyEnumQuery(p,a) (p)->ProxyEnumQuery(a)
  447. #endif // C++
  448. #ifdef __cplusplus
  449. };
  450. #endif
  451. #endif // __DIRECTPLAY_SERVICE_PROVIDER_8__