4 * Winsock 2 Service Provider Interface.
7 * THIS SOFTWARE IS NOT COPYRIGHTED
9 * This source code is offered for use in the public domain. You may
10 * use, modify or distribute it freely.
12 * This code is distributed in the hope that it will be useful but
13 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
14 * DISCLAIMED. This includes but is not limited to warranties of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 #pragma GCC system_header
28 #endif /* __cplusplus */
31 #define WSPDESCRIPTION_LEN 255
35 typedef struct WSPData
{
38 WCHAR szDescription
[WSPDESCRIPTION_LEN
+1];
39 } WSPDATA
, FAR
*LPWSPDATA
;
40 typedef struct _WSATHREADID
{
43 } WSATHREADID
, FAR
*LPWSATHREADID
;
45 typedef BOOL (CALLBACK FAR
*LPBLOCKINGCALLBACK
)(DWORD
);
46 typedef VOID (CALLBACK FAR
*LPWSAUSERAPC
)(DWORD
);
48 /* Prototypes for service provider procedure table */
49 typedef SOCKET (WSPAPI
*LPWSPACCEPT
)(SOCKET
,LPSOCKADDR
,LPINT
,LPCONDITIONPROC
,DWORD
,LPINT
);
50 typedef INT (WSPAPI
*LPWSPADDRESSTOSTRING
)(LPSOCKADDR
,DWORD
,LPWSAPROTOCOL_INFOW
,LPWSTR
,LPDWORD
,LPINT
);
51 typedef INT (WSPAPI
*LPWSPASYNCSELECT
)(SOCKET
,HWND
,UINT
,LONG
,LPINT
);
52 typedef INT (WSPAPI
*LPWSPBIND
)(SOCKET
,const struct sockaddr
*,INT
,LPINT
);
53 typedef INT (WSPAPI
*LPWSPCANCELBLOCKINGCALL
)(LPINT
);
54 typedef INT (WSPAPI
*LPWSPCLEANUP
)(LPINT
);
55 typedef INT (WSPAPI
*LPWSPCLOSESOCKET
)(SOCKET
,LPINT
);
56 typedef INT (WSPAPI
*LPWSPCONNECT
)(SOCKET
,const struct sockaddr
*,INT
,LPWSABUF
,LPWSABUF
,LPQOS
,LPQOS
,LPINT
);
57 typedef INT (WSPAPI
*LPWSPDUPLICATESOCKET
)(SOCKET
,DWORD
,LPWSAPROTOCOL_INFOW
,LPINT
);
58 typedef INT (WSPAPI
*LPWSPENUMNETWORKEVENTS
)(SOCKET
,WSAEVENT
,LPWSANETWORKEVENTS
,LPINT
);
59 typedef INT (WSPAPI
*LPWSPEVENTSELECT
)(SOCKET
,WSAEVENT
,LONG
,LPINT
);
60 typedef BOOL (WSPAPI
*LPWSPGETOVERLAPPEDRESULT
)(SOCKET
,LPWSAOVERLAPPED
,LPDWORD
,BOOL
,LPDWORD
,LPINT
);
61 typedef INT (WSPAPI
*LPWSPGETPEERNAME
)(SOCKET
,LPSOCKADDR
,LPINT
,LPINT
);
62 typedef BOOL (WSPAPI
*LPWSPGETQOSBYNAME
)(SOCKET
,LPWSABUF
,LPQOS
,LPINT
);
63 typedef INT (WSPAPI
*LPWSPGETSOCKNAME
)(SOCKET
,LPSOCKADDR
,LPINT
,LPINT
);
64 typedef INT (WSPAPI
*LPWSPGETSOCKOPT
)(SOCKET
,INT
,INT
,CHAR FAR
*,LPINT
,LPINT
);
65 typedef INT (WSPAPI
*LPWSPIOCTL
)(SOCKET
,DWORD
,LPVOID
,DWORD
,LPVOID
,DWORD
,LPDWORD
,
66 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
67 typedef SOCKET (WSPAPI
*LPWSPJOINLEAF
)(SOCKET
,const struct sockaddr
*,INT
,LPWSABUF
,LPWSABUF
,LPQOS
,LPQOS
,DWORD
,LPINT
);
68 typedef INT (WSPAPI
*LPWSPLISTEN
)(SOCKET
,INT
,LPINT
);
69 typedef INT (WSPAPI
*LPWSPRECV
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,LPDWORD
,
70 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
71 typedef INT (WSPAPI
*LPWSPRECVDISCONNECT
)(SOCKET
,LPWSABUF
,LPINT
);
72 typedef INT (WSPAPI
*LPWSPRECVFROM
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,LPDWORD
,LPSOCKADDR
,
73 LPINT
,LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
74 typedef INT (WSPAPI
*LPWSPSELECT
)(INT
,LPFD_SET
,LPFD_SET
,LPFD_SET
,CONST TIMEVAL
*,LPINT
);
75 typedef INT (WSPAPI
*LPWSPSEND
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,DWORD
,
76 LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
77 typedef INT (WSPAPI
*LPWSPSENDDISCONNECT
)(SOCKET
,LPWSABUF
,LPINT
);
78 typedef INT (WSPAPI
*LPWSPSENDTO
)(SOCKET
,LPWSABUF
,DWORD
,LPDWORD
,DWORD
,const struct sockaddr
*,
79 INT
,LPWSAOVERLAPPED
,LPWSAOVERLAPPED_COMPLETION_ROUTINE
,LPWSATHREADID
,LPINT
);
80 typedef INT (WSPAPI
*LPWSPSETSOCKOPT
)(SOCKET
,INT
,INT
,CONST CHAR FAR
*,INT
,LPINT
);
81 typedef INT (WSPAPI
*LPWSPSHUTDOWN
)(SOCKET
,INT
,LPINT
);
82 typedef SOCKET (WSPAPI
*LPWSPSOCKET
)(INT
,INT
,INT
,LPWSAPROTOCOL_INFOW
,GROUP
,DWORD
,LPINT
);
83 typedef INT (WSPAPI
*LPWSPSTRINGTOADDRESS
)(LPWSTR
,INT
,LPWSAPROTOCOL_INFOW
,LPSOCKADDR
,LPINT
,LPINT
);
85 /* Service provider procedure table */
86 typedef struct _WSPPROC_TABLE
{
87 LPWSPACCEPT lpWSPAccept
;
88 LPWSPADDRESSTOSTRING lpWSPAddressToString
;
89 LPWSPASYNCSELECT lpWSPAsyncSelect
;
91 LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall
;
92 LPWSPCLEANUP lpWSPCleanup
;
93 LPWSPCLOSESOCKET lpWSPCloseSocket
;
94 LPWSPCONNECT lpWSPConnect
;
95 LPWSPDUPLICATESOCKET lpWSPDuplicateSocket
;
96 LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents
;
97 LPWSPEVENTSELECT lpWSPEventSelect
;
98 LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult
;
99 LPWSPGETPEERNAME lpWSPGetPeerName
;
100 LPWSPGETSOCKNAME lpWSPGetSockName
;
101 LPWSPGETSOCKOPT lpWSPGetSockOpt
;
102 LPWSPGETQOSBYNAME lpWSPGetQOSByName
;
103 LPWSPIOCTL lpWSPIoctl
;
104 LPWSPJOINLEAF lpWSPJoinLeaf
;
105 LPWSPLISTEN lpWSPListen
;
107 LPWSPRECVDISCONNECT lpWSPRecvDisconnect
;
108 LPWSPRECVFROM lpWSPRecvFrom
;
109 LPWSPSELECT lpWSPSelect
;
111 LPWSPSENDDISCONNECT lpWSPSendDisconnect
;
112 LPWSPSENDTO lpWSPSendTo
;
113 LPWSPSETSOCKOPT lpWSPSetSockOpt
;
114 LPWSPSHUTDOWN lpWSPShutdown
;
115 LPWSPSOCKET lpWSPSocket
;
116 LPWSPSTRINGTOADDRESS lpWSPStringToAddress
;
117 } WSPPROC_TABLE
, FAR
* LPWSPPROC_TABLE
;
119 /* Prototypes for service provider upcall procedure table */
120 typedef BOOL (WSPAPI
*LPWPUCLOSEEVENT
)(WSAEVENT
,LPINT
);
121 typedef INT (WSPAPI
*LPWPUCLOSESOCKETHANDLE
)(SOCKET
,LPINT
);
122 typedef INT (WSPAPI
*LPWPUCLOSETHREAD
)(LPWSATHREADID
,LPINT
);
123 typedef WSAEVENT (WSPAPI
*LPWPUCREATEEVENT
)(LPINT
);
124 typedef SOCKET (WSPAPI
*LPWPUCREATESOCKETHANDLE
)(DWORD
,DWORD
,LPINT
);
125 typedef SOCKET (WSPAPI
*LPWPUFDISSET
)(SOCKET
,LPFD_SET
);
126 typedef INT (WSPAPI
*LPWPUGETPROVIDERPATH
)(LPGUID
,LPWSTR
,LPINT
,LPINT
);
127 typedef SOCKET (WSPAPI
*LPWPUMODIFYIFSHANDLE
)(DWORD
,SOCKET
,LPINT
);
128 typedef INT (WSPAPI
*LPWPUOPENCURRENTTHREAD
)(LPWSATHREADID
,LPINT
);
129 typedef BOOL (WSPAPI
*LPWPUPOSTMESSAGE
)(HWND
,UINT
,WPARAM
,LPARAM
);
130 typedef INT (WSPAPI
*LPWPUQUERYBLOCKINGCALLBACK
)(DWORD
,LPBLOCKINGCALLBACK FAR
*,LPDWORD
,LPINT
);
131 typedef INT (WSPAPI
*LPWPUQUERYSOCKETHANDLECONTEXT
)(SOCKET
,LPDWORD
,LPINT
);
132 typedef INT (WSPAPI
*LPWPUQUEUEAPC
)(LPWSATHREADID
,LPWSAUSERAPC
,DWORD
,LPINT
);
133 typedef BOOL (WSPAPI
*LPWPURESETEVENT
)(WSAEVENT
,LPINT
);
134 typedef BOOL (WSPAPI
*LPWPUSETEVENT
)(WSAEVENT
,LPINT
);
135 /* Available only directly from the DLL */
136 typedef INT (WSPAPI
*LPWPUCOMPLETEOVERLAPPEDREQUEST
)(SOCKET
,LPWSAOVERLAPPED
,DWORD
,DWORD
,LPINT
);
138 /* Service Provider upcall table */
139 typedef struct _WSPUPCALLTABLE
{
140 LPWPUCLOSEEVENT lpWPUCloseEvent
;
141 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle
;
142 LPWPUCREATEEVENT lpWPUCreateEvent
;
143 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle
;
144 LPWPUFDISSET lpWPUFDIsSet
;
145 LPWPUGETPROVIDERPATH lpWPUGetProviderPath
;
146 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
;
147 LPWPUPOSTMESSAGE lpWPUPostMessage
;
148 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback
;
149 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext
;
150 LPWPUQUEUEAPC lpWPUQueueApc
;
151 LPWPURESETEVENT lpWPUResetEvent
;
152 LPWPUSETEVENT lpWPUSetEvent
;
153 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread
;
154 LPWPUCLOSETHREAD lpWPUCloseThread
;
155 } WSPUPCALLTABLE
, FAR
* LPWSPUPCALLTABLE
;
157 typedef INT (WSPAPI
*LPWSPSTARTUP
)(WORD
,LPWSPDATA
,LPWSAPROTOCOL_INFOW
,WSPUPCALLTABLE
,LPWSPPROC_TABLE
);
159 /* Prototypes for service provider namespace procedure table */
160 typedef INT (WSPAPI
*LPNSPCLEANUP
)(LPGUID
);
161 typedef INT (WSPAPI
*LPNSPGETSERVICECLASSINFO
)(LPGUID
,LPDWORD
,LPWSASERVICECLASSINFOW
);
162 typedef INT (WSPAPI
*LPNSPINSTALLSERVICECLASS
)(LPGUID
,LPWSASERVICECLASSINFOW
);
163 typedef INT (WSPAPI
*LPNSPLOOKUPSERVICEBEGIN
)(LPGUID
,LPWSAQUERYSETW
,LPWSASERVICECLASSINFOW
,DWORD
,LPHANDLE
);
164 typedef INT (WSPAPI
*LPNSPLOOKUPSERVICEEND
)(HANDLE
);
165 typedef INT (WSPAPI
*LPNSPLOOKUPSERVICENEXT
)(HANDLE
,DWORD
,LPDWORD
,LPWSAQUERYSET
);
166 typedef INT (WSPAPI
*LPNSPREMOVESERVICECLASS
)(LPGUID
,LPGUID
);
167 typedef INT (WSPAPI
*LPNSPSETSERVICE
)(LPGUID
,LPWSASERVICECLASSINFOW
,LPWSAQUERYSETW
,WSAESETSERVICEOP
,DWORD
);
169 typedef struct _NSP_ROUTINE
{
171 DWORD dwMajorVersion
;
172 DWORD dwMinorVersion
;
173 LPNSPCLEANUP NSPCleanup
;
174 LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin
;
175 LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext
;
176 LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd
;
177 LPNSPSETSERVICE NSPSetService
;
178 LPNSPINSTALLSERVICECLASS NSPInstallServiceClass
;
179 LPNSPREMOVESERVICECLASS NSPRemoveServiceClass
;
180 LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo
;
181 } NSP_ROUTINE
, *PNSP_ROUTINE
, *LPNSP_ROUTINE
;
183 INT WSPAPI
NSPStartup(LPGUID
,LPNSP_ROUTINE
);
185 /* WinSock 2 DLL function prototypes */
186 INT WSPAPI
WPUCompleteOverlappedRequest(SOCKET
,LPWSAOVERLAPPED
,DWORD
,DWORD
,LPINT
);
187 INT WSPAPI
WSPStartup(WORD
,LPWSPDATA
,LPWSAPROTOCOL_INFOW
,WSPUPCALLTABLE
,LPWSPPROC_TABLE
);
188 INT WSPAPI
WSCDeinstallProvider(LPGUID
,LPINT
);
189 INT WSPAPI
WSCEnumProtocols(LPINT
,LPWSAPROTOCOL_INFOW
,LPDWORD
,LPINT
);
190 INT WSPAPI
WSCGetProviderPath(LPGUID
,LPWSTR
,LPINT
,LPINT
);
191 INT WSPAPI
WSCInstallProvider(CONST LPGUID
,CONST LPWSTR
,CONST LPWSAPROTOCOL_INFOW
,DWORD
,LPINT
);
192 INT WSPAPI
WSCEnableNSProvider(LPGUID
,BOOL
);
193 INT WSPAPI
WSCInstallNameSpace(LPWSTR
,LPWSTR
,DWORD
,DWORD
,LPGUID
);
194 INT WSPAPI
WSCUnInstallNameSpace(LPGUID
);
195 INT WSPAPI
WSCWriteProviderOrder(LPDWORD
,DWORD
);
197 #endif /* RC_INVOKED */
201 #endif /* __cplusplus */