Home | History | Annotate | Download | only in include
      1 #undef INTERFACE
      2 /*
      3  * Copyright (C) 2003-2005 Raphael Junqueira
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2.1 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public
     16  * License along with this library; if not, write to the Free Software
     17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
     18  */
     19 
     20 #ifndef __WINE_DPLAY8_H
     21 #define __WINE_DPLAY8_H
     22 
     23 #include <ole2.h>
     24 #include <dpaddr.h>
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif /* defined(__cplusplus) */
     29 
     30 
     31 typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID, DWORD, PVOID);
     32 typedef DWORD	DPNID, *PDPNID;
     33 typedef	DWORD	DPNHANDLE, *PDPNHANDLE;
     34 
     35 /*****************************************************************************
     36  * DirectPlay8 Message Id
     37  */
     38 #define	DPN_MSGID_OFFSET                        0xFFFF0000
     39 #define DPN_MSGID_ADD_PLAYER_TO_GROUP           (DPN_MSGID_OFFSET | 0x0001)
     40 #define DPN_MSGID_APPLICATION_DESC              (DPN_MSGID_OFFSET | 0x0002)
     41 #define DPN_MSGID_ASYNC_OP_COMPLETE             (DPN_MSGID_OFFSET | 0x0003)
     42 #define DPN_MSGID_CLIENT_INFO                   (DPN_MSGID_OFFSET | 0x0004)
     43 #define DPN_MSGID_CONNECT_COMPLETE              (DPN_MSGID_OFFSET | 0x0005)
     44 #define DPN_MSGID_CREATE_GROUP                  (DPN_MSGID_OFFSET | 0x0006)
     45 #define DPN_MSGID_CREATE_PLAYER                 (DPN_MSGID_OFFSET | 0x0007)
     46 #define DPN_MSGID_DESTROY_GROUP                 (DPN_MSGID_OFFSET | 0x0008)
     47 #define DPN_MSGID_DESTROY_PLAYER                (DPN_MSGID_OFFSET | 0x0009)
     48 #define DPN_MSGID_ENUM_HOSTS_QUERY              (DPN_MSGID_OFFSET | 0x000A)
     49 #define DPN_MSGID_ENUM_HOSTS_RESPONSE           (DPN_MSGID_OFFSET | 0x000B)
     50 #define DPN_MSGID_GROUP_INFO                    (DPN_MSGID_OFFSET | 0x000C)
     51 #define DPN_MSGID_HOST_MIGRATE                  (DPN_MSGID_OFFSET | 0x000D)
     52 #define DPN_MSGID_INDICATE_CONNECT              (DPN_MSGID_OFFSET | 0x000E)
     53 #define DPN_MSGID_INDICATED_CONNECT_ABORTED     (DPN_MSGID_OFFSET | 0x000F)
     54 #define DPN_MSGID_PEER_INFO                     (DPN_MSGID_OFFSET | 0x0010)
     55 #define DPN_MSGID_RECEIVE                       (DPN_MSGID_OFFSET | 0x0011)
     56 #define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP      (DPN_MSGID_OFFSET | 0x0012)
     57 #define	DPN_MSGID_RETURN_BUFFER                 (DPN_MSGID_OFFSET | 0x0013)
     58 #define DPN_MSGID_SEND_COMPLETE                 (DPN_MSGID_OFFSET | 0x0014)
     59 #define DPN_MSGID_SERVER_INFO                   (DPN_MSGID_OFFSET | 0x0015)
     60 #define	DPN_MSGID_TERMINATE_SESSION             (DPN_MSGID_OFFSET | 0x0016)
     61 #define DPN_MSGID_CREATE_THREAD                 (DPN_MSGID_OFFSET | 0x0017)
     62 #define DPN_MSGID_DESTROY_THREAD                (DPN_MSGID_OFFSET | 0x0018)
     63 #define DPN_MSGID_NAT_RESOLVER_QUERY            (DPN_MSGID_OFFSET | 0x0101)
     64 
     65 /*****************************************************************************
     66  * DirectPlay8 Errors
     67  */
     68 #define _DPN_FACILITY_CODE              0x015
     69 #define _DPNHRESULT_BASE                0x8000
     70 #define MAKE_DPNHRESULT(code)           MAKE_HRESULT(1, _DPN_FACILITY_CODE, (code + _DPNHRESULT_BASE))
     71 
     72 #define DPNSUCCESS_EQUAL                MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x05 + _DPNHRESULT_BASE))
     73 #define DPNSUCCESS_NOTEQUAL             MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE))
     74 #define DPNSUCCESS_PENDING              MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0E + _DPNHRESULT_BASE))
     75 
     76 #define DPN_OK                          S_OK
     77 #define DPNERR_GENERIC                  E_FAIL
     78 #define DPNERR_INVALIDPARAM             E_INVALIDARG
     79 #define DPNERR_UNSUPPORTED              E_NOTIMPL
     80 #define DPNERR_NOINTERFACE              E_NOINTERFACE
     81 #define DPNERR_OUTOFMEMORY              E_OUTOFMEMORY
     82 #define DPNERR_INVALIDPOINTER           E_POINTER
     83 #define DPNERR_PENDING                  DPNSUCCESS_PENDING
     84 #define DPNERR_ABORTED                  MAKE_DPNHRESULT(0x030)
     85 #define DPNERR_ADDRESSING               MAKE_DPNHRESULT(0x040)
     86 #define DPNERR_ALREADYCLOSING           MAKE_DPNHRESULT(0x050)
     87 #define DPNERR_ALREADYCONNECTED         MAKE_DPNHRESULT(0x060)
     88 #define DPNERR_ALREADYDISCONNECTING     MAKE_DPNHRESULT(0x070)
     89 #define DPNERR_ALREADYINITIALIZED       MAKE_DPNHRESULT(0x080)
     90 #define DPNERR_ALREADYREGISTERED        MAKE_DPNHRESULT(0x090)
     91 #define DPNERR_BUFFERTOOSMALL           MAKE_DPNHRESULT(0x100)
     92 #define DPNERR_CANNOTCANCEL             MAKE_DPNHRESULT(0x110)
     93 #define DPNERR_CANTCREATEGROUP          MAKE_DPNHRESULT(0x120)
     94 #define DPNERR_CANTCREATEPLAYER         MAKE_DPNHRESULT(0x130)
     95 #define DPNERR_CANTLAUNCHAPPLICATION    MAKE_DPNHRESULT(0x140)
     96 #define DPNERR_CONNECTING               MAKE_DPNHRESULT(0x150)
     97 #define DPNERR_CONNECTIONLOST           MAKE_DPNHRESULT(0x160)
     98 #define DPNERR_CONVERSION               MAKE_DPNHRESULT(0x170)
     99 #define DPNERR_DATATOOLARGE             MAKE_DPNHRESULT(0x175)
    100 #define DPNERR_DOESNOTEXIST             MAKE_DPNHRESULT(0x180)
    101 #define DPNERR_DPNSVRNOTAVAILABLE       MAKE_DPNHRESULT(0x185)
    102 #define DPNERR_DUPLICATECOMMAND         MAKE_DPNHRESULT(0x190)
    103 #define DPNERR_ENDPOINTNOTRECEIVING     MAKE_DPNHRESULT(0x200)
    104 #define DPNERR_ENUMQUERYTOOLARGE        MAKE_DPNHRESULT(0x210)
    105 #define DPNERR_ENUMRESPONSETOOLARGE     MAKE_DPNHRESULT(0x220)
    106 #define DPNERR_EXCEPTION                MAKE_DPNHRESULT(0x230)
    107 #define DPNERR_GROUPNOTEMPTY            MAKE_DPNHRESULT(0x240)
    108 #define DPNERR_HOSTING                  MAKE_DPNHRESULT(0x250)
    109 #define DPNERR_HOSTREJECTEDCONNECTION   MAKE_DPNHRESULT(0x260)
    110 #define DPNERR_HOSTTERMINATEDSESSION    MAKE_DPNHRESULT(0x270)
    111 #define DPNERR_INCOMPLETEADDRESS        MAKE_DPNHRESULT(0x280)
    112 #define DPNERR_INVALIDADDRESSFORMAT     MAKE_DPNHRESULT(0x290)
    113 #define DPNERR_INVALIDAPPLICATION       MAKE_DPNHRESULT(0x300)
    114 #define DPNERR_INVALIDCOMMAND           MAKE_DPNHRESULT(0x310)
    115 #define DPNERR_INVALIDDEVICEADDRESS     MAKE_DPNHRESULT(0x320)
    116 #define DPNERR_INVALIDENDPOINT          MAKE_DPNHRESULT(0x330)
    117 #define DPNERR_INVALIDFLAGS             MAKE_DPNHRESULT(0x340)
    118 #define DPNERR_INVALIDGROUP             MAKE_DPNHRESULT(0x350)
    119 #define DPNERR_INVALIDHANDLE            MAKE_DPNHRESULT(0x360)
    120 #define DPNERR_INVALIDHOSTADDRESS       MAKE_DPNHRESULT(0x370)
    121 #define DPNERR_INVALIDINSTANCE          MAKE_DPNHRESULT(0x380)
    122 #define DPNERR_INVALIDINTERFACE         MAKE_DPNHRESULT(0x390)
    123 #define DPNERR_INVALIDOBJECT            MAKE_DPNHRESULT(0x400)
    124 #define DPNERR_INVALIDPASSWORD          MAKE_DPNHRESULT(0x410)
    125 #define DPNERR_INVALIDPLAYER            MAKE_DPNHRESULT(0x420)
    126 #define DPNERR_INVALIDPRIORITY          MAKE_DPNHRESULT(0x430)
    127 #define DPNERR_INVALIDSTRING            MAKE_DPNHRESULT(0x440)
    128 #define DPNERR_INVALIDURL               MAKE_DPNHRESULT(0x450)
    129 #define DPNERR_INVALIDVERSION           MAKE_DPNHRESULT(0x460)
    130 #define DPNERR_NOCAPS                   MAKE_DPNHRESULT(0x470)
    131 #define DPNERR_NOCONNECTION             MAKE_DPNHRESULT(0x480)
    132 #define DPNERR_NOHOSTPLAYER             MAKE_DPNHRESULT(0x490)
    133 #define DPNERR_NOMOREADDRESSCOMPONENTS  MAKE_DPNHRESULT(0x500)
    134 #define DPNERR_NORESPONSE               MAKE_DPNHRESULT(0x510)
    135 #define DPNERR_NOTALLOWED               MAKE_DPNHRESULT(0x520)
    136 #define DPNERR_NOTHOST                  MAKE_DPNHRESULT(0x530)
    137 #define DPNERR_NOTREADY                 MAKE_DPNHRESULT(0x540)
    138 #define DPNERR_NOTREGISTERED            MAKE_DPNHRESULT(0x550)
    139 #define DPNERR_PLAYERALREADYINGROUP     MAKE_DPNHRESULT(0x560)
    140 #define DPNERR_PLAYERLOST               MAKE_DPNHRESULT(0x570)
    141 #define DPNERR_PLAYERNOTINGROUP         MAKE_DPNHRESULT(0x580)
    142 #define DPNERR_PLAYERNOTREACHABLE       MAKE_DPNHRESULT(0x590)
    143 #define DPNERR_SENDTOOLARGE             MAKE_DPNHRESULT(0x600)
    144 #define DPNERR_SESSIONFULL              MAKE_DPNHRESULT(0x610)
    145 #define DPNERR_TABLEFULL                MAKE_DPNHRESULT(0x620)
    146 #define DPNERR_TIMEDOUT                 MAKE_DPNHRESULT(0x630)
    147 #define DPNERR_UNINITIALIZED            MAKE_DPNHRESULT(0x640)
    148 #define DPNERR_USERCANCEL               MAKE_DPNHRESULT(0x650)
    149 
    150 /*****************************************************************************
    151  * DirectPlay8 defines
    152  */
    153 #define DPNID_ALL_PLAYERS_GROUP                              0
    154 #define DPNDESTROYGROUPREASON_NORMAL                    0x0001
    155 #define DPNDESTROYGROUPREASON_AUTODESTRUCTED            0x0002
    156 #define DPNDESTROYGROUPREASON_SESSIONTERMINATED         0x0003
    157 #define DPNDESTROYPLAYERREASON_NORMAL                   0x0001
    158 #define DPNDESTROYPLAYERREASON_CONNECTIONLOST           0x0002
    159 #define DPNDESTROYPLAYERREASON_SESSIONTERMINATED        0x0003
    160 #define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER      0x0004
    161 #define DPN_MAX_APPDESC_RESERVEDDATA_SIZE                   64
    162 
    163 #define DPNOP_SYNC                                  0x80000000
    164 #define DPNADDPLAYERTOGROUP_SYNC                    DPNOP_SYNC
    165 #define DPNCANCEL_CONNECT                               0x0001
    166 #define DPNCANCEL_ENUM                                  0x0002
    167 #define DPNCANCEL_SEND                                  0x0004
    168 #define DPNCANCEL_ALL_OPERATIONS                        0x8000
    169 #define DPNCANCEL_PLAYER_SENDS                      0x80000000
    170 #define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH        (DPNCANCEL_PLAYER_SENDS | 0x00010000)
    171 #define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL      (DPNCANCEL_PLAYER_SENDS | 0x00020000)
    172 #define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW         (DPNCANCEL_PLAYER_SENDS | 0x00040000)
    173 #define DPNCLOSE_IMMEDIATE                          0x00000001
    174 #define DPNCONNECT_SYNC                             DPNOP_SYNC
    175 #define DPNCONNECT_OKTOQUERYFORADDRESSING               0x0001
    176 #define DPNCREATEGROUP_SYNC                         DPNOP_SYNC
    177 #define DPNDESTROYGROUP_SYNC                        DPNOP_SYNC
    178 #define DPNENUM_PLAYERS                                 0x0001
    179 #define DPNENUM_GROUPS                                  0x0010
    180 #define DPNENUMHOSTS_SYNC                           DPNOP_SYNC
    181 #define DPNENUMHOSTS_OKTOQUERYFORADDRESSING             0x0001
    182 #define DPNENUMHOSTS_NOBROADCASTFALLBACK                0x0002
    183 #define DPNENUMSERVICEPROVIDERS_ALL                     0x0001
    184 #define DPNGETLOCALHOSTADDRESSES_COMBINED               0x0001
    185 #define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL             0x0001
    186 #define DPNGETSENDQUEUEINFO_PRIORITY_HIGH               0x0002
    187 #define DPNGETSENDQUEUEINFO_PRIORITY_LOW                0x0004
    188 #define DPNGROUP_AUTODESTRUCT                           0x0001
    189 #define DPNHOST_OKTOQUERYFORADDRESSING                  0x0001
    190 #define DPNINFO_NAME                                    0x0001
    191 #define DPNINFO_DATA                                    0x0002
    192 #define DPNINITIALIZE_DISABLEPARAMVAL                   0x0001
    193 #define DPNINITIALIZE_HINT_LANSESSION                   0x0002
    194 #define DPNINITIALIZE_DISABLELINKTUNING                 0x0004
    195 #define DPNLOBBY_REGISTER                               0x0001
    196 #define DPNLOBBY_UNREGISTER                             0x0002
    197 #define DPNPLAYER_LOCAL                                 0x0002
    198 #define DPNPLAYER_HOST                                  0x0004
    199 #define DPNRECEIVE_GUARANTEED                           0x0001
    200 #define DPNRECEIVE_COALESCED                            0x0002
    201 #define DPNREMOVEPLAYERFROMGROUP_SYNC               DPNOP_SYNC
    202 #define DPNSEND_SYNC                                DPNOP_SYNC
    203 #define DPNSEND_NOCOPY                                  0x0001
    204 #define DPNSEND_NOCOMPLETE                              0x0002
    205 #define DPNSEND_COMPLETEONPROCESS                       0x0004
    206 #define DPNSEND_GUARANTEED                              0x0008
    207 #define DPNSEND_NONSEQUENTIAL                           0x0010
    208 #define DPNSEND_NOLOOPBACK                              0x0020
    209 #define DPNSEND_PRIORITY_LOW                            0x0040
    210 #define DPNSEND_PRIORITY_HIGH                           0x0080
    211 #define DPNSEND_COALESCE                                0x0100
    212 #define DPNSENDCOMPLETE_GUARANTEED                      0x0001
    213 #define DPNSENDCOMPLETE_COALESCED                       0x0002
    214 #define DPNSESSION_CLIENT_SERVER                        0x0001
    215 #define DPNSESSION_MIGRATE_HOST                         0x0004
    216 #define DPNSESSION_NODPNSVR                             0x0040
    217 #define DPNSESSION_REQUIREPASSWORD                      0x0080
    218 #define DPNSESSION_NOENUMS                              0x0100
    219 #define DPNSESSION_FAST_SIGNED                          0x0200
    220 #define DPNSESSION_FULL_SIGNED                          0x0400
    221 #define DPNSETCLIENTINFO_SYNC                       DPNOP_SYNC
    222 #define DPNSETGROUPINFO_SYNC                        DPNOP_SYNC
    223 #define DPNSETPEERINFO_SYNC                         DPNOP_SYNC
    224 #define DPNSETSERVERINFO_SYNC                       DPNOP_SYNC
    225 #define DPNSPCAPS_SUPPORTSDPNSRV                        0x0001
    226 #define DPNSPCAPS_SUPPORTSBROADCAST                     0x0002
    227 #define DPNSPCAPS_SUPPORTSALLADAPTERS                   0x0004
    228 #define DPNSPCAPS_SUPPORTSTHREADPOOL			0x0008
    229 #define DPNSPCAPS_NETWORKSIMULATOR                      0x0010
    230 #define DPNSPINFO_NETWORKSIMULATORDEVICE                0x0001
    231 
    232 
    233 /*****************************************************************************
    234  * DirectPlay8 structures Typedefs
    235  */
    236 typedef struct _DPN_APPLICATION_DESC {
    237   DWORD   dwSize;
    238   DWORD   dwFlags;
    239   GUID    guidInstance;
    240   GUID	  guidApplication;
    241   DWORD   dwMaxPlayers;
    242   DWORD   dwCurrentPlayers;
    243   WCHAR*  pwszSessionName;
    244   WCHAR*  pwszPassword;
    245   PVOID   pvReservedData;
    246   DWORD   dwReservedDataSize;
    247   PVOID   pvApplicationReservedData;
    248   DWORD   dwApplicationReservedDataSize;
    249 } DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC;
    250 
    251 typedef struct _BUFFERDESC {
    252   DWORD	  dwBufferSize;
    253   BYTE*   pBufferData;
    254 } BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC, *PBUFFERDESC;
    255 
    256 typedef struct _DPN_CAPS {
    257   DWORD   dwSize;
    258   DWORD   dwFlags;
    259   DWORD   dwConnectTimeout;
    260   DWORD   dwConnectRetries;
    261   DWORD   dwTimeoutUntilKeepAlive;
    262 } DPN_CAPS, *PDPN_CAPS;
    263 
    264 typedef struct	_DPN_CAPS_EX {
    265   DWORD   dwSize;
    266   DWORD   dwFlags;
    267   DWORD   dwConnectTimeout;
    268   DWORD   dwConnectRetries;
    269   DWORD   dwTimeoutUntilKeepAlive;
    270   DWORD   dwMaxRecvMsgSize;
    271   DWORD   dwNumSendRetries;
    272   DWORD   dwMaxSendRetryInterval;
    273   DWORD   dwDropThresholdRate;
    274   DWORD   dwThrottleRate;
    275   DWORD   dwNumHardDisconnectSends;
    276   DWORD   dwMaxHardDisconnectPeriod;
    277 } DPN_CAPS_EX, *PDPN_CAPS_EX;
    278 
    279 typedef struct _DPN_CONNECTION_INFO {
    280   DWORD   dwSize;
    281   DWORD   dwRoundTripLatencyMS;
    282   DWORD   dwThroughputBPS;
    283   DWORD   dwPeakThroughputBPS;
    284   DWORD   dwBytesSentGuaranteed;
    285   DWORD   dwPacketsSentGuaranteed;
    286   DWORD   dwBytesSentNonGuaranteed;
    287   DWORD   dwPacketsSentNonGuaranteed;
    288   DWORD   dwBytesRetried;
    289   DWORD   dwPacketsRetried;
    290   DWORD   dwBytesDropped;
    291   DWORD   dwPacketsDropped;
    292   DWORD   dwMessagesTransmittedHighPriority;
    293   DWORD   dwMessagesTimedOutHighPriority;
    294   DWORD   dwMessagesTransmittedNormalPriority;
    295   DWORD   dwMessagesTimedOutNormalPriority;
    296   DWORD   dwMessagesTransmittedLowPriority;
    297   DWORD   dwMessagesTimedOutLowPriority;
    298   DWORD   dwBytesReceivedGuaranteed;
    299   DWORD   dwPacketsReceivedGuaranteed;
    300   DWORD   dwBytesReceivedNonGuaranteed;
    301   DWORD   dwPacketsReceivedNonGuaranteed;
    302   DWORD   dwMessagesReceived;
    303 } DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO;
    304 
    305 typedef struct _DPN_GROUP_INFO {
    306   DWORD	  dwSize;
    307   DWORD	  dwInfoFlags;
    308   PWSTR	  pwszName;
    309   PVOID	  pvData;
    310   DWORD	  dwDataSize;
    311   DWORD	  dwGroupFlags;
    312 } DPN_GROUP_INFO, *PDPN_GROUP_INFO;
    313 
    314 typedef struct _DPN_PLAYER_INFO {
    315   DWORD	  dwSize;
    316   DWORD	  dwInfoFlags;
    317   PWSTR	  pwszName;
    318   PVOID	  pvData;
    319   DWORD	  dwDataSize;
    320   DWORD	  dwPlayerFlags;
    321 } DPN_PLAYER_INFO, *PDPN_PLAYER_INFO;
    322 
    323 typedef struct _DPN_SERVICE_PROVIDER_INFO {
    324   DWORD   dwFlags;
    325   GUID    guid;
    326   WCHAR*  pwszName;
    327   PVOID   pvReserved;
    328   DWORD   dwReserved;
    329 } DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO;
    330 
    331 typedef struct _DPN_SP_CAPS {
    332   DWORD   dwSize;
    333   DWORD   dwFlags;
    334   DWORD   dwNumThreads;
    335   DWORD	  dwDefaultEnumCount;
    336   DWORD	  dwDefaultEnumRetryInterval;
    337   DWORD	  dwDefaultEnumTimeout;
    338   DWORD	  dwMaxEnumPayloadSize;
    339   DWORD	  dwBuffersPerThread;
    340   DWORD	  dwSystemBufferSize;
    341 } DPN_SP_CAPS, *PDPN_SP_CAPS;
    342 
    343 typedef struct _DPN_SECURITY_CREDENTIALS  DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS;
    344 typedef struct _DPN_SECURITY_DESC         DPN_SECURITY_DESC, *PDPN_SECURITY_DESC;
    345 
    346 typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP {
    347   DWORD	  dwSize;
    348   DPNID	  dpnidGroup;
    349   PVOID	  pvGroupContext;
    350   DPNID	  dpnidPlayer;
    351   PVOID	  pvPlayerContext;
    352 } DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP;
    353 
    354 typedef struct _DPNMSG_ASYNC_OP_COMPLETE {
    355   DWORD      dwSize;
    356   DPNHANDLE  hAsyncOp;
    357   PVOID      pvUserContext;
    358   HRESULT    hResultCode;
    359 } DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE;
    360 
    361 typedef struct _DPNMSG_CLIENT_INFO {
    362   DWORD	  dwSize;
    363   DPNID	  dpnidClient;
    364   PVOID	  pvPlayerContext;
    365 } DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO;
    366 
    367 typedef struct _DPNMSG_CONNECT_COMPLETE {
    368   DWORD      dwSize;
    369   DPNHANDLE  hAsyncOp;
    370   PVOID      pvUserContext;
    371   HRESULT    hResultCode;
    372   PVOID      pvApplicationReplyData;
    373   DWORD      dwApplicationReplyDataSize;
    374   /** DirectX 9 */
    375   DPNID      dpnidLocal;
    376 } DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE;
    377 
    378 typedef struct _DPNMSG_CREATE_GROUP {
    379   DWORD   dwSize;
    380   DPNID   dpnidGroup;
    381   DPNID   dpnidOwner;
    382   PVOID   pvGroupContext;
    383   /** DirectX 9 */
    384   PVOID   pvOwnerContext;
    385 } DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP;
    386 
    387 typedef struct _DPNMSG_CREATE_PLAYER {
    388   DWORD   dwSize;
    389   DPNID   dpnidPlayer;
    390   PVOID   pvPlayerContext;
    391 } DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER;
    392 
    393 typedef struct _DPNMSG_DESTROY_GROUP {
    394   DWORD   dwSize;
    395   DPNID   dpnidGroup;
    396   PVOID   pvGroupContext;
    397   DWORD   dwReason;
    398 } DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP;
    399 
    400 typedef struct _DPNMSG_DESTROY_PLAYER {
    401   DWORD  dwSize;
    402   DPNID  dpnidPlayer;
    403   PVOID  pvPlayerContext;
    404   DWORD  dwReason;
    405 } DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER;
    406 
    407 typedef	struct _DPNMSG_ENUM_HOSTS_QUERY {
    408   DWORD                 dwSize;
    409   IDirectPlay8Address*  pAddressSender;
    410   IDirectPlay8Address*  pAddressDevice;
    411   PVOID                 pvReceivedData;
    412   DWORD                 dwReceivedDataSize;
    413   DWORD                 dwMaxResponseDataSize;
    414   PVOID                 pvResponseData;
    415   DWORD                 dwResponseDataSize;
    416   PVOID                 pvResponseContext;
    417 } DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY;
    418 
    419 typedef	struct _DPNMSG_ENUM_HOSTS_RESPONSE {
    420   DWORD                        dwSize;
    421   IDirectPlay8Address*         pAddressSender;
    422   IDirectPlay8Address*         pAddressDevice;
    423   const DPN_APPLICATION_DESC*  pApplicationDescription;
    424   PVOID                        pvResponseData;
    425   DWORD                        dwResponseDataSize;
    426   PVOID                        pvUserContext;
    427   DWORD                        dwRoundTripLatencyMS;
    428 } DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE;
    429 
    430 typedef struct _DPNMSG_GROUP_INFO {
    431   DWORD   dwSize;
    432   DPNID   dpnidGroup;
    433   PVOID   pvGroupContext;
    434 } DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO;
    435 
    436 typedef struct _DPNMSG_HOST_MIGRATE {
    437   DWORD   dwSize;
    438   DPNID   dpnidNewHost;
    439   PVOID   pvPlayerContext;
    440 } DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE;
    441 
    442 typedef struct _DPNMSG_INDICATE_CONNECT {
    443   DWORD                 dwSize;
    444   PVOID                 pvUserConnectData;
    445   DWORD                 dwUserConnectDataSize;
    446   PVOID                 pvReplyData;
    447   DWORD                 dwReplyDataSize;
    448   PVOID                 pvReplyContext;
    449   PVOID                 pvPlayerContext;
    450   IDirectPlay8Address*  pAddressPlayer;
    451   IDirectPlay8Address*  pAddressDevice;
    452 } DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT;
    453 
    454 typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED {
    455   DWORD   dwSize;
    456   PVOID   pvPlayerContext;
    457 } DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED;
    458 
    459 typedef struct _DPNMSG_PEER_INFO {
    460   DWORD   dwSize;
    461   DPNID   dpnidPeer;
    462   PVOID   pvPlayerContext;
    463 } DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO;
    464 
    465 typedef struct _DPNMSG_RECEIVE {
    466   DWORD      dwSize;
    467   DPNID      dpnidSender;
    468   PVOID      pvPlayerContext;
    469   PBYTE      pReceiveData;
    470   DWORD      dwReceiveDataSize;
    471   DPNHANDLE  hBufferHandle;
    472   /** DirectX 9 */
    473   DWORD      dwReceiveFlags;
    474 } DPNMSG_RECEIVE, *PDPNMSG_RECEIVE;
    475 
    476 typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP {
    477   DWORD   dwSize;
    478   DPNID   dpnidGroup;
    479   PVOID   pvGroupContext;
    480   DPNID   dpnidPlayer;
    481   PVOID   pvPlayerContext;
    482 } DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP;
    483 
    484 typedef struct _DPNMSG_RETURN_BUFFER {
    485   DWORD     dwSize;
    486   HRESULT   hResultCode;
    487   PVOID     pvBuffer;
    488   PVOID     pvUserContext;
    489 } DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER;
    490 
    491 typedef struct _DPNMSG_SEND_COMPLETE {
    492   DWORD       dwSize;
    493   DPNHANDLE   hAsyncOp;
    494   PVOID       pvUserContext;
    495   HRESULT     hResultCode;
    496   DWORD       dwSendTime;
    497   /** DirectX 9 */
    498   DWORD            dwFirstFrameRTT;
    499   DWORD            dwFirstFrameRetryCount;
    500   DWORD            dwSendCompleteFlags;
    501   DPN_BUFFER_DESC* pBuffers;
    502   DWORD            dwNumBuffers;
    503 } DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE;
    504 
    505 typedef struct _DPNMSG_SERVER_INFO {
    506   DWORD   dwSize;
    507   DPNID   dpnidServer;
    508   PVOID   pvPlayerContext;
    509 } DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO;
    510 
    511 typedef struct _DPNMSG_TERMINATE_SESSION {
    512   DWORD    dwSize;
    513   HRESULT  hResultCode;
    514   PVOID    pvTerminateData;
    515   DWORD    dwTerminateDataSize;
    516 } DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION;
    517 
    518 typedef struct _DPNMSG_CREATE_THREAD {
    519   DWORD    dwSize;
    520   DWORD    dwFlags;
    521   DWORD    dwProcessorNum;
    522   PVOID    pvUserContext;
    523 } DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD;
    524 
    525 typedef struct _DPNMSG_DESTROY_THREAD {
    526   DWORD    dwSize;
    527   DWORD    dwProcessorNum;
    528   PVOID    pvUserContext;
    529 } DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD;
    530 
    531 typedef	struct _DPNMSG_NAT_RESOLVER_QUERY {
    532   DWORD    dwSize;
    533   IDirectPlay8Address* pAddressSender;
    534   IDirectPlay8Address* pAddressDevice;
    535   WCHAR*   pwszUserString;
    536 } DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY;
    537 
    538 /*****************************************************************************
    539  * Predeclare the interfaces
    540  */
    541 DEFINE_GUID(CLSID_DirectPlay8Peer,        0x286f484d,0x375e,0x4458,0xa2,0x72,0xb1,0x38,0xe2,0xf8,0x0a,0x6a);
    542 DEFINE_GUID(CLSID_DirectPlay8Client,      0x743f1dc6,0x5aba,0x429f,0x8b,0xdf,0xc5,0x4d,0x03,0x25,0x3d,0xc2);
    543 DEFINE_GUID(CLSID_DirectPlay8Server,      0xda825e1b,0x6830,0x43d7,0x83,0x5d,0x0b,0x5a,0xd8,0x29,0x56,0xa2);
    544 /** DirectX 9 */
    545 DEFINE_GUID(CLSID_DirectPlay8ThreadPool,  0xfc47060e,0x6153,0x4b34,0xb9,0x75,0x8e,0x41,0x21,0xeb,0x7f,0x3c);
    546 DEFINE_GUID(CLSID_DirectPlay8NATResolver, 0xe4c1d9a2,0xcbf7,0x48bd,0x9a,0x69,0x34,0xa5,0x5e,0x0d,0x89,0x41);
    547 
    548 DEFINE_GUID(IID_IDirectPlay8Peer,         0x5102dacf,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
    549 typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER;
    550 DEFINE_GUID(IID_IDirectPlay8Client,       0x5102dacd,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
    551 typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT;
    552 DEFINE_GUID(IID_IDirectPlay8Server,       0x5102dace,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
    553 typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER;
    554 /** DirectX 9 */
    555 DEFINE_GUID(IID_IDirectPlay8ThreadPool,   0x0d22ee73,0x4a46,0x4a0d,0x89,0xb2,0x04,0x5b,0x4d,0x66,0x64,0x25);
    556 typedef	struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL;
    557 DEFINE_GUID(IID_IDirectPlay8NATResolver,  0xa9e213f2,0x9a60,0x486f,0xbf,0x3b,0x53,0x40,0x8b,0x6d,0x1c,0xbb);
    558 typedef	struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER;
    559 
    560 DEFINE_GUID(CLSID_DP8SP_IPX,               0x53934290,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
    561 DEFINE_GUID(CLSID_DP8SP_TCPIP,             0xebfe7ba0,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
    562 DEFINE_GUID(CLSID_DP8SP_SERIAL,            0x743b5d60,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
    563 DEFINE_GUID(CLSID_DP8SP_MODEM,             0x6d4a3650,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
    564 /** DirectX 9 */
    565 DEFINE_GUID(CLSID_DP8SP_BLUETOOTH,         0x995513af,0x3027,0x4b9a,0x95,0x6e,0xc7,0x72,0xb3,0xf7,0x80,0x06);
    566 
    567 typedef struct IDirectPlay8LobbiedApplication	*PIDirectPlay8LobbiedApplication, DNLOBBIEDAPPLICATION;
    568 
    569 
    570 /*****************************************************************************
    571  * IDirectPlay8Client interface
    572  */
    573 #define INTERFACE IDirectPlay8Client
    574 DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown)
    575 {
    576     /*** IUnknown methods ***/
    577     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
    578     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    579     STDMETHOD_(ULONG,Release)(THIS) PURE;
    580     /*** IDirectPlay8Client methods ***/
    581     STDMETHOD(Initialize)(THIS_ PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) PURE;
    582     STDMETHOD(EnumServiceProviders)(THIS_ CONST GUID * CONST pguidServiceProvider, CONST GUID * CONST pguidApplication, DPN_SERVICE_PROVIDER_INFO * CONST pSPInfoBuffer, PDWORD CONST pcbEnumData, PDWORD CONST pcReturned, CONST DWORD dwFlags) PURE;
    583     STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC CONST pApplicationDesc,IDirectPlay8Address * CONST pAddrHost,IDirectPlay8Address * CONST pDeviceInfo, PVOID CONST pUserEnumData, CONST DWORD dwUserEnumDataSize, CONST DWORD dwEnumCount, CONST DWORD dwRetryInterval, CONST DWORD dwTimeOut, PVOID CONST pvUserContext, DPNHANDLE * CONST pAsyncHandle, CONST DWORD dwFlags) PURE;
    584     STDMETHOD(CancelAsyncOperation)(THIS_ CONST DPNHANDLE hAsyncHandle, CONST DWORD dwFlags) PURE;
    585     STDMETHOD(Connect)(THIS_ CONST DPN_APPLICATION_DESC * CONST pdnAppDesc,IDirectPlay8Address * CONST pHostAddr,IDirectPlay8Address * CONST pDeviceInfo, CONST DPN_SECURITY_DESC * CONST pdnSecurity, CONST DPN_SECURITY_CREDENTIALS * CONST pdnCredentials, CONST void * CONST pvUserConnectData, CONST DWORD dwUserConnectDataSize,void * CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    586     STDMETHOD(Send)(THIS_ CONST DPN_BUFFER_DESC * CONST prgBufferDesc, CONST DWORD cBufferDesc, CONST DWORD dwTimeOut, void * CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    587     STDMETHOD(GetSendQueueInfo)(THIS_ DWORD * CONST pdwNumMsgs, DWORD * CONST pdwNumBytes, CONST DWORD dwFlags) PURE;
    588     STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC * CONST pAppDescBuffer, DWORD * CONST pcbDataSize, CONST DWORD dwFlags) PURE;
    589     STDMETHOD(SetClientInfo)(THIS_ CONST DPN_PLAYER_INFO * CONST pdpnPlayerInfo, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    590     STDMETHOD(GetServerInfo)(THIS_ DPN_PLAYER_INFO * CONST pdpnPlayerInfo, DWORD * CONST pdwSize, CONST DWORD dwFlags) PURE;
    591     STDMETHOD(GetServerAddress)(THIS_ IDirectPlay8Address ** CONST pAddress, CONST DWORD dwFlags) PURE;
    592     STDMETHOD(Close)(THIS_ CONST DWORD dwFlags) PURE;
    593     STDMETHOD(ReturnBuffer)(THIS_ CONST DPNHANDLE hBufferHandle, CONST DWORD dwFlags) PURE;
    594     STDMETHOD(GetCaps)(THIS_ DPN_CAPS * CONST pdpCaps, CONST DWORD dwFlags) PURE;
    595     STDMETHOD(SetCaps)(THIS_ CONST DPN_CAPS * CONST pdpCaps, CONST DWORD dwFlags) PURE;
    596     STDMETHOD(SetSPCaps)(THIS_ CONST GUID * CONST pguidSP, CONST DPN_SP_CAPS * CONST pdpspCaps, CONST DWORD dwFlags ) PURE;
    597     STDMETHOD(GetSPCaps)(THIS_ CONST GUID * CONST pguidSP, DPN_SP_CAPS * CONST pdpspCaps, CONST DWORD dwFlags) PURE;
    598     STDMETHOD(GetConnectionInfo)(THIS_ DPN_CONNECTION_INFO * CONST pdpConnectionInfo, CONST DWORD dwFlags) PURE;
    599     STDMETHOD(RegisterLobby)(THIS_ CONST DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication * CONST pIDP8LobbiedApplication, CONST DWORD dwFlags) PURE;
    600 };
    601 #undef INTERFACE
    602 
    603 #if !defined(__cplusplus) || defined(CINTERFACE)
    604 /*** IUnknown methods ***/
    605 #define	IDirectPlay8Client_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
    606 #define	IDirectPlay8Client_AddRef(p)                            (p)->lpVtbl->AddRef(p)
    607 #define	IDirectPlay8Client_Release(p)                           (p)->lpVtbl->Release(p)
    608 /*** IDirectPlay8Client methods ***/
    609 #define	IDirectPlay8Client_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)
    610 #define	IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
    611 #define	IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
    612 #define	IDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)
    613 #define	IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j)
    614 #define	IDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->lpVtbl->Send(p,a,b,c,d,e,f)
    615 #define	IDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c)
    616 #define	IDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
    617 #define	IDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->lpVtbl->SetClientInfo(p,a,b,c,d)
    618 #define	IDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->lpVtbl->GetServerInfo(p,a,b,c)
    619 #define	IDirectPlay8Client_GetServerAddress(p,a,b)              (p)->lpVtbl->GetServerAddress(p,a,b)
    620 #define	IDirectPlay8Client_Close(p,a)                           (p)->lpVtbl->Close(p,a)
    621 #define	IDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)
    622 #define	IDirectPlay8Client_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)
    623 #define	IDirectPlay8Client_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)
    624 #define	IDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)
    625 #define	IDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)
    626 #define	IDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->lpVtbl->GetConnectionInfo(p,a,b)
    627 #define	IDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)
    628 #else
    629 /*** IUnknown methods ***/
    630 #define	IDirectPlay8Client_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
    631 #define	IDirectPlay8Client_AddRef(p)                            (p)->AddRef()
    632 #define	IDirectPlay8Client_Release(p)                           (p)->Release()
    633 /*** IDirectPlay8Client methods ***/
    634 #define	IDirectPlay8Client_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)
    635 #define	IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)
    636 #define	IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
    637 #define	IDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)
    638 #define	IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->Connect(a,b,c,d,e,f,g,h,i,j)
    639 #define	IDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->Send(a,b,c,d,e,f)
    640 #define	IDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->GetSendQueueInfo(a,b,c)
    641 #define	IDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)
    642 #define	IDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->SetClientInfo(a,b,c,d)
    643 #define	IDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->GetServerInfo(a,b,c)
    644 #define	IDirectPlay8Client_GetServerAddress(p,a,b)              (p)->GetServerAddress(a,b)
    645 #define	IDirectPlay8Client_Close(p,a)                           (p)->Close(a)
    646 #define	IDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)
    647 #define	IDirectPlay8Client_GetCaps(p,a,b)                       (p)->GetCaps(a,b)
    648 #define	IDirectPlay8Client_SetCaps(p,a,b)                       (p)->SetCaps(a,b)
    649 #define	IDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)
    650 #define	IDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)
    651 #define	IDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->GetConnectionInfo(a,b)
    652 #define	IDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)
    653 #endif
    654 
    655 /*****************************************************************************
    656  * IDirectPlay8Server interface
    657  */
    658 #define INTERFACE IDirectPlay8Server
    659 DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown)
    660 {
    661     /*** IUnknown methods ***/
    662     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
    663     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    664     STDMETHOD_(ULONG,Release)(THIS) PURE;
    665     /*** IDirectPlay8Server methods ***/
    666     STDMETHOD(Initialize)(THIS_ PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) PURE;
    667     STDMETHOD(EnumServiceProviders)(THIS_ CONST GUID * CONST pguidServiceProvider, CONST GUID * CONST pguidApplication, DPN_SERVICE_PROVIDER_INFO * CONST pSPInfoBuffer, PDWORD CONST pcbEnumData, PDWORD CONST pcReturned, CONST DWORD dwFlags) PURE;
    668     STDMETHOD(CancelAsyncOperation)(THIS_ CONST DPNHANDLE hAsyncHandle, CONST DWORD dwFlags) PURE;
    669     STDMETHOD(GetSendQueueInfo)(THIS_ CONST DPNID dpnid, DWORD * CONST pdwNumMsgs, DWORD * CONST pdwNumBytes, CONST DWORD dwFlags) PURE;
    670     STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC * CONST pAppDescBuffer, DWORD * CONST pcbDataSize, CONST DWORD dwFlags) PURE;
    671     STDMETHOD(SetServerInfo)(THIS_ CONST DPN_PLAYER_INFO * CONST pdpnPlayerInfo, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    672     STDMETHOD(GetClientInfo)(THIS_ CONST DPNID dpnid, DPN_PLAYER_INFO * CONST pdpnPlayerInfo, DWORD * CONST pdwSize, CONST DWORD dwFlags) PURE;
    673     STDMETHOD(GetClientAddress)(THIS_ CONST DPNID dpnid, IDirectPlay8Address ** CONST pAddress, CONST DWORD dwFlags) PURE;
    674     STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address ** CONST prgpAddress, DWORD * CONST pcAddress, CONST DWORD dwFlags) PURE;
    675     STDMETHOD(SetApplicationDesc)(THIS_ CONST DPN_APPLICATION_DESC * CONST pad, CONST DWORD dwFlags) PURE;
    676     STDMETHOD(Host)(THIS_ CONST DPN_APPLICATION_DESC * CONST pdnAppDesc, IDirectPlay8Address ** CONST prgpDeviceInfo, CONST DWORD cDeviceInfo, CONST DPN_SECURITY_DESC * CONST pdnSecurity, CONST DPN_SECURITY_CREDENTIALS * CONST pdnCredentials, void * CONST pvPlayerContext, CONST DWORD dwFlags) PURE;
    677     STDMETHOD(SendTo)(THIS_ CONST DPNID dpnid, CONST DPN_BUFFER_DESC * CONST prgBufferDesc, CONST DWORD cBufferDesc, CONST DWORD dwTimeOut, void * CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    678     STDMETHOD(CreateGroup)(THIS_ CONST DPN_GROUP_INFO * CONST pdpnGroupInfo, void * CONST pvGroupContext, void * CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    679     STDMETHOD(DestroyGroup)(THIS_ CONST DPNID idGroup, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    680     STDMETHOD(AddPlayerToGroup)(THIS_ CONST DPNID idGroup, CONST DPNID idClient, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    681     STDMETHOD(RemovePlayerFromGroup)(THIS_ CONST DPNID idGroup, CONST DPNID idClient, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    682     STDMETHOD(SetGroupInfo)(THIS_ CONST DPNID dpnid, DPN_GROUP_INFO * CONST pdpnGroupInfo, PVOID CONST pvAsyncContext, DPNHANDLE * CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    683     STDMETHOD(GetGroupInfo)(THIS_ CONST DPNID dpnid, DPN_GROUP_INFO * CONST pdpnGroupInfo, DWORD * CONST pdwSize, CONST DWORD dwFlags) PURE;
    684     STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID * CONST prgdpnid, DWORD * CONST pcdpnid, CONST DWORD dwFlags) PURE;
    685     STDMETHOD(EnumGroupMembers)(THIS_ CONST DPNID dpnid, DPNID * CONST prgdpnid, DWORD * CONST pcdpnid, CONST DWORD dwFlags) PURE;
    686     STDMETHOD(Close)(THIS_ CONST DWORD dwFlags) PURE;
    687     STDMETHOD(DestroyClient)(THIS_ CONST DPNID dpnidClient, CONST void * CONST pvDestroyData, CONST DWORD dwDestroyDataSize, CONST DWORD dwFlags) PURE;
    688     STDMETHOD(ReturnBuffer)(THIS_ CONST DPNHANDLE hBufferHandle, CONST DWORD dwFlags) PURE;
    689     STDMETHOD(GetPlayerContext)(THIS_ CONST DPNID dpnid, PVOID * CONST ppvPlayerContext, CONST DWORD dwFlags) PURE;
    690     STDMETHOD(GetGroupContext)(THIS_ CONST DPNID dpnid, PVOID * CONST ppvGroupContext, CONST DWORD dwFlags) PURE;
    691     STDMETHOD(GetCaps)(THIS_ DPN_CAPS * CONST pdpCaps, CONST DWORD dwFlags) PURE;
    692     STDMETHOD(SetCaps)(THIS_ CONST DPN_CAPS * CONST pdpCaps, CONST DWORD dwFlags) PURE;
    693     STDMETHOD(SetSPCaps)(THIS_ CONST GUID * CONST pguidSP, CONST DPN_SP_CAPS * CONST pdpspCaps, CONST DWORD dwFlags ) PURE;
    694     STDMETHOD(GetSPCaps)(THIS_ CONST GUID * CONST pguidSP, DPN_SP_CAPS * CONST pdpspCaps, CONST DWORD dwFlags) PURE;
    695     STDMETHOD(GetConnectionInfo)(THIS_ CONST DPNID dpnid, DPN_CONNECTION_INFO * CONST pdpConnectionInfo, CONST DWORD dwFlags) PURE;
    696     STDMETHOD(RegisterLobby)(THIS_ CONST DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication * CONST pIDP8LobbiedApplication, CONST DWORD dwFlags) PURE;
    697 };
    698 #undef INTERFACE
    699 
    700 #if !defined(__cplusplus) || defined(CINTERFACE)
    701 /*** IUnknown methods ***/
    702 #define	IDirectPlay8Server_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
    703 #define	IDirectPlay8Server_AddRef(p)                            (p)->lpVtbl->AddRef(p)
    704 #define	IDirectPlay8Server_Release(p)                           (p)->lpVtbl->Release(p)
    705 /*** IDirectPlay8Server methods ***/
    706 #define	IDirectPlay8Server_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)
    707 #define	IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
    708 #define	IDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)
    709 #define	IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
    710 #define	IDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
    711 #define	IDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->lpVtbl->SetServerInfo(p,a,b,c,d)
    712 #define	IDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->lpVtbl->GetClientInfo(p,a,b,c,d)
    713 #define	IDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->lpVtbl->GetClientAddress(p,a,b,c)
    714 #define	IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
    715 #define	IDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->lpVtbl->SetApplicationDesc(p,a,b)
    716 #define	IDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
    717 #define	IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
    718 #define	IDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
    719 #define	IDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
    720 #define	IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
    721 #define	IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
    722 #define	IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
    723 #define	IDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
    724 #define	IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
    725 #define	IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
    726 #define	IDirectPlay8Server_Close(p,a)                           (p)->lpVtbl->Close(p,a)
    727 #define	IDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->lpVtbl->DestroyClient(p,a,b,c,d)
    728 #define	IDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)
    729 #define	IDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->lpVtbl->GetPlayerContext(p,a,b,c)
    730 #define	IDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->lpVtbl->GetGroupContext(p,a,b,c)
    731 #define	IDirectPlay8Server_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)
    732 #define	IDirectPlay8Server_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)
    733 #define	IDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)
    734 #define	IDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)
    735 #define	IDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
    736 #define	IDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)
    737 #else
    738 /*** IUnknown methods ***/
    739 #define	IDirectPlay8Server_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
    740 #define	IDirectPlay8Server_AddRef(p)                            (p)->AddRef()
    741 #define	IDirectPlay8Server_Release(p)                           (p)->Release()
    742 /*** IDirectPlay8Server methods ***/
    743 #define	IDirectPlay8Server_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)
    744 #define	IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)
    745 #define	IDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)
    746 #define	IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->GetSendQueueInfo(a,b,c,d)
    747 #define	IDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)
    748 #define	IDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->SetServerInfo(a,b,c,d)
    749 #define	IDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->GetClientInfo(a,b,c,d)
    750 #define	IDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->GetClientAddress(a,b,c)
    751 #define	IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->GetLocalHostAddresses(a,b,c)
    752 #define	IDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->SetApplicationDesc(a,b)
    753 #define	IDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->Host(a,b,c,d,e,f,g)
    754 #define	IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->SendTo(a,b,c,d,e,f,g)
    755 #define	IDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->CreateGroup(a,b,c,d,e)
    756 #define	IDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->DestroyGroup(a,b,c,d)
    757 #define	IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->AddPlayerToGroup(a,b,c,d,e)
    758 #define	IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->RemovePlayerFromGroup(a,b,c,d,e)
    759 #define	IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->SetGroupInfo(a,b,c,d,e)
    760 #define	IDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->GetGroupInfo(a,b,c,d)
    761 #define	IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->EnumPlayersAndGroups(a,b,c)
    762 #define	IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->EnumGroupMembers(a,b,c,d)
    763 #define	IDirectPlay8Server_Close(p,a)                           (p)->Close(a)
    764 #define	IDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->DestroyClient(a,b,c,d)
    765 #define	IDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)
    766 #define	IDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->GetPlayerContext(a,b,c)
    767 #define	IDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->GetGroupContext(a,b,c)
    768 #define	IDirectPlay8Server_GetCaps(p,a,b)                       (p)->GetCaps(a,b)
    769 #define	IDirectPlay8Server_SetCaps(p,a,b)                       (p)->SetCaps(a,b)
    770 #define	IDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)
    771 #define	IDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)
    772 #define	IDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->GetConnectionInfo(a,b,c)
    773 #define	IDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)
    774 #endif
    775 
    776 /*****************************************************************************
    777  * IDirectPlay8Peer interface
    778  */
    779 #define INTERFACE IDirectPlay8Peer
    780 DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown)
    781 {
    782     /*** IUnknown methods ***/
    783     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
    784     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    785     STDMETHOD_(ULONG,Release)(THIS) PURE;
    786     /*** IDirectPlay8Peer methods ***/
    787     STDMETHOD(Initialize)(THIS_ PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) PURE;
    788     STDMETHOD(EnumServiceProviders)(THIS_ CONST GUID* CONST pguidServiceProvider, CONST GUID* CONST pguidApplication, DPN_SERVICE_PROVIDER_INFO* CONST pSPInfoBuffer, DWORD* CONST pcbEnumData, DWORD* CONST pcReturned, CONST DWORD dwFlags) PURE;
    789     STDMETHOD(CancelAsyncOperation)(THIS_ CONST DPNHANDLE hAsyncHandle, CONST DWORD dwFlags) PURE;
    790     STDMETHOD(Connect)(THIS_ CONST DPN_APPLICATION_DESC* CONST pdnAppDesc, IDirectPlay8Address* CONST pHostAddr, IDirectPlay8Address* CONST pDeviceInfo, CONST DPN_SECURITY_DESC* CONST pdnSecurity, CONST DPN_SECURITY_CREDENTIALS* CONST pdnCredentials, CONST void* CONST pvUserConnectData, CONST DWORD dwUserConnectDataSize, void* CONST pvPlayerContext, void* CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    791     STDMETHOD(SendTo)(THIS_ CONST DPNID dpnid, CONST DPN_BUFFER_DESC* CONST prgBufferDesc, CONST DWORD cBufferDesc, CONST DWORD dwTimeOut, void* CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    792     STDMETHOD(GetSendQueueInfo)(THIS_ CONST DPNID dpnid, DWORD* CONST pdwNumMsgs, DWORD* CONST pdwNumBytes, CONST DWORD dwFlags) PURE;
    793     STDMETHOD(Host)(THIS_ CONST DPN_APPLICATION_DESC* CONST pdnAppDesc, IDirectPlay8Address **CONST prgpDeviceInfo, CONST DWORD cDeviceInfo, CONST DPN_SECURITY_DESC* CONST pdnSecurity, CONST DPN_SECURITY_CREDENTIALS* CONST pdnCredentials, void* CONST pvPlayerContext, CONST DWORD dwFlags) PURE;
    794     STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC* CONST pAppDescBuffer, DWORD* CONST pcbDataSize, CONST DWORD dwFlags) PURE;
    795     STDMETHOD(SetApplicationDesc)(THIS_ CONST DPN_APPLICATION_DESC* CONST pad, CONST DWORD dwFlags) PURE;
    796     STDMETHOD(CreateGroup)(THIS_ CONST DPN_GROUP_INFO* CONST pdpnGroupInfo, void* CONST pvGroupContext, void* CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    797     STDMETHOD(DestroyGroup)(THIS_ CONST DPNID idGroup, PVOID CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    798     STDMETHOD(AddPlayerToGroup)(THIS_ CONST DPNID idGroup, CONST DPNID idClient, PVOID CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    799     STDMETHOD(RemovePlayerFromGroup)(THIS_ CONST DPNID idGroup, CONST DPNID idClient, PVOID CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    800     STDMETHOD(SetGroupInfo)(THIS_ CONST DPNID dpnid, DPN_GROUP_INFO* CONST pdpnGroupInfo,PVOID CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    801     STDMETHOD(GetGroupInfo)(THIS_ CONST DPNID dpnid, DPN_GROUP_INFO* CONST pdpnGroupInfo, DWORD* CONST pdwSize, CONST DWORD dwFlags) PURE;
    802     STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID* CONST prgdpnid, DWORD* CONST pcdpnid, CONST DWORD dwFlags) PURE;
    803     STDMETHOD(EnumGroupMembers)(THIS_ CONST DPNID dpnid, DPNID* CONST prgdpnid, DWORD* CONST pcdpnid, CONST DWORD dwFlags) PURE;
    804     STDMETHOD(SetPeerInfo)(THIS_ CONST DPN_PLAYER_INFO* CONST pdpnPlayerInfo,PVOID CONST pvAsyncContext, DPNHANDLE* CONST phAsyncHandle, CONST DWORD dwFlags) PURE;
    805     STDMETHOD(GetPeerInfo)(THIS_ CONST DPNID dpnid, DPN_PLAYER_INFO* CONST pdpnPlayerInfo, DWORD* CONST pdwSize, CONST DWORD dwFlags) PURE;
    806     STDMETHOD(GetPeerAddress)(THIS_ CONST DPNID dpnid, IDirectPlay8Address** CONST pAddress, CONST DWORD dwFlags) PURE;
    807     STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address** CONST prgpAddress, DWORD* CONST pcAddress, CONST DWORD dwFlags) PURE;
    808     STDMETHOD(Close)(THIS_ CONST DWORD dwFlags) PURE;
    809     STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC CONST pApplicationDesc, IDirectPlay8Address* CONST pAddrHost, IDirectPlay8Address* CONST pDeviceInfo,PVOID CONST pUserEnumData, CONST DWORD dwUserEnumDataSize, CONST DWORD dwEnumCount, CONST DWORD dwRetryInterval, CONST DWORD dwTimeOut,PVOID CONST pvUserContext, DPNHANDLE* CONST pAsyncHandle, CONST DWORD dwFlags) PURE;
    810     STDMETHOD(DestroyPeer)(THIS_ CONST DPNID dpnidClient, CONST void* CONST pvDestroyData, CONST DWORD dwDestroyDataSize, CONST DWORD dwFlags) PURE;
    811     STDMETHOD(ReturnBuffer)(THIS_ CONST DPNHANDLE hBufferHandle, CONST DWORD dwFlags) PURE;
    812     STDMETHOD(GetPlayerContext)(THIS_ CONST DPNID dpnid,PVOID* CONST ppvPlayerContext, CONST DWORD dwFlags) PURE;
    813     STDMETHOD(GetGroupContext)(THIS_ CONST DPNID dpnid,PVOID* CONST ppvGroupContext, CONST DWORD dwFlags) PURE;
    814     STDMETHOD(GetCaps)(THIS_ DPN_CAPS* CONST pdpCaps, CONST DWORD dwFlags) PURE;
    815     STDMETHOD(SetCaps)(THIS_ CONST DPN_CAPS* CONST pdpCaps, CONST DWORD dwFlags) PURE;
    816     STDMETHOD(SetSPCaps)(THIS_ CONST GUID* CONST pguidSP, CONST DPN_SP_CAPS* CONST pdpspCaps, CONST DWORD dwFlags ) PURE;
    817     STDMETHOD(GetSPCaps)(THIS_ CONST GUID* CONST pguidSP, DPN_SP_CAPS* CONST pdpspCaps, CONST DWORD dwFlags) PURE;
    818     STDMETHOD(GetConnectionInfo)(THIS_ CONST DPNID dpnid, DPN_CONNECTION_INFO* CONST pdpConnectionInfo, CONST DWORD dwFlags) PURE;
    819     STDMETHOD(RegisterLobby)(THIS_ CONST DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication* CONST pIDP8LobbiedApplication, CONST DWORD dwFlags) PURE;
    820     STDMETHOD(TerminateSession)(THIS_ void* CONST pvTerminateData, CONST DWORD dwTerminateDataSize, CONST DWORD dwFlags) PURE;
    821 };
    822 #undef INTERFACE
    823 
    824 #if !defined(__cplusplus) || defined(CINTERFACE)
    825 /*** IUnknown methods ***/
    826 #define	IDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
    827 #define	IDirectPlay8Peer_AddRef(p)                              (p)->lpVtbl->AddRef(p)
    828 #define	IDirectPlay8Peer_Release(p)                             (p)->lpVtbl->Release(p)
    829 /*** IDirectPlay8Peer methods ***/
    830 #define	IDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
    831 #define	IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
    832 #define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
    833 #define	IDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->lpVtbl->CancelAsyncOperation(p,a,b)
    834 #define	IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k)
    835 #define	IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
    836 #define	IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
    837 #define	IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
    838 #define	IDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
    839 #define	IDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->lpVtbl->SetApplicationDesc(p,a,b)
    840 #define	IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
    841 #define	IDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
    842 #define	IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
    843 #define	IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
    844 #define	IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
    845 #define	IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
    846 #define	IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
    847 #define	IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
    848 #define	IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->SetPeerInfo(p,a,b,c,d)
    849 #define	IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->GetPeerInfo(p,a,b,c,d)
    850 #define	IDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->lpVtbl->GetPeerAddress(p,a,b,c)
    851 #define	IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
    852 #define	IDirectPlay8Peer_Close(p,a)                             (p)->lpVtbl->Close(p,a)
    853 #define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
    854 #define	IDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->lpVtbl->DestroyPeer(p,a,b,c,d)
    855 #define	IDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->lpVtbl->ReturnBuffer(p,a,b)
    856 #define	IDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->lpVtbl->GetPlayerContext(p,a,b,c)
    857 #define	IDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->lpVtbl->GetGroupContext(p,a,b,c)
    858 #define	IDirectPlay8Peer_GetCaps(p,a,b)                         (p)->lpVtbl->GetCaps(p,a,b)
    859 #define	IDirectPlay8Peer_SetCaps(p,a,b)                         (p)->lpVtbl->SetCaps(p,a,b)
    860 #define	IDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->lpVtbl->SetSPCaps(p,a,b,c)
    861 #define	IDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->lpVtbl->GetSPCaps(p,a,b,c)
    862 #define	IDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
    863 #define	IDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->lpVtbl->RegisterLobby(p,a,b,c)
    864 #define	IDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->lpVtbl->TerminateSession(p,a,b,c)
    865 #else
    866 /*** IUnknown methods ***/
    867 #define	IDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
    868 #define	IDirectPlay8Peer_AddRef(p)                              (p)->AddRef()
    869 #define	IDirectPlay8Peer_Release(p)                             (p)->Release()
    870 /*** IDirectPlay8Peer methods ***/
    871 #define	IDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
    872 #define	IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->EnumServiceProviders(a,b,c,d,e,f)
    873 #define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
    874 #define	IDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->CancelAsyncOperation(a,b)
    875 #define	IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->Connect(a,b,c,d,e,f,g,h,i,j,k)
    876 #define	IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->SendTo(a,b,c,d,e,f,g)
    877 #define	IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->GetSendQueueInfo(a,b,c,d)
    878 #define	IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->Host(a,b,c,d,e,f,g)
    879 #define	IDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->GetApplicationDesc(a,b,c)
    880 #define	IDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->SetApplicationDesc(a,b)
    881 #define	IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->CreateGroup(a,b,c,d,e)
    882 #define	IDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->DestroyGroup(a,b,c,d)
    883 #define	IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->AddPlayerToGroup(a,b,c,d,e)
    884 #define	IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->RemovePlayerFromGroup(a,b,c,d,e)
    885 #define	IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->SetGroupInfo(a,b,c,d,e)
    886 #define	IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->GetGroupInfo(a,b,c,d)
    887 #define	IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->EnumPlayersAndGroups(a,b,c)
    888 #define	IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->EnumGroupMembers(a,b,c,d)
    889 #define	IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->SetPeerInfo(a,b,c,d)
    890 #define	IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->GetPeerInfo(a,b,c,d)
    891 #define	IDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->GetPeerAddress(a,b,c)
    892 #define	IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->GetLocalHostAddresses(a,b,c)
    893 #define	IDirectPlay8Peer_Close(p,a)                             (p)->Close(a)
    894 #define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
    895 #define	IDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->DestroyPeer(a,b,c,d)
    896 #define	IDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->ReturnBuffer(a,b)
    897 #define	IDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->GetPlayerContext(a,b,c)
    898 #define	IDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->GetGroupContext(a,b,c)
    899 #define	IDirectPlay8Peer_GetCaps(p,a,b)                         (p)->GetCaps(a,b)
    900 #define	IDirectPlay8Peer_SetCaps(p,a,b)                         (p)->SetCaps(a,b)
    901 #define	IDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->SetSPCaps(a,b,c)
    902 #define	IDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->GetSPCaps(a,b,c)
    903 #define	IDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->GetConnectionInfo(a,b,c)
    904 #define	IDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->RegisterLobby(a,b,c)
    905 #define	IDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->TerminateSession(a,b,c)
    906 #endif
    907 
    908 /*****************************************************************************
    909  * IDirectPlay8ThreadPool interface
    910  */
    911 #define INTERFACE IDirectPlay8ThreadPool
    912 DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown)
    913 {
    914     /*** IUnknown methods ***/
    915     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
    916     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    917     STDMETHOD_(ULONG,Release)(THIS) PURE;
    918     /*** IDirectPlay8ThreadPool methods ***/
    919     STDMETHOD(Initialize)(THIS_ PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) PURE;
    920     STDMETHOD(Close)(THIS_ CONST DWORD dwFlags) PURE;
    921     STDMETHOD(GetThreadCount)(THIS_ CONST DWORD dwProcessorNum, DWORD* CONST pdwNumThreads, CONST DWORD dwFlags) PURE;
    922     STDMETHOD(SetThreadCount)(THIS_ CONST DWORD dwProcessorNum, CONST DWORD dwNumThreads, CONST DWORD dwFlags) PURE;
    923     STDMETHOD(DoWork)(THIS_ CONST DWORD dwAllowedTimeSlice, CONST DWORD dwFlags) PURE;
    924 };
    925 #undef INTERFACE
    926 
    927 #if !defined(__cplusplus) || defined(CINTERFACE)
    928 /*** IUnknown methods ***/
    929 #define	IDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
    930 #define	IDirectPlay8ThreadPool_AddRef(p)                              (p)->lpVtbl->AddRef(p)
    931 #define	IDirectPlay8ThreadPool_Release(p)                             (p)->lpVtbl->Release(p)
    932 /*** IDirectPlay8ThreadPool methods ***/
    933 #define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
    934 #define IDirectPlay8ThreadPool_Close(p,a)                             (p)->lpVtbl->Close(p,a)
    935 #define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->lpVtbl->GetThreadCount(p,a,b,c)
    936 #define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->lpVtbl->SetThreadCount(p,a,b,c)
    937 #define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->lpVtbl->DoWork(p,a,b)
    938 #else
    939 /*** IUnknown methods ***/
    940 #define	IDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
    941 #define	IDirectPlay8ThreadPool_AddRef(p)                              (p)->AddRef()
    942 #define	IDirectPlay8ThreadPool_Release(p)                             (p)->Release()
    943 /*** IDirectPlay8ThreadPool methods ***/
    944 #define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
    945 #define IDirectPlay8ThreadPool_Close(p,a)                             (p)->Close(a)
    946 #define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->GetThreadCount(a,b,c)
    947 #define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->SetThreadCount(a,b,c)
    948 #define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->DoWork(a,b)
    949 #endif
    950 
    951 /*****************************************************************************
    952  * IDirectPlay8NATResolver interface
    953  */
    954 #define INTERFACE IDirectPlay8NATResolver
    955 DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown)
    956 {
    957     /*** IUnknown methods ***/
    958     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
    959     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    960     STDMETHOD_(ULONG,Release)(THIS) PURE;
    961     /*** IDirectPlay8NATResolver methods ***/
    962     STDMETHOD(Initialize)(THIS_ PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) PURE;
    963     STDMETHOD(Start)(THIS_ IDirectPlay8Address** CONST ppDevices, CONST DWORD dwNumDevices, CONST DWORD dwFlags) PURE;
    964     STDMETHOD(Close)(THIS_ CONST DWORD dwFlags) PURE;
    965     STDMETHOD(EnumDevices)(THIS_ DPN_SERVICE_PROVIDER_INFO* CONST pSPInfoBuffer, PDWORD CONST pdwBufferSize, PDWORD CONST pdwNumDevices, CONST DWORD dwFlags) PURE;
    966     STDMETHOD(GetAddresses)(THIS_ IDirectPlay8Address** CONST ppAddresses, DWORD* CONST pdwNumAddresses, CONST DWORD dwFlags) PURE;
    967 };
    968 #undef INTERFACE
    969 
    970 #if !defined(__cplusplus) || defined(CINTERFACE)
    971 /*** IUnknown methods ***/
    972 #define	IDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
    973 #define	IDirectPlay8NATResolver_AddRef(p)                              (p)->lpVtbl->AddRef(p)
    974 #define	IDirectPlay8NATResolver_Release(p)                             (p)->lpVtbl->Release(p)
    975 /*** IDirectPlay8NATResolver methods ***/
    976 #define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
    977 #define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->lpVtbl->Start(p,a,b,c)
    978 #define IDirectPlay8NATResolver_Close(p,a)                             (p)->lpVtbl->Close(p,a)
    979 #define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->lpVtbl->EnumDevices(p,a,b,c,d)
    980 #define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->lpVtbl->GetAddresses(p,a,b,c)
    981 #else
    982 /*** IUnknown methods ***/
    983 #define	IDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
    984 #define	IDirectPlay8NATResolver_AddRef(p)                              (p)->AddRef()
    985 #define	IDirectPlay8NATResolver_Release(p)                             (p)->Release()
    986 /*** IDirectPlay8NATResolver methods ***/
    987 #define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
    988 #define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->Start(a,b,c)
    989 #define IDirectPlay8NATResolver_Close(p,a)                             (p)->Close(a)
    990 #define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->EnumDevices(a,b,c,d)
    991 #define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->GetAddresses(a,b,c)
    992 #endif
    993 
    994 /* Export functions */
    995 
    996 HRESULT WINAPI DirectPlay8Create(CONST CLSID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
    997 
    998 #ifdef __cplusplus
    999 }
   1000 #endif
   1001 
   1002 #endif
   1003