1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _NSPAPI_INCLUDED
7#define _NSPAPI_INCLUDED
8
9#include <_mingw_unicode.h>
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#ifndef _tagBLOB_DEFINED
16#define _tagBLOB_DEFINED
17#define _BLOB_DEFINED
18#define _LPBLOB_DEFINED
19  typedef struct _BLOB {
20    ULONG cbSize;
21    BYTE *pBlobData;
22  } BLOB,*LPBLOB;
23#endif
24
25#ifndef GUID_DEFINED
26#define GUID_DEFINED
27  typedef struct _GUID {
28    unsigned __LONG32 Data1;
29    unsigned short Data2;
30    unsigned short Data3;
31    unsigned char Data4[8];
32  } GUID;
33#endif
34
35#ifndef __LPGUID_DEFINED__
36#define __LPGUID_DEFINED__
37  typedef GUID *LPGUID;
38#endif
39
40#define SERVICE_RESOURCE (0x00000001)
41#define SERVICE_SERVICE (0x00000002)
42#define SERVICE_LOCAL (0x00000004)
43
44#define SERVICE_REGISTER (0x00000001)
45#define SERVICE_DEREGISTER (0x00000002)
46#define SERVICE_FLUSH (0x00000003)
47#define SERVICE_ADD_TYPE (0x00000004)
48#define SERVICE_DELETE_TYPE (0x00000005)
49
50#define SERVICE_FLAG_DEFER (0x00000001)
51#define SERVICE_FLAG_HARD (0x00000002)
52
53#define PROP_COMMENT (0x00000001)
54#define PROP_LOCALE (0x00000002)
55#define PROP_DISPLAY_HINT (0x00000004)
56#define PROP_VERSION (0x00000008)
57#define PROP_START_TIME (0x00000010)
58#define PROP_MACHINE (0x00000020)
59#define PROP_ADDRESSES (0x00000100)
60#define PROP_SD (0x00000200)
61#define PROP_ALL (0x80000000)
62
63#define SERVICE_ADDRESS_FLAG_RPC_CN (0x00000001)
64#define SERVICE_ADDRESS_FLAG_RPC_DG (0x00000002)
65#define SERVICE_ADDRESS_FLAG_RPC_NB (0x00000004)
66
67#define NS_DEFAULT (0)
68
69#define NS_SAP (1)
70#define NS_NDS (2)
71#define NS_PEER_BROWSE (3)
72
73#define NS_TCPIP_LOCAL (10)
74#define NS_TCPIP_HOSTS (11)
75#define NS_DNS (12)
76#define NS_NETBT (13)
77#define NS_WINS (14)
78#define NS_NLA (15)
79#if (_WIN32_WINNT >= 0x0600)
80#define NS_BTH (16)
81#endif
82
83#define NS_NBP (20)
84
85#define NS_MS (30)
86#define NS_STDA (31)
87#define NS_NTDS (32)
88
89#if (_WIN32_WINNT >= 0x0600)
90#define NS_EMAIL (37)
91#define NS_PNRPNAME (38)
92#define NS_PNRPCLOUD (39)
93#endif
94
95#define NS_X500 (40)
96#define NS_NIS (41)
97
98#define NS_VNS (50)
99
100#define NSTYPE_HIERARCHICAL (0x00000001)
101#define NSTYPE_DYNAMIC (0x00000002)
102#define NSTYPE_ENUMERABLE (0x00000004)
103#define NSTYPE_WORKGROUP (0x00000008)
104
105#define XP_CONNECTIONLESS (0x00000001)
106#define XP_GUARANTEED_DELIVERY (0x00000002)
107#define XP_GUARANTEED_ORDER (0x00000004)
108#define XP_MESSAGE_ORIENTED (0x00000008)
109#define XP_PSEUDO_STREAM (0x00000010)
110#define XP_GRACEFUL_CLOSE (0x00000020)
111#define XP_EXPEDITED_DATA (0x00000040)
112#define XP_CONNECT_DATA (0x00000080)
113#define XP_DISCONNECT_DATA (0x00000100)
114#define XP_SUPPORTS_BROADCAST (0x00000200)
115#define XP_SUPPORTS_MULTICAST (0x00000400)
116#define XP_BANDWIDTH_ALLOCATION (0x00000800)
117#define XP_FRAGMENTATION (0x00001000)
118#define XP_ENCRYPTS (0x00002000)
119
120#define RES_SOFT_SEARCH (0x00000001)
121#define RES_FIND_MULTIPLE (0x00000002)
122#define RES_SERVICE (0x00000004)
123
124#define SERVICE_TYPE_VALUE_SAPIDA "SapId"
125#define SERVICE_TYPE_VALUE_SAPIDW L"SapId"
126
127#define SERVICE_TYPE_VALUE_CONNA "ConnectionOriented"
128#define SERVICE_TYPE_VALUE_CONNW L"ConnectionOriented"
129
130#define SERVICE_TYPE_VALUE_TCPPORTA "TcpPort"
131#define SERVICE_TYPE_VALUE_TCPPORTW L"TcpPort"
132
133#define SERVICE_TYPE_VALUE_UDPPORTA "UdpPort"
134#define SERVICE_TYPE_VALUE_UDPPORTW L"UdpPort"
135
136#define SERVICE_TYPE_VALUE_SAPID __MINGW_NAME_AW(SERVICE_TYPE_VALUE_SAPID)
137#define SERVICE_TYPE_VALUE_CONN __MINGW_NAME_AW(SERVICE_TYPE_VALUE_CONN)
138#define SERVICE_TYPE_VALUE_TCPPORT __MINGW_NAME_AW(SERVICE_TYPE_VALUE_TCPPORT)
139#define SERVICE_TYPE_VALUE_UDPPORT __MINGW_NAME_AW(SERVICE_TYPE_VALUE_UDPPORT)
140
141#define SET_SERVICE_PARTIAL_SUCCESS (0x00000001)
142
143  typedef struct _NS_INFOA {
144    DWORD dwNameSpace;
145    DWORD dwNameSpaceFlags;
146    LPSTR lpNameSpace;
147  } NS_INFOA,*PNS_INFOA,*LPNS_INFOA;
148
149  typedef struct _NS_INFOW {
150    DWORD dwNameSpace;
151    DWORD dwNameSpaceFlags;
152    LPWSTR lpNameSpace;
153  } NS_INFOW,*PNS_INFOW,*LPNS_INFOW;
154
155  __MINGW_TYPEDEF_AW(NS_INFO)
156  __MINGW_TYPEDEF_AW(PNS_INFO)
157  __MINGW_TYPEDEF_AW(LPNS_INFO)
158
159  typedef struct _SERVICE_TYPE_VALUE {
160    DWORD dwNameSpace;
161    DWORD dwValueType;
162    DWORD dwValueSize;
163    DWORD dwValueNameOffset;
164    DWORD dwValueOffset;
165  } SERVICE_TYPE_VALUE,*PSERVICE_TYPE_VALUE,*LPSERVICE_TYPE_VALUE;
166
167  typedef struct _SERVICE_TYPE_VALUE_ABSA {
168    DWORD dwNameSpace;
169    DWORD dwValueType;
170    DWORD dwValueSize;
171    LPSTR lpValueName;
172    PVOID lpValue;
173  } SERVICE_TYPE_VALUE_ABSA,*PSERVICE_TYPE_VALUE_ABSA,*LPSERVICE_TYPE_VALUE_ABSA;
174
175  typedef struct _SERVICE_TYPE_VALUE_ABSW {
176    DWORD dwNameSpace;
177    DWORD dwValueType;
178    DWORD dwValueSize;
179    LPWSTR lpValueName;
180    PVOID lpValue;
181  } SERVICE_TYPE_VALUE_ABSW,*PSERVICE_TYPE_VALUE_ABSW,*LPSERVICE_TYPE_VALUE_ABSW;
182
183  __MINGW_TYPEDEF_AW(SERVICE_TYPE_VALUE_ABS)
184  __MINGW_TYPEDEF_AW(PSERVICE_TYPE_VALUE_ABS)
185  __MINGW_TYPEDEF_AW(LPSERVICE_TYPE_VALUE_ABS)
186
187  typedef struct _SERVICE_TYPE_INFO {
188    DWORD dwTypeNameOffset;
189    DWORD dwValueCount;
190    SERVICE_TYPE_VALUE Values[1];
191  } SERVICE_TYPE_INFO,*PSERVICE_TYPE_INFO,*LPSERVICE_TYPE_INFO;
192
193  typedef struct _SERVICE_TYPE_INFO_ABSA {
194    LPSTR lpTypeName;
195    DWORD dwValueCount;
196    SERVICE_TYPE_VALUE_ABSA Values[1];
197  } SERVICE_TYPE_INFO_ABSA,*PSERVICE_TYPE_INFO_ABSA,*LPSERVICE_TYPE_INFO_ABSA;
198  typedef struct _SERVICE_TYPE_INFO_ABSW {
199    LPWSTR lpTypeName;
200    DWORD dwValueCount;
201    SERVICE_TYPE_VALUE_ABSW Values[1];
202  } SERVICE_TYPE_INFO_ABSW,*PSERVICE_TYPE_INFO_ABSW,*LPSERVICE_TYPE_INFO_ABSW;
203
204  __MINGW_TYPEDEF_AW(SERVICE_TYPE_INFO_ABS)
205  __MINGW_TYPEDEF_AW(PSERVICE_TYPE_INFO_ABS)
206  __MINGW_TYPEDEF_AW(LPSERVICE_TYPE_INFO_ABS)
207
208  typedef struct _SERVICE_ADDRESS {
209    DWORD dwAddressType;
210    DWORD dwAddressFlags;
211    DWORD dwAddressLength;
212    DWORD dwPrincipalLength;
213    BYTE *lpAddress;
214    BYTE *lpPrincipal;
215  } SERVICE_ADDRESS,*PSERVICE_ADDRESS,*LPSERVICE_ADDRESS;
216
217  typedef struct _SERVICE_ADDRESSES {
218    DWORD dwAddressCount;
219    SERVICE_ADDRESS Addresses[1];
220  } SERVICE_ADDRESSES,*PSERVICE_ADDRESSES,*LPSERVICE_ADDRESSES;
221
222  typedef struct _SERVICE_INFOA {
223    LPGUID lpServiceType;
224    LPSTR lpServiceName;
225    LPSTR lpComment;
226    LPSTR lpLocale;
227    DWORD dwDisplayHint;
228    DWORD dwVersion;
229    DWORD dwTime;
230    LPSTR lpMachineName;
231    LPSERVICE_ADDRESSES lpServiceAddress;
232    BLOB ServiceSpecificInfo;
233  } SERVICE_INFOA,*PSERVICE_INFOA,*LPSERVICE_INFOA;
234
235  typedef struct _SERVICE_INFOW {
236    LPGUID lpServiceType;
237    LPWSTR lpServiceName;
238    LPWSTR lpComment;
239    LPWSTR lpLocale;
240    DWORD dwDisplayHint;
241    DWORD dwVersion;
242    DWORD dwTime;
243    LPWSTR lpMachineName;
244    LPSERVICE_ADDRESSES lpServiceAddress;
245    BLOB ServiceSpecificInfo;
246  } SERVICE_INFOW,*PSERVICE_INFOW,*LPSERVICE_INFOW;
247
248  __MINGW_TYPEDEF_AW(SERVICE_INFO)
249  __MINGW_TYPEDEF_AW(PSERVICE_INFO)
250  __MINGW_TYPEDEF_AW(LPSERVICE_INFO)
251
252  typedef struct _NS_SERVICE_INFOA {
253    DWORD dwNameSpace;
254    SERVICE_INFOA ServiceInfo;
255  } NS_SERVICE_INFOA,*PNS_SERVICE_INFOA,*LPNS_SERVICE_INFOA;
256
257  typedef struct _NS_SERVICE_INFOW {
258    DWORD dwNameSpace;
259    SERVICE_INFOW ServiceInfo;
260  } NS_SERVICE_INFOW,*PNS_SERVICE_INFOW,*LPNS_SERVICE_INFOW;
261
262  __MINGW_TYPEDEF_AW(NS_SERVICE_INFO)
263  __MINGW_TYPEDEF_AW(PNS_SERVICE_INFO)
264  __MINGW_TYPEDEF_AW(LPNS_SERVICE_INFO)
265
266#ifndef __CSADDR_DEFINED__
267#define __CSADDR_DEFINED__
268
269  typedef struct _SOCKET_ADDRESS {
270    LPSOCKADDR lpSockaddr;
271    INT iSockaddrLength;
272  } SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS;
273
274  typedef struct _CSADDR_INFO {
275    SOCKET_ADDRESS LocalAddr;
276    SOCKET_ADDRESS RemoteAddr;
277    INT iSocketType;
278    INT iProtocol;
279  } CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO;
280#endif
281
282  typedef struct _PROTOCOL_INFOA {
283    DWORD dwServiceFlags;
284    INT iAddressFamily;
285    INT iMaxSockAddr;
286    INT iMinSockAddr;
287    INT iSocketType;
288    INT iProtocol;
289    DWORD dwMessageSize;
290    LPSTR lpProtocol;
291  } PROTOCOL_INFOA,*PPROTOCOL_INFOA,*LPPROTOCOL_INFOA;
292
293  typedef struct _PROTOCOL_INFOW {
294    DWORD dwServiceFlags;
295    INT iAddressFamily;
296    INT iMaxSockAddr;
297    INT iMinSockAddr;
298    INT iSocketType;
299    INT iProtocol;
300    DWORD dwMessageSize;
301    LPWSTR lpProtocol;
302  } PROTOCOL_INFOW,*PPROTOCOL_INFOW,*LPPROTOCOL_INFOW;
303
304  __MINGW_TYPEDEF_AW(PROTOCOL_INFO)
305  __MINGW_TYPEDEF_AW(PPROTOCOL_INFO)
306  __MINGW_TYPEDEF_AW(LPPROTOCOL_INFO)
307
308  typedef struct _NETRESOURCE2A {
309    DWORD dwScope;
310    DWORD dwType;
311    DWORD dwUsage;
312    DWORD dwDisplayType;
313    LPSTR lpLocalName;
314    LPSTR lpRemoteName;
315    LPSTR lpComment;
316    NS_INFO ns_info;
317    GUID ServiceType;
318    DWORD dwProtocols;
319    LPINT lpiProtocols;
320  } NETRESOURCE2A,*PNETRESOURCE2A,*LPNETRESOURCE2A;
321
322  typedef struct _NETRESOURCE2W {
323    DWORD dwScope;
324    DWORD dwType;
325    DWORD dwUsage;
326    DWORD dwDisplayType;
327    LPWSTR lpLocalName;
328    LPWSTR lpRemoteName;
329    LPWSTR lpComment;
330    NS_INFO ns_info;
331    GUID ServiceType;
332    DWORD dwProtocols;
333    LPINT lpiProtocols;
334  } NETRESOURCE2W,*PNETRESOURCE2W,*LPNETRESOURCE2W;
335
336  __MINGW_TYPEDEF_AW(NETRESOURCE2)
337  __MINGW_TYPEDEF_AW(PNETRESOURCE2)
338  __MINGW_TYPEDEF_AW(LPNETRESOURCE2)
339
340  typedef DWORD (*LPFN_NSPAPI)(VOID);
341
342  typedef VOID (*LPSERVICE_CALLBACK_PROC)(LPARAM lParam,HANDLE hAsyncTaskHandle);
343  typedef struct _SERVICE_ASYNC_INFO {
344    LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
345    LPARAM lParam;
346    HANDLE hAsyncTaskHandle;
347  } SERVICE_ASYNC_INFO,*PSERVICE_ASYNC_INFO,*LPSERVICE_ASYNC_INFO;
348
349#define EnumProtocols __MINGW_NAME_AW(EnumProtocols)
350#define GetAddressByName __MINGW_NAME_AW(GetAddressByName)
351#define GetTypeByName __MINGW_NAME_AW(GetTypeByName)
352#define GetNameByType __MINGW_NAME_AW(GetNameByType)
353#define SetService __MINGW_NAME_AW(SetService)
354#define GetService __MINGW_NAME_AW(GetService)
355
356  INT WINAPI EnumProtocolsA(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
357  INT WINAPI EnumProtocolsW(LPINT lpiProtocols,LPVOID lpProtocolBuffer,LPDWORD lpdwBufferLength);
358  INT WINAPI GetAddressByNameA(DWORD dwNameSpace,LPGUID lpServiceType,LPSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
359  INT WINAPI GetAddressByNameW(DWORD dwNameSpace,LPGUID lpServiceType,LPWSTR lpServiceName,LPINT lpiProtocols,DWORD dwResolution,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPVOID lpCsaddrBuffer,LPDWORD lpdwBufferLength,LPWSTR lpAliasBuffer,LPDWORD lpdwAliasBufferLength);
360  INT WINAPI GetTypeByNameA(LPSTR lpServiceName,LPGUID lpServiceType);
361  INT WINAPI GetTypeByNameW(LPWSTR lpServiceName,LPGUID lpServiceType);
362  INT WINAPI GetNameByTypeA(LPGUID lpServiceType,LPSTR lpServiceName,DWORD dwNameLength);
363  INT WINAPI GetNameByTypeW(LPGUID lpServiceType,LPWSTR lpServiceName,DWORD dwNameLength);
364  INT WINAPI SetServiceA(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOA lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
365  INT WINAPI SetServiceW(DWORD dwNameSpace,DWORD dwOperation,DWORD dwFlags,LPSERVICE_INFOW lpServiceInfo,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,LPDWORD lpdwStatusFlags);
366  INT WINAPI GetServiceA(DWORD dwNameSpace,LPGUID lpGuid,LPSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
367  INT WINAPI GetServiceW(DWORD dwNameSpace,LPGUID lpGuid,LPWSTR lpServiceName,DWORD dwProperties,LPVOID lpBuffer,LPDWORD lpdwBufferSize,LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
368
369#ifdef __cplusplus
370}
371#endif
372#endif
373